[Adds] 1.NO Merge branch 'master' of http://192.168.5.34:10101/r/YiYunJianZhuBetamaster
@@ -0,0 +1,79 @@ | |||
## Issues | |||
- Report issues or feature requests on [GitHub Issues](https://github.com/js-cookie/js-cookie/issues). | |||
- If reporting a bug, please add a [simplified example](http://sscce.org/). | |||
## Pull requests | |||
- Create a new topic branch for every separate change you make. | |||
- Create a test case if you are fixing a bug or implementing an important feature. | |||
- Make sure the build runs successfully. | |||
## Development | |||
### Tools | |||
We use the following tools for development: | |||
- [Qunit](http://qunitjs.com/) for tests. | |||
- [NodeJS](http://nodejs.org/download/) required to run grunt. | |||
- [Grunt](http://gruntjs.com/getting-started) for task management. | |||
### Getting started | |||
Install [NodeJS](http://nodejs.org/). | |||
Install globally grunt-cli using the following command: | |||
$ npm install -g grunt-cli | |||
Browse to the project root directory and install the dev dependencies: | |||
$ npm install -d | |||
To execute the build and tests run the following command in the root of the project: | |||
$ grunt | |||
You should see a green message in the console: | |||
Done, without errors. | |||
### Tests | |||
You can also run the tests in the browser. | |||
Start a test server from the project root: | |||
$ grunt connect:tests | |||
This will automatically open the test suite at http://127.0.0.1:10000 in the default browser, with livereload enabled. | |||
_Note: we recommend cleaning all the browser cookies before running the tests, that can avoid false positive failures._ | |||
### Automatic build | |||
You can build automatically after a file change using the following command: | |||
$ grunt watch | |||
## Integration with server-side | |||
js-cookie allows integrating the encoding test suite with solutions written in other server-side languages. To integrate successfully, the server-side solution need to execute the `test/encoding.html` file in it's integration testing routine with a web automation tool, like [Selenium](http://www.seleniumhq.org/). js-cookie test suite exposes an API to make this happen. | |||
### ?integration_baseurl | |||
Specify the base url to pass the cookies into the server through a query string. If `integration_baseurl` query is not present, then js-cookie will assume there's no server. | |||
### window.global_test_results | |||
After the test suite has finished, js-cookie exposes the global `window.global_test_results` property containing an Object Literal that represents the [QUnit's details](http://api.qunitjs.com/QUnit.done/). js-cookie also adds an additional property representing an Array containing the tests data. | |||
### Handling requests | |||
When js-cookie encoding tests are executed, it will request a url in the server through an iframe representing each test being run. js-cookie expects the server to handle the input and return the proper `Set-Cookie` headers in the response. js-cookie will then read the response and verify if the encoding is consistent with js-cookie default encoding mechanism | |||
js-cookie will send some requests to the server from the baseurl in the format `/encoding?name=<cookie>`, where `<cookie>` represents the cookie-name to be read from the request. | |||
The server should handle those requests, internally parsing the cookie from the request and writing it again. It must set an `application/json` content type containing an object literal in the content body with `name` and `value` keys, each representing the cookie-name and cookie-value decoded by the server-side implementation. | |||
If the server fails to respond with this specification in any request, the related QUnit test will fail. This is to make sure the server-side implementation will always be in sync with js-cookie encoding tests for maximum compatibility. | |||
### Projects using it | |||
This hook is being used in the following projects: | |||
* [Java Cookie](https://github.com/js-cookie/java-cookie). |
@@ -0,0 +1,20 @@ | |||
Copyright 2014 Klaus Hartl | |||
Permission is hereby granted, free of charge, to any person obtaining | |||
a copy of this software and associated documentation files (the | |||
"Software"), to deal in the Software without restriction, including | |||
without limitation the rights to use, copy, modify, merge, publish, | |||
distribute, sublicense, and/or sell copies of the Software, and to | |||
permit persons to whom the Software is furnished to do so, subject to | |||
the following conditions: | |||
The above copyright notice and this permission notice shall be | |||
included in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@@ -0,0 +1,304 @@ | |||
<p align="center"> | |||
<img src="https://cloud.githubusercontent.com/assets/835857/14581711/ba623018-0436-11e6-8fce-d2ccd4d379c9.gif"> | |||
</p> | |||
# JavaScript Cookie [](https://travis-ci.org/js-cookie/js-cookie) [](https://codeclimate.com/github/js-cookie/js-cookie) [](https://www.jsdelivr.com/package/npm/js-cookie) | |||
A simple, lightweight JavaScript API for handling cookies | |||
* Works in [all](https://saucelabs.com/u/js-cookie) browsers | |||
* Accepts [any](#encoding) character | |||
* [Heavily](test) tested | |||
* No dependency | |||
* [Unobtrusive](#json) JSON support | |||
* Supports AMD/CommonJS | |||
* [RFC 6265](https://tools.ietf.org/html/rfc6265) compliant | |||
* Useful [Wiki](https://github.com/js-cookie/js-cookie/wiki) | |||
* Enable [custom encoding/decoding](#converters) | |||
* **~900 bytes** gzipped! | |||
**If you're viewing this at https://github.com/js-cookie/js-cookie, you're reading the documentation for the master branch. | |||
[View documentation for the latest release.](https://github.com/js-cookie/js-cookie/tree/latest#readme)** | |||
## Build Status Matrix | |||
[](https://saucelabs.com/u/js-cookie) | |||
## Installation | |||
### Direct download | |||
Download the script [here](https://github.com/js-cookie/js-cookie/blob/latest/src/js.cookie.js) and include it (unless you are packaging scripts somehow else): | |||
```html | |||
<script src="/path/to/js.cookie.js"></script> | |||
``` | |||
Or include it via [jsDelivr CDN](https://www.jsdelivr.com/package/npm/js-cookie): | |||
```html | |||
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script> | |||
``` | |||
**Do not include the script directly from GitHub (http://raw.github.com/...).** The file is being served as text/plain and as such being blocked | |||
in Internet Explorer on Windows 7 for instance (because of the wrong MIME type). Bottom line: GitHub is not a CDN. | |||
### Package Managers | |||
JavaScript Cookie supports [npm](https://www.npmjs.com/package/js-cookie) and [Bower](http://bower.io/search/?q=js-cookie) under the name `js-cookie`. | |||
### Module Loaders | |||
JavaScript Cookie can also be loaded as an AMD, CommonJS or [ES6](https://github.com/js-cookie/js-cookie/issues/233#issuecomment-233187386) module. | |||
## Basic Usage | |||
Create a cookie, valid across the entire site: | |||
```javascript | |||
Cookies.set('name', 'value'); | |||
``` | |||
Create a cookie that expires 7 days from now, valid across the entire site: | |||
```javascript | |||
Cookies.set('name', 'value', { expires: 7 }); | |||
``` | |||
Create an expiring cookie, valid to the path of the current page: | |||
```javascript | |||
Cookies.set('name', 'value', { expires: 7, path: '' }); | |||
``` | |||
Read cookie: | |||
```javascript | |||
Cookies.get('name'); // => 'value' | |||
Cookies.get('nothing'); // => undefined | |||
``` | |||
Read all visible cookies: | |||
```javascript | |||
Cookies.get(); // => { name: 'value' } | |||
``` | |||
Delete cookie: | |||
```javascript | |||
Cookies.remove('name'); | |||
``` | |||
Delete a cookie valid to the path of the current page: | |||
```javascript | |||
Cookies.set('name', 'value', { path: '' }); | |||
Cookies.remove('name'); // fail! | |||
Cookies.remove('name', { path: '' }); // removed! | |||
``` | |||
*IMPORTANT! when deleting a cookie, you must pass the exact same path and domain attributes that was used to set the cookie, unless you're relying on the [default attributes](#cookie-attributes).* | |||
*Note: Removing unexisting cookie does not raise any exception nor return any value* | |||
## Namespace conflicts | |||
If there is any danger of a conflict with the namespace `Cookies`, the `noConflict` method will allow you to define a new namespace and preserve the original one. This is especially useful when running the script on third party sites e.g. as part of a widget or SDK. | |||
```javascript | |||
// Assign the js-cookie api to a different variable and restore the original "window.Cookies" | |||
var Cookies2 = Cookies.noConflict(); | |||
Cookies2.set('name', 'value'); | |||
``` | |||
*Note: The `.noConflict` method is not necessary when using AMD or CommonJS, thus it is not exposed in those environments.* | |||
## JSON | |||
js-cookie provides unobtrusive JSON storage for cookies. | |||
When creating a cookie you can pass an Array or Object Literal instead of a string in the value. If you do so, js-cookie will store the string representation of the object according to `JSON.stringify`: | |||
```javascript | |||
Cookies.set('name', { foo: 'bar' }); | |||
``` | |||
When reading a cookie with the default `Cookies.get` api, you receive the string representation stored in the cookie: | |||
```javascript | |||
Cookies.get('name'); // => '{"foo":"bar"}' | |||
``` | |||
```javascript | |||
Cookies.get(); // => { name: '{"foo":"bar"}' } | |||
``` | |||
When reading a cookie with the `Cookies.getJSON` api, you receive the parsed representation of the string stored in the cookie according to `JSON.parse`: | |||
```javascript | |||
Cookies.getJSON('name'); // => { foo: 'bar' } | |||
``` | |||
```javascript | |||
Cookies.getJSON(); // => { name: { foo: 'bar' } } | |||
``` | |||
*Note: To support IE6-7 ([and IE 8 compatibility mode](http://stackoverflow.com/questions/4715373/json-object-undefined-in-internet-explorer-8)) you need to include the JSON-js polyfill: https://github.com/douglascrockford/JSON-js* | |||
## Encoding | |||
This project is [RFC 6265](http://tools.ietf.org/html/rfc6265#section-4.1.1) compliant. All special characters that are not allowed in the cookie-name or cookie-value are encoded with each one's UTF-8 Hex equivalent using [percent-encoding](http://en.wikipedia.org/wiki/Percent-encoding). | |||
The only character in cookie-name or cookie-value that is allowed and still encoded is the percent `%` character, it is escaped in order to interpret percent input as literal. | |||
Please note that the default encoding/decoding strategy is meant to be interoperable [only between cookies that are read/written by js-cookie](https://github.com/js-cookie/js-cookie/pull/200#discussion_r63270778). To override the default encoding/decoding strategy you need to use a [converter](#converters). | |||
## Cookie Attributes | |||
Cookie attributes defaults can be set globally by setting properties of the `Cookies.defaults` object or individually for each call to `Cookies.set(...)` by passing a plain object in the last argument. Per-call attributes override the default attributes. | |||
### expires | |||
Define when the cookie will be removed. Value can be a [`Number`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) which will be interpreted as days from time of creation or a [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. If omitted, the cookie becomes a session cookie. | |||
To create a cookie that expires in less than a day, you can check the [FAQ on the Wiki](https://github.com/js-cookie/js-cookie/wiki/Frequently-Asked-Questions#expire-cookies-in-less-than-a-day). | |||
**Default:** Cookie is removed when the user closes the browser. | |||
**Examples:** | |||
```javascript | |||
Cookies.set('name', 'value', { expires: 365 }); | |||
Cookies.get('name'); // => 'value' | |||
Cookies.remove('name'); | |||
``` | |||
### path | |||
A [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) indicating the path where the cookie is visible. | |||
**Default:** `/` | |||
**Examples:** | |||
```javascript | |||
Cookies.set('name', 'value', { path: '' }); | |||
Cookies.get('name'); // => 'value' | |||
Cookies.remove('name', { path: '' }); | |||
``` | |||
**Note regarding Internet Explorer:** | |||
> Due to an obscure bug in the underlying WinINET InternetGetCookie implementation, IE’s document.cookie will not return a cookie if it was set with a path attribute containing a filename. | |||
(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx)) | |||
This means one cannot set a path using `path: window.location.pathname` in case such pathname contains a filename like so: `/check.html` (or at least, such cookie cannot be read correctly). | |||
### domain | |||
A [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) indicating a valid domain where the cookie should be visible. The cookie will also be visible to all subdomains. | |||
**Default:** Cookie is visible only to the domain or subdomain of the page where the cookie was created, except for Internet Explorer (see below). | |||
**Examples:** | |||
Assuming a cookie that is being created on `site.com`: | |||
```javascript | |||
Cookies.set('name', 'value', { domain: 'subdomain.site.com' }); | |||
Cookies.get('name'); // => undefined (need to read at 'subdomain.site.com') | |||
``` | |||
**Note regarding Internet Explorer default behavior:** | |||
> Q3: If I don’t specify a DOMAIN attribute (for) a cookie, IE sends it to all nested subdomains anyway? | |||
> A: Yes, a cookie set on example.com will be sent to sub2.sub1.example.com. | |||
> Internet Explorer differs from other browsers in this regard. | |||
(From [Internet Explorer Cookie Internals (FAQ)](http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx)) | |||
This means that if you omit the `domain` attribute, it will be visible for a subdomain in IE. | |||
### secure | |||
Either `true` or `false`, indicating if the cookie transmission requires a secure protocol (https). | |||
**Default:** No secure protocol requirement. | |||
**Examples:** | |||
```javascript | |||
Cookies.set('name', 'value', { secure: true }); | |||
Cookies.get('name'); // => 'value' | |||
Cookies.remove('name'); | |||
``` | |||
## Converters | |||
### Read | |||
Create a new instance of the api that overrides the default decoding implementation. | |||
All get methods that rely in a proper decoding to work, such as `Cookies.get()` and `Cookies.get('name')`, will run the converter first for each cookie. | |||
The returning String will be used as the cookie value. | |||
Example from reading one of the cookies that can only be decoded using the `escape` function: | |||
```javascript | |||
document.cookie = 'escaped=%u5317'; | |||
document.cookie = 'default=%E5%8C%97'; | |||
var cookies = Cookies.withConverter(function (value, name) { | |||
if ( name === 'escaped' ) { | |||
return unescape(value); | |||
} | |||
}); | |||
cookies.get('escaped'); // 北 | |||
cookies.get('default'); // 北 | |||
cookies.get(); // { escaped: '北', default: '北' } | |||
``` | |||
### Write | |||
Create a new instance of the api that overrides the default encoding implementation: | |||
```javascript | |||
Cookies.withConverter({ | |||
read: function (value, name) { | |||
// Read converter | |||
}, | |||
write: function (value, name) { | |||
// Write converter | |||
} | |||
}); | |||
``` | |||
## Server-side integration | |||
Check out the [Servers Docs](SERVER_SIDE.md) | |||
## Contributing | |||
Check out the [Contributing Guidelines](CONTRIBUTING.md) | |||
## Security | |||
For vulnerability reports, send an e-mail to `jscookieproject at gmail dot com` | |||
## Manual release steps | |||
* Increment the "version" attribute of `package.json` | |||
* Increment the version number in the `src/js.cookie.js` file | |||
* If `major` bump, update jsDelivr CDN major version link on README | |||
* Commit with the message "Release version x.x.x" | |||
* Create version tag in git | |||
* Create a github release and upload the minified file | |||
* Change the `latest` tag pointer to the latest commit | |||
* `git tag -f latest` | |||
* `git push <remote> :refs/tags/latest` | |||
* `git push origin master --tags` | |||
* Release on npm | |||
## Authors | |||
* [Klaus Hartl](https://github.com/carhartl) | |||
* [Fagner Brack](https://github.com/FagnerMartinsBrack) | |||
* And awesome [contributors](https://github.com/js-cookie/js-cookie/graphs/contributors) |
@@ -0,0 +1,107 @@ | |||
# Server-side integration | |||
There are some servers that are not compliant with the [RFC 6265](http://tools.ietf.org/html/rfc6265). For those, some characters that are not encoded by JavaScript Cookie might be treated differently. | |||
Here we document the most important server-side peculiarities and their workarounds. Feel free to send a [Pull Request](https://github.com/js-cookie/js-cookie/blob/master/CONTRIBUTING.md#pull-requests) if you see something that can be improved. | |||
*Disclaimer: This documentation is entirely based on community provided information. The examples below should be used only as a reference.* | |||
## PHP | |||
In PHP, `setcookie()` function encodes cookie values using `urlencode()` function, which applies `%`-encoding but also encodes spaces as `+` signs, [for historical reasons](http://php.net/manual/en/function.urlencode.php#function.urlencode). When cookies are read back via `$_COOKIE` or `filter_input(INPUT_COOKIE)`, they would go trough a decoding process which decodes `%`-encoded sequences and also converts `+` signs back to spaces. However, the plus (`+`) sign is valid cookie character by itself, which means that libraries that adhere to standards will interpret `+` signs differently to PHP. | |||
This presents two types of problems: | |||
1. PHP writes a cookie via `setcookie()` and all spaces get converted to `+` signs. JavaScript Cookie read `+` signs and uses them literally, since it is a valid cookie character. | |||
2. JavaScript Cookie writes a cookie with a value that contains `+` signs and stores it as is, since it is a valid cookie character. PHP read a cookie and converts `+` signs to spaces. | |||
To make both PHP and JavaScript Cookie play nicely together? | |||
**In PHP**, use `setrawcookie()` instead of `setcookie()`: | |||
```php | |||
setrawcookie($name, rawurlencode($value)); | |||
``` | |||
**In JavaScript**, use a custom converter. | |||
**Example**: | |||
```javascript | |||
var PHPCookies = Cookies.withConverter({ | |||
write: function (value) { | |||
// Encode all characters according to the "encodeURIComponent" spec | |||
return encodeURIComponent(value) | |||
// Revert the characters that are unnecessarly encoded but are | |||
// allowed in a cookie value, except for the plus sign (%2B) | |||
.replace(/%(23|24|26|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); | |||
}, | |||
read: function (value) { | |||
return value | |||
// Decode the plus sign to spaces first, otherwise "legit" encoded pluses | |||
// will be replaced incorrectly | |||
.replace(/\+/g, ' ') | |||
// Decode all characters according to the "encodeURIComponent" spec | |||
.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); | |||
} | |||
}); | |||
``` | |||
Rack seems to have [a similar problem](https://github.com/js-cookie/js-cookie/issues/70#issuecomment-132503017). | |||
## Tomcat | |||
### Version >= 7.x | |||
It seems that there is a situation where Tomcat does not [read the parens correctly](https://github.com/js-cookie/js-cookie/issues/92#issue-107743407). To fix this you need to write a custom write converter. | |||
**Example**: | |||
```javascript | |||
var TomcatCookies = Cookies.withConverter({ | |||
write: function (value) { | |||
// Encode all characters according to the "encodeURIComponent" spec | |||
return encodeURIComponent(value) | |||
// Revert the characters that are unnecessarly encoded but are | |||
// allowed in a cookie value | |||
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent) | |||
// Encode the parens that are interpreted incorrectly by Tomcat | |||
.replace(/[\(\)]/g, escape); | |||
} | |||
}); | |||
``` | |||
### Version >= 8.0.15 | |||
Since Tomcat 8.0.15, it is possible to configure RFC 6265 compliance by changing your `conf/context.xml` file and adding the new [CookieProcessor](https://tomcat.apache.org/tomcat-8.0-doc/config/cookie-processor.html) nested inside the Context element. It would be like this: | |||
```xml | |||
<Context> | |||
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"/> | |||
</context> | |||
``` | |||
And you're all done. | |||
Alternatively, you can check the [Java Cookie](https://github.com/js-cookie/java-cookie) project, which integrates nicely with JavaScript Cookie. | |||
## JBoss 7.1.1 | |||
It seems that the servlet implementation of JBoss 7.1.1 [does not read some characters correctly](https://github.com/js-cookie/js-cookie/issues/70#issuecomment-148944674), even though they are allowed as per [RFC 6265](https://tools.ietf.org/html/rfc6265#section-4.1.1). To fix this you need to write a custom converter to send those characters correctly. | |||
**Example**: | |||
```javascript | |||
var JBossCookies = Cookies.withConverter({ | |||
write: function (value) { | |||
// Encode all characters according to the "encodeURIComponent" spec | |||
return encodeURIComponent(value) | |||
// Revert the characters that are unnecessarly encoded but are | |||
// allowed in a cookie value | |||
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent) | |||
// Encode again the characters that are not allowed in JBoss 7.1.1, like "[" and "]": | |||
.replace(/[\[\]]/g, encodeURIComponent); | |||
} | |||
}); | |||
``` | |||
Alternatively, you can check the [Java Cookie](https://github.com/js-cookie/java-cookie) project, which integrates nicely with JavaScript Cookie. |
@@ -0,0 +1,80 @@ | |||
{ | |||
"_from": "js-cookie@2.2.0", | |||
"_id": "js-cookie@2.2.0", | |||
"_inBundle": false, | |||
"_integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=", | |||
"_location": "/js-cookie", | |||
"_phantomChildren": {}, | |||
"_requested": { | |||
"type": "version", | |||
"registry": true, | |||
"raw": "js-cookie@2.2.0", | |||
"name": "js-cookie", | |||
"escapedName": "js-cookie", | |||
"rawSpec": "2.2.0", | |||
"saveSpec": null, | |||
"fetchSpec": "2.2.0" | |||
}, | |||
"_requiredBy": [ | |||
"/" | |||
], | |||
"_resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", | |||
"_shasum": "1b2c279a6eece380a12168b92485265b35b1effb", | |||
"_spec": "js-cookie@2.2.0", | |||
"_where": "D:\\case\\web\\vue-admin-tab", | |||
"author": { | |||
"name": "Klaus Hartl" | |||
}, | |||
"bugs": { | |||
"url": "https://github.com/js-cookie/js-cookie/issues" | |||
}, | |||
"bundleDependencies": false, | |||
"deprecated": false, | |||
"description": "A simple, lightweight JavaScript API for handling cookies", | |||
"devDependencies": { | |||
"grunt": "1.0.1", | |||
"grunt-compare-size": "0.4.2", | |||
"grunt-contrib-connect": "1.0.2", | |||
"grunt-contrib-jshint": "1.1.0", | |||
"grunt-contrib-nodeunit": "1.0.0", | |||
"grunt-contrib-qunit": "2.0.0", | |||
"grunt-contrib-uglify": "2.3.0", | |||
"grunt-contrib-watch": "1.0.0", | |||
"grunt-jscs": "3.0.1", | |||
"grunt-saucelabs": "9.0.0", | |||
"gzip-js": "0.3.2", | |||
"qunitjs": "1.23.1", | |||
"requirejs": "2.3.5" | |||
}, | |||
"directories": { | |||
"test": "test" | |||
}, | |||
"files": [ | |||
"src/**/*.js", | |||
"SERVER_SIDE.md", | |||
"CONTRIBUTING.md" | |||
], | |||
"homepage": "https://github.com/js-cookie/js-cookie#readme", | |||
"keywords": [ | |||
"jquery-plugin", | |||
"cookie", | |||
"cookies", | |||
"browser", | |||
"amd", | |||
"commonjs", | |||
"client", | |||
"js-cookie", | |||
"browserify" | |||
], | |||
"license": "MIT", | |||
"main": "src/js.cookie.js", | |||
"name": "js-cookie", | |||
"repository": { | |||
"type": "git", | |||
"url": "git://github.com/js-cookie/js-cookie.git" | |||
}, | |||
"scripts": { | |||
"test": "grunt test" | |||
}, | |||
"version": "2.2.0" | |||
} |
@@ -0,0 +1,165 @@ | |||
/*! | |||
* JavaScript Cookie v2.2.0 | |||
* https://github.com/js-cookie/js-cookie | |||
* | |||
* Copyright 2006, 2015 Klaus Hartl & Fagner Brack | |||
* Released under the MIT license | |||
*/ | |||
;(function (factory) { | |||
var registeredInModuleLoader = false; | |||
if (typeof define === 'function' && define.amd) { | |||
define(factory); | |||
registeredInModuleLoader = true; | |||
} | |||
if (typeof exports === 'object') { | |||
module.exports = factory(); | |||
registeredInModuleLoader = true; | |||
} | |||
if (!registeredInModuleLoader) { | |||
var OldCookies = window.Cookies; | |||
var api = window.Cookies = factory(); | |||
api.noConflict = function () { | |||
window.Cookies = OldCookies; | |||
return api; | |||
}; | |||
} | |||
}(function () { | |||
function extend () { | |||
var i = 0; | |||
var result = {}; | |||
for (; i < arguments.length; i++) { | |||
var attributes = arguments[ i ]; | |||
for (var key in attributes) { | |||
result[key] = attributes[key]; | |||
} | |||
} | |||
return result; | |||
} | |||
function init (converter) { | |||
function api (key, value, attributes) { | |||
var result; | |||
if (typeof document === 'undefined') { | |||
return; | |||
} | |||
// Write | |||
if (arguments.length > 1) { | |||
attributes = extend({ | |||
path: '/' | |||
}, api.defaults, attributes); | |||
if (typeof attributes.expires === 'number') { | |||
var expires = new Date(); | |||
expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); | |||
attributes.expires = expires; | |||
} | |||
// We're using "expires" because "max-age" is not supported by IE | |||
attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; | |||
try { | |||
result = JSON.stringify(value); | |||
if (/^[\{\[]/.test(result)) { | |||
value = result; | |||
} | |||
} catch (e) {} | |||
if (!converter.write) { | |||
value = encodeURIComponent(String(value)) | |||
.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); | |||
} else { | |||
value = converter.write(value, key); | |||
} | |||
key = encodeURIComponent(String(key)); | |||
key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); | |||
key = key.replace(/[\(\)]/g, escape); | |||
var stringifiedAttributes = ''; | |||
for (var attributeName in attributes) { | |||
if (!attributes[attributeName]) { | |||
continue; | |||
} | |||
stringifiedAttributes += '; ' + attributeName; | |||
if (attributes[attributeName] === true) { | |||
continue; | |||
} | |||
stringifiedAttributes += '=' + attributes[attributeName]; | |||
} | |||
return (document.cookie = key + '=' + value + stringifiedAttributes); | |||
} | |||
// Read | |||
if (!key) { | |||
result = {}; | |||
} | |||
// To prevent the for loop in the first place assign an empty array | |||
// in case there are no cookies at all. Also prevents odd result when | |||
// calling "get()" | |||
var cookies = document.cookie ? document.cookie.split('; ') : []; | |||
var rdecode = /(%[0-9A-Z]{2})+/g; | |||
var i = 0; | |||
for (; i < cookies.length; i++) { | |||
var parts = cookies[i].split('='); | |||
var cookie = parts.slice(1).join('='); | |||
if (!this.json && cookie.charAt(0) === '"') { | |||
cookie = cookie.slice(1, -1); | |||
} | |||
try { | |||
var name = parts[0].replace(rdecode, decodeURIComponent); | |||
cookie = converter.read ? | |||
converter.read(cookie, name) : converter(cookie, name) || | |||
cookie.replace(rdecode, decodeURIComponent); | |||
if (this.json) { | |||
try { | |||
cookie = JSON.parse(cookie); | |||
} catch (e) {} | |||
} | |||
if (key === name) { | |||
result = cookie; | |||
break; | |||
} | |||
if (!key) { | |||
result[name] = cookie; | |||
} | |||
} catch (e) {} | |||
} | |||
return result; | |||
} | |||
api.set = api; | |||
api.get = function (key) { | |||
return api.call(api, key); | |||
}; | |||
api.getJSON = function () { | |||
return api.apply({ | |||
json: true | |||
}, [].slice.call(arguments)); | |||
}; | |||
api.defaults = {}; | |||
api.remove = function (key, attributes) { | |||
api(key, '', extend(attributes, { | |||
expires: -1 | |||
})); | |||
}; | |||
api.withConverter = init; | |||
return api; | |||
} | |||
return init(function () {}); | |||
})); |
@@ -13,12 +13,14 @@ import axios from 'axios' | |||
// 引入lazyload | |||
import VueLazyload from 'vue-lazyload' | |||
import 'babel-polyfill' | |||
import Cookies from 'js-cookie' | |||
axios.defaults.withCredentials = true | |||
import qs from 'qs'; | |||
Vue.use(ElementUI) | |||
Vue.use(VueLazyload); | |||
Vue.prototype.$axios = axios; | |||
Vue.prototype.$qs = qs; | |||
Vue.prototype.$cookie = Cookies; | |||
//右键菜单 | |||
import VueContextMenu from '@xunlei/vue-context-menu' | |||
Vue.use(VueContextMenu) | |||
@@ -87,7 +87,7 @@ | |||
我的工作链 | |||
</button> | |||
</div> | |||
<div class="worklink"> | |||
<div :class="listUserFolders.length<8?'worklink linkcenter':'worklink linkstart'"> | |||
<div | |||
class="yuandian" | |||
v-for="(myfolder, index) in listUserFolders" | |||
@@ -172,7 +172,7 @@ | |||
class="yiyuntitle sectitle" | |||
>{{ currFolder.folderName }}</button> | |||
</div> | |||
<i | |||
<i | |||
class="icon font_family icon-icon_shezhi-jihuo rota90 workbtn workderct" | |||
v-show="!isShowworklink" | |||
@click="showWorklinkPage()" | |||
@@ -186,7 +186,6 @@ | |||
工作设置 | |||
</button> | |||
</div>--> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -9,10 +9,16 @@ | |||
<template> | |||
<div class="loginbox_warp" id="app"> | |||
<!-- 登录背景动画 --> | |||
<iframe src="../../static/img/bgAnimate/bganimat.html" frameborder="0" style="width:100%;height:98%;width:calc(100vw);height:calc(100vh);position: absolute;top:0" class="login_bg"></iframe> | |||
<iframe | |||
src="../../static/img/bgAnimate/bganimat.html" | |||
frameborder="0" | |||
style="width:100%;height:98%;width:calc(100vw);height:calc(100vh);position: absolute;top:0" | |||
class="login_bg" | |||
></iframe> | |||
<div class="LoginTitleWel"> | |||
<div class="logintitlefirst"> | |||
<span>欢迎使用</span><span>探索者协同</span> | |||
<span>欢迎使用</span> | |||
<span>探索者协同</span> | |||
</div> | |||
</div> | |||
<!-- <div class="logoarea"> | |||
@@ -20,7 +26,7 @@ | |||
<img src="/static/img/loginBox.svg" class="loginimgbordera" /> | |||
<img src="/static/img/Logo/logoA.png" alt="" class="loginimgboxImga" /> | |||
</div> | |||
</div> --> | |||
</div>--> | |||
<div class="loginbox"> | |||
<div> | |||
<!-- 第一次登录 --> | |||
@@ -53,19 +59,36 @@ | |||
<label class="loginlabel">登入</label> | |||
<form class="formlogin"> | |||
<div class="formlogin_item"> | |||
<input type="text" name="username" placeholder="请输入企业预留手机号或邮箱" class="login_input" v-model="account" /> | |||
<input | |||
type="text" | |||
name="username" | |||
placeholder="请输入企业预留手机号或邮箱" | |||
class="login_input" | |||
v-model="account" | |||
/> | |||
</div> | |||
<div class="formlogin_item"> | |||
<input type="password" name placeholder="输入登入密码" class="login_input" v-model="pwd" @keyup.enter="ToMain" /> | |||
<a href="javascript:;" class="loginlabel_resit" v-on:click="backPassword" v-if="account != ''">忘记密码</a> | |||
<input | |||
type="password" | |||
name | |||
placeholder="输入登入密码" | |||
class="login_input" | |||
v-model="pwd" | |||
@keyup.enter="ToMain" | |||
/> | |||
<a | |||
href="javascript:;" | |||
class="loginlabel_resit" | |||
v-on:click="backPassword" | |||
v-if="account != ''" | |||
>忘记密码</a> | |||
</div> | |||
<div class="worningalert" v-if="errTips == true">{{tipmgs}}</div> | |||
</form> | |||
</div> | |||
<div class="worningalert" v-if="errTips == true">{{tipmgs}}</div> | |||
<el-checkbox v-model="isRemember" class="login_checkBox mt-10">记住密码</el-checkbox> | |||
<div> | |||
<button class="login_btn" @click="ToMain" @keyup.enter.native="ToMain"> | |||
登入 | |||
</button> | |||
<button class="login_btn" @click="ToMain" @keyup.enter.native="ToMain">登入</button> | |||
<a class="login_btn_defualt" v-on:click="loginBackManage">切换至后台登入</a> | |||
</div> | |||
</div> | |||
@@ -75,19 +98,37 @@ | |||
<label class="loginlabel">登入后台</label> | |||
<form name="formName" class="formlogin"> | |||
<div class="formlogin_item"> | |||
<input type="text" name="inputName" value placeholder="请输入企业预留手机号或邮箱" class="login_input" v-model="account" /> | |||
<input | |||
type="text" | |||
name="inputName" | |||
value | |||
placeholder="请输入企业预留手机号或邮箱" | |||
class="login_input" | |||
v-model="account" | |||
/> | |||
</div> | |||
<div class="formlogin_item"> | |||
<input type="password" name placeholder="请输入登入密码" class="login_input" v-model="pwd" @keyup.enter="ToMain" /> | |||
<a href="javascript:;" class="loginlabel_resit" v-on:click="backPassword" v-if="account != ''">忘记密码</a> | |||
<input | |||
type="password" | |||
name | |||
placeholder="请输入登入密码" | |||
class="login_input" | |||
v-model="pwd" | |||
@keyup.enter="ToMain" | |||
/> | |||
<a | |||
href="javascript:;" | |||
class="loginlabel_resit" | |||
v-on:click="backPassword" | |||
v-if="account != ''" | |||
>忘记密码</a> | |||
</div> | |||
<div class="worningalert" v-if="errTips == true">{{tipmgs}}</div> | |||
</form> | |||
</div> | |||
<div class="worningalert" v-if="errTips == true">{{tipmgs}}</div> | |||
<el-checkbox v-model="isRemember" class="login_checkBox mt-10">记住密码</el-checkbox> | |||
<div> | |||
<button class="login_btn" @click="ToMain" @keyup.enter.native="ToMain"> | |||
登入 | |||
</button> | |||
<button class="login_btn" @click="ToMain" @keyup.enter.native="ToMain">登入</button> | |||
<a class="login_btn_defualt" v-on:click="loginPage">切换至平台登入</a> | |||
</div> | |||
</div> | |||
@@ -98,7 +139,13 @@ | |||
<i class="icon font_family icon-icon_fanhui combackreturn" v-on:click="loginPage"></i>输入账号 | |||
</label> | |||
<form class="formlogin"> | |||
<input type="text" name placeholder="请输入企业预留手机号或邮箱" v-model="phoneNumber" class="login_input" /> | |||
<input | |||
type="text" | |||
name | |||
placeholder="请输入企业预留手机号或邮箱" | |||
v-model="phoneNumber" | |||
class="login_input" | |||
/> | |||
</form> | |||
</div> | |||
<div> | |||
@@ -130,12 +177,25 @@ | |||
</label> | |||
<form class="formlogin"> | |||
<div class="formlogin_item"> | |||
<input type="text" name placeholder="输入新密码" class="login_input" v-model="firstNewPwd" /> | |||
<input | |||
type="text" | |||
name | |||
placeholder="输入新密码" | |||
class="login_input" | |||
v-model="firstNewPwd" | |||
/> | |||
</div> | |||
<div class="formlogin_item"> | |||
<input type="password" name placeholder="确认新密码" class="login_input" v-model="enterNewPwd" @input="checkPwd()" /> | |||
<input | |||
type="password" | |||
name | |||
placeholder="确认新密码" | |||
class="login_input" | |||
v-model="enterNewPwd" | |||
@input="checkPwd()" | |||
/> | |||
<span class="yyerrtip">{{ checkPwdTip }}</span> | |||
<!-- //dhj 也可以内置在input里面,方法二选一吧 --> | |||
<!-- //dhj 也可以内置在input里面,方法二选一吧 --> | |||
</div> | |||
</form> | |||
</div> | |||
@@ -148,17 +208,80 @@ | |||
</div> | |||
</template> | |||
<style> | |||
.login_bg { | |||
width: 100%; | |||
height: 99%; | |||
} | |||
.login_bg { | |||
width: 100%; | |||
height: 99%; | |||
} | |||
.login_checkBox .el-checkbox__inner { | |||
width: 16px; | |||
height: 16px; | |||
border-radius: 3px; | |||
} | |||
.login_checkBox .el-checkbox__inner::after { | |||
border: 1px solid #fff; | |||
border-top: 0; | |||
border-left: 0; | |||
height: 9px; | |||
left: 3px; | |||
top: 0px; | |||
width: 5px; | |||
} | |||
</style> | |||
<script> | |||
import BtnSmsCode from "./components/BtnSmsCode/BtnSmsCode.vue"; | |||
export default { | |||
components: { | |||
BtnSmsCode | |||
import BtnSmsCode from "./components/BtnSmsCode/BtnSmsCode.vue"; | |||
export default { | |||
components: { | |||
BtnSmsCode | |||
}, | |||
data() { | |||
return { | |||
filelist: [], | |||
login: true, | |||
regist: false, | |||
errTips: false, | |||
tipmgs: "", | |||
account: "", | |||
pwd: "", | |||
loginShow: 1, | |||
isBackground: false, | |||
phoneNumber: "", //手机号码 | |||
firstNewPwd: "", //初次输入密码 | |||
enterNewPwd: "", //确认密码 | |||
checkPwdTip: "", //检测提示 | |||
phoneCode: "", //手机验证码 | |||
isRemember: false, //记住密码 | |||
isClient: false //是否是客户端 | |||
}; | |||
}, | |||
beforeRouteLeave(to, from, next) { | |||
sessionStorage.login = from.name; | |||
next(); | |||
}, | |||
created: function() { | |||
sessionStorage.login = ""; | |||
}, | |||
mounted: function() { | |||
this.loadRemember(); | |||
}, | |||
methods: { | |||
/** | |||
* @description: 获取记住密码 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
loadRemember() { | |||
if (this.$cookie.get("remember")) { | |||
this.account = this.$cookie.get("account"); | |||
this.pwd = this.$cookie.get("pwd"); | |||
this.isBackground = true; | |||
var backgroundValue = this.$cookie.get("background"); | |||
if (backgroundValue == "false") { | |||
this.isBackground = false; | |||
} | |||
this.isRemember = true; | |||
} | |||
}, | |||
<<<<<<< .mine | |||
data() { | |||
return { | |||
filelist: [], | |||
@@ -177,66 +300,122 @@ | |||
phoneCode: "", //手机验证码 | |||
isClient:true, //是否是客户端 | |||
}; | |||
======= | |||
/** | |||
* @description: 找回密码 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
backPassword: function() { | |||
this.loginShow = 3; | |||
>>>>>>> .theirs | |||
}, | |||
beforeRouteLeave(to, from, next) { | |||
sessionStorage.login = from.name; | |||
next(); | |||
/** | |||
* @description: 上一步 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
prev: function() { | |||
this.loginShow = 3; | |||
}, | |||
created: function () { | |||
sessionStorage.login = ""; | |||
/** | |||
* @description: 下一步 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
next: function() { | |||
if (!/^1[3456789]\d{9}$/.test(this.phoneNumber)) { | |||
this.$notify({ | |||
title: "温馨提示", | |||
message: "请检查手机号是否填写正确", | |||
type: "warning", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
} else { | |||
this.checkPhone(); | |||
} | |||
}, | |||
mounted: function () {}, | |||
methods: { | |||
/** | |||
* @description: 找回密码 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
backPassword: function () { | |||
this.loginShow = 3; | |||
}, | |||
/** | |||
* @description: 上一步 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
prev: function () { | |||
this.loginShow = 3; | |||
}, | |||
/** | |||
* @description: 下一步 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
next: function () { | |||
if (!/^1[3456789]\d{9}$/.test(this.phoneNumber)) { | |||
this.$notify({ | |||
title: "温馨提示", | |||
message: "请检查手机号是否填写正确", | |||
type: "warning", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
} else { | |||
this.checkPhone(); | |||
} | |||
}, | |||
/** | |||
* @description: 检测手机是否可用 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
checkPhone: function () { | |||
/** | |||
* @description: 检测手机是否可用 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
checkPhone: function() { | |||
var thisApp = this; | |||
this.$axios({ | |||
method: "get", | |||
url: encodeURI( | |||
process.env.API_HOST + "account/check/phone/" + thisApp.phoneNum | |||
), | |||
params: { phone: thisApp.phoneNum } | |||
}) | |||
.then(response => { | |||
if (response.data.state == 1) { | |||
thisApp.$notify({ | |||
title: "温馨提示", | |||
type: "warning", | |||
message: response.data.message, | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
thisApp.loginShow = 4; | |||
} else { | |||
thisApp.$notify.error({ | |||
title: "温馨提示", | |||
message: response.data.message, | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
} | |||
}) | |||
.catch(error => { | |||
console.log(error); | |||
}); | |||
}, | |||
loginPage: function() { | |||
this.loginShow = 1; | |||
this.isBackground = false; | |||
}, | |||
/** | |||
* @description:返回登录 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
returnLoign: function() { | |||
if (this.firstNewPwd != this.enterNewPwd) { | |||
this.$notify({ | |||
title: "温馨提示", | |||
message: "您输入的两次密码不一致", | |||
type: "warning", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
return; | |||
} else { | |||
var thisApp = this; | |||
this.$axios({ | |||
method: "get", | |||
url: encodeURI( | |||
process.env.API_HOST + "account/check/phone/" + thisApp.phoneNum | |||
), | |||
params: { phone: thisApp.phoneNum } | |||
}) | |||
.then(response => { | |||
method: "put", | |||
url: encodeURI(process.env.API_HOST + "account/pwd/phone"), | |||
data: { | |||
phone: thisApp.phoneNumber, | |||
code: thisApp.phoneCode, | |||
newPwd: thisApp.enterNewPwd | |||
} | |||
}) | |||
.then(function(response) { | |||
console.log(response.data); | |||
if (response.data.state == 1) { | |||
thisApp.$notify({ | |||
title: "温馨提示", | |||
@@ -245,7 +424,11 @@ | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
thisApp.loginShow = 4; | |||
thisApp.firstNewPwd = ""; | |||
thisApp.enterNewPwd = ""; | |||
thisApp.phoneNumber = ""; | |||
thisApp.phoneCode = ""; | |||
thisApp.loginPage(); | |||
} else { | |||
thisApp.$notify.error({ | |||
title: "温馨提示", | |||
@@ -255,192 +438,164 @@ | |||
}); | |||
} | |||
}) | |||
.catch(error => { | |||
.catch(function(error) { | |||
console.log(error); | |||
}); | |||
}, | |||
loginPage: function () { | |||
this.loginShow = 1; | |||
this.isBackground = false; | |||
}, | |||
/** | |||
* @description:返回登录 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
returnLoign: function () { | |||
if (this.firstNewPwd != this.enterNewPwd) { | |||
this.$notify({ | |||
title: "温馨提示", | |||
message: "您输入的两次密码不一致", | |||
type: "warning", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
return; | |||
} else { | |||
var thisApp = this; | |||
this.$axios({ | |||
method: "put", | |||
url: encodeURI(process.env.API_HOST + "account/pwd/phone"), | |||
data: { | |||
phone: thisApp.phoneNumber, | |||
code: thisApp.phoneCode, | |||
newPwd: thisApp.enterNewPwd | |||
} | |||
}, | |||
/** | |||
* @description: 登录探索者后台 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
loginBackManage: function() { | |||
this.loginShow = 2; | |||
this.isBackground = true; | |||
}, | |||
/** | |||
* @description: 系统登录 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
ToMain: function() { | |||
var thisApp = this; | |||
if (thisApp.account == "") { | |||
// thisApp.$notify({ | |||
// title: "温馨提示", | |||
// message: "请输入用户名", | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 2500 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = "请输入用户名!"; | |||
return; | |||
} | |||
if (thisApp.pwd == "") { | |||
// thisApp.$notify({ | |||
// title: "温馨提示", | |||
// message: "请输入密码", | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 2500 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = "请输入密码!"; | |||
return; | |||
} | |||
var param = { | |||
userName: this.account, | |||
passWord: this.pwd, | |||
isBackground: this.isBackground | |||
}; | |||
this.$axios({ | |||
method: "post", | |||
url: encodeURI(process.env.API_HOST + "account/login"), | |||
data: param | |||
}) | |||
.then(function(response) { | |||
var state = response.data.state; | |||
if (state === 1) { | |||
sessionStorage.userId = response.data.data.userID; | |||
sessionStorage.companyName = response.data.data.companyName; | |||
sessionStorage.companyId = response.data.data.companyID; | |||
sessionStorage.permission = response.data.data.permission; | |||
sessionStorage.backgroundPermission = | |||
response.data.data.backgroundPermission; | |||
sessionStorage.cnName = response.data.data.cnName; | |||
sessionStorage.userName = response.data.data.userName; | |||
sessionStorage.user = JSON.stringify(response.data.data); | |||
sessionStorage.token = response.data.data.token; | |||
sessionStorage.pageName = "index"; | |||
if (thisApp.isRemember) { | |||
thisApp.$cookie.set("remember", true); | |||
thisApp.$cookie.set("account", thisApp.account); | |||
thisApp.$cookie.set("pwd", thisApp.pwd); | |||
thisApp.$cookie.set("background", thisApp.isBackground); | |||
} else { | |||
thisApp.$cookie.remove("remember"); | |||
thisApp.$cookie.remove("account"); | |||
thisApp.$cookie.remove("pwd"); | |||
thisApp.$cookie.remove("background"); | |||
} | |||
// 客户端启动服务 | |||
if (thisApp.isClient) { | |||
var userName = sessionStorage.userName; | |||
if ( | |||
sessionStorage.userName == null || | |||
sessionStorage.userName == undefined || | |||
sessionStorage.userName == "" | |||
) { | |||
userName = response.data.data.phone; | |||
} | |||
}) | |||
.then(function (response) { | |||
console.log(response.data); | |||
if (response.data.state == 1) { | |||
thisApp.$notify({ | |||
title: "温馨提示", | |||
type: "warning", | |||
message: response.data.message, | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
thisApp.firstNewPwd = ""; | |||
thisApp.enterNewPwd = ""; | |||
thisApp.phoneNumber = ""; | |||
thisApp.phoneCode = ""; | |||
thisApp.loginPage(); | |||
back.startService( | |||
sessionStorage.userId, | |||
sessionStorage.companyId, | |||
sessionStorage.userName, | |||
response.data.data.passWord | |||
); | |||
if (thisApp.isRemember) { | |||
thisApp.$cookie.set("remember", true, {expires: 7}); | |||
thisApp.$cookie.set("account", thisApp.account, {expires: 7}); | |||
thisApp.$cookie.set("pwd", thisApp.pwd, {expires: 7}); | |||
thisApp.$cookie.set("background", thisApp.isBackground, {expires: 7}); | |||
} else { | |||
thisApp.$notify.error({ | |||
title: "温馨提示", | |||
message: response.data.message, | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
thisApp.$cookie.remove("remember"); | |||
thisApp.$cookie.remove("account"); | |||
thisApp.$cookie.remove("pwd"); | |||
thisApp.$cookie.remove("background"); | |||
} | |||
}) | |||
.catch(function (error) { | |||
console.log(error); | |||
}); | |||
} | |||
}, | |||
/** | |||
* @description: 登录探索者后台 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
loginBackManage: function () { | |||
this.loginShow = 2; | |||
this.isBackground = true; | |||
}, | |||
/** | |||
* @description: 系统登录 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
ToMain: function () { | |||
var thisApp = this; | |||
if (thisApp.account == "") { | |||
// thisApp.$notify({ | |||
// title: "温馨提示", | |||
// message: "请输入用户名", | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 2500 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = "请输入用户名!"; | |||
return; | |||
} | |||
if (thisApp.pwd == "") { | |||
// thisApp.$notify({ | |||
// title: "温馨提示", | |||
// message: "请输入密码", | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 2500 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = "请输入密码!"; | |||
return; | |||
} | |||
var param = { | |||
userName: this.account, | |||
passWord: this.pwd, | |||
isBackground: this.isBackground | |||
}; | |||
this.$axios({ | |||
method: "post", | |||
url: encodeURI(process.env.API_HOST + "account/login"), | |||
data: param | |||
}) | |||
.then(function (response) { | |||
var state = response.data.state; | |||
if (state === 1) { | |||
sessionStorage.userId = response.data.data.userID; | |||
sessionStorage.companyName = response.data.data.companyName; | |||
sessionStorage.companyId = response.data.data.companyID; | |||
sessionStorage.permission = response.data.data.permission; | |||
sessionStorage.backgroundPermission = response.data.data.backgroundPermission; | |||
sessionStorage.cnName = response.data.data.cnName; | |||
sessionStorage.userName = response.data.data.userName; | |||
sessionStorage.user = JSON.stringify(response.data.data); | |||
sessionStorage.token = response.data.data.token; | |||
sessionStorage.pageName='index'; | |||
// 客户端启动服务 | |||
if(thisApp.isClient) | |||
{ | |||
var userName=sessionStorage.userName; | |||
if(sessionStorage.userName == null || sessionStorage.userName == undefined || sessionStorage.userName =="" ) | |||
{ | |||
userName=response.data.data.phone; | |||
} | |||
back.startService(sessionStorage.userId, sessionStorage.companyId, sessionStorage.userName, response.data.data.passWord); | |||
} | |||
if (!thisApp.isBackground) { | |||
} | |||
if (!thisApp.isBackground) { | |||
thisApp.$router.push({ | |||
path: "/index" | |||
}); | |||
} else { | |||
if (sessionStorage.backgroundPermission == 3) { | |||
thisApp.$router.push({ | |||
path: "/index" | |||
path: "/system" | |||
}); | |||
} else { | |||
if (sessionStorage.backgroundPermission == 3) { | |||
thisApp.$router.push({ | |||
path: "/system" | |||
}); | |||
} else { | |||
thisApp.$router.push({ | |||
path: "/company" | |||
}); | |||
} | |||
thisApp.$router.push({ | |||
path: "/company" | |||
}); | |||
} | |||
thisApp.$notify({ | |||
title: "恭喜您", | |||
message: "登录成功!开始愉快的体验吧", | |||
type: "success", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
} else { | |||
// thisApp.$notify.error({ | |||
// title: "温馨提示5", | |||
// message: response.data.message, | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 5000 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = response.data.message; | |||
} | |||
}) | |||
.catch(function (error) { | |||
console.log(error); | |||
}); | |||
}, | |||
/** | |||
* @description: 检测两次密码是否一致 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
checkPwd: function () { | |||
if (this.firstNewPwd != this.enterNewPwd) { | |||
this.checkPwdTip = "两次密码输入不一致"; | |||
} else { | |||
this.checkPwdTip = "成功"; | |||
} | |||
thisApp.$notify({ | |||
title: "恭喜您", | |||
message: "登录成功!开始愉快的体验吧", | |||
type: "success", | |||
offset: 100, | |||
duration: 2500 | |||
}); | |||
} else { | |||
// thisApp.$notify.error({ | |||
// title: "温馨提示5", | |||
// message: response.data.message, | |||
// type: "warning", | |||
// offset: 100, | |||
// duration: 5000 | |||
// }); | |||
thisApp.errTips = true; | |||
thisApp.tipmgs = response.data.message; | |||
} | |||
}) | |||
.catch(function(error) { | |||
console.log(error); | |||
}); | |||
}, | |||
/** | |||
* @description: 检测两次密码是否一致 | |||
* @param {type} | |||
* @return: | |||
*/ | |||
checkPwd: function() { | |||
if (this.firstNewPwd != this.enterNewPwd) { | |||
this.checkPwdTip = "两次密码输入不一致"; | |||
} else { | |||
this.checkPwdTip = "成功"; | |||
} | |||
} | |||
}; | |||
} | |||
}; | |||
</script> |
@@ -295,8 +295,7 @@ | |||
<a | |||
class="yywenjiantitle-text" | |||
href="javascript:;" | |||
@click="breadNodeClickEvent(currentPageType,true)" | |||
> | |||
@click="breadNodeClickEvent(currentPageType,true)"> | |||
工作文件 | |||
<i class="el-icon-arrow-left"></i> | |||
</a> | |||
@@ -312,8 +311,7 @@ | |||
class="list-group" | |||
:list="folderGroupBreads" | |||
group="group" | |||
id="bread2" | |||
> | |||
id="bread2"> | |||
<a | |||
class="yywenjiantitle-text" | |||
v-for="item in folderGroupBreads" | |||
@@ -328,7 +326,26 @@ | |||
</span> | |||
</div> | |||
<div class="section_item section_item_aside_fl" v-if="isCommonPage"> | |||
<span class="yywenjiantitle" :class="{yyactive:true}">公共文件</span> | |||
<span class="yywenjiantitle fl" :class="{yyactive:true}" @click="breadNodeClickEvent(currentPageType,true)">公共文件</span> | |||
<span v-if="isShowBread" class="yiyun_text-title-workspace mr-20"> | |||
<i class="el-icon-arrow-left first-leftarrow fl"></i> | |||
<draggable | |||
class="list-group" | |||
:list="folderGroupBreads" | |||
group="group" | |||
id="bread3" > | |||
<a | |||
class="list-group-item yywenjiantitle-text" | |||
v-for="item in folderGroupBreads" | |||
v-bind:key="item.foldergroupID" | |||
href="javascript:;" | |||
@click="breadNodeClickEvent(item,false)" | |||
> | |||
{{ item.folderGroupName }} | |||
<i class="el-icon-arrow-left"></i> | |||
</a> | |||
</draggable> | |||
</span> | |||
</div> | |||
<!-- 右侧操作栏 --> | |||
<div class="section_item section_item_aside_fr"> | |||
@@ -2907,7 +2924,8 @@ export default { | |||
} | |||
} | |||
thisApp.nowFolder = thisApp.listUserFolders[thisApp.nowFolderIndex]; | |||
thisApp.listFiles(); | |||
//thisApp.listFiles(); | |||
setInterval(thisApp.listFiles(), 1000); | |||
// thisApp.loadMyAppInstanceList(); | |||
} | |||
}) | |||
@@ -539,9 +539,15 @@ ul { | |||
.section_item_aside_fl { | |||
/* min-height: 85px; */ | |||
width: 80%; | |||
width: 80%; | |||
/* border: 1px solid #000;*/ | |||
} | |||
.first-leftarrow{ | |||
font-size: 19px; | |||
color: #A7A8B7; | |||
position: relative; | |||
top: 4px; | |||
} | |||
.section_item_aside_ce { | |||
/*border: 1px solid #ccc;*/ | |||
@@ -7622,12 +7628,18 @@ li.secondMenu ul li:hover { | |||
} */ | |||
.worklink{ | |||
width: 100%; | |||
height: calc(100vh - 114px); | |||
text-align: center; | |||
display: flex; | |||
align-items: center; | |||
justify-content:center; | |||
overflow-y: auto; | |||
height: calc(100vh - 114px); | |||
display: flex; | |||
align-items: center; | |||
overflow-y: auto; | |||
flex-direction: row; | |||
} | |||
.linkcenter{ | |||
justify-content: center; | |||
} | |||
.linkstart{ | |||
justify-content: start; | |||
} | |||
.worklinkBtngroup{ | |||
height: 54px; | |||