11 files added
	
		
		8 files modified
	
	
 
	
	
	
	
	
	
	
	
| New file | 
 |  |  | 
 |  |  | [Document](http://ng-alain.com/docs/mock) | 
 
| New file | 
 |  |  | 
 |  |  | import { MockRequest } from '@delon/mock'; | 
 |  |  | // region: mock data | 
 |  |  |  | 
 |  |  | const titles = [ | 
 |  |  |     'Alipay', | 
 |  |  |     'Angular', | 
 |  |  |     'Ant Design', | 
 |  |  |     'Ant Design Pro', | 
 |  |  |     'Bootstrap', | 
 |  |  |     'React', | 
 |  |  |     'Vue', | 
 |  |  |     'Webpack' | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const avatars = [ | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', // Alipay | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', // Angular | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', // Ant Design | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', // Ant Design Pro | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', // Bootstrap | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png', // React | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', // Vue | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png'  // Webpack | 
 |  |  | ]; | 
 |  |  | const covers = [ | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/HrxcVbrKnCJOZvtzSqjN.png', | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/alaPpKWajEbIYEUvvVNf.png', | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/RLwlKSYGSXGHuWSojyvp.png', | 
 |  |  |     'https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png' | 
 |  |  | ]; | 
 |  |  | const desc = [ | 
 |  |  |     '那是一种内在的东西, 他们到达不了,也无法触及的', | 
 |  |  |     '希望是一个好东西,也许是最好的,好东西是不会消亡的', | 
 |  |  |     '生命就像一盒巧克力,结果往往出人意料', | 
 |  |  |     '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆', | 
 |  |  |     '那时候我只会想自己想要什么,从不想自己拥有什么' | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const user = [ | 
 |  |  |     '卡色', | 
 |  |  |     'cipchk', | 
 |  |  |     '付小小', | 
 |  |  |     '曲丽丽', | 
 |  |  |     '林东东', | 
 |  |  |     '周星星', | 
 |  |  |     '吴加好', | 
 |  |  |     '朱偏右', | 
 |  |  |     '鱼酱', | 
 |  |  |     '乐哥', | 
 |  |  |     '谭小仪', | 
 |  |  |     '仲尼' | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | // endregion | 
 |  |  |  | 
 |  |  | function getFakeList(count: number = 20): any[] { | 
 |  |  |     const list = []; | 
 |  |  |     for (let i = 0; i < count; i += 1) { | 
 |  |  |         list.push({ | 
 |  |  |         id: `fake-list-${i}`, | 
 |  |  |         owner: user[i % 10], | 
 |  |  |         title: titles[i % 8], | 
 |  |  |         avatar: avatars[i % 8], | 
 |  |  |         cover: parseInt((i / 4).toString(), 10) % 2 === 0 ? covers[i % 4] : covers[3 - (i % 4)], | 
 |  |  |         status: ['active', 'exception', 'normal'][i % 3], | 
 |  |  |         percent: Math.ceil(Math.random() * 50) + 50, | 
 |  |  |         logo: avatars[i % 8], | 
 |  |  |         href: 'https://ant.design', | 
 |  |  |         updatedAt: new Date(new Date().getTime() - (1000 * 60 * 60 * 2 * i)), | 
 |  |  |         createdAt: new Date(new Date().getTime() - (1000 * 60 * 60 * 2 * i)), | 
 |  |  |         subDescription: desc[i % 5], | 
 |  |  |         description: '在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。', | 
 |  |  |         activeUser: Math.ceil(Math.random() * 100000) + 100000, | 
 |  |  |         newUser: Math.ceil(Math.random() * 1000) + 1000, | 
 |  |  |         star: Math.ceil(Math.random() * 100) + 100, | 
 |  |  |         like: Math.ceil(Math.random() * 100) + 100, | 
 |  |  |         message: Math.ceil(Math.random() * 10) + 10, | 
 |  |  |         content: '段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。', | 
 |  |  |         members: [ | 
 |  |  |                 { | 
 |  |  |                     avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png', | 
 |  |  |                     name: '曲丽丽', | 
 |  |  |                 }, | 
 |  |  |                 { | 
 |  |  |                     avatar: 'https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png', | 
 |  |  |                     name: '王昭君', | 
 |  |  |                 }, | 
 |  |  |                 { | 
 |  |  |                     avatar: 'https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png', | 
 |  |  |                     name: '董娜娜', | 
 |  |  |                 }, | 
 |  |  |             ] | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     return list; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function getNotice(): any[] { | 
 |  |  |     return [ | 
 |  |  |         { | 
 |  |  |           id: 'xxx1', | 
 |  |  |           title: titles[0], | 
 |  |  |           logo: avatars[0], | 
 |  |  |           description: '那是一种内在的东西, 他们到达不了,也无法触及的', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           member: '科学搬砖组', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'xxx2', | 
 |  |  |           title: titles[1], | 
 |  |  |           logo: avatars[1], | 
 |  |  |           description: '希望是一个好东西,也许是最好的,好东西是不会消亡的', | 
 |  |  |           updatedAt: new Date('2017-07-24'), | 
 |  |  |           member: '全组都是吴彦祖', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'xxx3', | 
 |  |  |           title: titles[2], | 
 |  |  |           logo: avatars[2], | 
 |  |  |           description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           member: '中二少女团', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'xxx4', | 
 |  |  |           title: titles[3], | 
 |  |  |           logo: avatars[3], | 
 |  |  |           description: '那时候我只会想自己想要什么,从不想自己拥有什么', | 
 |  |  |           updatedAt: new Date('2017-07-23'), | 
 |  |  |           member: '程序员日常', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'xxx5', | 
 |  |  |           title: titles[4], | 
 |  |  |           logo: avatars[4], | 
 |  |  |           description: '凛冬将至', | 
 |  |  |           updatedAt: new Date('2017-07-23'), | 
 |  |  |           member: '高逼格设计天团', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'xxx6', | 
 |  |  |           title: titles[5], | 
 |  |  |           logo: avatars[5], | 
 |  |  |           description: '生命就像一盒巧克力,结果往往出人意料', | 
 |  |  |           updatedAt: new Date('2017-07-23'), | 
 |  |  |           member: '骗你来学计算机', | 
 |  |  |           href: '', | 
 |  |  |           memberLink: '', | 
 |  |  |         }, | 
 |  |  |       ]; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function getActivities(): any[] { | 
 |  |  |     return  [ | 
 |  |  |         { | 
 |  |  |           id: 'trend-1', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '林东东', | 
 |  |  |             avatar: avatars[0], | 
 |  |  |           }, | 
 |  |  |           group: { | 
 |  |  |             name: '高逼格设计天团', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '六月迭代', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '在 @{group} 新建项目 @{project}', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'trend-2', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '付小小', | 
 |  |  |             avatar: avatars[1], | 
 |  |  |           }, | 
 |  |  |           group: { | 
 |  |  |             name: '高逼格设计天团', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '六月迭代', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '在 @{group} 新建项目 @{project}', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'trend-3', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '曲丽丽', | 
 |  |  |             avatar: avatars[2], | 
 |  |  |           }, | 
 |  |  |           group: { | 
 |  |  |             name: '中二少女团', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '六月迭代', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '在 @{group} 新建项目 @{project}', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'trend-4', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '周星星', | 
 |  |  |             avatar: avatars[3], | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '5 月日常迭代', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '将 @{project} 更新至已发布状态', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'trend-5', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '朱偏右', | 
 |  |  |             avatar: avatars[4], | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '工程效能', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           comment: { | 
 |  |  |             name: '留言', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '在 @{project} 发布了 @{comment}', | 
 |  |  |         }, | 
 |  |  |         { | 
 |  |  |           id: 'trend-6', | 
 |  |  |           updatedAt: new Date(), | 
 |  |  |           user: { | 
 |  |  |             name: '乐哥', | 
 |  |  |             avatar: avatars[5], | 
 |  |  |           }, | 
 |  |  |           group: { | 
 |  |  |             name: '程序员日常', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           project: { | 
 |  |  |             name: '品牌迭代', | 
 |  |  |             link: 'http://github.com/', | 
 |  |  |           }, | 
 |  |  |           template: '在 @{group} 新建项目 @{project}', | 
 |  |  |         }, | 
 |  |  |       ]; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | export const APIS = { | 
 |  |  |     '/api/list': (req: MockRequest) => getFakeList(req.queryString.count), | 
 |  |  |     '/api/notice': () => getNotice(), | 
 |  |  |     '/api/activities': () => getActivities() | 
 |  |  | }; | 
 
| New file | 
 |  |  | 
 |  |  | // tslint:disable | 
 |  |  | import * as Mock from 'mockjs'; | 
 |  |  | import * as moment from "moment"; | 
 |  |  |  | 
 |  |  | // region: mock data | 
 |  |  |  | 
 |  |  | const visitData = []; | 
 |  |  | const beginDay = new Date().getTime(); | 
 |  |  |  | 
 |  |  | const fakeY = [7, 5, 4, 2, 4, 7, 5, 6, 5, 9, 6, 3, 1, 5, 3, 6, 5]; | 
 |  |  | for (let i = 0; i < fakeY.length; i += 1) { | 
 |  |  |     visitData.push({ | 
 |  |  |         x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( | 
 |  |  |             "YYYY-MM-DD" | 
 |  |  |         ), | 
 |  |  |         y: fakeY[i] | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const visitData2 = []; | 
 |  |  | const fakeY2 = [1, 6, 4, 8, 3, 7, 2]; | 
 |  |  | for (let i = 0; i < fakeY2.length; i += 1) { | 
 |  |  |     visitData2.push({ | 
 |  |  |         x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( | 
 |  |  |             "YYYY-MM-DD" | 
 |  |  |         ), | 
 |  |  |         y: fakeY2[i] | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const salesData = []; | 
 |  |  | // for (let i = 0; i < 12; i += 1) { | 
 |  |  | //     salesData.push({ | 
 |  |  | //         x: `${i + 1}月`, | 
 |  |  | //         y: Math.floor(Math.random() * 1000) + 200 | 
 |  |  | //     }); | 
 |  |  | // } | 
 |  |  | for (let i = 0; i < 24; i += 1) { | 
 |  |  |     salesData.push({ | 
 |  |  |         x: `${i}时`, | 
 |  |  |         y: Math.floor(Math.random() * 1000) + 200 | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  | const searchData = []; | 
 |  |  | for (let i = 0; i < 50; i += 1) { | 
 |  |  |     searchData.push({ | 
 |  |  |         index: i + 1, | 
 |  |  |         keyword: `搜索关键词-${i}`, | 
 |  |  |         count: Math.floor(Math.random() * 1000), | 
 |  |  |         range: Math.floor(Math.random() * 100), | 
 |  |  |         status: Math.floor((Math.random() * 10) % 2) | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  | const salesTypeData = [ | 
 |  |  |     { | 
 |  |  |         x: "家用电器", | 
 |  |  |         y: 4544 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "食用酒水", | 
 |  |  |         y: 3321 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "个护健康", | 
 |  |  |         y: 3113 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "服饰箱包", | 
 |  |  |         y: 2341 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "母婴产品", | 
 |  |  |         y: 1231 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "其他", | 
 |  |  |         y: 1231 | 
 |  |  |     } | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const salesTypeDataOnline = [ | 
 |  |  |     { | 
 |  |  |         x: "家用电器", | 
 |  |  |         y: 244 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "食用酒水", | 
 |  |  |         y: 321 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "个护健康", | 
 |  |  |         y: 311 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "服饰箱包", | 
 |  |  |         y: 41 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: "母婴产品", | 
 |  |  |         y: 121 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: '其他', | 
 |  |  |         y: 111 | 
 |  |  |     } | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const salesTypeDataOffline = [ | 
 |  |  |     { | 
 |  |  |         x: '家用电器', | 
 |  |  |         y: 99 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: '个护健康', | 
 |  |  |         y: 188 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: '服饰箱包', | 
 |  |  |         y: 344 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: '母婴产品', | 
 |  |  |         y: 255 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         x: '其他', | 
 |  |  |         y: 65 | 
 |  |  |     } | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const offlineData = []; | 
 |  |  | for (let i = 0; i < 10; i += 1) { | 
 |  |  |     offlineData.push({ | 
 |  |  |         name: `门店${i}`, | 
 |  |  |         cvr: Math.ceil(Math.random() * 9) / 10 | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  | const offlineChartData = []; | 
 |  |  | for (let i = 0; i < 20; i += 1) { | 
 |  |  |     offlineChartData.push({ | 
 |  |  |         x: new Date().getTime() + 1000 * 60 * 30 * i, | 
 |  |  |         y1: Math.floor(Math.random() * 100) + 10, | 
 |  |  |         y2: Math.floor(Math.random() * 100) + 10 | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const radarOriginData = [ | 
 |  |  |     { | 
 |  |  |         name: '个人', | 
 |  |  |         ref: 10, | 
 |  |  |         koubei: 8, | 
 |  |  |         output: 4, | 
 |  |  |         contribute: 5, | 
 |  |  |         hot: 7 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         name: '团队', | 
 |  |  |         ref: 3, | 
 |  |  |         koubei: 9, | 
 |  |  |         output: 6, | 
 |  |  |         contribute: 3, | 
 |  |  |         hot: 1 | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         name: '部门', | 
 |  |  |         ref: 4, | 
 |  |  |         koubei: 1, | 
 |  |  |         output: 6, | 
 |  |  |         contribute: 5, | 
 |  |  |         hot: 7 | 
 |  |  |     } | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | // | 
 |  |  | const radarData = []; | 
 |  |  | const radarTitleMap = { | 
 |  |  |     ref: '引用', | 
 |  |  |     koubei: '口碑', | 
 |  |  |     output: '产量', | 
 |  |  |     contribute: '贡献', | 
 |  |  |     hot: '热度' | 
 |  |  | }; | 
 |  |  | radarOriginData.forEach(item => { | 
 |  |  |     Object.keys(item).forEach(key => { | 
 |  |  |         if (key !== 'name') { | 
 |  |  |             radarData.push({ | 
 |  |  |                 name: item.name, | 
 |  |  |                 label: radarTitleMap[key], | 
 |  |  |                 value: item[key] | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // endregion | 
 |  |  |  | 
 |  |  | export const CHARTS = { | 
 |  |  |     '/chart': Object.assign({}, { | 
 |  |  |         visitData, | 
 |  |  |         visitData2, | 
 |  |  |         salesData, | 
 |  |  |         searchData, | 
 |  |  |         offlineData, | 
 |  |  |         offlineChartData, | 
 |  |  |         salesTypeData, | 
 |  |  |         salesTypeDataOnline, | 
 |  |  |         salesTypeDataOffline, | 
 |  |  |         radarData | 
 |  |  |     }), | 
 |  |  |     '/chart/visit': Object.assign([], visitData), | 
 |  |  |     '/chart/tags': Mock.mock({ | 
 |  |  |         'list|100': [{ name: '@city', 'value|1-100': 150, 'type|0-2': 1 }] | 
 |  |  |     }) | 
 |  |  | }; | 
 
| New file | 
 |  |  | 
 |  |  | const basicGoods = [ | 
 |  |  |     { | 
 |  |  |         id: '1234561', | 
 |  |  |         name: '矿泉水 550ml', | 
 |  |  |         barcode: '12421432143214321', | 
 |  |  |         price: '2.00', | 
 |  |  |         num: '1', | 
 |  |  |         amount: '2.00', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         id: '1234562', | 
 |  |  |         name: '凉茶 300ml', | 
 |  |  |         barcode: '12421432143214322', | 
 |  |  |         price: '3.00', | 
 |  |  |         num: '2', | 
 |  |  |         amount: '6.00', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         id: '1234563', | 
 |  |  |         name: '好吃的薯片', | 
 |  |  |         barcode: '12421432143214323', | 
 |  |  |         price: '7.00', | 
 |  |  |         num: '4', | 
 |  |  |         amount: '28.00', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         id: '1234564', | 
 |  |  |         name: '特别好吃的蛋卷', | 
 |  |  |         barcode: '12421432143214324', | 
 |  |  |         price: '8.50', | 
 |  |  |         num: '3', | 
 |  |  |         amount: '25.50', | 
 |  |  |     }, | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const basicProgress = [ | 
 |  |  |     { | 
 |  |  |         key: '1', | 
 |  |  |         time: '2017-10-01 14:10', | 
 |  |  |         rate: '联系客户', | 
 |  |  |         status: 'processing', | 
 |  |  |         operator: '取货员 ID1234', | 
 |  |  |         cost: '5mins', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: '2', | 
 |  |  |         time: '2017-10-01 14:05', | 
 |  |  |         rate: '取货员出发', | 
 |  |  |         status: 'success', | 
 |  |  |         operator: '取货员 ID1234', | 
 |  |  |         cost: '1h', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: '3', | 
 |  |  |         time: '2017-10-01 13:05', | 
 |  |  |         rate: '取货员接单', | 
 |  |  |         status: 'success', | 
 |  |  |         operator: '取货员 ID1234', | 
 |  |  |         cost: '5mins', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: '4', | 
 |  |  |         time: '2017-10-01 13:00', | 
 |  |  |         rate: '申请审批通过', | 
 |  |  |         status: 'success', | 
 |  |  |         operator: '系统', | 
 |  |  |         cost: '1h', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: '5', | 
 |  |  |         time: '2017-10-01 12:00', | 
 |  |  |         rate: '发起退货申请', | 
 |  |  |         status: 'success', | 
 |  |  |         operator: '用户', | 
 |  |  |         cost: '5mins', | 
 |  |  |     }, | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const advancedOperation1 = [ | 
 |  |  |     { | 
 |  |  |         key: 'op1', | 
 |  |  |         type: '订购关系生效', | 
 |  |  |         name: '曲丽丽', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '-', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: 'op2', | 
 |  |  |         type: '财务复审', | 
 |  |  |         name: '付小小', | 
 |  |  |         status: 'reject', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '不通过原因', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: 'op3', | 
 |  |  |         type: '部门初审', | 
 |  |  |         name: '周毛毛', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '-', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: 'op4', | 
 |  |  |         type: '提交订单', | 
 |  |  |         name: '林东东', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '很棒', | 
 |  |  |     }, | 
 |  |  |     { | 
 |  |  |         key: 'op5', | 
 |  |  |         type: '创建订单', | 
 |  |  |         name: '汗牙牙', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '-', | 
 |  |  |     }, | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const advancedOperation2 = [ | 
 |  |  |     { | 
 |  |  |         key: 'op1', | 
 |  |  |         type: '订购关系生效', | 
 |  |  |         name: '曲丽丽', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '-', | 
 |  |  |     }, | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | const advancedOperation3 = [ | 
 |  |  |     { | 
 |  |  |         key: 'op1', | 
 |  |  |         type: '创建订单', | 
 |  |  |         name: '汗牙牙', | 
 |  |  |         status: 'agree', | 
 |  |  |         updatedAt: '2017-10-03  19:23:12', | 
 |  |  |         memo: '-', | 
 |  |  |     }, | 
 |  |  | ]; | 
 |  |  |  | 
 |  |  | export const PROFILES = { | 
 |  |  |     'GET /profile/progress': basicProgress, | 
 |  |  |     'GET /profile/goods': basicGoods, | 
 |  |  |     'GET /profile/advanced': { advancedOperation1, advancedOperation2, advancedOperation3 } | 
 |  |  | }; | 
 
| New file | 
 |  |  | 
 |  |  | import { HttpRequest } from '@angular/common/http'; | 
 |  |  | import { MockRequest } from '@delon/mock'; | 
 |  |  |  | 
 |  |  | const list = []; | 
 |  |  |  | 
 |  |  | for (let i = 0; i < 46; i += 1) { | 
 |  |  |     list.push({ | 
 |  |  |         key: i, | 
 |  |  |         disabled: ((i % 6) === 0), | 
 |  |  |         href: 'https://ant.design', | 
 |  |  |         avatar: ['https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'][i % 2], | 
 |  |  |         no: `TradeCode ${i}`, | 
 |  |  |         title: `一个任务名称 ${i}`, | 
 |  |  |         owner: '曲丽丽', | 
 |  |  |         description: '这是一段描述', | 
 |  |  |         callNo: Math.floor(Math.random() * 1000), | 
 |  |  |         status: Math.floor(Math.random() * 10) % 4, | 
 |  |  |         updatedAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`), | 
 |  |  |         createdAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`), | 
 |  |  |         progress: Math.ceil(Math.random() * 100), | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function getRule(params: any) { | 
 |  |  |     let ret = [...list]; | 
 |  |  |     if (params.sorter) { | 
 |  |  |         const s = params.sorter.split('_'); | 
 |  |  |         ret = ret.sort((prev, next) => { | 
 |  |  |             if (s[1] === 'descend') { | 
 |  |  |                 return next[s[0]] - prev[s[0]]; | 
 |  |  |             } | 
 |  |  |             return prev[s[0]] - next[s[0]]; | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |     if (params.statusList && params.statusList.length > 0) { | 
 |  |  |         ret = ret.filter(data => params.statusList.indexOf(data.status) > -1); | 
 |  |  |     } | 
 |  |  |     if (params.no) { | 
 |  |  |         ret = ret.filter(data => data.no.indexOf(params.no) > -1); | 
 |  |  |     } | 
 |  |  |     return ret; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function removeRule(nos: string): boolean { | 
 |  |  |     nos.split(',').forEach(no => { | 
 |  |  |         const idx = list.findIndex(w => w.no === no); | 
 |  |  |         if (idx !== -1) list.splice(idx, 1); | 
 |  |  |     }); | 
 |  |  |     return true; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function saveRule(description: string) { | 
 |  |  |     const i = Math.ceil(Math.random() * 10000); | 
 |  |  |     list.unshift({ | 
 |  |  |       key: i, | 
 |  |  |       href: 'https://ant.design', | 
 |  |  |       avatar: ['https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'][i % 2], | 
 |  |  |       no: `TradeCode ${i}`, | 
 |  |  |       title: `一个任务名称 ${i}`, | 
 |  |  |       owner: '曲丽丽', | 
 |  |  |       description, | 
 |  |  |       callNo: Math.floor(Math.random() * 1000), | 
 |  |  |       status: Math.floor(Math.random() * 10) % 2, | 
 |  |  |       updatedAt: new Date(), | 
 |  |  |       createdAt: new Date(), | 
 |  |  |       progress: Math.ceil(Math.random() * 100), | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | export const RULES = { | 
 |  |  |     '/rule': (req: MockRequest) => getRule(req.queryString), | 
 |  |  |     'DELETE /rule': (req: MockRequest) => removeRule(req.queryString.nos), | 
 |  |  |     'POST /rule': (req: MockRequest) => saveRule(req.body.description) | 
 |  |  | }; | 
 
| New file | 
 |  |  | 
 |  |  | export * from './_profile'; | 
 |  |  | export * from './_rule'; | 
 |  |  | export * from './_api'; | 
 |  |  | export * from './_chart'; | 
 
 |  |  | 
 |  |  |     "@delon/auth": "0.6.6", | 
 |  |  |     "@delon/cache": "0.6.6", | 
 |  |  |     "@delon/theme": "0.6.6", | 
 |  |  |     "@delon/mock": "^0.6.6", | 
 |  |  |     "@ngx-translate/core": "^9.0.0", | 
 |  |  |     "@ngx-translate/http-loader": "^2.0.0", | 
 |  |  |     "@types/jquery": "^3.3.0", | 
 
 |  |  | 
 |  |  | import { AlainACLModule } from '@delon/acl'; | 
 |  |  | import { DelonCacheModule } from '@delon/cache'; | 
 |  |  | // mock | 
 |  |  | // import { DelonMockModule } from '@delon/mock'; | 
 |  |  | // import * as MOCKDATA from '../../_mock'; | 
 |  |  | // import { environment } from '@env/environment'; | 
 |  |  | // const MOCKMODULE = !environment.production || environment.chore === true ? | 
 |  |  | //                     [ DelonMockModule.forRoot({ data: MOCKDATA }) ] : []; | 
 |  |  | import { DelonMockModule } from '@delon/mock'; | 
 |  |  | import * as MOCKDATA from '../../_mock'; | 
 |  |  | import { environment } from '@env/environment'; | 
 |  |  | const MOCKMODULE = !environment.production || environment.chore === true ? | 
 |  |  |                     [ DelonMockModule.forRoot({ data: MOCKDATA }) ] : []; | 
 |  |  |  | 
 |  |  | // region: global config functions | 
 |  |  |  | 
 |  |  | 
 |  |  |         AdReuseTabModule.forRoot(), AdFullContentModule.forRoot(), AdXlsxModule.forRoot(), AdZipModule.forRoot(), | 
 |  |  |         // auth | 
 |  |  |         AlainAuthModule.forRoot({ | 
 |  |  |             // ignores: [ `\\/login`, `assets\\/` ], | 
 |  |  |             ignores: [ `\\/login`, `assets\\/` ], | 
 |  |  |             token_send_key : 'X-Authorization', | 
 |  |  |             token_send_template : 'Bearer ${token}', | 
 |  |  |             token_send_place : 'header', | 
 |  |  | 
 |  |  |         // cache | 
 |  |  |         DelonCacheModule.forRoot(), | 
 |  |  |         // mock | 
 |  |  |         // ...MOCKMODULE | 
 |  |  |         ...MOCKMODULE | 
 |  |  |     ] | 
 |  |  | }) | 
 |  |  | export class DelonModule { | 
 
| New file | 
 |  |  | 
 |  |  | import { NgModule } from "@angular/core"; | 
 |  |  | import { HomePageComponent } from "./home-page/home-page.component"; | 
 |  |  | import { Routes, RouterModule } from "@angular/router"; | 
 |  |  |  | 
 |  |  | const routes: Routes = [{ path: "", component: HomePageComponent }]; | 
 |  |  |  | 
 |  |  | @NgModule({ | 
 |  |  |   imports: [RouterModule.forChild(routes)], | 
 |  |  |   exports: [RouterModule] | 
 |  |  | }) | 
 |  |  | export class HomePageRoutingModule {} | 
 
| New file | 
 |  |  | 
 |  |  | import { NgModule } from "@angular/core"; | 
 |  |  | import { Routes, RouterModule } from "@angular/router"; | 
 |  |  | import { SharedModule } from "@shared/shared.module"; | 
 |  |  | import { HomePageRoutingModule } from "./home-page-routing.module"; | 
 |  |  | import { HomePageComponent } from "./home-page/home-page.component"; | 
 |  |  |  | 
 |  |  | @NgModule({ | 
 |  |  |   imports: [SharedModule, HomePageRoutingModule], | 
 |  |  |   declarations: [HomePageComponent] | 
 |  |  | }) | 
 |  |  | export class HomePageModule {} | 
 
| New file | 
 |  |  | 
 |  |  | <div class="content__title"> | 
 |  |  |     <h1>实时数据概览</h1> | 
 |  |  | </div> | 
 |  |  | <div nz-row [nzGutter]="24" class="pt-lg"> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md"> | 
 |  |  |         <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md"> | 
 |  |  |             <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;"> | 
 |  |  |                 <div style="height: 40px;" class="h2 mt0">{{ cardData.api }}</div> | 
 |  |  |                 <p class="text-nowrap mb0">AQI</p> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md"> | 
 |  |  |         <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md"> | 
 |  |  |             <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;"> | 
 |  |  |                 <div style="height: 40px;" class="h2 mt0">{{ cardData.temperature }} ℃</div> | 
 |  |  |                 <p class="text-nowrap mb0">温度</p> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md"> | 
 |  |  |         <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md"> | 
 |  |  |             <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;"> | 
 |  |  |                 <div style="height: 40px;" class="h2 mt0">{{ cardData.windDirection }}</div> | 
 |  |  |                 <p class="text-nowrap mb0">风向</p> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md"> | 
 |  |  |         <div nz-row nzType="flex" nzAlign="middle" class="bg-pink rounded-md"> | 
 |  |  |             <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;"> | 
 |  |  |                 <div style="height: 40px;" class="h2 mt0">{{ cardData.pm25 }} mg/m³</div> | 
 |  |  |                 <p class="text-nowrap">PM2.5</p> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | <div nz-row [nzGutter]="24" class="pt-lg"> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="8"> | 
 |  |  |         <chart-card [title]="'API优良天数'" total="216天" contentHeight="46px"> | 
 |  |  |             <mini-progress height="46" percent="60" target="60" strokeWidth="8" color="#13C2C2"></mini-progress> | 
 |  |  |         </chart-card> | 
 |  |  |     </div> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="8"> | 
 |  |  |         <chart-card [title]="'PM2.5优良天数'" total="158天" contentHeight="46px"> | 
 |  |  |             <mini-progress height="46" percent="50" target="50" strokeWidth="8" color="#108ee9"></mini-progress> | 
 |  |  |         </chart-card> | 
 |  |  |     </div> | 
 |  |  |     <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="8"> | 
 |  |  |         <chart-card [title]="'PM10优良天数'" total="112天" contentHeight="46px"> | 
 |  |  |             <mini-progress height="46" percent="40" target="40" strokeWidth="8" color="#00a854"></mini-progress> | 
 |  |  |         </chart-card> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | <div nz-row [nzGutter]="24" class="pt-lg"> | 
 |  |  |     <div nz-col nzXs="24" nzMd="24"> | 
 |  |  |         <nz-card [nzBordered]="false"> | 
 |  |  |             <ng-template #title> | 
 |  |  |                 AQI因子柱形图   | 
 |  |  |                 <nz-dropdown> | 
 |  |  |                     <a class="ant-dropdown-link" nz-dropdown> | 
 |  |  |                      PM2.5 <i class="anticon anticon-down"></i> | 
 |  |  |                     </a> | 
 |  |  |                     <ul nz-menu> | 
 |  |  |                       <li nz-menu-item> | 
 |  |  |                         PM10 | 
 |  |  |                       </li> | 
 |  |  |                       <li nz-menu-item> | 
 |  |  |                         一氧化碳 | 
 |  |  |                       </li> | 
 |  |  |                       <li nz-menu-item> | 
 |  |  |                         二氧化氮 | 
 |  |  |                       </li> | 
 |  |  |                       <li nz-menu-item> | 
 |  |  |                         二氧化硫 | 
 |  |  |                       </li> | 
 |  |  |                       <li nz-menu-item> | 
 |  |  |                         臭氧 | 
 |  |  |                       </li> | 
 |  |  |                     </ul> | 
 |  |  |                   </nz-dropdown> | 
 |  |  |             </ng-template> | 
 |  |  |             <bar height="275" [data]="salesData"></bar> | 
 |  |  |         </nz-card> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  | <div nz-row [nzGutter]="24" class="pt-lg"> | 
 |  |  |     <div nz-col nzXs="24" nzMd="24"> | 
 |  |  |         <nz-card [nzBordered]="false"> | 
 |  |  |             <ng-template #title> | 
 |  |  |                监控站点GIS分布 | 
 |  |  |                <small class="text-sm font-weight-normal">总共: 128</small> | 
 |  |  |             </ng-template> | 
 |  |  |             <iframe style="width: 100%; height: 500px;" target="_top" src="http://monitor-api2.7drlb.com/screen/map-page?areaCode=320583&accountId=1" frameborder="0"></iframe> | 
 |  |  |         </nz-card> | 
 |  |  |     </div> | 
 |  |  |   </div> | 
 |  |  |   <div nz-row [nzGutter]="24" class="pt-lg"> | 
 |  |  |       <div nz-col nzXs="24" nzMd="12"> | 
 |  |  |           <nz-card [nzBordered]="false"> | 
 |  |  |               <div echarts style="margin-top: 12px;" [options]="chartOption" [loading]="aqiChartLoading" class="line-chart" (chartInit)="onApiChartInit($event)"></div> | 
 |  |  |           </nz-card> | 
 |  |  |       </div> | 
 |  |  |       <div nz-col nzXs="24" nzMd="12"> | 
 |  |  |           <nz-card [nzBordered]="false"> | 
 |  |  |             22222222222 | 
 |  |  |           </nz-card> | 
 |  |  |       </div> | 
 |  |  |   </div> | 
 
| New file | 
 |  |  | 
 |  |  | import { Component, OnInit } from "@angular/core"; | 
 |  |  | import { _HttpClient } from "@delon/theme"; | 
 |  |  | import { zip } from 'rxjs/observable/zip'; | 
 |  |  |  | 
 |  |  | @Component({ | 
 |  |  |   selector: "app-home-page", | 
 |  |  |   templateUrl: "./home-page.component.html", | 
 |  |  |   styleUrls: ["./home-page.component.less"] | 
 |  |  | }) | 
 |  |  | export class HomePageComponent implements OnInit { | 
 |  |  |   public cardData: {'api'?:number,'temperature'?:number,'windDirection'?: string,'pm25'?: number} = {}; | 
 |  |  |  | 
 |  |  |   constructor( | 
 |  |  |     private http:_HttpClient, | 
 |  |  |   ) { | 
 |  |  |   } | 
 |  |  |   salesData: any[] =  [ ]; | 
 |  |  |   ngOnInit() { | 
 |  |  |     zip( | 
 |  |  |        this.http.get<any>('http://sapi.7drlb.com/api/mj?cityID=1102&apiKey=condition'), | 
 |  |  |        this.http.get<any>('http://sapi.7drlb.com/api/mj?cityID=1102&apiKey=aqi') | 
 |  |  |  | 
 |  |  |      ).subscribe( | 
 |  |  |         ([conRes,aqiRes]) => { | 
 |  |  |           if( conRes.code == 0 && aqiRes.code == 0 ) { | 
 |  |  |             this.cardData.windDirection = conRes.data.condition.windDir; | 
 |  |  |             this.cardData.temperature = conRes.data.condition.temp; | 
 |  |  |             this.cardData.api = aqiRes.data.aqi.value; | 
 |  |  |             this.cardData.pm25 = aqiRes.data.aqi.pm25; | 
 |  |  |           } | 
 |  |  |         } | 
 |  |  |      ); | 
 |  |  |      this.http.get('/chart').subscribe((res: any) => { | 
 |  |  |       // this.webSite = res.visitData.slice(0, 10); | 
 |  |  |       this.salesData = res.salesData; | 
 |  |  |       // this.offlineChartData = res.offlineChartData; | 
 |  |  |   }); | 
 |  |  |   } | 
 |  |  |   public aqiChartOption | 
 |  |  |   public aqiEchartsIntance; | 
 |  |  |   public aqiChartLoading = false; | 
 |  |  |   public onApiChartInit(e): void { | 
 |  |  |         this.aqiEchartsIntance = e; | 
 |  |  |   } | 
 |  |  |   private reloadChart(): void { | 
 |  |  |     // const  timeList = this.grid.columns.map(item => item.text);   | 
 |  |  |      if (!!this.aqiEchartsIntance) { | 
 |  |  |          this.aqiChartOption = null; | 
 |  |  |          this.aqiEchartsIntance.clear(); | 
 |  |  |      } | 
 |  |  |     //  let series = null; | 
 |  |  |     //  if ( this.chartSelectedIndex < this.grid.data.length ) { | 
 |  |  |     //     series = [{type: 'line', data: this.grid.data[this.chartSelectedIndex]}]; | 
 |  |  |     //  } | 
 |  |  |       | 
 |  |  |     //  this.initOpton(chartOption ,{ xAxis : [{data : []}]}); | 
 |  |  |     //  this.aqiChartOption = true; | 
 |  |  |     this.initOpton(this.aqiChartOption ,{ xAxis : [{data : []}]}); | 
 |  |  |   } | 
 |  |  |   private initOpton(chartOption,opt: {[key: string]: object}) { | 
 |  |  |      const defaultOption = { | 
 |  |  |         title: { | 
 |  |  |             left: 'center' | 
 |  |  |         }, | 
 |  |  |         tooltip : { | 
 |  |  |             trigger: 'axis', | 
 |  |  |             axisPointer: { | 
 |  |  |                 type: 'cross', | 
 |  |  |                 label: { | 
 |  |  |                     backgroundColor: '#6a7985' | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }, | 
 |  |  |         legend: { | 
 |  |  |             data: [] | 
 |  |  |         }, | 
 |  |  |         toolbox: { | 
 |  |  |             feature: { | 
 |  |  |                 saveAsImage: {} | 
 |  |  |             } | 
 |  |  |         }, | 
 |  |  |         grid: { | 
 |  |  |             left: '3%', | 
 |  |  |             right: '4%', | 
 |  |  |             bottom: '3%', | 
 |  |  |             containLabel: true | 
 |  |  |         }, | 
 |  |  |         xAxis : [ | 
 |  |  |             { | 
 |  |  |                 type : 'category', | 
 |  |  |                 boundaryGap : false | 
 |  |  |             } | 
 |  |  |         ], | 
 |  |  |         yAxis : [ | 
 |  |  |             { | 
 |  |  |                 type : 'value' | 
 |  |  |             } | 
 |  |  |         ], | 
 |  |  |         series : [ | 
 |  |  |         ] | 
 |  |  |     }; | 
 |  |  |     $.extend(true, defaultOption, opt); | 
 |  |  |     chartOption = defaultOption; | 
 |  |  |   } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         //  if ( this.chartSelectedIndex < this.grid.data.length ) { | 
 |  |  |         //     series = [{type: 'line', data: this.grid.data[this.chartSelectedIndex]}]; | 
 |  |  |         //  } | 
 |  |  |           | 
 |  |  |          debugger; | 
 |  |  |          this.initOpton({ xAxis : [{data : timeList}]}); | 
 |  |  |          this.chartLoading = true; | 
 |  |  |       } | 
 
 |  |  | 
 |  |  |         path: '', | 
 |  |  |         component: LayoutDefaultComponent, | 
 |  |  |         children: [ | 
 |  |  |             { path: '', redirectTo: 'dashboard/workplace', pathMatch: 'full' }, | 
 |  |  |             { path: "", redirectTo: "home-page", pathMatch: "full" }, | 
 |  |  |             { | 
 |  |  |               path: "home-page", | 
 |  |  |               loadChildren: "./home-page/home-page.module#HomePageModule" | 
 |  |  |             }, | 
 |  |  |             { path: 'dashboard', redirectTo: 'dashboard/v1', pathMatch: 'full' }, | 
 |  |  |             { path: 'dashboard/v1', component: DashboardV1Component, data: { translate: 'dashboard_v1' } }, | 
 |  |  |             { path: 'dashboard/analysis', component: DashboardAnalysisComponent, data: { translate: 'dashboard_analysis' } }, | 
 
 |  |  | 
 |  |  |     production: false, | 
 |  |  |     hmr: true, | 
 |  |  |     useHash: true, | 
 |  |  |     SERVER_BASH_URL: `http://47.96.171.62:8080/screen_api_v2/` | 
 |  |  |     SERVER_BASH_URL: `http://monitor-api2.7drlb.com/` | 
 |  |  | }; | 
 
 |  |  | 
 |  |  |     production: true, | 
 |  |  |     hmr: false, | 
 |  |  |     useHash: true, | 
 |  |  |     SERVER_BASH_URL:`http://47.96.15.25:8080/screen_api_v2/` | 
 |  |  |     SERVER_BASH_URL: `http://monitor-api2.7drlb.com/` | 
 |  |  | }; | 
 
 |  |  | 
 |  |  |     production: false, | 
 |  |  |     hmr: false, | 
 |  |  |     useHash: true, | 
 |  |  |     SERVER_BASH_URL: `http://47.96.171.62:8080/screen_api_v2/` | 
 |  |  |     SERVER_BASH_URL: `http://127.0.0.1:8080/` | 
 |  |  | }; | 
 
 |  |  | 
 |  |  |   version "0.6.6" | 
 |  |  |   resolved "https://registry.yarnpkg.com/@delon/cli/-/cli-0.6.6.tgz#0e17ac163c12a2f6c73ac32f5bf919624b31b33f" | 
 |  |  |  | 
 |  |  | "@delon/mock@^0.6.6": | 
 |  |  |   version "0.6.9" | 
 |  |  |   resolved "http://registry.npm.taobao.org/@delon/mock/download/@delon/mock-0.6.9.tgz#424de74de5d95c9dc9a3492512eae218534e0b4f" | 
 |  |  |  | 
 |  |  | "@delon/theme@0.6.6": | 
 |  |  |   version "0.6.6" | 
 |  |  |   resolved "https://registry.yarnpkg.com/@delon/theme/-/theme-0.6.6.tgz#de3439d709bdc3bac312f3f21b4a09d9ccc25467" |