347617796@qq.com 4 سال پیش
والد
کامیت
1152ab7067

+ 0 - 0
.env


+ 12 - 0
.env.development

@@ -0,0 +1,12 @@
+NODE_ENV="development"
+VUE_APP_BASE_API="https://test-ding.g107.com/"
+VUE_APP_NAME="功道云"
+VUE_APP_VER="7.0"
+VUE_APP_WEBSOCKET_API="https://mwth.jifen.g107.com:543"
+VUE_APP_COPYRIGHT_CN="功道云 版权所有"
+VUE_APP_COPYRIGHT_EN="Copyright ©2015-2020 Kung Dao Cloud All Rights Reserved."
+VUE_APP_ALIOSS_URL="https://integralsys.oss-cn-shenzhen.aliyuncs.com"
+VUE_APP_ALIOSS_CDN_URL="http://cdn.intesys.g107.com"
+VUE_APP_ID="os_base"
+VUE_APP_WEB_LINK="http://192.168.31.11:8089"
+VUE_APP_DOWNDOAD_URL="https://m.intesys.cms.g107.com/app_download/"

+ 13 - 0
.env.production

@@ -0,0 +1,13 @@
+NODE_ENV="production"
+VUE_APP_BASE_API="https://test-ding.g107.com/"
+VUE_APP_NAME="功道云-绩效版"
+VUE_APP_VER="7.0"
+VUE_APP_WEBSOCKET_API="https://ws.g107.com:543"
+VUE_APP_COPYRIGHT_CN="功道云 版权所有"
+VUE_APP_COPYRIGHT_EN="Copyright ©2015-2020 Kung Dao Cloud All Rights Reserved."
+VUE_APP_ALIOSS_URL="https://integralsys.oss-cn-shenzhen.aliyuncs.com"
+VUE_APP_ALIOSS_CDN_URL="http://cdn.intesys.g107.com"
+VUE_APP_ID="os_base"
+VUE_APP_WEB_LINK="https://oa.g107.com/m"
+VUE_APP_DOWNDOAD_URL="https://m.intesys.cms.g107.com/app_download/"
+

+ 397 - 0
new_file.json

@@ -0,0 +1,397 @@
+{
+	"code": 1,
+	"msg": "test",
+	"data": [{
+		"employee": {
+			"id": 1,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5168\u5c0f\u8f89",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPBE1Xaa4TcxPNAdHNAhE_529_465.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u6d4b\u8bd5\u5de5\u7a0b\u5e08",
+			"accedence_time": "2020-07-03",
+			"letter_index": "Q",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747057",
+			"update_time": "1593747057",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6InZZUjJIcXRxZTNpdUxJdXEiLCJzdWIiOjEsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.-8igGnPzm90p1kLuDPzVxllXzswNyJucqWwz1S--zWA"
+	}, {
+		"employee": {
+			"id": 2,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u90ed\u5bb6\u88d5",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u524d\u7aef\u5f00\u53d1\u5de5\u7a0b\u5e08",
+			"accedence_time": "2020-05-25",
+			"letter_index": "G",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747059",
+			"update_time": "1593747059",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IjBHb2xzaUZRcTdTZUY5YkEiLCJzdWIiOjIsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.jk8PZd0LwwgN51czQqvgDDBctbu7qhbaGfAx_i14vbY"
+	}, {
+		"employee": {
+			"id": 3,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u65b9\u6167\u6bc5",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u6280\u672f\u603b\u76d1",
+			"accedence_time": "2020-07-03",
+			"letter_index": "F",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747061",
+			"update_time": "1593747061",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IkYwdGJHUzBjaWVreU16OUsiLCJzdWIiOjMsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.wsMgdJCaulQPA6SyERvse-2WLXrEaB76l3A1cSMDjoE"
+	}, {
+		"employee": {
+			"id": 4,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u8c22\u660e\u5174",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u524d\u7aef\u5f00\u53d1\u5de5\u7a0b\u5e08",
+			"accedence_time": "2020-07-03",
+			"letter_index": "X",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747063",
+			"update_time": "1593747063",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IjlLazVKUkpXMWNxY0o2QXEiLCJzdWIiOjQsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.9yCL73g94DNkNmRkGBdvvPKmYHxWWHTe-vSnZH2d7aM"
+	}, {
+		"employee": {
+			"id": 5,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u67ef\u6d9b",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPDgQ9qhgmEW_Mqcyp_169_169.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "",
+			"accedence_time": "2019-03-04",
+			"letter_index": "K",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747066",
+			"update_time": "1593747066",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IlgxZkV2S3ZiUDhlN0hjVU8iLCJzdWIiOjUsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.dYr35wIix4xxRjNffoeQKfm5HvNcKaPQdCcRbzBzyFQ"
+	}, {
+		"employee": {
+			"id": 6,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u674e\u6587\u709c",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPBE1XYsdiH4zNAUjNAQw_268_328.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u7f51\u9875\u8bbe\u8ba1\u5e08",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747067",
+			"update_time": "1593747067",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6ImI2TGN2VkNkOUh6UEpiVk4iLCJzdWIiOjYsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.UqK6GXvp5BnSN9eGe1EUSuJQqXsns4Vxv5l0UeZXHsc"
+	}, {
+		"employee": {
+			"id": 7,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u9648\u51a0\u658c",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADO4MZwyc0C0M0C0Q_721_720.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u540e\u7aef\u5f00\u53d1\u5de5\u7a0b\u5e08",
+			"accedence_time": "2020-07-03",
+			"letter_index": "C",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747069",
+			"update_time": "1593747069",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IkJhbjdVbEhSWHI4QUoxTnYiLCJzdWIiOjcsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.HUoQ5gz1BjRd5iG9KC0BUnl6ItgU3ZuRTNlCPEUV7vs"
+	}, {
+		"employee": {
+			"id": 8,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5434\u4ef2\u575a",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "UI",
+			"accedence_time": "2020-07-03",
+			"letter_index": "W",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747071",
+			"update_time": "1593747071",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6ImY1TVl3R3c0ckVwNTg0dUEiLCJzdWIiOjgsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.abYu6Zs5cO4KHtawWjbhhGTHupmFDZWt6W2P8JiucgM"
+	}, {
+		"employee": {
+			"id": 9,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5218\u4fca\u534e",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPBE1XZKtDsDbNAWLNAWI_354_354.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u4ea7\u54c1\u7ecf\u7406",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747073",
+			"update_time": "1593747073",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6InlheGdiZ1UwbFBxeDRWUUIiLCJzdWIiOjksInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.P0MbrFA7BrSI3H9cBplvBAZ3NeWKUWt7LZSGw-xX4kA"
+	}, {
+		"employee": {
+			"id": 10,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5b59\u8d35\u82b3",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPDgQ9qoHy3_vNAzDNAmQ_612_816.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u63a8\u5e7f\u4e13\u5458",
+			"accedence_time": "2020-07-03",
+			"letter_index": "S",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747075",
+			"update_time": "1593747075",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IkNGNGtFclMwZFhFc3NWQ1YiLCJzdWIiOjEwLCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.kYjX_zpZToG_jS_NFPrcC-UuDB4ST9wo4aMHD_V9ymE"
+	}, {
+		"employee": {
+			"id": 11,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u674e\u4e3d\u840d",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPDgQ9qa5FpDDNC9DNC9Q_3028_3024.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u63a8\u5e7f\u4e3b\u7ba1",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747077",
+			"update_time": "1593747077",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6ImYyazJpSXhVRjRHT0RLWDUiLCJzdWIiOjExLCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.eaxOe-RHGAD3GMYUPM0IPz-U4XwWsbK8nmZfzVAb9q8"
+	}, {
+		"employee": {
+			"id": 12,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5b59\u8363\u4e3e",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPBFf_6qkrPGvNArPNArM_691_691.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u8425\u9500\u90e8\u7ecf\u7406",
+			"accedence_time": "2020-07-03",
+			"letter_index": "S",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747079",
+			"update_time": "1593747079",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6Ik1QVXA4eGRpQ2NnV3ZNU3YiLCJzdWIiOjEyLCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.XK_7yQEuyJ1QkhOSP-oAAy9TrK8tOg0y6stkFXrF068"
+	}, {
+		"employee": {
+			"id": 13,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u738b\u56fd\u8363",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "",
+			"accedence_time": "2020-07-03",
+			"letter_index": "W",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747080",
+			"update_time": "1593747080",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IlR6c3FGZGx0OEN0TVFNRk8iLCJzdWIiOjEzLCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.lSlzHIqD4iW0c59IsQn3VPTdALGQz2jWBGrtQDVLIXU"
+	}, {
+		"employee": {
+			"id": 14,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5218\u6c34",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747082",
+			"update_time": "1593747082",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6Im5MN1RucGowdnBia2xBSGIiLCJzdWIiOjE0LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.gKKzEhnvH8hN6wmFoC6IpuQ04nQcYfAaLx1SK-PUVD8"
+	}, {
+		"employee": {
+			"id": 15,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5218\u745e\u6b23",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPDgQ9qiGe0p7NAwDNAwA_768_768.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "\u5ba2\u670d\u4e13\u5458",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747085",
+			"update_time": "1593747085",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IlBheXZtOTZ4dlBFS3ZwWlIiLCJzdWIiOjE1LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.i_zCXMrE3Pz2qLZt4KbzqViD-fvd4ipvPJ4WRiY0CIw"
+	}, {
+		"employee": {
+			"id": 16,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u5b59\u8363\u9ad8",
+			"img_url": "https:\/\/static-legacy.dingtalk.com\/media\/lADPDgQ9qpa_6ObNAn3NAoA_640_637.jpg",
+			"tel": "",
+			"status": 1,
+			"is_creator": 1,
+			"company_id": "",
+			"post": "",
+			"accedence_time": "2020-07-03",
+			"letter_index": "S",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593747087",
+			"update_time": "1593747087",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IlFieGR4ZENScnJiSU5jalQiLCJzdWIiOjE2LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.oPMctgwa903A9n1ITKRL135T7jpjUTcXpLA68XGhRyU"
+	}, {
+		"employee": {
+			"id": 17,
+			"account_id": 0,
+			"site_id": 2,
+			"name": "\u674e\u6d4b\u8bd5",
+			"img_url": "",
+			"tel": "",
+			"status": 1,
+			"is_creator": 0,
+			"company_id": "",
+			"post": "",
+			"accedence_time": "2020-07-03",
+			"letter_index": "L",
+			"lang": "cn",
+			"try_user": 0,
+			"is_official": 1,
+			"create_time": "1593754505",
+			"update_time": "1593754505",
+			"delete_time": null,
+			"status_remark": "\u5728\u804c"
+		},
+		"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC90ZXN0LWRpbmcuZzEwNy5jb21cL2FwaVwvdGVzdCIsImlhdCI6MTU5NzI4MTc5OSwiZXhwIjoxNTk3ODgxNzk5LCJuYmYiOjE1OTcyODE3OTksImp0aSI6IlBxWmg0WVJIMURBTjRSVlAiLCJzdWIiOjE3LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.ddeUoqA8hNu9bLfOXL4F24o5_1wVpiGAt47-32Af8Y4"
+	}],
+	"refresh_token": ""
+}

+ 112 - 2
package-lock.json

@@ -2129,6 +2129,14 @@
       "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=",
       "dev": true
     },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz",
+      "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz",
@@ -2168,6 +2176,37 @@
       "integrity": "sha1-oXs6jqgRBg501H0wYSJACtRJeuI=",
       "dev": true
     },
+    "axios": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz?cache=0&sync_timestamp=1594827603723&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.2.tgz",
+      "integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=",
+      "requires": {
+        "follow-redirects": "1.5.10"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "follow-redirects": {
+          "version": "1.5.10",
+          "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.5.10.tgz",
+          "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
+          "requires": {
+            "debug": "=3.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
     "babel-eslint": {
       "version": "10.1.0",
       "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz",
@@ -2182,6 +2221,11 @@
         "resolve": "^1.12.0"
       }
     },
+    "babel-helper-vue-jsx-merge-props": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
+    },
     "babel-loader": {
       "version": "8.1.0",
       "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715910722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz",
@@ -2204,6 +2248,27 @@
         "object.assign": "^4.1.0"
       }
     },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.11",
+          "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz",
+          "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
+        },
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456311465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
+          "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+        }
+      }
+    },
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
@@ -3821,8 +3886,7 @@
     "deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
-      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
-      "dev": true
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
     },
     "default-gateway": {
       "version": "5.0.5",
@@ -4095,6 +4159,14 @@
         }
       }
     },
+    "dingtalk-jsapi": {
+      "version": "2.11.25",
+      "resolved": "https://registry.npm.taobao.org/dingtalk-jsapi/download/dingtalk-jsapi-2.11.25.tgz",
+      "integrity": "sha1-Zp8c0qKF6L3fSIHoFVOJ5iHQFmY=",
+      "requires": {
+        "promise-polyfill": "^7.1.0"
+      }
+    },
     "dir-glob": {
       "version": "2.2.2",
       "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
@@ -4269,6 +4341,19 @@
       "integrity": "sha1-Yg5nMcaT3arzdQ8j3ef3xDR7cyc=",
       "dev": true
     },
+    "element-ui": {
+      "version": "2.13.2",
+      "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.2.tgz?cache=0&sync_timestamp=1589795164194&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.2.tgz",
+      "integrity": "sha1-WCv0eqqqr+I+oZWPriF6aHrQZEc=",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
     "elliptic": {
       "version": "6.5.3",
       "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz",
@@ -7248,6 +7333,11 @@
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "dev": true
     },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz",
@@ -8456,6 +8546,11 @@
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
       "dev": true
     },
+    "promise-polyfill": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npm.taobao.org/promise-polyfill/download/promise-polyfill-7.1.2.tgz",
+      "integrity": "sha1-qwUwHYwoU2MBYi1pInYyJppwyjs="
+    },
     "proxy-addr": {
       "version": "2.0.6",
       "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
@@ -8879,6 +8974,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
+    },
     "resolve": {
       "version": "1.17.0",
       "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz",
@@ -10038,6 +10138,11 @@
         "neo-async": "^2.6.0"
       }
     },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
+    },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
@@ -10529,6 +10634,11 @@
       "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
       "dev": true
     },
+    "vconsole": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npm.taobao.org/vconsole/download/vconsole-3.3.4.tgz",
+      "integrity": "sha1-p9rNiIez0+kC6NGEJc2lbDTnf1E="
+    },
     "vendors": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1579857147055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz",

+ 7 - 1
package.json

@@ -5,10 +5,16 @@
   "scripts": {
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
-    "lint": "vue-cli-service lint"
+    "lint": "vue-cli-service lint",
+    "devbuild": "vue-cli-service build --mode development",
+    "prebuild": "vue-cli-service build --mode production"
   },
   "dependencies": {
+    "axios": "^0.19.2",
     "core-js": "^3.6.5",
+    "dingtalk-jsapi": "^2.11.25",
+    "element-ui": "^2.13.2",
+    "vconsole": "^3.3.4",
     "vue": "^2.6.11",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"

+ 7 - 25
src/App.vue

@@ -1,32 +1,14 @@
 <template>
   <div id="app">
-    <div id="nav">
-      <router-link to="/">Home</router-link> |
-      <router-link to="/about">About</router-link>
-    </div>
     <router-view/>
   </div>
 </template>
-
+<style>
+  @import "assets/css/reset.css";
+</style>
 <style lang="scss">
-#app {
-  font-family: Avenir, Helvetica, Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  text-align: center;
-  color: #2c3e50;
-}
-
-#nav {
-  padding: 30px;
-
-  a {
-    font-weight: bold;
-    color: #2c3e50;
-
-    &.router-link-exact-active {
-      color: #42b983;
-    }
-  }
-}
+	#app{
+		width: 100%;
+		height: 100%;
+	}
 </style>

+ 27 - 0
src/api/auth.js

@@ -0,0 +1,27 @@
+const TokenKey = 'A-Token'
+const UserIdKey = 'userData'
+const TypesKey = 'types'
+
+
+export function getUserData () {
+    return JSON.parse(localStorage.getItem(UserIdKey)); 
+}
+export function setUserData (data) {
+     localStorage.setItem(UserIdKey,JSON.stringify(data))
+}
+export function getTyps () {
+    return JSON.parse(localStorage.getItem(TypesKey)); 
+}
+
+export function setTyps (data) {
+     localStorage.setItem(TypesKey,JSON.stringify(data))
+}
+
+export function getToken () {
+    return localStorage.getItem(TokenKey)
+}
+
+export function setToken (token) {
+     localStorage.setItem(TokenKey, token)
+}
+

+ 60 - 0
src/api/axios.js

@@ -0,0 +1,60 @@
+import axios from 'axios'
+import {Message} from 'element-ui'
+import {
+	getToken,
+	setToken
+} from './auth.js'
+import qs from 'qs'
+
+const service = axios.create({
+	baseURL: process.env.VUE_APP_BASE_API, // api的base_url
+	// timeout: 5000,
+	headers: {
+		'Content-Type': 'application/x-www-form-urlencoded'
+	},
+	transformRequest: [function(data) {
+		return qs.stringify(data)
+	}]
+})
+
+service.interceptors.request.use(
+	config => {
+		if (getToken()) {
+			config.headers['A-Token'] = getToken()
+		}
+		return config
+	},
+	error => {
+		Promise.reject(error)
+	}
+)
+
+// respone interceptor
+service.interceptors.response.use(
+	response => {
+		if (response.data.code === 1) {
+			if (response.data.refresh_token) {
+				if (response.data.refresh_token !== getToken()) {
+					setToken(response.data.refresh_token);
+				}
+			}
+			return response;
+		} else if (response.data.code === 401) {
+			Message({
+				message: response.data.msg,
+				type: 'error',
+				duration: 10 * 1000
+			})
+		}
+	},
+	error => {
+		Message({
+			message: error.message,
+			type: 'error',
+			duration: 10 * 1000
+		})
+		return Promise.reject(error)
+	}
+)
+
+export default service

+ 192 - 0
src/assets/css/reset.css

@@ -0,0 +1,192 @@
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
+body, button, input, select, textarea {font-size:14px;color: #303133; }
+h1, h2, h3, h4, h5, h6{ font-size:100%; }
+address, cite, dfn, em, var { font-style:normal; }
+code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
+small{ font-size:12px; }
+ul, ol { list-style:none; }
+a { text-decoration:none; }
+a:hover { text-decoration:underline; }
+sup { vertical-align:text-top; }
+sub{ vertical-align:text-bottom; }
+legend { color:#000; }
+fieldset, img { border:0; }
+button, input, select, textarea { font-size:100%; }
+table { border-collapse:collapse; border-spacing:0; }
+
+
+/* 盒子模型 */
+.flex-box {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+}
+
+/*盒子模型,竖向自适应,垂直排列  */
+.flex-box-v {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-flex-flow: column;
+  flex-flow: column !important;
+}
+
+/* 水平等列排版(容器左右没缝隙,子元素左右两边自适应) */
+.flex-d-center {
+  justify-content: space-between;
+  -webkit-justify-content: space-between;
+}
+
+/* 水平等列排版(子元素两边有缝隙自己适应) */
+.flex-dv-center {
+  justify-content: space-around;
+  -webkit-justify-content: space-around;
+}
+
+
+/*通过一起使用 box-align 和 box-pack 属性,对 view 框的子元素进行居中,目前没有浏览器支持box-align 和 box-pack 属性,所以需要加上浏览器内核-webkit,-moz等的简写  */
+.flex-center-center {
+  justify-content: center;
+  -webkit-justify-content: center;
+  -moz-justify-content: center;
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-pack: center;
+  -webkit-box-align: center;
+  -moz-align-items: center;
+  -moz-box-pack: center;
+  -moz-box-align: center;
+}
+
+/*对view中的子元素进行居中,并且位于容器的中间位置(flex-box水平;flex-box-v垂直)  */
+.flex-v-zhu,
+.flex-h-zhu {
+  justify-content: center;
+  -webkit-justify-content: center;
+  -webkit-box-pack: center;
+}
+
+/*对view中的子元素进行居中,并且位于容器的中间位置(flex-box垂直;flex-box-v水平)  */
+.flex-v-ce,
+.flex-h-ce {
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+}
+
+/*让所有弹性盒模型对象的子元素都有相同的长度,且忽略它们内部的内容:  */
+.flex-1 {
+  -webkit-box-flex: 1;
+  -moz-box-flex: 1;
+  -webkit-flex: 1;
+  -ms-flex: 1;
+  flex: 1;
+}
+
+.flex-2 {
+  -webkit-box-flex: 2;
+  box-flex: 2;
+  -moz-box-flex: 2;
+  -webkit-flex: 2;
+  -ms-flex: 2;
+  flex: 2;
+}
+
+.flex-3 {
+  -webkit-box-flex: 3;
+  box-flex: 3;
+  -moz-box-flex: 3;
+  -webkit-flex: 3;
+  -ms-flex: 3;
+  flex: 3;
+}
+
+.flex-4 {
+  -webkit-box-flex: 4;
+  box-flex: 4;
+  -moz-box-flex: 4;
+  -webkit-flex: 4;
+  -ms-flex: 4;
+  flex: 4;
+}
+
+
+.flex-5 {
+  -webkit-box-flex: 5;
+  box-flex: 5;
+  -moz-box-flex: 5;
+  -webkit-flex: 5;
+  -ms-flex: 5;
+  flex: 5;
+}
+
+.flex-direction-row-reverse {
+  flex-direction: row-reverse;
+  -webkit-flex-direction: row-reverse;
+}
+
+/*超出部分用....表示的公用样式  */
+.font-flex-word {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+/* 内容超出部分自动换行 */
+.flex-d-wrap {
+  flex-wrap: wrap;
+}
+
+/* 内容超出部分不换行 */
+.flex-no-wrap {
+  flex-wrap: nowrap;
+}
+
+/* 从右边开始排列 */
+.flex-box-end {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  justify-content: flex-end;
+}
+
+/* 字体颜色 */
+.blue {
+	color: #26A2FF!important;
+}
+
+.red {
+	color: #F56C6C!important;
+}
+
+.yellow {
+	color: #E6A23C!important;
+}
+
+.green {
+	color: #67C23A!important;
+}
+
+.fontColorZ {
+	color: #303133!important;
+}
+
+.fontColorF {
+	color: #909399 !important;
+}
+
+.fontColorT {
+	color: #C0C4CC!important;
+}
+
+/* 整体布局样式 */
+.all{
+	background-color: #fff;
+	border-radius: 5px;
+	height: 100%;
+}

+ 0 - 0
src/assets/logo.png → src/assets/image/logo.png


+ 0 - 60
src/components/HelloWorld.vue

@@ -1,60 +0,0 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br>
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
-      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
-      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
-      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
-      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
-      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
-      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
-      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
-      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'HelloWorld',
-  props: {
-    msg: String
-  }
-}
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped lang="scss">
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-</style>

+ 124 - 0
src/components/UserImage.vue

@@ -0,0 +1,124 @@
+<template>
+  <div>
+    <img v-if="info.img_url" class="logo_img" :src="info.img_url" :width="width" :height="height" />
+    <span class="img_round" v-else>
+      <div class="user_name_div" :style="{width: width, height: height,lineHeight: height, fontSize: fontSize + 'rem'}">{{name}}</div>
+      <div class="user_img_bg" :style="{width: width, height: height}" ></div>
+    </span>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'userImage',
+    props: {
+      width: {
+        type: String,
+        default: '0.8rem'
+      },
+      height: {
+        type: String,
+        default: '0.8rem'
+      },
+      id:{
+        type: Number,
+        default: 0
+      },
+      img_url: {
+        type: String,
+        default: ''
+      },
+      user_name: {
+        type: String,
+        default: ''
+      },
+      fontSize:{
+        type: String,
+        default: '0.32'
+      }
+    },
+    watch:{
+      id: function (val) {
+        this.set_info()
+        this.name_no()
+      },
+      img_url: function (val) {
+        this.set_info()
+        this.name_no()
+      },
+      user_name: function (val) {
+        this.set_info()
+        this.name_no()
+      }
+    },
+    // 数据
+    data(){
+      let info ={name:'',img_url: '',id:0}
+      if(this.img_url != ''){
+        info.img_url = this.img_url
+      }
+      if(this.user_name != ''){
+        info.name = this.user_name
+      }
+      return {
+        info: info,
+        name: '',
+      }
+    },
+    computed:{
+    },
+    // 方法
+    methods:{
+      set_info(){
+        let info ={name:'',img_url: '',id:0}
+
+        if(this.img_url != ''){
+          info.img_url = this.img_url
+        }
+        if(this.user_name != ''){
+          info.name = this.user_name
+        }
+        this.info = info
+      },
+      // 加载
+      name_no(){
+        if(!this.info.img_url){
+          let pattern = new RegExp("^[\u4E00-\u9FA5]+");
+          if(this.info.name.length > 2){
+            if(pattern.test(this.info.name)){
+              this.name = this.info.name.substring(this.info.name.length-2,this.info.name.length)
+            }else{
+              this.name = this.info.name.substring(0,2)
+            }
+          }else{
+            this.name = this.info.name
+          }
+        }
+      }
+    },
+    // 组件挂载完成
+    mounted() {
+      this.name_no()
+    },
+  }
+</script>
+<style scoped>
+  .img_round{
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+  }
+  .img_round .user_img_bg{
+    border-radius: 50%;
+    background: #238dfa;
+  }
+  .user_name_div{
+    position: absolute;
+    z-index: 1;
+    text-align: center;
+    color: #fff;
+  }
+  .logo_img{
+    border-radius: 50%;
+  }
+  /deep/ .van-image{vertical-align: top;}
+</style>

+ 182 - 0
src/index.vue

@@ -0,0 +1,182 @@
+<template>
+	<el-container class="box-all" v-loading="loading">
+		<el-header>
+			<div class="flex-box">
+				<div class="logo-box flex-box flex-center-center">
+					<img src="./assets/image/logo.png" class="logo" />
+					<div>功道云积分管理</div>
+				</div>
+				<div class="flex-1 hea-right flex-box flex-v-ce">
+					<div class="name flex-1">{{ info.name }}</div>
+					<div class="flex-box flex-v-ce">
+						<div>您当前的版本:15~20人(剩余231天)</div>
+						<el-button size="small" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
+						<span class="wn">?</span>
+						<userImage style="position: relative;top:8px" :user_name="userData.name" :img_url="userData.img_url" width="44px" height="44px"></userImage>
+					</div>
+				</div>
+			</div>
+		</el-header>
+		<el-container class="main">
+			<el-aside>
+				<el-menu default-active="1" class="el-menu-vertical-demo" :router="true">
+					<el-menu-item :index="(index + 1).toString()" :route="item.path" v-for="(item, index) in routers" :key="index">
+						<i class="el-icon-menu"></i>
+						<span slot="title">{{ item.name }}</span>
+					</el-menu-item>
+				</el-menu>
+			</el-aside>
+			<el-main><router-view /></el-main>
+		</el-container>
+	</el-container>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			loading: false,
+			userData: '',
+			routers: [],
+			info: ''
+		};
+	},
+	created() {
+		this.routers = this.$router.options.routes[0].children;
+	},
+	mounted() {
+		var url = window.location.href;
+		var str = this.GetRequest(url).corpId || '123';
+		var corpId = str.split('#')[0];
+		if (corpId) {
+			// this.login(corpId);
+			// this.getTypes();
+		}
+	},
+	methods: {
+		login(corpId) {
+			var that = this;
+			this.$dd.runtime.permission.requestAuthCode({
+				corpId: corpId, // 企业id
+				onSuccess: function(info) {
+					that.$axios.post('api/ding/login', { authCode: info.code, corpId: corpId }).then(res => {
+						console.log(res.data.code);
+						if (res.data.code == 1) {
+							var { token, user } = res.data.data;
+							that.$setToken(token);
+							that.$setUserData(user);
+							that.userData = user;
+							that.getInfo();
+						}
+					});
+				}
+			});
+		},
+		getInfo() {
+			var that = this;
+			this.$axios.get('api/site/info').then(res => {
+				that.info = res.data.data;
+				that.loading = false;
+			});
+		},
+		getTypes() {
+			var that = this;
+			this.$axios.get('api/integral/types').then(res => {
+				that.$setTyps(res.data.data.list);
+			});
+		},
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		}
+	}
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+	
+.el-menu-vertical-demo:not(.el-menu--collapse) {
+	width: 200px;
+	min-height: 400px;
+}
+.el-header {
+	background-color: #fff;
+	line-height: 60px;
+	padding: 0 !important;
+	border-bottom: 1px solid #f1f1f1;
+}
+.el-menu {
+	overflow: hidden;
+	border: none;
+}
+.el-aside {
+	transition: width 0.28s;
+	width: 180px !important;
+	background-color: #fff;
+	height: calc(100vh - 60px);
+}
+.el-aside::-webkit-scrollbar {
+	width: 0px;
+	background-color: #fff;
+}
+
+.el-aside::-webkit-scrollbar-thumb {
+	background-color: #ccc;
+}
+.con_nav_left {
+	background: #fff;
+	overflow-y: scroll;
+}
+.box-all {
+	height: 100%;
+	overflow: hidden;
+}
+.el-main {
+	background-color: #f4f6f9;
+	height: calc(100vh - 60px);
+	overflow-y: scroll;
+	z-index: 999;
+}
+.logo-box {
+	width: 200px;
+}
+.logo-box .logo {
+	width: 30px;
+	height: 30px;
+	margin-right: 5px;
+}
+.logo-box div {
+	font-size: 16px;
+	font-weight: 600;
+}
+.wn {
+	height: 26px;
+	width: 26px;
+	border: 1px solid #c0c4cc;
+	line-height: 26px;
+	text-align: center;
+	border-radius: 50px;
+	margin: 0 10px;
+	font-size: 18px;
+	color: #c0c4cc;
+}
+.hea-right {
+	padding: 0 20px;
+}
+.upgrade {
+	margin-left: 10px;
+}
+</style>

+ 25 - 1
src/main.js

@@ -2,9 +2,33 @@ import Vue from 'vue'
 import App from './App.vue'
 import router from './router'
 import store from './store'
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import * as dd from 'dingtalk-jsapi';
+import VConsole from 'vconsole'
+import service from './api/axios'
+import { getToken, setToken,getUserData,setUserData,getTyps,setTyps } from './api/auth';
 
-Vue.config.productionTip = false
+// 头像
+import userImage from '@/components/UserImage'
+Vue.component('userImage', userImage)
+
+Vue.use(ElementUI);
+if (process.env.NODE_ENV === 'development') {
+  new VConsole()
+}
+
+Vue.prototype.$dd=dd;
+Vue.prototype.$axios = service
+Vue.prototype.$getToken = getToken
+Vue.prototype.$setToken = setToken
+Vue.prototype.$getUserData = getUserData
+Vue.prototype.$setUserData = setUserData
+Vue.prototype.$getTyps = getTyps
+Vue.prototype.$setTyps = setTyps
 
+
+Vue.config.productionTip = false
 new Vue({
   router,
   store,

+ 41 - 12
src/router/index.js

@@ -1,27 +1,56 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
-import Home from '../views/Home.vue'
 
 Vue.use(VueRouter)
 
   const routes = [
   {
     path: '/',
-    name: 'Home',
-    component: Home
+    name: '首页',
+    component: () => import('@/index'),
+	redirect: "guide",
+	children:[
+		{
+		  path: '/guide',
+		  name: '设置向导',
+		  component: () => import('@/views/guide.vue')
+		},
+		{
+		  path: '/rule',
+		  name: '积分规则',
+		  component: () => import('@/views/rule.vue')
+		},
+		{
+		  path: '/framework',
+		  name: '组织架构',
+		  component: () => import('@/views/framework.vue')
+		},
+		{
+		  path: '/jurisdiction',
+		  name: '角色权限',
+		  component: () => import('@/views/jurisdiction.vue')
+		},
+		{
+		  path: '/initialPoint',
+		  name: '初始分',
+		  component: () => import('@/views/initialPoint.vue')
+		},
+		{
+		  path: '/check',
+		  name: '考勤积分',
+		  component: () => import('@/views/check.vue')
+		},
+		{
+		  path: '/voluntarilyPoint',
+		  name: '自动积分',
+		  component: () => import('@/views/voluntarilyPoint.vue')
+		}
+	]
   },
-  {
-    path: '/about',
-    name: 'About',
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
-  }
 ]
 
 const router = new VueRouter({
-  mode: 'history',
+  // mode: 'history',
   base: process.env.BASE_URL,
   routes
 })

+ 0 - 5
src/views/About.vue

@@ -1,5 +0,0 @@
-<template>
-  <div class="about">
-    <h1>This is an about page</h1>
-  </div>
-</template>

+ 0 - 18
src/views/Home.vue

@@ -1,18 +0,0 @@
-<template>
-  <div class="home">
-    <img alt="Vue logo" src="../assets/logo.png">
-    <HelloWorld msg="Welcome to Your Vue.js App"/>
-  </div>
-</template>
-
-<script>
-// @ is an alias to /src
-import HelloWorld from '@/components/HelloWorld.vue'
-
-export default {
-  name: 'Home',
-  components: {
-    HelloWorld
-  }
-}
-</script>

+ 25 - 0
src/views/check.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>考勤</div>
+</template>
+
+<script>
+</script>
+
+<style>
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+
+		},
+		methods:{
+			
+		}
+	};
+</style>

+ 25 - 0
src/views/framework.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>组织架构</div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+	
+			};
+		},
+		created() {
+					console.log(window.location.href);
+		},
+		mounted() {
+	
+		},
+		methods:{
+			
+		}
+	};
+</script>
+
+<style>
+</style>

+ 27 - 0
src/views/guide.vue

@@ -0,0 +1,27 @@
+<template>
+	<div class="all">
+		向导
+	</div>
+</template>
+
+<script>
+</script>
+
+<style>
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+
+		},
+		methods:{
+			
+		}
+	};
+</style>

+ 25 - 0
src/views/initialPoint.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>初始分</div>
+</template>
+
+<script>
+</script>
+
+<style>
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+
+		},
+		methods:{
+			
+		}
+	};
+</style>

+ 25 - 0
src/views/jurisdiction.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>向导</div>
+</template>
+
+<script>
+</script>
+
+<style>
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+
+		},
+		methods:{
+			
+		}
+	};
+</style>

+ 188 - 0
src/views/rule.vue

@@ -0,0 +1,188 @@
+<template>
+	<div>
+		<!-- 头部提示 -->
+		<el-alert class="diy-tip" title="如何使用积分规则?" type="success" @close="tips_close" v-if="tips_show" description show-icon>
+			<p>先【添加规则分类】,再【添加规则】;或者直接【导入规则】</p>
+		</el-alert>
+		<div class="all">
+			<div class="flex-box">
+				<div class="terr-left">
+					<el-button size="medium" @click="add_class" type="primary">+ 添加规则分类</el-button>
+					<div class="rule_class_box">
+						<el-tree :data="data" class="cate-tree" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+					</div>
+				</div>
+				<div class="terr-right border-right flex-1">
+					<div class="flex-box">
+						
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			tips_show: true,
+			rule_tree: [],
+			item_list: [],
+			data: [
+				{
+					label: '一级 1',
+					children: [
+						{
+							label: '二级 1-1',
+							children: [
+								{
+									label: '三级 1-1-1'
+								}
+							]
+						}
+					]
+				},
+				{
+					label: '一级 2',
+					children: [
+						{
+							label: '二级 2-1',
+							children: [
+								{
+									label: '三级 2-1-1'
+								}
+							]
+						},
+						{
+							label: '二级 2-2',
+							children: [
+								{
+									label: '三级 2-2-1'
+								}
+							]
+						}
+					]
+				},
+				{
+					label: '一级 3',
+					children: [
+						{
+							label: '二级 3-1',
+							children: [
+								{
+									label: '三级 3-1-1'
+								}
+							]
+						},
+						{
+							label: '二级 3-2',
+							children: [
+								{
+									label: '三级 3-2-1'
+								}
+							]
+						}
+					]
+				}
+			],
+			defaultProps: {
+				children: 'children',
+				label: 'label'
+			}
+		};
+	},
+	created() {
+		console.log(this.$getTyps());
+		this.getData();
+	},
+	mounted() {
+		this.$nextTick(function() {
+			if (localStorage.getItem('rule')) {
+				this.tips_show = false;
+			} else {
+				this.tips_show = true;
+			}
+		});
+	},
+	methods: {
+		handleNodeClick() {},
+		getData() {
+			var that = this;
+			this.$axios.get('api/integral/rule/trees', { cycle_type: 1 }).then(res => {
+				that.rule_tree = res.data.data.rule_tree;
+				that.item_list = res.data.data.item_list;
+			});
+		},
+		//关闭提示
+		tips_close() {
+			localStorage.setItem('rule', 'true');
+			this.tips_show = false;
+		},
+		add_class() {}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+
+  // /deep/.el-tree-node__expand-icon.is-leaf {
+  //   color: inherit !important;
+  // }
+  // .text-center{
+  //   text-align: center;
+  // }
+  // .cate-tree /deep/ .is-focusable .el-tree-node__content:hover{
+  //   background:#F5F7FA !important;
+  // }
+  // // wei_left_nav
+  .rule_class_box{
+    ::v-deep .el-tree-node{
+      border-bottom:1px #f8f8f8 solid;
+    }
+    ::v-deep .el-tree-node__content{
+      height:46px;
+      line-height:46px;
+    }
+    ::v-deep .is-current .el-tree-node__content .el-icon-caret-right{
+      color:#409EFF !important;
+    }
+    ::v-deep .is-current .el-tree-node__content .el-tree-node__label{
+      color:#409EFF !important;
+    }
+    ::v-deep .is-current .el-tree-node__children .el-icon-caret-right{
+      color:#C0C4CC !important;
+    }
+	::v-deep .is-current .el-tree-node__children .el-tree-node__label{
+      color:#606266 !important;
+    }
+  }
+.diy-tip {
+	margin-bottom: 15px;
+	background: #f0f9eb !important;
+	color: #67c23a !important;
+	border: 1px solid #67c23a;
+	padding: 20px 16px;
+}
+.terr-left {
+	width: 180px;
+	padding: 20px 10px;
+}
+.terr-left button{
+	margin: 0 auto;
+	display: block;
+	margin-bottom: 20px;
+}
+.border-right:after {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 1px;
+	background: #ebeef5;
+}
+.border-right {
+	position: relative;
+}
+</style>

+ 25 - 0
src/views/voluntarilyPoint.vue

@@ -0,0 +1,25 @@
+<template>
+	<div>自动积分</div>
+</template>
+
+<script>
+</script>
+
+<style>
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		created() {
+
+		},
+		mounted() {
+
+		},
+		methods:{
+			
+		}
+	};
+</style>

+ 19 - 0
vue.config.js

@@ -0,0 +1,19 @@
+module.exports = {
+	// 选项...
+	publicPath: './',
+	
+	productionSourceMap: false,
+	css: {
+		extract: false,
+		sourceMap: true,
+		loaderOptions: {},
+	},
+	lintOnSave: false,
+	devServer: {
+		overlay: {
+			warning: false,
+			errors: false
+		},
+		disableHostCheck: true,
+	},
+}