wangsaitao 1 year ago
commit
1571b95221
100 changed files with 14670 additions and 0 deletions
  1. 15 0
      .editorconfig
  2. 31 0
      .gitignore
  3. 8 0
      .htaccess
  4. 6 0
      application/.htaccess
  5. 11 0
      application/cache/index.html
  6. 135 0
      application/config/autoload.php
  7. 527 0
      application/config/config.php
  8. 85 0
      application/config/constants.php
  9. 96 0
      application/config/database.php
  10. 24 0
      application/config/doctypes.php
  11. 114 0
      application/config/foreign_chars.php
  12. 13 0
      application/config/hooks.php
  13. 11 0
      application/config/index.html
  14. 19 0
      application/config/memcached.php
  15. 84 0
      application/config/migration.php
  16. 184 0
      application/config/mimes.php
  17. 14 0
      application/config/profiler.php
  18. 54 0
      application/config/routes.php
  19. 64 0
      application/config/smileys.php
  20. 216 0
      application/config/user_agents.php
  21. 57 0
      application/controllers/Account.php
  22. 103 0
      application/controllers/Home.php
  23. 149 0
      application/controllers/MyBaseController.php
  24. 185 0
      application/controllers/api/v1/ApiBase.php
  25. 39 0
      application/controllers/api/v1/User.php
  26. 11 0
      application/controllers/index.html
  27. 11 0
      application/core/index.html
  28. 114 0
      application/helpers/common_helper.php
  29. 11 0
      application/helpers/index.html
  30. 11 0
      application/hooks/index.html
  31. 11 0
      application/index.html
  32. 11 0
      application/language/english/index.html
  33. 11 0
      application/language/index.html
  34. 11 0
      application/libraries/index.html
  35. 11 0
      application/logs/index.html
  36. 11 0
      application/models/index.html
  37. 2 0
      application/session/ci_session0om0hamghi667u72ojs931rt79fa1qgk
  38. 2 0
      application/session/ci_session6m46pu8quashf3e94lvrbk2155t6rctj
  39. 1 0
      application/session/ci_sessionb9dkp22hnp1i5gavaelv7c4lskruiqt4
  40. 1 0
      application/session/ci_sessiondkcu2sd952ntoe97fhbctg5aivtvimj3
  41. 2 0
      application/session/ci_sessionga7qd8q4hgkslgcerugtk5vjfdic40c3
  42. 2 0
      application/session/ci_sessiongo8sdeoo64n35lpbhbi9teab0eq1ag4k
  43. 1 0
      application/session/ci_sessiongtk4jlmgvun7b8rjmp2ftl1pb2tr4r8q
  44. 2 0
      application/session/ci_sessionlubnnofcs2o3riquafjkid61etvqfskq
  45. 1 0
      application/session/ci_sessionmtn6c4dmf9e015olfb3jsu4lfohqvsij
  46. 2 0
      application/session/ci_sessionotlh0n0e3r06998q0o1kf4npt0nnfdas
  47. 1 0
      application/session/ci_sessionveifuv3jl93d5iq4i0bee3auqpub8cs6
  48. 11 0
      application/third_party/index.html
  49. 8 0
      application/views/errors/cli/error_404.php
  50. 8 0
      application/views/errors/cli/error_db.php
  51. 21 0
      application/views/errors/cli/error_exception.php
  52. 8 0
      application/views/errors/cli/error_general.php
  53. 21 0
      application/views/errors/cli/error_php.php
  54. 11 0
      application/views/errors/cli/index.html
  55. 64 0
      application/views/errors/html/error_404.php
  56. 64 0
      application/views/errors/html/error_db.php
  57. 32 0
      application/views/errors/html/error_exception.php
  58. 64 0
      application/views/errors/html/error_general.php
  59. 33 0
      application/views/errors/html/error_php.php
  60. 11 0
      application/views/errors/html/index.html
  61. 11 0
      application/views/errors/index.html
  62. 11 0
      application/views/index.html
  63. 894 0
      application/views/index.php
  64. 303 0
      application/views/login.php
  65. 23 0
      composer.json
  66. 93 0
      contributing.md
  67. 315 0
      index.php
  68. 21 0
      license.txt
  69. 66 0
      lis/bar.php
  70. 587 0
      public/bootstrap-3.3.5-dist/css/bootstrap-theme.css
  71. 1 0
      public/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map
  72. 5 0
      public/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css
  73. 6800 0
      public/bootstrap-3.3.5-dist/css/bootstrap.css
  74. 1 0
      public/bootstrap-3.3.5-dist/css/bootstrap.css.map
  75. 5 0
      public/bootstrap-3.3.5-dist/css/bootstrap.min.css
  76. BIN
      public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.eot
  77. 288 0
      public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.svg
  78. BIN
      public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.ttf
  79. BIN
      public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff
  80. BIN
      public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff2
  81. 2363 0
      public/bootstrap-3.3.5-dist/js/bootstrap.js
  82. 7 0
      public/bootstrap-3.3.5-dist/js/bootstrap.min.js
  83. 5 0
      public/bootstrap-3.3.5-dist/js/jquery-1.11.3.min.js
  84. 13 0
      public/bootstrap-3.3.5-dist/js/npm.js
  85. BIN
      public/elementui/fonts/element-icons.ttf
  86. BIN
      public/elementui/fonts/element-icons.woff
  87. 1 0
      public/elementui/index.min.css
  88. 1 0
      public/elementui/index.min.js
  89. 6 0
      public/elementui/vue.min.js
  90. 2 0
      public/elementui/说明.txt
  91. BIN
      public/images/bg2x.png
  92. BIN
      public/images/login2x.png
  93. BIN
      public/images/login_pw2x.png
  94. BIN
      public/images/login_user2x.png
  95. BIN
      public/images/logo.png
  96. 5 0
      public/js/jquery-1.11.3.min.js
  97. 2 0
      public/layer/layer.js
  98. BIN
      public/layer/skin/default/icon-ext.png
  99. BIN
      public/layer/skin/default/icon.png
  100. 0 0
      public/layer/skin/default/loading-0.gif

+ 15 - 0
.editorconfig

@@ -0,0 +1,15 @@
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+# Matches multiple files with brace expansion notation
+# Set default charset
+[*]
+charset = utf-8
+
+# Tab indentation (no size specified)
+indent_style = tab

+ 31 - 0
.gitignore

@@ -0,0 +1,31 @@
+.DS_Store
+
+application/cache/*
+!application/cache/index.html
+
+application/logs/*
+!application/logs/index.html
+
+!application/*/.htaccess
+
+composer.lock
+
+user_guide_src/build/*
+user_guide_src/cilexer/build/*
+user_guide_src/cilexer/dist/*
+user_guide_src/cilexer/pycilexer.egg-info/*
+/vendor/
+
+# IDE Files
+#-------------------------
+/nbproject/
+.idea/*
+
+## Sublime Text cache files
+*.tmlanguage.cache
+*.tmPreferences.cache
+*.stTheme.cache
+*.sublime-workspace
+*.sublime-project
+/tests/tests/
+/tests/results/

+ 8 - 0
.htaccess

@@ -0,0 +1,8 @@
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule !\.(js|ico|gif|jpg|png|css|swf)$ index.php [L]
+RewriteCond $1 !^(index\.php|uploads|robots\.txt)
+
+SetEnv CI_ENV development
+#SetEnv CI_ENV production

+ 6 - 0
application/.htaccess

@@ -0,0 +1,6 @@
+<IfModule authz_core_module>
+    Require all denied
+</IfModule>
+<IfModule !authz_core_module>
+    Deny from all
+</IfModule>

+ 11 - 0
application/cache/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 135 - 0
application/config/autoload.php

@@ -0,0 +1,135 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| AUTO-LOADER
+| -------------------------------------------------------------------
+| This file specifies which systems should be loaded by default.
+|
+| In order to keep the framework as light-weight as possible only the
+| absolute minimal resources are loaded by default. For example,
+| the database is not connected to automatically since no assumption
+| is made regarding whether you intend to use it.  This file lets
+| you globally define which systems you would like loaded with every
+| request.
+|
+| -------------------------------------------------------------------
+| Instructions
+| -------------------------------------------------------------------
+|
+| These are the things you can load automatically:
+|
+| 1. Packages
+| 2. Libraries
+| 3. Drivers
+| 4. Helper files
+| 5. Custom config files
+| 6. Language files
+| 7. Models
+|
+*/
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Packages
+| -------------------------------------------------------------------
+| Prototype:
+|
+|  $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
+|
+*/
+$autoload['packages'] = array();
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Libraries
+| -------------------------------------------------------------------
+| These are the classes located in system/libraries/ or your
+| application/libraries/ directory, with the addition of the
+| 'database' library, which is somewhat of a special case.
+|
+| Prototype:
+|
+|	$autoload['libraries'] = array('database', 'email', 'session');
+|
+| You can also supply an alternative library name to be assigned
+| in the controller:
+|
+|	$autoload['libraries'] = array('user_agent' => 'ua');
+*/
+$autoload['libraries'] = array();
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Drivers
+| -------------------------------------------------------------------
+| These classes are located in system/libraries/ or in your
+| application/libraries/ directory, but are also placed inside their
+| own subdirectory and they extend the CI_Driver_Library class. They
+| offer multiple interchangeable driver options.
+|
+| Prototype:
+|
+|	$autoload['drivers'] = array('cache');
+|
+| You can also supply an alternative property name to be assigned in
+| the controller:
+|
+|	$autoload['drivers'] = array('cache' => 'cch');
+|
+*/
+$autoload['drivers'] = array();
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Helper Files
+| -------------------------------------------------------------------
+| Prototype:
+|
+|	$autoload['helper'] = array('url', 'file');
+*/
+$autoload['helper'] = array('common');
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Config files
+| -------------------------------------------------------------------
+| Prototype:
+|
+|	$autoload['config'] = array('config1', 'config2');
+|
+| NOTE: This item is intended for use ONLY if you have created custom
+| config files.  Otherwise, leave it blank.
+|
+*/
+$autoload['config'] = array();
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Language files
+| -------------------------------------------------------------------
+| Prototype:
+|
+|	$autoload['language'] = array('lang1', 'lang2');
+|
+| NOTE: Do not include the "_lang" part of your file.  For example
+| "codeigniter_lang.php" would be referenced as array('codeigniter');
+|
+*/
+$autoload['language'] = array();
+
+/*
+| -------------------------------------------------------------------
+|  Auto-load Models
+| -------------------------------------------------------------------
+| Prototype:
+|
+|	$autoload['model'] = array('first_model', 'second_model');
+|
+| You can also supply an alternative model name to be assigned
+| in the controller:
+|
+|	$autoload['model'] = array('first_model' => 'first');
+*/
+$autoload['model'] = array();

+ 527 - 0
application/config/config.php

@@ -0,0 +1,527 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+|--------------------------------------------------------------------------
+| Base Site URL
+|--------------------------------------------------------------------------
+|
+| URL to your CodeIgniter root. Typically this will be your base URL,
+| WITH a trailing slash:
+|
+|	http://example.com/
+|
+| WARNING: You MUST set this value!
+|
+| If it is not set, then CodeIgniter will try guess the protocol and path
+| your installation, but due to security concerns the hostname will be set
+| to $_SERVER['SERVER_ADDR'] if available, or localhost otherwise.
+| The auto-detection mechanism exists only for convenience during
+| development and MUST NOT be used in production!
+|
+| If you need to allow multiple domains, remember that this file is still
+| a PHP script and you can easily do that on your own.
+|
+*/
+$config['base_url'] = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'];
+
+$config['api_url'] = "https://sp.guotianyunjia.com/";
+
+$config['api_url2'] = "http://119.3.168.158/";
+
+/*
+|--------------------------------------------------------------------------
+| Index File
+|--------------------------------------------------------------------------
+|
+| Typically this will be your index.php file, unless you've renamed it to
+| something else. If you are using mod_rewrite to remove the page set this
+| variable so that it is blank.
+|
+*/
+$config['index_page'] = 'index.php';
+
+/*
+|--------------------------------------------------------------------------
+| URI PROTOCOL
+|--------------------------------------------------------------------------
+|
+| This item determines which server global should be used to retrieve the
+| URI string.  The default setting of 'REQUEST_URI' works for most servers.
+| If your links do not seem to work, try one of the other delicious flavors:
+|
+| 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
+| 'QUERY_STRING'   Uses $_SERVER['QUERY_STRING']
+| 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
+|
+| WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
+*/
+$config['uri_protocol']	= 'REQUEST_URI';
+
+/*
+|--------------------------------------------------------------------------
+| URL suffix
+|--------------------------------------------------------------------------
+|
+| This option allows you to add a suffix to all URLs generated by CodeIgniter.
+| For more information please see the user guide:
+|
+| https://codeigniter.com/user_guide/general/urls.html
+*/
+$config['url_suffix'] = '';
+
+/*
+|--------------------------------------------------------------------------
+| Default Language
+|--------------------------------------------------------------------------
+|
+| This determines which set of language files should be used. Make sure
+| there is an available translation if you intend to use something other
+| than english.
+|
+*/
+$config['language']	= 'english';
+
+/*
+|--------------------------------------------------------------------------
+| Default Character Set
+|--------------------------------------------------------------------------
+|
+| This determines which character set is used by default in various methods
+| that require a character set to be provided.
+|
+| See http://php.net/htmlspecialchars for a list of supported charsets.
+|
+*/
+$config['charset'] = 'UTF-8';
+
+/*
+|--------------------------------------------------------------------------
+| Enable/Disable System Hooks
+|--------------------------------------------------------------------------
+|
+| If you would like to use the 'hooks' feature you must enable it by
+| setting this variable to TRUE (boolean).  See the user guide for details.
+|
+*/
+$config['enable_hooks'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Class Extension Prefix
+|--------------------------------------------------------------------------
+|
+| This item allows you to set the filename/classname prefix when extending
+| native libraries.  For more information please see the user guide:
+|
+| https://codeigniter.com/user_guide/general/core_classes.html
+| https://codeigniter.com/user_guide/general/creating_libraries.html
+|
+*/
+$config['subclass_prefix'] = 'MY_';
+
+/*
+|--------------------------------------------------------------------------
+| Composer auto-loading
+|--------------------------------------------------------------------------
+|
+| Enabling this setting will tell CodeIgniter to look for a Composer
+| package auto-loader script in application/vendor/autoload.php.
+|
+|	$config['composer_autoload'] = TRUE;
+|
+| Or if you have your vendor/ directory located somewhere else, you
+| can opt to set a specific path as well:
+|
+|	$config['composer_autoload'] = '/path/to/vendor/autoload.php';
+|
+| For more information about Composer, please visit http://getcomposer.org/
+|
+| Note: This will NOT disable or override the CodeIgniter-specific
+|	autoloading (application/config/autoload.php)
+*/
+$config['composer_autoload'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Allowed URL Characters
+|--------------------------------------------------------------------------
+|
+| This lets you specify which characters are permitted within your URLs.
+| When someone tries to submit a URL with disallowed characters they will
+| get a warning message.
+|
+| As a security measure you are STRONGLY encouraged to restrict URLs to
+| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
+|
+| Leave blank to allow all characters -- but only if you are insane.
+|
+| The configured value is actually a regular expression character group
+| and it will be executed as: ! preg_match('/^[<permitted_uri_chars>]+$/i
+|
+| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
+|
+*/
+$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
+
+/*
+|--------------------------------------------------------------------------
+| Enable Query Strings
+|--------------------------------------------------------------------------
+|
+| By default CodeIgniter uses search-engine friendly segment based URLs:
+| example.com/who/what/where/
+|
+| You can optionally enable standard query string based URLs:
+| example.com?who=me&what=something&where=here
+|
+| Options are: TRUE or FALSE (boolean)
+|
+| The other items let you set the query string 'words' that will
+| invoke your controllers and its functions:
+| example.com/index.php?c=controller&m=function
+|
+| Please note that some of the helpers won't work as expected when
+| this feature is enabled, since CodeIgniter is designed primarily to
+| use segment based URLs.
+|
+*/
+$config['enable_query_strings'] = FALSE;
+$config['controller_trigger'] = 'c';
+$config['function_trigger'] = 'm';
+$config['directory_trigger'] = 'd';
+
+/*
+|--------------------------------------------------------------------------
+| Allow $_GET array
+|--------------------------------------------------------------------------
+|
+| By default CodeIgniter enables access to the $_GET array.  If for some
+| reason you would like to disable it, set 'allow_get_array' to FALSE.
+|
+| WARNING: This feature is DEPRECATED and currently available only
+|          for backwards compatibility purposes!
+|
+*/
+$config['allow_get_array'] = TRUE;
+
+/*
+|--------------------------------------------------------------------------
+| Error Logging Threshold
+|--------------------------------------------------------------------------
+|
+| You can enable error logging by setting a threshold over zero. The
+| threshold determines what gets logged. Threshold options are:
+|
+|	0 = Disables logging, Error logging TURNED OFF
+|	1 = Error Messages (including PHP errors)
+|	2 = Debug Messages
+|	3 = Informational Messages
+|	4 = All Messages
+|
+| You can also pass an array with threshold levels to show individual error types
+|
+| 	array(2) = Debug Messages, without Error Messages
+|
+| For a live site you'll usually only enable Errors (1) to be logged otherwise
+| your log files will fill up very fast.
+|
+*/
+$config['log_threshold'] = 0;
+
+/*
+|--------------------------------------------------------------------------
+| Error Logging Directory Path
+|--------------------------------------------------------------------------
+|
+| Leave this BLANK unless you would like to set something other than the default
+| application/logs/ directory. Use a full server path with trailing slash.
+|
+*/
+$config['log_path'] = '';
+
+/*
+|--------------------------------------------------------------------------
+| Log File Extension
+|--------------------------------------------------------------------------
+|
+| The default filename extension for log files. The default 'php' allows for
+| protecting the log files via basic scripting, when they are to be stored
+| under a publicly accessible directory.
+|
+| Note: Leaving it blank will default to 'php'.
+|
+*/
+$config['log_file_extension'] = '';
+
+/*
+|--------------------------------------------------------------------------
+| Log File Permissions
+|--------------------------------------------------------------------------
+|
+| The file system permissions to be applied on newly created log files.
+|
+| IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal
+|            integer notation (i.e. 0700, 0644, etc.)
+*/
+$config['log_file_permissions'] = 0644;
+
+/*
+|--------------------------------------------------------------------------
+| Date Format for Logs
+|--------------------------------------------------------------------------
+|
+| Each item that is logged has an associated date. You can use PHP date
+| codes to set your own date formatting
+|
+*/
+$config['log_date_format'] = 'Y-m-d H:i:s';
+
+/*
+|--------------------------------------------------------------------------
+| Error Views Directory Path
+|--------------------------------------------------------------------------
+|
+| Leave this BLANK unless you would like to set something other than the default
+| application/views/errors/ directory.  Use a full server path with trailing slash.
+|
+*/
+$config['error_views_path'] = '';
+
+/*
+|--------------------------------------------------------------------------
+| Cache Directory Path
+|--------------------------------------------------------------------------
+|
+| Leave this BLANK unless you would like to set something other than the default
+| application/cache/ directory.  Use a full server path with trailing slash.
+|
+*/
+$config['cache_path'] = '';
+
+/*
+|--------------------------------------------------------------------------
+| Cache Include Query String
+|--------------------------------------------------------------------------
+|
+| Whether to take the URL query string into consideration when generating
+| output cache files. Valid options are:
+|
+|	FALSE      = Disabled
+|	TRUE       = Enabled, take all query parameters into account.
+|	             Please be aware that this may result in numerous cache
+|	             files generated for the same page over and over again.
+|	array('q') = Enabled, but only take into account the specified list
+|	             of query parameters.
+|
+*/
+$config['cache_query_string'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Encryption Key
+|--------------------------------------------------------------------------
+|
+| If you use the Encryption class, you must set an encryption key.
+| See the user guide for more info.
+|
+| https://codeigniter.com/user_guide/libraries/encryption.html
+|
+*/
+$config['encryption_key'] = 'N2U0O1D9A0J5GTXM';
+
+/*
+|--------------------------------------------------------------------------
+| Session Variables
+|--------------------------------------------------------------------------
+|
+| 'sess_driver'
+|
+|	The storage driver to use: files, database, redis, memcached
+|
+| 'sess_cookie_name'
+|
+|	The session cookie name, must contain only [0-9a-z_-] characters
+|
+| 'sess_expiration'
+|
+|	The number of SECONDS you want the session to last.
+|	Setting to 0 (zero) means expire when the browser is closed.
+|
+| 'sess_save_path'
+|
+|	The location to save sessions to, driver dependent.
+|
+|	For the 'files' driver, it's a path to a writable directory.
+|	WARNING: Only absolute paths are supported!
+|
+|	For the 'database' driver, it's a table name.
+|	Please read up the manual for the format with other session drivers.
+|
+|	IMPORTANT: You are REQUIRED to set a valid save path!
+|
+| 'sess_match_ip'
+|
+|	Whether to match the user's IP address when reading the session data.
+|
+|	WARNING: If you're using the database driver, don't forget to update
+|	         your session table's PRIMARY KEY when changing this setting.
+|
+| 'sess_time_to_update'
+|
+|	How many seconds between CI regenerating the session ID.
+|
+| 'sess_regenerate_destroy'
+|
+|	Whether to destroy session data associated with the old session ID
+|	when auto-regenerating the session ID. When set to FALSE, the data
+|	will be later deleted by the garbage collector.
+|
+| Other session cookie settings are shared with the rest of the application,
+| except for 'cookie_prefix' and 'cookie_httponly', which are ignored here.
+|
+*/
+$config['sess_driver'] = 'files';
+$config['sess_cookie_name'] = 'ci_session';
+$config['sess_expiration'] = 7200;
+$config['sess_save_path'] = __DIR__.'/../session';;
+$config['sess_match_ip'] = FALSE;
+$config['sess_time_to_update'] = 300;
+$config['sess_regenerate_destroy'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Cookie Related Variables
+|--------------------------------------------------------------------------
+|
+| 'cookie_prefix'   = Set a cookie name prefix if you need to avoid collisions
+| 'cookie_domain'   = Set to .your-domain.com for site-wide cookies
+| 'cookie_path'     = Typically will be a forward slash
+| 'cookie_secure'   = Cookie will only be set if a secure HTTPS connection exists.
+| 'cookie_httponly' = Cookie will only be accessible via HTTP(S) (no javascript)
+|
+| Note: These settings (with the exception of 'cookie_prefix' and
+|       'cookie_httponly') will also affect sessions.
+|
+*/
+$config['cookie_prefix']	= '';
+$config['cookie_domain']	= '';
+$config['cookie_path']		= '/';
+$config['cookie_secure']	= FALSE;
+$config['cookie_httponly'] 	= FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Standardize newlines
+|--------------------------------------------------------------------------
+|
+| Determines whether to standardize newline characters in input data,
+| meaning to replace \r\n, \r, \n occurrences with the PHP_EOL value.
+|
+| WARNING: This feature is DEPRECATED and currently available only
+|          for backwards compatibility purposes!
+|
+*/
+$config['standardize_newlines'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Global XSS Filtering
+|--------------------------------------------------------------------------
+|
+| Determines whether the XSS filter is always active when GET, POST or
+| COOKIE data is encountered
+|
+| WARNING: This feature is DEPRECATED and currently available only
+|          for backwards compatibility purposes!
+|
+*/
+$config['global_xss_filtering'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Cross Site Request Forgery
+|--------------------------------------------------------------------------
+| Enables a CSRF cookie token to be set. When set to TRUE, token will be
+| checked on a submitted form. If you are accepting user data, it is strongly
+| recommended CSRF protection be enabled.
+|
+| 'csrf_token_name' = The token name
+| 'csrf_cookie_name' = The cookie name
+| 'csrf_expire' = The number in seconds the token should expire.
+| 'csrf_regenerate' = Regenerate token on every submission
+| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks
+*/
+$config['csrf_protection'] = FALSE;
+$config['csrf_token_name'] = 'csrf_test_name';
+$config['csrf_cookie_name'] = 'csrf_cookie_name';
+$config['csrf_expire'] = 7200;
+$config['csrf_regenerate'] = TRUE;
+$config['csrf_exclude_uris'] = array();
+
+/*
+|--------------------------------------------------------------------------
+| Output Compression
+|--------------------------------------------------------------------------
+|
+| Enables Gzip output compression for faster page loads.  When enabled,
+| the output class will test whether your server supports Gzip.
+| Even if it does, however, not all browsers support compression
+| so enable only if you are reasonably sure your visitors can handle it.
+|
+| Only used if zlib.output_compression is turned off in your php.ini.
+| Please do not use it together with httpd-level output compression.
+|
+| VERY IMPORTANT:  If you are getting a blank page when compression is enabled it
+| means you are prematurely outputting something to your browser. It could
+| even be a line of whitespace at the end of one of your scripts.  For
+| compression to work, nothing can be sent before the output buffer is called
+| by the output class.  Do not 'echo' any values with compression enabled.
+|
+*/
+$config['compress_output'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Master Time Reference
+|--------------------------------------------------------------------------
+|
+| Options are 'local' or any PHP supported timezone. This preference tells
+| the system whether to use your server's local time as the master 'now'
+| reference, or convert it to the configured one timezone. See the 'date
+| helper' page of the user guide for information regarding date handling.
+|
+*/
+$config['time_reference'] = 'local';
+
+/*
+|--------------------------------------------------------------------------
+| Rewrite PHP Short Tags
+|--------------------------------------------------------------------------
+|
+| If your PHP installation does not have short tag support enabled CI
+| can rewrite the tags on-the-fly, enabling you to utilize that syntax
+| in your view files.  Options are TRUE or FALSE (boolean)
+|
+| Note: You need to have eval() enabled for this to work.
+|
+*/
+$config['rewrite_short_tags'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Reverse Proxy IPs
+|--------------------------------------------------------------------------
+|
+| If your server is behind a reverse proxy, you must whitelist the proxy
+| IP addresses from which CodeIgniter should trust headers such as
+| HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify
+| the visitor's IP address.
+|
+| You can use both an array or a comma-separated list of proxy addresses,
+| as well as specifying whole subnets. Here are a few examples:
+|
+| Comma-separated:	'10.0.1.200,192.168.5.0/24'
+| Array:		array('10.0.1.200', '192.168.5.0/24')
+*/
+$config['proxy_ips'] = '';

+ 85 - 0
application/config/constants.php

@@ -0,0 +1,85 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+|--------------------------------------------------------------------------
+| Display Debug backtrace
+|--------------------------------------------------------------------------
+|
+| If set to TRUE, a backtrace will be displayed along with php errors. If
+| error_reporting is disabled, the backtrace will not display, regardless
+| of this setting
+|
+*/
+defined('SHOW_DEBUG_BACKTRACE') OR define('SHOW_DEBUG_BACKTRACE', TRUE);
+
+/*
+|--------------------------------------------------------------------------
+| File and Directory Modes
+|--------------------------------------------------------------------------
+|
+| These prefs are used when checking and setting modes when working
+| with the file system.  The defaults are fine on servers with proper
+| security, but you may wish (or even need) to change the values in
+| certain environments (Apache running a separate process for each
+| user, PHP under CGI with Apache suEXEC, etc.).  Octal values should
+| always be used to set the mode correctly.
+|
+*/
+defined('FILE_READ_MODE')  OR define('FILE_READ_MODE', 0644);
+defined('FILE_WRITE_MODE') OR define('FILE_WRITE_MODE', 0666);
+defined('DIR_READ_MODE')   OR define('DIR_READ_MODE', 0755);
+defined('DIR_WRITE_MODE')  OR define('DIR_WRITE_MODE', 0755);
+
+/*
+|--------------------------------------------------------------------------
+| File Stream Modes
+|--------------------------------------------------------------------------
+|
+| These modes are used when working with fopen()/popen()
+|
+*/
+defined('FOPEN_READ')                           OR define('FOPEN_READ', 'rb');
+defined('FOPEN_READ_WRITE')                     OR define('FOPEN_READ_WRITE', 'r+b');
+defined('FOPEN_WRITE_CREATE_DESTRUCTIVE')       OR define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb'); // truncates existing file data, use with care
+defined('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE')  OR define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE', 'w+b'); // truncates existing file data, use with care
+defined('FOPEN_WRITE_CREATE')                   OR define('FOPEN_WRITE_CREATE', 'ab');
+defined('FOPEN_READ_WRITE_CREATE')              OR define('FOPEN_READ_WRITE_CREATE', 'a+b');
+defined('FOPEN_WRITE_CREATE_STRICT')            OR define('FOPEN_WRITE_CREATE_STRICT', 'xb');
+defined('FOPEN_READ_WRITE_CREATE_STRICT')       OR define('FOPEN_READ_WRITE_CREATE_STRICT', 'x+b');
+
+/*
+|--------------------------------------------------------------------------
+| Exit Status Codes
+|--------------------------------------------------------------------------
+|
+| Used to indicate the conditions under which the script is exit()ing.
+| While there is no universal standard for error codes, there are some
+| broad conventions.  Three such conventions are mentioned below, for
+| those who wish to make use of them.  The CodeIgniter defaults were
+| chosen for the least overlap with these conventions, while still
+| leaving room for others to be defined in future versions and user
+| applications.
+|
+| The three main conventions used for determining exit status codes
+| are as follows:
+|
+|    Standard C/C++ Library (stdlibc):
+|       http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
+|       (This link also contains other GNU-specific conventions)
+|    BSD sysexits.h:
+|       http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=sysexits
+|    Bash scripting:
+|       http://tldp.org/LDP/abs/html/exitcodes.html
+|
+*/
+defined('EXIT_SUCCESS')        OR define('EXIT_SUCCESS', 0); // no errors
+defined('EXIT_ERROR')          OR define('EXIT_ERROR', 1); // generic error
+defined('EXIT_CONFIG')         OR define('EXIT_CONFIG', 3); // configuration error
+defined('EXIT_UNKNOWN_FILE')   OR define('EXIT_UNKNOWN_FILE', 4); // file not found
+defined('EXIT_UNKNOWN_CLASS')  OR define('EXIT_UNKNOWN_CLASS', 5); // unknown class
+defined('EXIT_UNKNOWN_METHOD') OR define('EXIT_UNKNOWN_METHOD', 6); // unknown class member
+defined('EXIT_USER_INPUT')     OR define('EXIT_USER_INPUT', 7); // invalid user input
+defined('EXIT_DATABASE')       OR define('EXIT_DATABASE', 8); // database error
+defined('EXIT__AUTO_MIN')      OR define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
+defined('EXIT__AUTO_MAX')      OR define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code

+ 96 - 0
application/config/database.php

@@ -0,0 +1,96 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| DATABASE CONNECTIVITY SETTINGS
+| -------------------------------------------------------------------
+| This file will contain the settings needed to access your database.
+|
+| For complete instructions please consult the 'Database Connection'
+| page of the User Guide.
+|
+| -------------------------------------------------------------------
+| EXPLANATION OF VARIABLES
+| -------------------------------------------------------------------
+|
+|	['dsn']      The full DSN string describe a connection to the database.
+|	['hostname'] The hostname of your database server.
+|	['username'] The username used to connect to the database
+|	['password'] The password used to connect to the database
+|	['database'] The name of the database you want to connect to
+|	['dbdriver'] The database driver. e.g.: mysqli.
+|			Currently supported:
+|				 cubrid, ibase, mssql, mysql, mysqli, oci8,
+|				 odbc, pdo, postgre, sqlite, sqlite3, sqlsrv
+|	['dbprefix'] You can add an optional prefix, which will be added
+|				 to the table name when using the  Query Builder class
+|	['pconnect'] TRUE/FALSE - Whether to use a persistent connection
+|	['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
+|	['cache_on'] TRUE/FALSE - Enables/disables query caching
+|	['cachedir'] The path to the folder where cache files should be stored
+|	['char_set'] The character set used in communicating with the database
+|	['dbcollat'] The character collation used in communicating with the database
+|				 NOTE: For MySQL and MySQLi databases, this setting is only used
+| 				 as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
+|				 (and in table creation queries made with DB Forge).
+| 				 There is an incompatibility in PHP with mysql_real_escape_string() which
+| 				 can make your site vulnerable to SQL injection if you are using a
+| 				 multi-byte character set and are running versions lower than these.
+| 				 Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
+|	['swap_pre'] A default table prefix that should be swapped with the dbprefix
+|	['encrypt']  Whether or not to use an encrypted connection.
+|
+|			'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE
+|			'mysqli' and 'pdo/mysql' drivers accept an array with the following options:
+|
+|				'ssl_key'    - Path to the private key file
+|				'ssl_cert'   - Path to the public key certificate file
+|				'ssl_ca'     - Path to the certificate authority file
+|				'ssl_capath' - Path to a directory containing trusted CA certificates in PEM format
+|				'ssl_cipher' - List of *allowed* ciphers to be used for the encryption, separated by colons (':')
+|				'ssl_verify' - TRUE/FALSE; Whether verify the server certificate or not
+|
+|	['compress'] Whether or not to use client compression (MySQL only)
+|	['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
+|							- good for ensuring strict SQL while developing
+|	['ssl_options']	Used to set various SSL options that can be used when making SSL connections.
+|	['failover'] array - A array with 0 or more data for connections if the main should fail.
+|	['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.
+| 				NOTE: Disabling this will also effectively disable both
+| 				$this->db->last_query() and profiling of DB queries.
+| 				When you run a query, with this setting set to TRUE (default),
+| 				CodeIgniter will store the SQL statement for debugging purposes.
+| 				However, this may cause high memory usage, especially if you run
+| 				a lot of SQL queries ... disable this to avoid that problem.
+|
+| The $active_group variable lets you choose which connection group to
+| make active.  By default there is only one group (the 'default' group).
+|
+| The $query_builder variables lets you determine whether or not to load
+| the query builder class.
+*/
+$active_group = 'default';
+$query_builder = TRUE;
+
+$db['default'] = array(
+	'dsn'	=> '',
+	'hostname' => 'localhost',
+	'username' => '',
+	'password' => '',
+	'database' => '',
+	'dbdriver' => 'mysqli',
+	'dbprefix' => '',
+	'pconnect' => FALSE,
+	'db_debug' => (ENVIRONMENT !== 'production'),
+	'cache_on' => FALSE,
+	'cachedir' => '',
+	'char_set' => 'utf8',
+	'dbcollat' => 'utf8_general_ci',
+	'swap_pre' => '',
+	'encrypt' => FALSE,
+	'compress' => FALSE,
+	'stricton' => FALSE,
+	'failover' => array(),
+	'save_queries' => TRUE
+);

+ 24 - 0
application/config/doctypes.php

@@ -0,0 +1,24 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+$_doctypes = array(
+	'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
+	'xhtml1-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
+	'xhtml1-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
+	'xhtml1-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
+	'xhtml-basic11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
+	'html5' => '<!DOCTYPE html>',
+	'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
+	'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
+	'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',
+	'mathml1' => '<!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">',
+	'mathml2' => '<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">',
+	'svg10' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">',
+	'svg11' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">',
+	'svg11-basic' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">',
+	'svg11-tiny' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">',
+	'xhtml-math-svg-xh' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
+	'xhtml-math-svg-sh' => '<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
+	'xhtml-rdfa-1' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">',
+	'xhtml-rdfa-2' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">'
+);

+ 114 - 0
application/config/foreign_chars.php

@@ -0,0 +1,114 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| Foreign Characters
+| -------------------------------------------------------------------
+| This file contains an array of foreign characters for transliteration
+| conversion used by the Text helper
+|
+*/
+$foreign_characters = array(
+	'/ä|æ|ǽ/' => 'ae',
+	'/ö|œ/' => 'oe',
+	'/ü/' => 'ue',
+	'/Ä/' => 'Ae',
+	'/Ü/' => 'Ue',
+	'/Ö/' => 'Oe',
+	'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A',
+	'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a',
+	'/Б/' => 'B',
+	'/б/' => 'b',
+	'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
+	'/ç|ć|ĉ|ċ|č/' => 'c',
+	'/Д|Δ/' => 'D',
+	'/д|δ/' => 'd',
+	'/Ð|Ď|Đ/' => 'Dj',
+	'/ð|ď|đ/' => 'dj',
+	'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Э/' => 'E',
+	'/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|э/' => 'e',
+	'/Ф/' => 'F',
+	'/ф/' => 'f',
+	'/Ĝ|Ğ|Ġ|Ģ|Γ|Г|Ґ/' => 'G',
+	'/ĝ|ğ|ġ|ģ|γ|г|ґ/' => 'g',
+	'/Ĥ|Ħ/' => 'H',
+	'/ĥ|ħ/' => 'h',
+	'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Ы/' => 'I',
+	'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|ы|ї/' => 'i',
+	'/Ĵ/' => 'J',
+	'/ĵ/' => 'j',
+	'/Θ/' => 'TH',
+	'/θ/' => 'th',
+	'/Ķ|Κ|К/' => 'K',
+	'/ķ|κ|к/' => 'k',
+	'/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L',
+	'/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l',
+	'/М/' => 'M',
+	'/м/' => 'm',
+	'/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N',
+	'/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n',
+	'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O',
+	'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o',
+	'/П/' => 'P',
+	'/п/' => 'p',
+	'/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R',
+	'/ŕ|ŗ|ř|ρ|р/' => 'r',
+	'/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S',
+	'/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's',
+	'/Ț|Ţ|Ť|Ŧ|Τ|Т/' => 'T',
+	'/ț|ţ|ť|ŧ|τ|т/' => 't',
+	'/Þ|þ/' => 'th',
+	'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U',
+	'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u',
+	'/Ƴ|Ɏ|Ỵ|Ẏ|Ӳ|Ӯ|Ў|Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ|Й/' => 'Y',
+	'/ẙ|ʏ|ƴ|ɏ|ỵ|ẏ|ӳ|ӯ|ў|ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ|й/' => 'y',
+	'/В/' => 'V',
+	'/в/' => 'v',
+	'/Ŵ/' => 'W',
+	'/ŵ/' => 'w',
+	'/Φ/' => 'F',
+	'/φ/' => 'f',
+	'/Χ/' => 'CH',
+	'/χ/' => 'ch',
+	'/Ź|Ż|Ž|Ζ|З/' => 'Z',
+	'/ź|ż|ž|ζ|з/' => 'z',
+	'/Æ|Ǽ/' => 'AE',
+	'/ß/' => 'ss',
+	'/IJ/' => 'IJ',
+	'/ij/' => 'ij',
+	'/Œ/' => 'OE',
+	'/ƒ/' => 'f',
+	'/Ξ/' => 'KS',
+	'/ξ/' => 'ks',
+	'/Π/' => 'P',
+	'/π/' => 'p',
+	'/Β/' => 'V',
+	'/β/' => 'v',
+	'/Μ/' => 'M',
+	'/μ/' => 'm',
+	'/Ψ/' => 'PS',
+	'/ψ/' => 'ps',
+	'/Ё/' => 'Yo',
+	'/ё/' => 'yo',
+	'/Є/' => 'Ye',
+	'/є/' => 'ye',
+	'/Ї/' => 'Yi',
+	'/Ж/' => 'Zh',
+	'/ж/' => 'zh',
+	'/Х/' => 'Kh',
+	'/х/' => 'kh',
+	'/Ц/' => 'Ts',
+	'/ц/' => 'ts',
+	'/Ч/' => 'Ch',
+	'/ч/' => 'ch',
+	'/Ш/' => 'Sh',
+	'/ш/' => 'sh',
+	'/Щ/' => 'Shch',
+	'/щ/' => 'shch',
+	'/Ъ|ъ|Ь|ь/' => '',
+	'/Ю/' => 'Yu',
+	'/ю/' => 'yu',
+	'/Я/' => 'Ya',
+	'/я/' => 'ya'
+);

+ 13 - 0
application/config/hooks.php

@@ -0,0 +1,13 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------------
+| Hooks
+| -------------------------------------------------------------------------
+| This file lets you define "hooks" to extend CI without hacking the core
+| files.  Please see the user guide for info:
+|
+|	https://codeigniter.com/user_guide/general/hooks.html
+|
+*/

+ 11 - 0
application/config/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 19 - 0
application/config/memcached.php

@@ -0,0 +1,19 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------------
+| Memcached settings
+| -------------------------------------------------------------------------
+| Your Memcached servers can be specified below.
+|
+|	See: https://codeigniter.com/user_guide/libraries/caching.html#memcached
+|
+*/
+$config = array(
+	'default' => array(
+		'hostname' => '127.0.0.1',
+		'port'     => '11211',
+		'weight'   => '1',
+	),
+);

+ 84 - 0
application/config/migration.php

@@ -0,0 +1,84 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+|--------------------------------------------------------------------------
+| Enable/Disable Migrations
+|--------------------------------------------------------------------------
+|
+| Migrations are disabled by default for security reasons.
+| You should enable migrations whenever you intend to do a schema migration
+| and disable it back when you're done.
+|
+*/
+$config['migration_enabled'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Migration Type
+|--------------------------------------------------------------------------
+|
+| Migration file names may be based on a sequential identifier or on
+| a timestamp. Options are:
+|
+|   'sequential' = Sequential migration naming (001_add_blog.php)
+|   'timestamp'  = Timestamp migration naming (20121031104401_add_blog.php)
+|                  Use timestamp format YYYYMMDDHHIISS.
+|
+| Note: If this configuration value is missing the Migration library
+|       defaults to 'sequential' for backward compatibility with CI2.
+|
+*/
+$config['migration_type'] = 'timestamp';
+
+/*
+|--------------------------------------------------------------------------
+| Migrations table
+|--------------------------------------------------------------------------
+|
+| This is the name of the table that will store the current migrations state.
+| When migrations runs it will store in a database table which migration
+| level the system is at. It then compares the migration level in this
+| table to the $config['migration_version'] if they are not the same it
+| will migrate up. This must be set.
+|
+*/
+$config['migration_table'] = 'migrations';
+
+/*
+|--------------------------------------------------------------------------
+| Auto Migrate To Latest
+|--------------------------------------------------------------------------
+|
+| If this is set to TRUE when you load the migrations class and have
+| $config['migration_enabled'] set to TRUE the system will auto migrate
+| to your latest migration (whatever $config['migration_version'] is
+| set to). This way you do not have to call migrations anywhere else
+| in your code to have the latest migration.
+|
+*/
+$config['migration_auto_latest'] = FALSE;
+
+/*
+|--------------------------------------------------------------------------
+| Migrations version
+|--------------------------------------------------------------------------
+|
+| This is used to set migration version that the file system should be on.
+| If you run $this->migration->current() this is the version that schema will
+| be upgraded / downgraded to.
+|
+*/
+$config['migration_version'] = 0;
+
+/*
+|--------------------------------------------------------------------------
+| Migrations Path
+|--------------------------------------------------------------------------
+|
+| Path to your migrations folder.
+| Typically, it will be within your application path.
+| Also, writing permission is required within the migrations path.
+|
+*/
+$config['migration_path'] = APPPATH.'migrations/';

+ 184 - 0
application/config/mimes.php

@@ -0,0 +1,184 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| MIME TYPES
+| -------------------------------------------------------------------
+| This file contains an array of mime types.  It is used by the
+| Upload class to help identify allowed file types.
+|
+*/
+return array(
+	'hqx'	=>	array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),
+	'cpt'	=>	'application/mac-compactpro',
+	'csv'	=>	array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'),
+	'bin'	=>	array('application/macbinary', 'application/mac-binary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'),
+	'dms'	=>	'application/octet-stream',
+	'lha'	=>	'application/octet-stream',
+	'lzh'	=>	'application/octet-stream',
+	'exe'	=>	array('application/octet-stream', 'application/x-msdownload'),
+	'class'	=>	'application/octet-stream',
+	'psd'	=>	array('application/x-photoshop', 'image/vnd.adobe.photoshop'),
+	'so'	=>	'application/octet-stream',
+	'sea'	=>	'application/octet-stream',
+	'dll'	=>	'application/octet-stream',
+	'oda'	=>	'application/oda',
+	'pdf'	=>	array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'),
+	'ai'	=>	array('application/pdf', 'application/postscript'),
+	'eps'	=>	'application/postscript',
+	'ps'	=>	'application/postscript',
+	'smi'	=>	'application/smil',
+	'smil'	=>	'application/smil',
+	'mif'	=>	'application/vnd.mif',
+	'xls'	=>	array('application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'application/x-ms-excel', 'application/x-excel', 'application/x-dos_ms_excel', 'application/xls', 'application/x-xls', 'application/excel', 'application/download', 'application/vnd.ms-office', 'application/msword'),
+	'ppt'	=>	array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'),
+	'pptx'	=> 	array('application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/x-zip', 'application/zip'),
+	'wbxml'	=>	'application/wbxml',
+	'wmlc'	=>	'application/wmlc',
+	'dcr'	=>	'application/x-director',
+	'dir'	=>	'application/x-director',
+	'dxr'	=>	'application/x-director',
+	'dvi'	=>	'application/x-dvi',
+	'gtar'	=>	'application/x-gtar',
+	'gz'	=>	'application/x-gzip',
+	'gzip'  =>	'application/x-gzip',
+	'php'	=>	array('application/x-httpd-php', 'application/php', 'application/x-php', 'text/php', 'text/x-php', 'application/x-httpd-php-source'),
+	'php4'	=>	'application/x-httpd-php',
+	'php3'	=>	'application/x-httpd-php',
+	'phtml'	=>	'application/x-httpd-php',
+	'phps'	=>	'application/x-httpd-php-source',
+	'js'	=>	array('application/x-javascript', 'text/plain'),
+	'swf'	=>	'application/x-shockwave-flash',
+	'sit'	=>	'application/x-stuffit',
+	'tar'	=>	'application/x-tar',
+	'tgz'	=>	array('application/x-tar', 'application/x-gzip-compressed'),
+	'z'	=>	'application/x-compress',
+	'xhtml'	=>	'application/xhtml+xml',
+	'xht'	=>	'application/xhtml+xml',
+	'zip'	=>	array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'),
+	'rar'	=>	array('application/x-rar', 'application/rar', 'application/x-rar-compressed'),
+	'mid'	=>	'audio/midi',
+	'midi'	=>	'audio/midi',
+	'mpga'	=>	'audio/mpeg',
+	'mp2'	=>	'audio/mpeg',
+	'mp3'	=>	array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
+	'aif'	=>	array('audio/x-aiff', 'audio/aiff'),
+	'aiff'	=>	array('audio/x-aiff', 'audio/aiff'),
+	'aifc'	=>	'audio/x-aiff',
+	'ram'	=>	'audio/x-pn-realaudio',
+	'rm'	=>	'audio/x-pn-realaudio',
+	'rpm'	=>	'audio/x-pn-realaudio-plugin',
+	'ra'	=>	'audio/x-realaudio',
+	'rv'	=>	'video/vnd.rn-realvideo',
+	'wav'	=>	array('audio/x-wav', 'audio/wave', 'audio/wav'),
+	'bmp'	=>	array('image/bmp', 'image/x-bmp', 'image/x-bitmap', 'image/x-xbitmap', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/ms-bmp', 'image/x-ms-bmp', 'application/bmp', 'application/x-bmp', 'application/x-win-bitmap'),
+	'gif'	=>	'image/gif',
+	'jpeg'	=>	array('image/jpeg', 'image/pjpeg'),
+	'jpg'	=>	array('image/jpeg', 'image/pjpeg'),
+	'jpe'	=>	array('image/jpeg', 'image/pjpeg'),
+	'jp2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'j2k'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'jpf'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'jpg2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'jpx'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'jpm'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'mj2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'mjp2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
+	'png'	=>	array('image/png',  'image/x-png'),
+	'tiff'	=>	'image/tiff',
+	'tif'	=>	'image/tiff',
+	'css'	=>	array('text/css', 'text/plain'),
+	'html'	=>	array('text/html', 'text/plain'),
+	'htm'	=>	array('text/html', 'text/plain'),
+	'shtml'	=>	array('text/html', 'text/plain'),
+	'txt'	=>	'text/plain',
+	'text'	=>	'text/plain',
+	'log'	=>	array('text/plain', 'text/x-log'),
+	'rtx'	=>	'text/richtext',
+	'rtf'	=>	'text/rtf',
+	'xml'	=>	array('application/xml', 'text/xml', 'text/plain'),
+	'xsl'	=>	array('application/xml', 'text/xsl', 'text/xml'),
+	'mpeg'	=>	'video/mpeg',
+	'mpg'	=>	'video/mpeg',
+	'mpe'	=>	'video/mpeg',
+	'qt'	=>	'video/quicktime',
+	'mov'	=>	'video/quicktime',
+	'avi'	=>	array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'),
+	'movie'	=>	'video/x-sgi-movie',
+	'doc'	=>	array('application/msword', 'application/vnd.ms-office'),
+	'docx'	=>	array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'),
+	'dot'	=>	array('application/msword', 'application/vnd.ms-office'),
+	'dotx'	=>	array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'),
+	'xlsx'	=>	array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'),
+	'word'	=>	array('application/msword', 'application/octet-stream'),
+	'xl'	=>	'application/excel',
+	'eml'	=>	'message/rfc822',
+	'json'  =>	array('application/json', 'text/json'),
+	'pem'   =>	array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'),
+	'p10'   =>	array('application/x-pkcs10', 'application/pkcs10'),
+	'p12'   =>	'application/x-pkcs12',
+	'p7a'   =>	'application/x-pkcs7-signature',
+	'p7c'   =>	array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
+	'p7m'   =>	array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
+	'p7r'   =>	'application/x-pkcs7-certreqresp',
+	'p7s'   =>	'application/pkcs7-signature',
+	'crt'   =>	array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'),
+	'crl'   =>	array('application/pkix-crl', 'application/pkcs-crl'),
+	'der'   =>	'application/x-x509-ca-cert',
+	'kdb'   =>	'application/octet-stream',
+	'pgp'   =>	'application/pgp',
+	'gpg'   =>	'application/gpg-keys',
+	'sst'   =>	'application/octet-stream',
+	'csr'   =>	'application/octet-stream',
+	'rsa'   =>	'application/x-pkcs7',
+	'cer'   =>	array('application/pkix-cert', 'application/x-x509-ca-cert'),
+	'3g2'   =>	'video/3gpp2',
+	'3gp'   =>	array('video/3gp', 'video/3gpp'),
+	'mp4'   =>	'video/mp4',
+	'm4a'   =>	'audio/x-m4a',
+	'f4v'   =>	array('video/mp4', 'video/x-f4v'),
+	'flv'	=>	'video/x-flv',
+	'webm'	=>	'video/webm',
+	'aac'   =>	array('audio/x-aac', 'audio/aac'),
+	'm4u'   =>	'application/vnd.mpegurl',
+	'm3u'   =>	'text/plain',
+	'xspf'  =>	'application/xspf+xml',
+	'vlc'   =>	'application/videolan',
+	'wmv'   =>	array('video/x-ms-wmv', 'video/x-ms-asf'),
+	'au'    =>	'audio/x-au',
+	'ac3'   =>	'audio/ac3',
+	'flac'  =>	'audio/x-flac',
+	'ogg'   =>	array('audio/ogg', 'video/ogg', 'application/ogg'),
+	'kmz'	=>	array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'),
+	'kml'	=>	array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'),
+	'ics'	=>	'text/calendar',
+	'ical'	=>	'text/calendar',
+	'zsh'	=>	'text/x-scriptzsh',
+	'7z'	=>	array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
+	'7zip'	=>	array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
+	'cdr'	=>	array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'),
+	'wma'	=>	array('audio/x-ms-wma', 'video/x-ms-asf'),
+	'jar'	=>	array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'),
+	'svg'	=>	array('image/svg+xml', 'application/xml', 'text/xml'),
+	'vcf'	=>	'text/x-vcard',
+	'srt'	=>	array('text/srt', 'text/plain'),
+	'vtt'	=>	array('text/vtt', 'text/plain'),
+	'ico'	=>	array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'),
+	'odc'	=>	'application/vnd.oasis.opendocument.chart',
+	'otc'	=>	'application/vnd.oasis.opendocument.chart-template',
+	'odf'	=>	'application/vnd.oasis.opendocument.formula',
+	'otf'	=>	'application/vnd.oasis.opendocument.formula-template',
+	'odg'	=>	'application/vnd.oasis.opendocument.graphics',
+	'otg'	=>	'application/vnd.oasis.opendocument.graphics-template',
+	'odi'	=>	'application/vnd.oasis.opendocument.image',
+	'oti'	=>	'application/vnd.oasis.opendocument.image-template',
+	'odp'	=>	'application/vnd.oasis.opendocument.presentation',
+	'otp'	=>	'application/vnd.oasis.opendocument.presentation-template',
+	'ods'	=>	'application/vnd.oasis.opendocument.spreadsheet',
+	'ots'	=>	'application/vnd.oasis.opendocument.spreadsheet-template',
+	'odt'	=>	'application/vnd.oasis.opendocument.text',
+	'odm'	=>	'application/vnd.oasis.opendocument.text-master',
+	'ott'	=>	'application/vnd.oasis.opendocument.text-template',
+	'oth'	=>	'application/vnd.oasis.opendocument.text-web'
+);

+ 14 - 0
application/config/profiler.php

@@ -0,0 +1,14 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------------
+| Profiler Sections
+| -------------------------------------------------------------------------
+| This file lets you determine whether or not various sections of Profiler
+| data are displayed when the Profiler is enabled.
+| Please see the user guide for info:
+|
+|	https://codeigniter.com/user_guide/general/profiling.html
+|
+*/

+ 54 - 0
application/config/routes.php

@@ -0,0 +1,54 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------------
+| URI ROUTING
+| -------------------------------------------------------------------------
+| This file lets you re-map URI requests to specific controller functions.
+|
+| Typically there is a one-to-one relationship between a URL string
+| and its corresponding controller class/method. The segments in a
+| URL normally follow this pattern:
+|
+|	example.com/class/method/id/
+|
+| In some instances, however, you may want to remap this relationship
+| so that a different class/function is called than the one
+| corresponding to the URL.
+|
+| Please see the user guide for complete details:
+|
+|	https://codeigniter.com/user_guide/general/routing.html
+|
+| -------------------------------------------------------------------------
+| RESERVED ROUTES
+| -------------------------------------------------------------------------
+|
+| There are three reserved routes:
+|
+|	$route['default_controller'] = 'welcome';
+|
+| This route indicates which controller class should be loaded if the
+| URI contains no data. In the above example, the "welcome" class
+| would be loaded.
+|
+|	$route['404_override'] = 'errors/page_missing';
+|
+| This route will tell the Router which controller/method to use if those
+| provided in the URL cannot be matched to a valid route.
+|
+|	$route['translate_uri_dashes'] = FALSE;
+|
+| This is not exactly a route, but allows you to automatically route
+| controller and method names that contain dashes. '-' isn't a valid
+| class or method name character, so it requires translation.
+| When you set this option to TRUE, it will replace ALL dashes in the
+| controller and method URI segments.
+|
+| Examples:	my-controller/index	-> my_controller/index
+|		my-controller/my-method	-> my_controller/my_method
+*/
+$route['default_controller'] = 'home';
+$route['404_override'] = '';
+$route['translate_uri_dashes'] = FALSE;

+ 64 - 0
application/config/smileys.php

@@ -0,0 +1,64 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| SMILEYS
+| -------------------------------------------------------------------
+| This file contains an array of smileys for use with the emoticon helper.
+| Individual images can be used to replace multiple smileys.  For example:
+| :-) and :) use the same image replacement.
+|
+| Please see user guide for more info:
+| https://codeigniter.com/user_guide/helpers/smiley_helper.html
+|
+*/
+$smileys = array(
+
+//	smiley			image name						width	height	alt
+
+	':-)'			=>	array('grin.gif',			'19',	'19',	'grin'),
+	':lol:'			=>	array('lol.gif',			'19',	'19',	'LOL'),
+	':cheese:'		=>	array('cheese.gif',			'19',	'19',	'cheese'),
+	':)'			=>	array('smile.gif',			'19',	'19',	'smile'),
+	';-)'			=>	array('wink.gif',			'19',	'19',	'wink'),
+	';)'			=>	array('wink.gif',			'19',	'19',	'wink'),
+	':smirk:'		=>	array('smirk.gif',			'19',	'19',	'smirk'),
+	':roll:'		=>	array('rolleyes.gif',		'19',	'19',	'rolleyes'),
+	':-S'			=>	array('confused.gif',		'19',	'19',	'confused'),
+	':wow:'			=>	array('surprise.gif',		'19',	'19',	'surprised'),
+	':bug:'			=>	array('bigsurprise.gif',	'19',	'19',	'big surprise'),
+	':-P'			=>	array('tongue_laugh.gif',	'19',	'19',	'tongue laugh'),
+	'%-P'			=>	array('tongue_rolleye.gif',	'19',	'19',	'tongue rolleye'),
+	';-P'			=>	array('tongue_wink.gif',	'19',	'19',	'tongue wink'),
+	':P'			=>	array('raspberry.gif',		'19',	'19',	'raspberry'),
+	':blank:'		=>	array('blank.gif',			'19',	'19',	'blank stare'),
+	':long:'		=>	array('longface.gif',		'19',	'19',	'long face'),
+	':ohh:'			=>	array('ohh.gif',			'19',	'19',	'ohh'),
+	':grrr:'		=>	array('grrr.gif',			'19',	'19',	'grrr'),
+	':gulp:'		=>	array('gulp.gif',			'19',	'19',	'gulp'),
+	'8-/'			=>	array('ohoh.gif',			'19',	'19',	'oh oh'),
+	':down:'		=>	array('downer.gif',			'19',	'19',	'downer'),
+	':red:'			=>	array('embarrassed.gif',	'19',	'19',	'red face'),
+	':sick:'		=>	array('sick.gif',			'19',	'19',	'sick'),
+	':shut:'		=>	array('shuteye.gif',		'19',	'19',	'shut eye'),
+	':-/'			=>	array('hmm.gif',			'19',	'19',	'hmmm'),
+	'>:('			=>	array('mad.gif',			'19',	'19',	'mad'),
+	':mad:'			=>	array('mad.gif',			'19',	'19',	'mad'),
+	'>:-('			=>	array('angry.gif',			'19',	'19',	'angry'),
+	':angry:'		=>	array('angry.gif',			'19',	'19',	'angry'),
+	':zip:'			=>	array('zip.gif',			'19',	'19',	'zipper'),
+	':kiss:'		=>	array('kiss.gif',			'19',	'19',	'kiss'),
+	':ahhh:'		=>	array('shock.gif',			'19',	'19',	'shock'),
+	':coolsmile:'	=>	array('shade_smile.gif',	'19',	'19',	'cool smile'),
+	':coolsmirk:'	=>	array('shade_smirk.gif',	'19',	'19',	'cool smirk'),
+	':coolgrin:'	=>	array('shade_grin.gif',		'19',	'19',	'cool grin'),
+	':coolhmm:'		=>	array('shade_hmm.gif',		'19',	'19',	'cool hmm'),
+	':coolmad:'		=>	array('shade_mad.gif',		'19',	'19',	'cool mad'),
+	':coolcheese:'	=>	array('shade_cheese.gif',	'19',	'19',	'cool cheese'),
+	':vampire:'		=>	array('vampire.gif',		'19',	'19',	'vampire'),
+	':snake:'		=>	array('snake.gif',			'19',	'19',	'snake'),
+	':exclaim:'		=>	array('exclaim.gif',		'19',	'19',	'exclaim'),
+	':question:'	=>	array('question.gif',		'19',	'19',	'question')
+
+);

+ 216 - 0
application/config/user_agents.php

@@ -0,0 +1,216 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+/*
+| -------------------------------------------------------------------
+| USER AGENT TYPES
+| -------------------------------------------------------------------
+| This file contains four arrays of user agent data. It is used by the
+| User Agent Class to help identify browser, platform, robot, and
+| mobile device data. The array keys are used to identify the device
+| and the array values are used to set the actual name of the item.
+*/
+$platforms = array(
+	'windows nt 10.0'	=> 'Windows 10',
+	'windows nt 6.3'	=> 'Windows 8.1',
+	'windows nt 6.2'	=> 'Windows 8',
+	'windows nt 6.1'	=> 'Windows 7',
+	'windows nt 6.0'	=> 'Windows Vista',
+	'windows nt 5.2'	=> 'Windows 2003',
+	'windows nt 5.1'	=> 'Windows XP',
+	'windows nt 5.0'	=> 'Windows 2000',
+	'windows nt 4.0'	=> 'Windows NT 4.0',
+	'winnt4.0'			=> 'Windows NT 4.0',
+	'winnt 4.0'			=> 'Windows NT',
+	'winnt'				=> 'Windows NT',
+	'windows 98'		=> 'Windows 98',
+	'win98'				=> 'Windows 98',
+	'windows 95'		=> 'Windows 95',
+	'win95'				=> 'Windows 95',
+	'windows phone'			=> 'Windows Phone',
+	'windows'			=> 'Unknown Windows OS',
+	'android'			=> 'Android',
+	'blackberry'		=> 'BlackBerry',
+	'iphone'			=> 'iOS',
+	'ipad'				=> 'iOS',
+	'ipod'				=> 'iOS',
+	'os x'				=> 'Mac OS X',
+	'ppc mac'			=> 'Power PC Mac',
+	'freebsd'			=> 'FreeBSD',
+	'ppc'				=> 'Macintosh',
+	'linux'				=> 'Linux',
+	'debian'			=> 'Debian',
+	'sunos'				=> 'Sun Solaris',
+	'beos'				=> 'BeOS',
+	'apachebench'		=> 'ApacheBench',
+	'aix'				=> 'AIX',
+	'irix'				=> 'Irix',
+	'osf'				=> 'DEC OSF',
+	'hp-ux'				=> 'HP-UX',
+	'netbsd'			=> 'NetBSD',
+	'bsdi'				=> 'BSDi',
+	'openbsd'			=> 'OpenBSD',
+	'gnu'				=> 'GNU/Linux',
+	'unix'				=> 'Unknown Unix OS',
+	'symbian' 			=> 'Symbian OS'
+);
+
+
+// The order of this array should NOT be changed. Many browsers return
+// multiple browser types so we want to identify the sub-type first.
+$browsers = array(
+	'OPR'			=> 'Opera',
+	'Flock'			=> 'Flock',
+	'Edge'			=> 'Edge',
+	'Chrome'		=> 'Chrome',
+	// Opera 10+ always reports Opera/9.80 and appends Version/<real version> to the user agent string
+	'Opera.*?Version'	=> 'Opera',
+	'Opera'			=> 'Opera',
+	'MSIE'			=> 'Internet Explorer',
+	'Internet Explorer'	=> 'Internet Explorer',
+	'Trident.* rv'	=> 'Internet Explorer',
+	'Shiira'		=> 'Shiira',
+	'Firefox'		=> 'Firefox',
+	'Chimera'		=> 'Chimera',
+	'Phoenix'		=> 'Phoenix',
+	'Firebird'		=> 'Firebird',
+	'Camino'		=> 'Camino',
+	'Netscape'		=> 'Netscape',
+	'OmniWeb'		=> 'OmniWeb',
+	'Safari'		=> 'Safari',
+	'Mozilla'		=> 'Mozilla',
+	'Konqueror'		=> 'Konqueror',
+	'icab'			=> 'iCab',
+	'Lynx'			=> 'Lynx',
+	'Links'			=> 'Links',
+	'hotjava'		=> 'HotJava',
+	'amaya'			=> 'Amaya',
+	'IBrowse'		=> 'IBrowse',
+	'Maxthon'		=> 'Maxthon',
+	'Ubuntu'		=> 'Ubuntu Web Browser'
+);
+
+$mobiles = array(
+	// legacy array, old values commented out
+	'mobileexplorer'	=> 'Mobile Explorer',
+//  'openwave'			=> 'Open Wave',
+//	'opera mini'		=> 'Opera Mini',
+//	'operamini'			=> 'Opera Mini',
+//	'elaine'			=> 'Palm',
+	'palmsource'		=> 'Palm',
+//	'digital paths'		=> 'Palm',
+//	'avantgo'			=> 'Avantgo',
+//	'xiino'				=> 'Xiino',
+	'palmscape'			=> 'Palmscape',
+//	'nokia'				=> 'Nokia',
+//	'ericsson'			=> 'Ericsson',
+//	'blackberry'		=> 'BlackBerry',
+//	'motorola'			=> 'Motorola'
+
+	// Phones and Manufacturers
+	'motorola'		=> 'Motorola',
+	'nokia'			=> 'Nokia',
+	'nexus'			=> 'Nexus',
+	'palm'			=> 'Palm',
+	'iphone'		=> 'Apple iPhone',
+	'ipad'			=> 'iPad',
+	'ipod'			=> 'Apple iPod Touch',
+	'sony'			=> 'Sony Ericsson',
+	'ericsson'		=> 'Sony Ericsson',
+	'blackberry'	=> 'BlackBerry',
+	'cocoon'		=> 'O2 Cocoon',
+	'blazer'		=> 'Treo',
+	'lg'			=> 'LG',
+	'amoi'			=> 'Amoi',
+	'xda'			=> 'XDA',
+	'mda'			=> 'MDA',
+	'vario'			=> 'Vario',
+	'htc'			=> 'HTC',
+	'samsung'		=> 'Samsung',
+	'sharp'			=> 'Sharp',
+	'sie-'			=> 'Siemens',
+	'alcatel'		=> 'Alcatel',
+	'benq'			=> 'BenQ',
+	'ipaq'			=> 'HP iPaq',
+	'mot-'			=> 'Motorola',
+	'playstation portable'	=> 'PlayStation Portable',
+	'playstation 3'		=> 'PlayStation 3',
+	'playstation vita'  	=> 'PlayStation Vita',
+	'hiptop'		=> 'Danger Hiptop',
+	'nec-'			=> 'NEC',
+	'panasonic'		=> 'Panasonic',
+	'philips'		=> 'Philips',
+	'sagem'			=> 'Sagem',
+	'sanyo'			=> 'Sanyo',
+	'spv'			=> 'SPV',
+	'zte'			=> 'ZTE',
+	'sendo'			=> 'Sendo',
+	'nintendo dsi'	=> 'Nintendo DSi',
+	'nintendo ds'	=> 'Nintendo DS',
+	'nintendo 3ds'	=> 'Nintendo 3DS',
+	'wii'			=> 'Nintendo Wii',
+	'open web'		=> 'Open Web',
+	'openweb'		=> 'OpenWeb',
+	'meizu'                 => 'Meizu',
+
+	// Operating Systems
+	'android'		=> 'Android',
+	'symbian'		=> 'Symbian',
+	'SymbianOS'		=> 'SymbianOS',
+	'elaine'		=> 'Palm',
+	'series60'		=> 'Symbian S60',
+	'windows ce'	=> 'Windows CE',
+
+	// Browsers
+	'obigo'			=> 'Obigo',
+	'netfront'		=> 'Netfront Browser',
+	'openwave'		=> 'Openwave Browser',
+	'mobilexplorer'	=> 'Mobile Explorer',
+	'operamini'		=> 'Opera Mini',
+	'opera mini'	=> 'Opera Mini',
+	'opera mobi'	=> 'Opera Mobile',
+	'fennec'		=> 'Firefox Mobile',
+
+	// Other
+	'digital paths'	=> 'Digital Paths',
+	'avantgo'		=> 'AvantGo',
+	'xiino'			=> 'Xiino',
+	'novarra'		=> 'Novarra Transcoder',
+	'vodafone'		=> 'Vodafone',
+	'docomo'		=> 'NTT DoCoMo',
+	'o2'			=> 'O2',
+
+	// Fallback
+	'mobile'		=> 'Generic Mobile',
+	'wireless'		=> 'Generic Mobile',
+	'j2me'			=> 'Generic Mobile',
+	'midp'			=> 'Generic Mobile',
+	'cldc'			=> 'Generic Mobile',
+	'up.link'		=> 'Generic Mobile',
+	'up.browser'	=> 'Generic Mobile',
+	'smartphone'	=> 'Generic Mobile',
+	'cellphone'		=> 'Generic Mobile'
+);
+
+// There are hundreds of bots but these are the most common.
+$robots = array(
+	'googlebot'		=> 'Googlebot',
+	'msnbot'		=> 'MSNBot',
+	'baiduspider'		=> 'Baiduspider',
+	'bingbot'		=> 'Bing',
+	'slurp'			=> 'Inktomi Slurp',
+	'yahoo'			=> 'Yahoo',
+	'ask jeeves'		=> 'Ask Jeeves',
+	'fastcrawler'		=> 'FastCrawler',
+	'infoseek'		=> 'InfoSeek Robot 1.0',
+	'lycos'			=> 'Lycos',
+	'yandex'		=> 'YandexBot',
+	'mediapartners-google'	=> 'MediaPartners Google',
+	'CRAZYWEBCRAWLER'	=> 'Crazy Webcrawler',
+	'adsbot-google'		=> 'AdsBot Google',
+	'feedfetcher-google'	=> 'Feedfetcher Google',
+	'curious george'	=> 'Curious George',
+	'ia_archiver'		=> 'Alexa Crawler',
+	'MJ12bot'		=> 'Majestic-12',
+	'Uptimebot'		=> 'Uptimebot'
+);

+ 57 - 0
application/controllers/Account.php

@@ -0,0 +1,57 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+require_once('MyBaseController.php');
+
+class Account extends MyBaseController {
+
+	public function login()
+	{
+		if($this->session->userinfo){
+			$this->redirect('/Home/index');
+		}else{
+			$this->load->view('login');
+		}
+	}
+
+	public function logout()
+	{
+		$this->load->library('session');
+		$this->session->userinfo = null;
+		$this->redirect('login', 0, '退出成功');
+	}
+
+	public function checkLogin(){
+		$accountName = $this->input->post('Username');
+		$password = $this->input->post('Password');
+		if(!$accountName || !$password){
+			$this->error('账号密码不能为空');
+		}
+		$url = $this->config->item('api_url2')."api/v1/User/yhCheckLogin";
+		$ret = curl_post($url,[
+			'accountName' => $accountName,
+			'password' => aes_encrypt($password)
+		]);
+		$ret = json_decode($ret,true);
+		if(!$ret){
+			$this->error('登录失败');
+		}
+		if($ret['code'] != 0){
+			$this->error($ret['message']);
+		}
+
+		$userinfo = [
+			'userId' => $ret['data']['userId'],
+			'realName' =>  $ret['data']['user']['realName'],
+			'token' => $ret['data']['token'],
+			'orgId' => isset($ret['data']['orgList'])?$ret['data']['orgList'][0]['orgId']:0,
+			'orgName' => isset($ret['data']['orgList'])?$ret['data']['orgList'][0]['name']:'',
+			'user' => $ret['data']['user'],
+			'roleList' => $ret['data']['roleList'],
+			'deptList' => $ret['data']['deptList'],
+			'orgList' => $ret['data']['orgList'],
+			'rules' => $ret['data']['rules']
+		];
+		$this->session->userinfo = $userinfo;
+		$this->success('登录成功');
+	}
+}

+ 103 - 0
application/controllers/Home.php

@@ -0,0 +1,103 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+require_once('MyBaseController.php');
+
+class Home extends MyBaseController {
+
+	public function __construct()
+	{
+		parent::__construct();
+		if ($this->session->userinfo==null) {
+			$this->redirect('/Account/logout');
+			exit;
+		}
+		$userId = $this->input->post('userId');
+		$r = $this->getNewToken($userId);
+		$_POST['token'] = $r;
+//		var_dump($this->session->userinfo);exit();
+	}
+
+	public function index()
+	{
+		$this->load->view('index');
+	}
+
+	//取当前的userid
+	protected function self_user_id()
+	{
+		return $this->session->userinfo->userId;
+	}
+
+	//取当前的org
+	protected function self_org_id()
+	{
+		return $this->session->userinfo->orgId;
+	}
+
+	public function queryConveyAddrList(){
+		$url = $this->config->item('api_url2')."api/v1/server/ConveyAddr/queryConveyAddrList";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function ConveyDeviceLists(){
+		$url = $this->config->item('api_url2')."api/v1/server/ConveyDevice/lists";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function queryUserOrdersByMode(){
+		$url = $this->config->item('api_url2')."api/v1/server/Orders/queryUserOrdersByMode";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function orderYhadd(){
+		$url = $this->config->item('api_url2')."api/v1/server/Orders/yhadd";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function commentYhadd(){
+		$url = $this->config->item('api_url2')."api/v1/server/Comment/yhadd";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function orderQueryDetail(){
+		$url = $this->config->item('api_url2')."api/v1/server/Orders/queryDetail";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+
+	public function conveyCateLists(){
+		$url = $this->config->item('api_url2')."api/v1/server/ConveyCate/lists";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+	public function conveyXqTime(){
+		$url = $this->config->item('api_url2')."api/v1/server/ConveyCate/getXqTime";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+	public function updateOrderModeByUser(){
+		$url = $this->config->item('api_url2')."api/v1/server/Orders/updateOrderModeByUser";
+		$ret = curl_post($url,$_POST);
+		header('Content-Type:application/json; charset=utf-8');
+		exit($ret);
+	}
+	public function getNewToken($userId){
+		$url = $this->config->item('api_url2')."api/v1/User/getToken";
+		$ret = curl_post($url,['userId'=>$userId]);
+		$data = json_decode($ret,true);
+		return  $data['data']['token'];
+	}
+}

+ 149 - 0
application/controllers/MyBaseController.php

@@ -0,0 +1,149 @@
+<?php
+defined('BASEPATH') or exit('No direct script access allowed');
+
+class MyBaseController extends CI_Controller
+{
+    public function __construct()
+    {
+        parent::__construct();
+		date_default_timezone_set('PRC');
+		$this->load->library('session');
+    }
+
+    /**
+    * 操作错误跳转的快捷方法
+    * @access protected
+    * @param string $message 错误信息
+    * @param string $jumpUrl 页面跳转地址
+    * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
+    * @return void
+    */
+    protected function error($message = '', $jumpUrl = '', $ajax = false)
+    {
+        $this->dispatchJump($message, 0, $jumpUrl, $ajax);
+    }
+
+    /**
+     * 操作成功跳转的快捷方法
+     * @access protected
+     * @param string $message 提示信息
+     * @param string $jumpUrl 页面跳转地址
+     * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
+     * @return void
+     */
+    protected function success($message = '', $jumpUrl = '', $ajax = false)
+    {
+        $this->dispatchJump($message, 1, $jumpUrl, $ajax);
+    }
+
+
+    /**
+     * Ajax方式返回数据到客户端
+     * @access protected
+     * @param mixed $data 要返回的数据
+     * @param String $type AJAX返回数据格式
+     * @param int $json_option 传递给json_encode的option参数
+     * @return void
+     */
+    protected function ajaxReturn($data, $type = 'JSON', $json_option = 0)
+    {
+        if (empty($type)) {
+            $type  =   'JSON';
+        }
+        switch (strtoupper($type)) {
+            case 'JSON':
+                // 返回JSON数据格式到客户端 包含状态信息
+                header('Content-Type:application/json; charset=utf-8');
+                exit(json_encode($data, $json_option));
+            case 'XML':
+                // 返回xml格式数据
+                header('Content-Type:text/xml; charset=utf-8');
+                exit(xml_encode($data));
+            case 'JSONP':
+                // 返回JSON数据格式到客户端 包含状态信息
+                header('Content-Type:application/json; charset=utf-8');
+                $handler  =   isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
+                exit($handler.'('.json_encode($data, $json_option).');');
+            case 'EVAL':
+                // 返回可执行的js脚本
+                header('Content-Type:text/html; charset=utf-8');
+                exit($data);
+            default:
+                // 用于扩展其他返回格式数据
+                Hook::listen('ajax_return', $data);
+        }
+    }
+    /**
+     * URL重定向
+     * @param string $url 重定向的URL地址
+     * @param integer $time 重定向的等待时间(秒)
+     * @param string $msg 重定向前的提示信息
+     * @return void
+     */
+    protected function redirect($url, $time = 0, $msg = '')
+    {
+        //多行URL地址支持
+        $url        = str_replace(array("\n", "\r"), '', $url);
+        if (empty($msg)) {
+            $msg    = "系统将在{$time}秒之后自动跳转到{$url}!";
+        } else {
+            $msg    .='<br>';
+            $msg    .="系统将在{$time}秒之后自动跳转到{$url}!";
+        }
+        if (!headers_sent()) {
+            // redirect
+            if (0 === $time) {
+                header('Location: ' . $url);
+            } else {
+                header("refresh:{$time};url={$url}");
+                echo($msg);
+            }
+            exit();
+        } else {
+            $str    = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
+            if ($time != 0) {
+                $str .= $msg;
+            }
+            exit($str);
+        }
+    }
+
+    private function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false)
+    {
+        if (true === $ajax || $this->input->is_ajax_request()) {// AJAX提交
+            $data           =   is_array($ajax)?$ajax:array();
+            $data['info']   =   $message;
+            $data['status'] =   $status;
+            $data['url']    =   $jumpUrl;
+            $this->ajaxReturn($data);
+        } else {
+            $this->redirect($jumpUrl, 5, $message);
+        }
+    }
+    /**
+     * 是否是AJAx提交的
+     * @return bool
+     */
+    protected function IS_AJAX()
+    {
+        return (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
+    }
+
+    /**
+     * 是否是GET提交的
+     */
+    protected function IS_GET()
+    {
+        return $_SERVER['REQUEST_METHOD'] == 'GET' ? true : false;
+    }
+
+    /**
+     * 是否是POST提交
+     * @return int
+     */
+    protected function IS_POST()
+    {
+        return ($_SERVER['REQUEST_METHOD'] == 'POST') ? true : false;
+    }
+
+}

+ 185 - 0
application/controllers/api/v1/ApiBase.php

@@ -0,0 +1,185 @@
+<?php
+defined('BASEPATH') or exit('No direct script access allowed');
+class ApiBase extends CI_Controller
+{
+
+    protected $isLogin = true; // 是否需要检查登录状态,默认检查
+
+    protected $userId = 0;
+
+    protected $orgId = 0;
+
+    public function __construct()
+    {
+        parent::__construct();
+        
+        header("Access-Control-Allow-Origin: *");
+        header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
+        header('Access-Control-Allow-Headers:Origin,Content-Type,Accept,token,X-Requested-With,device');
+        
+        date_default_timezone_set('PRC');
+        $this->orgId = $this->input->get_post('orgId')?$this->input->get_post('orgId'):0;
+        if($this->isLogin) {
+            $this->_init();
+        }
+
+    }
+
+    protected function _init(){
+        $token = $this->input->post('token');
+        $userId = $this->input->post('userId');
+        if(!$token){
+            $this->error('登录信息失效,请重新登录',-100);
+        }
+
+        if($token == '0913747667023'){
+            $this->userId = 0;
+        } else {
+            $arr = explode("9", $token);
+            if (empty($arr)||count($arr)!=2) {
+                $this->error('登录信息失效,请重新登录',-100);
+            }
+            //八进制转十进制
+            $userid = octdec($arr[0]);
+            if (empty($userid)) {
+                $this->error('登录信息失效,请重新登录',-100);
+            }
+
+            if($userId != $userid){
+                $this->error('登录信息失效,请重新登录',-100);
+            }
+
+            $this->load->model('app/token_model');
+            $ret = $this->token_model->checkToken($token);
+            if(!$ret){
+                $this->error('登录信息失效,请重新登录',-100);
+            }
+            if($userId != $ret){
+                $this->error('登录信息失效,请重新登录',-100);
+            }
+            $this->userId = $userId;
+        }
+    }
+
+    protected static function change_null($d)
+    {
+        if (is_array($d)) {
+            foreach ($d as $k => $v) {
+                $d[$k] = self::change_null($v);
+            }
+        } elseif (is_object($d)) {
+            foreach ($d as $k => $v) {
+                $d->$k = self::change_null($v);
+            }
+        } elseif (is_null($d)) {
+            return '';
+        }
+        return $d;
+    }
+
+    public function success($data=array(),$msg='成功',$isNull=0,$isObject=0){
+        $ret = array(
+            'success' => true,
+            'message' => $msg,
+            'data' => null,
+            'code' => 0
+        );
+        if($data && is_array($data)){
+            if($isNull == 0){
+                $ret['data'] = $this->change_null(array_change_line_to_hump($data));
+            }else{
+                $ret['data'] = array_change_line_to_hump($data);
+            }
+        }else{
+            $ret['data'] = $data;
+        }
+        header('Content-Type:application/json; charset=utf-8');
+        if($isObject == 1 && empty($data)){
+            exit(json_encode($ret, JSON_UNESCAPED_UNICODE|JSON_FORCE_OBJECT));
+        }else{
+            exit(json_encode($ret, JSON_UNESCAPED_UNICODE));
+        }
+    }
+
+    public function error($msg = '错误',$code = 1,$data=array(),$isNull=0,$isObject=0){
+        if($code == 0){
+            $code = 1; // 一般错误
+        }
+        $ret = array(
+            'success' => false,
+            'message' => $msg,
+            'data' => null,
+            'code' => $code
+        );
+        if($data){
+            if($isNull == 0){
+                $ret['data'] = $this->change_null(array_change_line_to_hump($data));
+            }else{
+                $ret['data'] = array_change_line_to_hump($data);
+            }
+        }
+        header('Content-Type:application/json; charset=utf-8');
+        if($isObject == 1 && empty($data)){
+            exit(json_encode($ret, JSON_UNESCAPED_UNICODE|JSON_FORCE_OBJECT));
+        }else{
+            exit(json_encode($ret, JSON_UNESCAPED_UNICODE));
+        }
+    }
+
+    /**
+     * Ajax方式返回数据到客户端
+     * @access protected
+     * @param mixed $data 要返回的数据
+     * @param String $type AJAX返回数据格式
+     * @param int $json_option 传递给json_encode的option参数
+     * @return void
+     */
+    protected function ajaxReturn($data, $type = 'JSON', $json_option = 0)
+    {
+        if (empty($type)) {
+            $type  =   'JSON';
+        }
+        switch (strtoupper($type)) {
+            case 'XML':
+                // 返回xml格式数据
+                header('Content-Type:text/xml; charset=utf-8');
+                exit(xml_encode($data));
+            case 'JSONP':
+                // 返回JSON数据格式到客户端 包含状态信息
+                header('Content-Type:application/json; charset=utf-8');
+                $handler  =   isset($_GET['callback']) ? $_GET[C('callback')] : 'callback';
+                exit($handler.'('.json_encode($data, $json_option).');');
+            default:
+                // 返回JSON数据格式到客户端 包含状态信息
+                header('Content-Type:application/json; charset=utf-8');
+                exit(json_encode($data, JSON_UNESCAPED_UNICODE));
+        }
+    }
+
+    /**
+     * 是否是AJAx提交的
+     * @return bool
+     */
+    protected function IS_AJAX()
+    {
+        return (! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
+    }
+
+    /**
+     * 是否是GET提交的
+     */
+    protected function IS_GET()
+    {
+        return $_SERVER['REQUEST_METHOD'] == 'GET' ? true : false;
+    }
+
+    /**
+     * 是否是POST提交
+     * @return int
+     */
+    protected function IS_POST()
+    {
+        return ($_SERVER['REQUEST_METHOD'] == 'POST') ? true : false;
+    }
+
+}

+ 39 - 0
application/controllers/api/v1/User.php

@@ -0,0 +1,39 @@
+<?php
+defined('BASEPATH') or exit('No direct script access allowed');
+require_once('ApiBase.php');
+
+class User extends ApiBase
+{
+    protected $isLogin = false; // 不需要登录信息
+
+    public function ysuser(){
+        $orgId = 5; // 厦门大学附属中山医院
+        $url = $this->config->item('api_url2')."api/v1/User/ysuser";
+        $users = $this->curl_post($url,['orgId' => $orgId]);
+        $users = json_decode($users,true);
+
+        $this->success($users['data']?$users['data']:[]);
+    }
+
+
+	function curl_post($url, $data) {
+		$ch = curl_init ();
+		$header = array ("Accept-Charset: utf-8",'Expect:' );
+		curl_setopt ( $ch, CURLOPT_URL, $url );
+		curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
+		curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
+		curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
+		curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
+		curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
+		curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
+		curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
+		curl_setopt ( $ch, CURLOPT_TIMEOUT, 60 );
+		// 最好加上http_build_query 转换,防止有些服务器不兼容
+		curl_setopt ( $ch, CURLOPT_POSTFIELDS, http_build_query ( $data ) );
+		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
+		$result = curl_exec ( $ch );
+		curl_close ( $ch );
+		return $result;
+	}
+
+}

+ 11 - 0
application/controllers/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/core/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 114 - 0
application/helpers/common_helper.php

@@ -0,0 +1,114 @@
+<?php
+
+function curl_post1($url, $data = []) {
+	$ch = curl_init ();
+	$header = array ("Accept-Charset: utf-8",'Expect:' );
+	curl_setopt ( $ch, CURLOPT_URL, $url );
+	curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
+	curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+//	curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
+//	curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
+	curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
+	curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
+	curl_setopt($ch, CURLOPT_ENCODING, "gzip");
+	curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
+15 Accept-Encoding: gzip,deflate,sdch' );
+	curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, false );
+//	curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
+	curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 );
+	// 最好加上http_build_query 转换,防止有些服务器不兼容
+	if($data){
+		curl_setopt ( $ch, CURLOPT_POSTFIELDS, http_build_query ( $data ) );
+	}
+	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
+	$result = curl_exec ( $ch );
+	curl_close ( $ch );
+	return $result;
+}
+
+function curl_post($url, $data = []) {
+	$ch = curl_init();
+	curl_setopt($ch, CURLOPT_URL, $url);
+	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
+	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
+	curl_setopt($ch, CURLOPT_POST, 1);
+	if($data){
+		curl_setopt ( $ch, CURLOPT_POSTFIELDS, http_build_query ( $data ) );
+	}
+	$output = curl_exec($ch);
+	curl_close($ch);
+	return $output;
+}
+
+
+/**
+ * AES 128 ecb 加密 与java加密保持一致
+ * @param $data 加密字符串
+ * @param $key 加密key
+ * @return string 加密串
+ */
+function aes_encrypt($data, $key='') {
+	if(!$key){
+		$key = get_instance()->config->item('encryption_key');
+	}
+	$data =  openssl_encrypt($data, 'aes-128-ecb', $key, OPENSSL_RAW_DATA);
+	return base64_encode($data);
+}
+
+/**
+ * AES 128 ecb 解密 与java加密保持一致
+ * @param $data 解密字符串
+ * @param $key 加密key
+ * @return string 解密串
+ */
+function aes_decrypt($data, $key='') {
+	if(!$key){
+		$key = get_instance()->config->item('encryption_key');
+	}
+	$encrypted = base64_decode($data);
+	return openssl_decrypt($encrypted, 'aes-128-ecb', $key, OPENSSL_RAW_DATA);
+}
+
+/**
+ * 多维数组键值下划线转换为驼峰
+ * @param $arr
+ * @return array
+ */
+function array_change_line_to_hump($arr){
+	if(!is_array($arr)){
+		return $arr;
+	}
+	$tem = [];
+	foreach ($arr as $k=>$v){
+		if(is_array($v)){
+			$tem[line_to_hump($k)] = array_change_line_to_hump($v);
+		}else{
+			$tem[line_to_hump($k)] = $v;
+		}
+	}
+	return $tem;
+}
+
+/**
+ * 驼峰转下划线
+ * @param $str
+ * @return string|string[]|null
+ */
+function hump_to_line($str){
+	return preg_replace_callback('/([A-Z])/', function ($match) {
+		return '_' . lcfirst($match[0]);
+	}, $str);
+}
+
+/**
+ * 下划线转驼峰
+ * @param $str
+ * @return string|string[]|null
+ */
+function line_to_hump($str){
+	$str = strtolower($str);
+	return preg_replace_callback('/(_[a-z])/', function ($match) {
+		return ucfirst(trim($match[0], '_'));
+	}, $str);
+}

+ 11 - 0
application/helpers/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/hooks/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/language/english/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/language/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/libraries/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/logs/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/models/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

File diff suppressed because it is too large
+ 2 - 0
application/session/ci_session0om0hamghi667u72ojs931rt79fa1qgk


File diff suppressed because it is too large
+ 2 - 0
application/session/ci_session6m46pu8quashf3e94lvrbk2155t6rctj


File diff suppressed because it is too large
+ 1 - 0
application/session/ci_sessionb9dkp22hnp1i5gavaelv7c4lskruiqt4


File diff suppressed because it is too large
+ 1 - 0
application/session/ci_sessiondkcu2sd952ntoe97fhbctg5aivtvimj3


File diff suppressed because it is too large
+ 2 - 0
application/session/ci_sessionga7qd8q4hgkslgcerugtk5vjfdic40c3


File diff suppressed because it is too large
+ 2 - 0
application/session/ci_sessiongo8sdeoo64n35lpbhbi9teab0eq1ag4k


File diff suppressed because it is too large
+ 1 - 0
application/session/ci_sessiongtk4jlmgvun7b8rjmp2ftl1pb2tr4r8q


File diff suppressed because it is too large
+ 2 - 0
application/session/ci_sessionlubnnofcs2o3riquafjkid61etvqfskq


File diff suppressed because it is too large
+ 1 - 0
application/session/ci_sessionmtn6c4dmf9e015olfb3jsu4lfohqvsij


File diff suppressed because it is too large
+ 2 - 0
application/session/ci_sessionotlh0n0e3r06998q0o1kf4npt0nnfdas


File diff suppressed because it is too large
+ 1 - 0
application/session/ci_sessionveifuv3jl93d5iq4i0bee3auqpub8cs6


+ 11 - 0
application/third_party/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 8 - 0
application/views/errors/cli/error_404.php

@@ -0,0 +1,8 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+echo "\nERROR: ",
+	$heading,
+	"\n\n",
+	$message,
+	"\n\n";

+ 8 - 0
application/views/errors/cli/error_db.php

@@ -0,0 +1,8 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+echo "\nDatabase error: ",
+	$heading,
+	"\n\n",
+	$message,
+	"\n\n";

+ 21 - 0
application/views/errors/cli/error_exception.php

@@ -0,0 +1,21 @@
+<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
+
+An uncaught Exception was encountered
+
+Type:        <?php echo get_class($exception), "\n"; ?>
+Message:     <?php echo $message, "\n"; ?>
+Filename:    <?php echo $exception->getFile(), "\n"; ?>
+Line Number: <?php echo $exception->getLine(); ?>
+
+<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
+
+Backtrace:
+<?php	foreach ($exception->getTrace() as $error): ?>
+<?php		if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
+	File: <?php echo $error['file'], "\n"; ?>
+	Line: <?php echo $error['line'], "\n"; ?>
+	Function: <?php echo $error['function'], "\n\n"; ?>
+<?php		endif ?>
+<?php	endforeach ?>
+
+<?php endif ?>

+ 8 - 0
application/views/errors/cli/error_general.php

@@ -0,0 +1,8 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+echo "\nERROR: ",
+	$heading,
+	"\n\n",
+	$message,
+	"\n\n";

+ 21 - 0
application/views/errors/cli/error_php.php

@@ -0,0 +1,21 @@
+<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
+
+A PHP Error was encountered
+
+Severity:    <?php echo $severity, "\n"; ?>
+Message:     <?php echo $message, "\n"; ?>
+Filename:    <?php echo $filepath, "\n"; ?>
+Line Number: <?php echo $line; ?>
+
+<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
+
+Backtrace:
+<?php	foreach (debug_backtrace() as $error): ?>
+<?php		if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
+	File: <?php echo $error['file'], "\n"; ?>
+	Line: <?php echo $error['line'], "\n"; ?>
+	Function: <?php echo $error['function'], "\n\n"; ?>
+<?php		endif ?>
+<?php	endforeach ?>
+
+<?php endif ?>

+ 11 - 0
application/views/errors/cli/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 64 - 0
application/views/errors/html/error_404.php

@@ -0,0 +1,64 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?><!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>404 Page Not Found</title>
+<style type="text/css">
+
+::selection { background-color: #E13300; color: white; }
+::-moz-selection { background-color: #E13300; color: white; }
+
+body {
+	background-color: #fff;
+	margin: 40px;
+	font: 13px/20px normal Helvetica, Arial, sans-serif;
+	color: #4F5155;
+}
+
+a {
+	color: #003399;
+	background-color: transparent;
+	font-weight: normal;
+}
+
+h1 {
+	color: #444;
+	background-color: transparent;
+	border-bottom: 1px solid #D0D0D0;
+	font-size: 19px;
+	font-weight: normal;
+	margin: 0 0 14px 0;
+	padding: 14px 15px 10px 15px;
+}
+
+code {
+	font-family: Consolas, Monaco, Courier New, Courier, monospace;
+	font-size: 12px;
+	background-color: #f9f9f9;
+	border: 1px solid #D0D0D0;
+	color: #002166;
+	display: block;
+	margin: 14px 0 14px 0;
+	padding: 12px 10px 12px 10px;
+}
+
+#container {
+	margin: 10px;
+	border: 1px solid #D0D0D0;
+	box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+	margin: 12px 15px 12px 15px;
+}
+</style>
+</head>
+<body>
+	<div id="container">
+		<h1><?php echo $heading; ?></h1>
+		<?php echo $message; ?>
+	</div>
+</body>
+</html>

+ 64 - 0
application/views/errors/html/error_db.php

@@ -0,0 +1,64 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?><!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Database Error</title>
+<style type="text/css">
+
+::selection { background-color: #E13300; color: white; }
+::-moz-selection { background-color: #E13300; color: white; }
+
+body {
+	background-color: #fff;
+	margin: 40px;
+	font: 13px/20px normal Helvetica, Arial, sans-serif;
+	color: #4F5155;
+}
+
+a {
+	color: #003399;
+	background-color: transparent;
+	font-weight: normal;
+}
+
+h1 {
+	color: #444;
+	background-color: transparent;
+	border-bottom: 1px solid #D0D0D0;
+	font-size: 19px;
+	font-weight: normal;
+	margin: 0 0 14px 0;
+	padding: 14px 15px 10px 15px;
+}
+
+code {
+	font-family: Consolas, Monaco, Courier New, Courier, monospace;
+	font-size: 12px;
+	background-color: #f9f9f9;
+	border: 1px solid #D0D0D0;
+	color: #002166;
+	display: block;
+	margin: 14px 0 14px 0;
+	padding: 12px 10px 12px 10px;
+}
+
+#container {
+	margin: 10px;
+	border: 1px solid #D0D0D0;
+	box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+	margin: 12px 15px 12px 15px;
+}
+</style>
+</head>
+<body>
+	<div id="container">
+		<h1><?php echo $heading; ?></h1>
+		<?php echo $message; ?>
+	</div>
+</body>
+</html>

+ 32 - 0
application/views/errors/html/error_exception.php

@@ -0,0 +1,32 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?>
+
+<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
+
+<h4>An uncaught Exception was encountered</h4>
+
+<p>Type: <?php echo get_class($exception); ?></p>
+<p>Message: <?php echo $message; ?></p>
+<p>Filename: <?php echo $exception->getFile(); ?></p>
+<p>Line Number: <?php echo $exception->getLine(); ?></p>
+
+<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
+
+	<p>Backtrace:</p>
+	<?php foreach ($exception->getTrace() as $error): ?>
+
+		<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
+
+			<p style="margin-left:10px">
+			File: <?php echo $error['file']; ?><br />
+			Line: <?php echo $error['line']; ?><br />
+			Function: <?php echo $error['function']; ?>
+			</p>
+		<?php endif ?>
+
+	<?php endforeach ?>
+
+<?php endif ?>
+
+</div>

+ 64 - 0
application/views/errors/html/error_general.php

@@ -0,0 +1,64 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?><!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Error</title>
+<style type="text/css">
+
+::selection { background-color: #E13300; color: white; }
+::-moz-selection { background-color: #E13300; color: white; }
+
+body {
+	background-color: #fff;
+	margin: 40px;
+	font: 13px/20px normal Helvetica, Arial, sans-serif;
+	color: #4F5155;
+}
+
+a {
+	color: #003399;
+	background-color: transparent;
+	font-weight: normal;
+}
+
+h1 {
+	color: #444;
+	background-color: transparent;
+	border-bottom: 1px solid #D0D0D0;
+	font-size: 19px;
+	font-weight: normal;
+	margin: 0 0 14px 0;
+	padding: 14px 15px 10px 15px;
+}
+
+code {
+	font-family: Consolas, Monaco, Courier New, Courier, monospace;
+	font-size: 12px;
+	background-color: #f9f9f9;
+	border: 1px solid #D0D0D0;
+	color: #002166;
+	display: block;
+	margin: 14px 0 14px 0;
+	padding: 12px 10px 12px 10px;
+}
+
+#container {
+	margin: 10px;
+	border: 1px solid #D0D0D0;
+	box-shadow: 0 0 8px #D0D0D0;
+}
+
+p {
+	margin: 12px 15px 12px 15px;
+}
+</style>
+</head>
+<body>
+	<div id="container">
+		<h1><?php echo $heading; ?></h1>
+		<?php echo $message; ?>
+	</div>
+</body>
+</html>

+ 33 - 0
application/views/errors/html/error_php.php

@@ -0,0 +1,33 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?>
+
+<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
+
+<h4>A PHP Error was encountered</h4>
+
+<p>Severity: <?php echo $severity; ?></p>
+<p>Message:  <?php echo $message; ?></p>
+<p>Filename: <?php echo $filepath; ?></p>
+<p>Line Number: <?php echo $line; ?></p>
+
+<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>
+
+	<p>Backtrace:</p>
+	<?php foreach (debug_backtrace() as $error): ?>
+
+		<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
+
+			<p style="margin-left:10px">
+			File: <?php echo $error['file'] ?><br />
+			Line: <?php echo $error['line'] ?><br />
+			Function: <?php echo $error['function'] ?>
+			</p>
+
+		<?php endif ?>
+
+	<?php endforeach ?>
+
+<?php endif ?>
+
+</div>

+ 11 - 0
application/views/errors/html/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/views/errors/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 11 - 0
application/views/index.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>403 Forbidden</title>
+</head>
+<body>
+
+<p>Directory access is forbidden.</p>
+
+</body>
+</html>

+ 894 - 0
application/views/index.php

@@ -0,0 +1,894 @@
+<!doctype html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<meta name="viewport"
+		  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+	<meta http-equiv="X-UA-Compatible" content="ie=edge">
+	<link rel="Shortcut Icon" href="/public/images/logo.png" type="image/x-icon" />
+	<title>国天云医院后勤保障服务支持系统</title>
+	<script src="/public/js/jquery-1.11.3.min.js"></script>
+	<script src="/public/layer/layer.js"></script>
+	<link rel="stylesheet" href="/public/elementui/index.min.css" integrity="sha512-UaTBkNLFJFC1jgQBIvKrIbM64pw5QfcjH3tGQcBaPhHh69rqyc2R6UIoV16lVo53PKHIQfdPXs8lBtG7xMsctQ==" crossorigin="anonymous" />
+	<script src="/public/elementui/vue.min.js"></script>
+	<script src="/public/elementui/index.min.js" integrity="sha512-KhiFHhXUBBvO9P5Io/ITsjbu069pjGudMqhpgv57pWDJ3UG51y/YDd4VtGlt/GXhwf36dHgGsTp0Alu48bvk9g==" crossorigin="anonymous"></script>
+	<style>
+		html,body{
+			padding: 0;
+			margin: 0;
+			background-color: #CCCCCC;
+		}
+		.pull-right{
+			float: right !important;
+		}
+		#vueapp{
+			width: 80%;
+			margin: 0 auto;
+			background-color: #ffffff;
+		}
+		.main{
+			padding: 15px;
+		}
+		.add-btns{
+			padding: 10px 0;
+		}
+		.page{
+			text-align: center;
+			padding: 20px 0;
+		}
+		td{
+			padding: 5px;
+		}
+	</style>
+</head>
+<body>
+<div id="vueapp">
+	<el-menu
+		class="el-menu-demo"
+		mode="horizontal"
+	>
+		<el-menu-item index="1"><?=$this->session->userinfo['orgName']?></el-menu-item>
+		<el-submenu index="2"  class="pull-right">
+			<template slot="title">欢迎,<?=$this->session->userinfo['realName']?></template>
+			<el-menu-item index="2-1" @click="handleLogin">退出</el-menu-item>
+		</el-submenu>
+	</el-menu>
+
+	<el-card class="box-card">
+		<div slot="header" class="clearfix">
+			<el-row>
+				<el-col :span="4">
+					<el-button size="small" @click="addOrder">
+						创建{{btnTitle}}订单
+					</el-button>
+				</el-col>
+				<el-col :span="20" style="text-align: right;">
+
+				</el-col>
+			</el-row>
+		</div>
+		<el-tabs v-model="activeName" @tab-click="handleClick">
+			<el-tab-pane v-for="(item,index) in menus" :label="item.title" :name="item.id"></el-tab-pane>
+<!--			<el-tab-pane label="报修订单" name="first"></el-tab-pane>-->
+<!--			<el-tab-pane label="保洁订单" name="second"></el-tab-pane>-->
+<!--			<el-tab-pane label="运送订单" name="third"></el-tab-pane>-->
+<!--			<el-tab-pane label="隐患预警订单" name="fourth"></el-tab-pane>-->
+		</el-tabs>
+
+		<el-table
+			v-loading="loading"
+			:data="tableData"
+			style="width: 100%"
+		>
+			<el-table-column prop="orderId" label="编号"></el-table-column>
+			<el-table-column prop="workTypeMode" label="订单类型">
+				<template slot-scope="scope">
+					<span v-if="scope.row.workTypeMode == 1">报修</span>
+					<span v-if="scope.row.workTypeMode == 2">保洁</span>
+					<span v-if="scope.row.workTypeMode == 3">运送</span>
+					<span v-if="scope.row.workTypeMode == 4">隐患预警</span>
+				</template>
+			</el-table-column>
+			<el-table-column prop="createTime" label="申请时间"></el-table-column>
+			<el-table-column prop="content" label="内容"></el-table-column>
+			<el-table-column prop="outContent" label="状态"></el-table-column>
+			<el-table-column label="操作">
+				<template slot-scope="scope">
+					<el-link :underline="false" type="success" @click="handleInfo(scope.row.orderId)">
+						详情
+					</el-link>
+					&nbsp;
+					<el-link v-if="scope.row.currOrderMode == 1" :underline="false" type="danger" @click="cancelClick(scope.row.orderId)">
+						取消
+					</el-link>
+				</template>
+			</el-table-column>
+		</el-table>
+		<div class="page">
+			<el-pagination
+				class="page-position"
+				background
+				layout="prev, pager, next, sizes, total, jumper"
+				:current-page="page"
+				:page-sizes="[10,15,25,50,100]"
+				:page-size="size"
+				:total="total"
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+			>
+			</el-pagination>
+		</div>
+	</el-card>
+
+	<el-dialog
+		:title="title"
+		:visible.sync="dialogVisible"
+		center
+		width="800px"
+		@close="handleCancelModal"
+	>
+		<el-form v-if="dialogVisible" ref="myForm" :model="form" :rules="rules" label-width="100px">
+			<el-form-item v-if="activeName != 'third'" label="任务内容" prop="content">
+				<el-input v-model="form.content" type="textarea" row="4" maxlength="200" show-word-limit placeholder="请输入" />
+			</el-form-item>
+			<div v-if="activeName == 'third'">
+				<el-row>
+					<el-col :span="12">
+						<el-form-item label="始发空间" prop="start">
+							<el-select v-if="addrLoading" v-model="form.start" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option
+									v-for="item in addrs"
+									:key="item.conveyAddrId"
+									:label="item.title"
+									:value="item.conveyAddrId">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="运送类型" prop="cate">
+							<el-select v-if="cateLoading" v-model="form.cate" filterable clearable placeholder="请选择" style="width:100%;" @change="changeCate">
+								<el-option
+									v-for="item in cates"
+									:key="item.id"
+									:label="item.name"
+									:value="item.id">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="目的空间" prop="end">
+							<el-select v-if="addrLoading" v-model="form.end" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option
+									v-for="item in addrs"
+									:key="item.conveyAddrId"
+									:label="item.title"
+									:value="item.conveyAddrId">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="优先级" prop="priority">
+							<el-select v-model="form.priority" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option
+									v-for="item in prioritys"
+									:key="item.id"
+									:label="item.name"
+									:value="item.id">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="运送设备" prop="device">
+							<el-select v-model="form.device" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option
+									v-for="item in devices"
+									:key="item.id"
+									:label="item.name"
+									:value="item.id">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="需求时间" prop="xqTime">
+							<el-date-picker
+								style="width: 100%"
+								v-model="form.xqTime"
+								type="datetime"
+								:editable="false"
+								value-format="yyyy-MM-dd HH:mm"
+								:clearable="true"
+								placeholder="选择日期时间">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="应完成时间" prop="ywcTime">
+							<el-date-picker
+								style="width: 100%"
+								v-model="form.ywcTime"
+								type="datetime"
+								:editable="false"
+								value-format="yyyy-MM-dd HH:mm"
+								:clearable="true"
+								placeholder="选择日期时间">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="联系人" prop="name">
+							<el-input v-model="form.name" maxlength="50" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="联系电话" prop="phone">
+							<el-input v-model="form.phone" maxlength="50" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="任务内容" prop="content">
+							<el-input v-model="form.content" type="textarea" row="4" maxlength="200" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col v-if="brShow" :span="8">
+						<el-form-item label="床号" prop="bedNumber">
+							<el-input v-model="form.bedNumber" maxlength="100" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col v-if="brShow" :span="8">
+						<el-form-item label="姓名" prop="pName">
+							<el-input v-model="form.pName" maxlength="100" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col v-if="brShow"  :span="8">
+						<el-form-item label="病案号" prop="baNumber">
+							<el-input v-model="form.baNumber" maxlength="100" show-word-limit placeholder="请输入" />
+						</el-form-item>
+					</el-col>
+					<el-col v-if="brShow"  :span="8">
+						<el-form-item label="性别" prop="gender">
+							<el-select v-model="form.gender" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option value="0" label="未知"></el-option>
+								<el-option value="1" label="男"></el-option>
+								<el-option value="2" label="女"></el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col v-if="brShow"  :span="8">
+						<el-form-item label="是否往返" prop="back">
+							<el-select v-model="form.back" filterable clearable placeholder="请选择" style="width:100%;">
+								<el-option value="0" label="否"></el-option>
+								<el-option value="1" label="是"></el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+				</el-row>
+			</div>
+		</el-form>
+		<span slot="footer" class="dialog-footer">
+			<el-button type="primary" :loading="flag" @click="submitbtn">确 定</el-button>
+			<el-button @click="handleCancelModal">取 消</el-button>
+		</span>
+	</el-dialog>
+
+	<el-dialog
+		title="订单详情"
+		:visible.sync="dialogVisible2"
+		center
+		width="800px"
+		@close="handleCancelModal2"
+	>
+		<table v-if="info">
+			<tr>
+				<td style="width: 120px">订单类型</td>
+				<td>{{info.workTypeModeName}}</td>
+			</tr>
+			<tr>
+				<td>申请人</td>
+				<td>{{info.realName}}</td>
+			</tr>
+			<tr>
+				<td>申请科室</td>
+				<td>{{info.depName}}</td>
+			</tr>
+			<tr>
+				<td>申请时间</td>
+				<td>{{info.creatteTime}}</td>
+			</tr>
+			<tr>
+				<td>状态</td>
+				<td>
+					<span v-if="info.currOrderMode == 1">待处理</span>
+					<span v-if="info.currOrderMode == 2||info.currOrderMode == 3">已取消</span>
+					<span v-if="info.currOrderMode == 5">已派发</span>
+					<span v-if="info.currOrderMode == 9">已完成</span>
+					<span v-if="info.currOrderMode == 11">已评价</span>
+					<span v-if="info.currOrderMode == 12">已作废</span>
+				</td>
+			</tr>
+			<tr>
+				<td>联系电话</td>
+				<td>{{info.mobile}}</td>
+			</tr>
+			<tr>
+				<td>任务内容</td>
+				<td>{{info.content}}</td>
+			</tr>
+
+			<tr v-if="info.workTypeMode == 3">
+				<td>始发空间</td><td>{{info.startConveyAddrTitle}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>运送类型</td>
+				<td>
+					{{info.conveyTypeName}}
+				</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>目的空间</td><td>{{info.endConveyAddrTitle}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>优先级</td>
+				<td>
+					{{info.priority}}
+				</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>运送设备</td><td>{{info.device}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>需求时间</td><td>{{info.xqTime}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>应完成时间</td><td>{{info.ywcTime}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>联系人</td><td>{{info.pName}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>联系电话</td><td>{{info.phone}}</td>
+			</tr>
+
+			<tr v-if="info.workTypeMode == 3">
+				<td>床号</td><td>{{info.bedNumber}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>姓名</td><td>{{info.pName}}</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>病案号</td><td>{{info.baNumber}}</td>
+			</tr>
+
+			<tr v-if="info.workTypeMode == 3">
+				<td>性别</td>
+				<td>
+					<span v-if="info.gender == 0">未知</span>
+					<span v-if="info.gender == 1">男</span>
+					<span v-if="info.gender == 2">女</span>
+				</td>
+			</tr>
+			<tr v-if="info.workTypeMode == 3">
+				<td>往返</td>
+				<td>
+					<span v-if="info.back == 0">否</span>
+					<span v-if="info.back == 1">是</span>
+				</td>
+			</tr>
+			<tr v-if="info.currOrderMode == 11">
+				<td>评论</td>
+				<td>
+					<el-rate v-model="info.score" disabled></el-rate>
+					<div>
+						{{info.commentContent}}
+					</div>
+				</td>
+			</tr>
+			<tr v-if="info.currOrderMode == 9">
+				<td>评论</td>
+				<td>
+					<el-rate v-model="commentform.score"></el-rate>
+					<div style="padding: 5px 0">
+						<el-input v-model="commentform.content" placeholder="请输入内容"></el-input>
+					</div>
+					<el-button @click="comment">评价</el-button>
+				</td>
+			</tr>
+			<tr v-if="info.sample">
+				<td>已扫描标本</td>
+				<td>
+					{{info.sample}}
+				</td>
+			</tr>
+		</table>
+	</el-dialog>
+
+</div>
+<script>
+
+	new Vue({
+		el: '#vueapp',
+		data: function() {
+			return {
+				page: 1,
+				size: 10,
+				total: 100,
+				btnTitle: '报修',
+				title: '',
+				activeName: 'first',
+				dialogVisible: false,
+				flag: false,
+				commonparam:{
+					userId: <?=$this->session->userinfo['userId']?>,
+					token: '<?=$this->session->userinfo['token']?>',
+					orgId: <?=$this->session->userinfo['orgId']?>
+				},
+				initstart: <?=$this->session->userinfo['user']['addrId']?>,
+				form : {
+					content: '',
+					start: '',
+					end: '',
+					cate: '',
+					priority: '',
+					device: '',
+					name: '',
+					phone: '',
+					xqTime: '',
+					ywcTime: '',
+					bedNumber: '',
+					pName: '',
+					baNumber: '',
+					gender: '',
+					back: '',
+				},
+				commentform : {
+					score: 0,
+					content: ''
+				},
+				rules : {
+					// name: [
+					// 	{ required: true, message: '请输入名称', trigger: 'blur' },
+					// ],
+				},
+				brShow: false, //是否显示病人信息
+
+				tableData:[],
+				addrs: [],
+				addrLoading: false,
+				cates: [],
+				cateLoading: false,
+				prioritys: [
+					{id: 1,name: '可延缓的'},
+					{id: 2,name: '常规'},
+					{id: 3,name: '紧急'},
+					{id: 4,name: '预约'}
+				],
+				devices: [],
+				alldevices: [],
+				deviceLoading: false,
+				loading: false,
+				dialogVisible2: false,
+				info: null,
+				infoLoading: false,
+				commentform:{
+					score: 5,
+					content: ''
+				},
+				menus: [
+					{id:'first',title:'报修订单',url:'/Order/addshow?mode=1'},
+					{id:'second',title:'保洁订单',url:'/Order/addshow?mode=2'},
+					{id:'third',title:'运送订单',url:'/Order/addshow?mode=3'},
+					{id:'forth',title:'隐患预警订单',url:'/Order/addshow?mode=4'},
+				],
+				urules: <?=json_encode($this->session->userinfo['rules'])?>
+			}
+		},
+		watch: {
+
+		},
+
+		created(){
+			const newmenus = this.menus;
+			this.menus = [];
+			newmenus.forEach((item) => {
+				let ff = false;
+				this.urules.forEach((item2) => {
+					if(item.url == item2.url){
+						ff = true;
+					}
+				});
+				if(ff){
+					this.menus.push(item);
+				}
+			});
+
+			this.activeName = '';
+			if(this.menus.length > 0){
+				this.activeName = this.menus[0].id;
+			}
+
+			if(this.activeName == 'first'){
+				this.btnTitle = '报修';
+			}else if(this.activeName == 'second'){
+				this.btnTitle = '保洁';
+			}else if(this.activeName == 'third'){
+				this.btnTitle = '运送';
+			}else{
+				this.btnTitle = '隐患预警';
+			}
+
+			this.getAddrData();
+			this.getCateData();
+			this.getDeviceData(0);
+			this.getListData();
+		},
+
+		methods: {
+			handleClick(){
+				if(this.activeName == 'first'){
+					this.btnTitle = '报修';
+				}else if(this.activeName == 'second'){
+					this.btnTitle = '保洁';
+				}else if(this.activeName == 'third'){
+					this.btnTitle = '运送';
+				}else{
+					this.btnTitle = '隐患预警';
+				}
+				this.page = 1;
+				this.getListData();
+			},
+			changeCate(){
+				var that = this;
+				this.cates.forEach((item) => {
+					if(item.id.toString() == this.form.cate.toString()){
+						var pp = that.commonparam;
+						pp.cateId=  item.id;
+						$.ajax({
+							url: '/home/conveyXqTime',
+							type: 'POST',
+							data: pp,
+							success: function(res){
+								if(res.code==0){
+									that.form.xqTime = res.data.xqTime;
+									that.form.ywcTime = res.data.wcTime;
+								}else if(data.code == -100){
+									that.checkLogin(res);
+								}else {
+									that.form.xqTime = '';
+									that.form.ywcTime = '';
+									layer.msg(data.message);
+								}
+
+							},
+							error: function (){
+
+							}
+						});
+						this.form.end = item.ends.length == 1?item.ends[0].id:'';
+						this.form.priority = item.priority > 0?item.priority:'';
+						if(item.cate == 1){
+							this.brShow = true;
+						}else{
+							this.brShow = false;
+						}
+						this.form.device = '';
+						this.devices = [];
+						this.getDeviceData(this.form.cate);
+					}
+				});
+			},
+			handleLogin(){
+				window.location.href = '/Account/logout';
+			},
+			handleSizeChange(val) {
+				this.size = val;
+				this.getListData();
+			},
+			handleCurrentChange(val) {
+				this.page = val;
+				this.getListData();
+			},
+			addOrder(){
+				if(this.activeName == 'first'){
+					this.title = '创建报修订单';
+				}else if(this.activeName == 'second'){
+					this.title = '创建保洁订单';
+				}else if(this.activeName == 'third'){
+					this.title = '创建运送订单';
+				}else{
+					this.title = '创建隐患预警订单';
+				}
+				this.form = {
+					content: '',
+					start: this.initstart > 0?this.initstart:'',
+					end: '',
+					cate: '',
+					priority: '',
+					device: '',
+					name: '',
+					phone: '',
+					xqTime: '',
+					ywcTime: '',
+					bedNumber: '',
+					pName: '',
+					baNumber: '',
+					gender: '',
+					back: '',
+				};
+				this.dialogVisible = true;
+			},
+			handleCancelModal(){
+				this.dialogVisible = false;
+			},
+			handleInfo(id){
+				console.log(id);
+				this.getInfo(id);
+				this.commentform = {
+					score : 5,
+					content : ''
+				};
+				this.dialogVisible2 = true;
+			},
+			handleCancelModal2(){
+				this.dialogVisible2 = false;
+			},
+			getInfo(id){
+				let that = this;
+				that.infoLoading = true;
+				const param = this.commonparam;
+				param.orderId = id;
+				$.ajax({
+					url: '/home/orderQueryDetail',
+					type: 'POST',
+					data: param,
+					success: function(data){
+						console.log(data);
+						if(data.code == 0){
+							that.info = data.data;
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message)
+						}
+						that.infoLoading = false;
+					},
+					error: function (){
+						that.infoLoading = false;
+					}
+				});
+			},
+			cancelClick(id) {
+				let that = this;
+				if (this.flag === false) {
+					this.$confirm('确定要取消此订单吗?', '提示', {
+						confirmButtonText: '确定',
+						cancelButtonText: '取消',
+						type: 'warning',
+					}).then(() => {
+						const param = this.commonparam;
+						param.orderId = id;
+						that.flag = true;
+						$.ajax({
+							url: '/home/updateOrderModeByUser',
+							type: 'POST',
+							data: param,
+							success: function(data){
+								console.log(data);
+								if(data.code == 0){
+									that.page = 1;
+									that.getListData();
+								}else if(data.code == -100){
+									that.checkLogin(data);
+								}else{
+									layer.msg(data.message)
+								}
+								that.flag = false;
+							},
+							error: function (){
+								that.flag = false;
+							}
+						});
+					}).catch(() => {});
+				}
+			},
+			getCateData(){
+				let that = this;
+				$.ajax({
+					url: '/home/conveyCateLists',
+					type: 'POST',
+					data: this.commonparam,
+					success: function(data){
+						console.log(data);
+						if(data.code == 0){
+							that.cates = data.data;
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message)
+						}
+						that.cateLoading = true;
+					},
+					error: function (){
+						that.cateLoading = true;
+					}
+				});
+			},
+			getAddrData(){
+				let that = this;
+				$.ajax({
+					url: '/home/queryConveyAddrList',
+					type: 'POST',
+					data: this.commonparam,
+					success: function(data){
+						console.log(data);
+						if(data.code == 0){
+							that.addrs = data.data;
+							console.log(that.addrs);
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message)
+						}
+						that.addrLoading = true;
+					},
+					error: function (){
+						that.addrLoading = true;
+					}
+				});
+			},
+			getDeviceData(cateId){
+				let that = this;
+				const param = this.commonparam;
+				param.cateId = cateId;
+				$.ajax({
+					url: '/home/ConveyDeviceLists',
+					type: 'POST',
+					data: param,
+					success: function(data){
+						console.log(data);
+						if(data.code == 0){
+							that.devices = data.data;
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message)
+						}
+						that.deviceLoading = true;
+					},
+					error: function (){
+						that.deviceLoading = true;
+					}
+				});
+			},
+			getListData(){
+				let that = this;
+				const param = this.commonparam;
+				param.page = this.page;
+				param.size = this.size;
+				if(this.activeName == 'first'){
+					param.mode = 1;
+				}else if(this.activeName == 'second'){
+					param.mode = 2;
+				}else if(this.activeName == 'third'){
+					param.mode = 3;
+				}else{
+					param.mode = 4;
+				}
+				that.loading = true;
+				$.ajax({
+					url: '/home/queryUserOrdersByMode',
+					type: 'POST',
+					data: param,
+					success: function(data){
+						if(data.code == 0){
+							that.tableData = data.data.lists;
+							that.total = data.data.total;
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message)
+						}
+						that.loading = false;
+					},
+					error: function (){
+						that.loading = false;
+					}
+				});
+			},
+			submitbtn(){
+				let that = this;
+				const param = this.commonparam;
+				param.content = this.form.content;
+				param.depId = "<?=isset($this->session->userinfo['deptList'][0]['orgId'])?$this->session->userinfo['deptList'][0]['orgId']:""?>";
+				if(this.activeName == 'first'){
+					param.workTypeMode = 1;
+				}else if(this.activeName == 'second'){
+					param.workTypeMode = 2;
+				}else if(this.activeName == 'third'){
+					param.workTypeMode = 3;
+				}else{
+					param.workTypeMode = 4;
+				}
+
+				if(this.activeName == 'third'){
+					param.start = this.form.start;
+					param.end = this.form.end;
+					param.cate = this.form.cate;
+					param.priority = this.form.priority;
+					param.device = this.form.device;
+					param.name = this.form.name;
+					param.phone = this.form.phone;
+					param.xqTime = this.form.xqTime;
+					param.ywcTime = this.form.ywcTime;
+					param.bedNumber = this.form.bedNumber;
+					param.pName = this.form.pName;
+					param.baNumber = this.form.baNumber;
+					param.gender = this.form.gender;
+					param.back = this.form.back;
+				}
+				$.ajax({
+					url: '/home/orderYhadd',
+					type: 'POST',
+					data: param,
+					success: function(data){
+						if(data.code == 0){
+							layer.msg('操作成功');
+							that.dialogVisible = false;
+							this.page = 1;
+							that.getListData();
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message);
+						}
+					},
+					error: function (){
+					}
+				});
+			},
+
+			comment(){
+				let that = this;
+				const param2 = this.commonparam;
+				param2.content = this.commentform.content;
+				param2.score = this.commentform.score;
+				param2.fromId = this.info['orderId'];
+				param2.type = this.info['workTypeMode'];
+
+				$.ajax({
+					url: '/home/commentYhadd',
+					type: 'POST',
+					data: param2,
+					success: function(data){
+						if(data.code == 0){
+							layer.msg('操作成功');
+							that.dialogVisible2 = false;
+							that.getListData();
+						}else if(data.code == -100){
+							that.checkLogin(data);
+						}else{
+							layer.msg(data.message);
+						}
+					},
+					error: function (){
+					}
+				});
+			},
+
+			checkLogin(res){
+				if(res.code == -100){
+					layer.msg(res.message);
+					setTimeout(function () {
+						window.location.href = '/Account/logout';
+					},1500);
+				}
+			}
+		}
+	})
+</script>
+</body>
+</html>

+ 303 - 0
application/views/login.php

@@ -0,0 +1,303 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="UTF-8">
+	<title>国天云医院后勤保障服务支持系统</title>
+	<meta name="renderer" content="webkit">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<link rel="Shortcut Icon" href="/public/images/logo.png" type="image/x-icon" />
+	<link rel="stylesheet" href="/public/bootstrap-3.3.5-dist/css/bootstrap.min.css">
+	<link href="/public/layer/skin/layer.css" rel="stylesheet">
+	<script src="/public/js/jquery-1.11.3.min.js"></script>
+	<script src="/public/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script>
+	<script src="/public/layer/layer.js"></script>
+	<style type="text/css">
+		html {
+			height: 100%;
+		}
+		body {
+			font-family:"Microsoft Yahei";
+			font-size:12px;
+			margin:0;
+			background: #fff url(/public/images/bg2x.png) no-repeat;
+			background-size:100% 100%;
+			height:100%;
+			width:100%;
+			overflow: hidden;
+			background-size: cover;
+			color: #fff;
+			padding-top: 11%;
+		}
+		.login-div{
+			width: 950px;
+			height: 600px;
+			margin: 0 auto;
+
+		}
+		.login-left{
+			padding-top: 85px;
+		}
+		.login-left img{
+			width: 313px;
+			height: 163px;
+		}
+		.login-left-body{
+			padding-top: 24px;
+			color: #ffffff;
+			font-weight: bold;
+		}
+		.login-left-title{
+			font-size: 22px;
+			letter-spacing: 2px;
+		}
+		.login-left-desc{
+			font-size: 15px;
+		}
+
+		.login-right{
+			width: 390px;
+			height: 420px;
+			background-color: #ffffff;
+			padding: 15px 25px 20px 25px;
+			float: right;
+			padding-top: 25px;
+		}
+		.login-right h3{
+			width: 100%;
+			height: 30px;
+			line-height: 30px;
+			padding-left: 3px;
+			color: #0f0f0f;
+			text-align: center;
+			letter-spacing: 10px;
+		}
+		.login-input{
+			width: 100%;
+			height:50px ;
+			line-height: 50px;
+			margin-top: 10px;
+
+		}
+		.login_user{
+			width: 50px;
+			height: 100%;
+			display: inline-block;
+			background: #295898;
+			border-radius: 8px 0px 0px 8px;
+			padding: 0px 12px;
+
+
+		}
+		.login_user  img{
+			width: 26px;
+			height: 26px;
+			margin-top: -4px;
+		}
+		.login_input {
+			width: 280px;
+			height: 50px;
+			line-height: 48px;
+			display: inline-block;
+			margin-left: -3px;
+			border-right:1px solid #F1F1F1;
+			border-top:1px solid #F1F1F1;
+			border-bottom:1px solid #F1F1F1;
+			border-radius: 0px 5px 5px 0px;
+
+		}
+
+		.login-input1{
+			padding: 10px 0;
+		}
+		.login-input1 a{
+			color: #8B8EAA;
+			padding-right: 35px;
+		}
+		.login-input1 a:hover,.login-input1 a:focus,.login-input1 a:active{
+			color: #8B8EAA;
+			text-decoration: none;
+		}
+		.login-input input{
+			width: 100%;
+			height: 45px;
+			/*line-height: 50px;*/
+			background-color: transparent;
+			border: 0;
+			outline: none;
+			border-radius: 5px;
+
+			font-size: 16px;
+			padding-left: 30px;
+			color: #0f0f0f;
+		}
+		input::-webkit-input-placeholder {
+			font-weight: 400;
+			color: #BBBBBB;
+		}
+		.login-ss{
+			margin-top: 40px;
+		}
+
+		.login-footer{
+			padding: 20px 10px;
+			margin-top: 10px;
+		}
+		.login-submit{
+			display: inline-block;
+			width: 100%;
+			height: 50px;
+			line-height: 50px;
+			background: #295898;
+			border-radius: 8px;
+			color: #ffffff;
+			font-size: 16px;
+			text-align: center;
+
+		}
+		.login-submit:hover,.login-submit:focus{
+			color: #ffffff;
+			text-decoration: none;
+		}
+
+		.login-input-box{
+			width: 100%;
+			height: 50px;
+			line-height: 50px;
+			overflow: hidden;
+			margin-top: 30px;
+		}
+		.login-input-box .login_icon{
+			width: 60px;
+			height: 48px;
+			text-align: center;
+			background-color: #295898;
+			float: left;
+			border-radius: 8px 0 0 8px;
+			border: 1px solid #295898;
+		}
+		.login-input-box .login_icon img{
+			width: 25px;
+			height: 25px;
+			vertical-align: middle;
+			margin-top: -5px;
+		}
+		.login_input-box{
+			width: 279px;
+			height: 48px;
+			float: left;
+			border-radius: 0 8px 8px 0;
+			border: 1px solid #DDDDDD;
+			border-left: 0;
+			color: #222222;
+
+			overflow: hidden;
+		}
+		.login_input-box input{
+			width: 100%;
+			height: 100%;
+			vertical-align: middle;
+			border: 0;
+			outline: none;
+			margin-top: -8px;
+			font-size: 16px;
+			padding: 0 15px;
+		}
+
+	</style>
+</head>
+<body>
+
+<div class="login-div">
+	<div class="col-xs-6  login-left text-center">
+		<img src="/public/images/login2x.png">
+		<div class="login-left-body">
+			<span class="login-left-title">医院后勤保障服务支持系统</span> <br>
+		</div>
+	</div>
+	<div class="col-xs-6 login-right">
+		<h3 >用户登录</h3>
+		<div class="login-ss" id="login1">
+			<div class="login-input-box">
+				<div class="login_icon">
+					<img src="/public/images/login_user2x.png" alt="">
+				</div>
+				<div class="login_input-box">
+					<input id="Username" type="text" placeholder="请输入您的用户名">
+				</div>
+			</div>
+			<div class="login-input-box">
+				<div class="login_icon">
+					<img src="/public/images/login_pw2x.png" alt="">
+				</div>
+				<div class="login_input-box">
+					<input id="Password" type="password" placeholder="请输入您的密码">
+				</div>
+			</div>
+		</div>
+		<div class="login-footer">
+			<a href="javascript:;" class="login-submit" id="login-btn" onclick="login()">登 录</a>
+		</div>
+	</div>
+</div>
+</body>
+</html>
+<script type="text/javascript">
+	if(window.top!==window.self){
+		window.top.location=window.location
+	}
+
+	var type = 1;
+	function logintab(_self) {
+		$('.login-btn').removeClass('cur');
+		$(_self).addClass('cur');
+		$('.login-ss').hide();
+		$('#'+$(_self).attr('data-ele')).show();
+		type = $(_self).attr('data-type');
+	}
+
+	function login() {
+		var flag = $('#login-btn').attr('data-flag');
+		if(flag == 1){
+			return false;
+		}
+		$('#login-btn').attr('data-flag',1).html('登 录 中...');
+		if(type == 1){
+			var username = $('#Username').val();
+			var password = $('#Password').val();
+		}else{
+			var username = $('#phone').val();
+			var password = $('#code').val();
+			// layer.msg('暂不支持此登录方式');
+			// $('#login-btn').attr('data-flag',0).html('登 录');
+			// return false;
+		}
+
+		$.ajax({
+			url:'/Account/checkLogin',
+			type:"POST",
+			data:{'Username':username,'Password':password,'type':type},
+			success:function (res) {
+				if(res.status == 1){
+					window.location.href = '/Home/index';
+				}else{
+					layer.msg(res.info);
+				}
+				$('#login-btn').attr('data-flag',0).html('登 录');
+			},
+			error:function (result) {
+				layer.msg('请求失败');
+				$('#login-btn').attr('data-flag',0).html('登 录');
+			}
+		});
+	}
+
+	document.onkeydown = function (e) { // 回车提交表单
+		var theEvent = window.event || e;
+		var code = theEvent.keyCode || theEvent.which || theEvent.charCode;
+		if (code == 13) {
+			login();
+		}
+	}
+</script>
+
+

+ 23 - 0
composer.json

@@ -0,0 +1,23 @@
+{
+	"description": "The CodeIgniter framework",
+	"name": "codeigniter/framework",
+	"type": "project",
+	"homepage": "https://codeigniter.com",
+	"license": "MIT",
+	"support": {
+		"forum": "http://forum.codeigniter.com/",
+		"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
+		"slack": "https://codeigniterchat.slack.com",
+		"source": "https://github.com/bcit-ci/CodeIgniter"
+	},
+	"require": {
+		"php": ">=5.6.7"
+	},
+	"suggest": {
+		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
+	},
+	"require-dev": {
+		"mikey179/vfsStream": "1.1.*",
+		"phpunit/phpunit": "4.* || 5.*"
+	}
+}

+ 93 - 0
contributing.md

@@ -0,0 +1,93 @@
+# Contributing to CodeIgniter
+
+CodeIgniter is a community driven project and accepts contributions of code and documentation from the community. These contributions are made in the form of Issues or [Pull Requests](http://help.github.com/send-pull-requests/) on the [CodeIgniter repository](https://github.com/bcit-ci/CodeIgniter) on GitHub.
+
+Issues are a quick way to point out a bug. If you find a bug or documentation error in CodeIgniter then please check a few things first:
+
+1. There is not already an open Issue
+2. The issue has already been fixed (check the develop branch, or look for closed Issues)
+3. Is it something really obvious that you can fix yourself?
+
+Reporting issues is helpful but an even better approach is to send a Pull Request, which is done by "Forking" the main repository and committing to your own copy. This will require you to use the version control system called Git.
+
+## Guidelines
+
+Before we look into how, here are the guidelines. If your Pull Requests fail
+to pass these guidelines it will be declined and you will need to re-submit
+when you’ve made the changes. This might sound a bit tough, but it is required
+for us to maintain quality of the code-base.
+
+### PHP Style
+
+All code must meet the [Style Guide](https://codeigniter.com/user_guide/general/styleguide.html), which is
+essentially the [Allman indent style](https://en.wikipedia.org/wiki/Indent_style#Allman_style), underscores and readable operators. This makes certain that all code is the same format as the existing code and means it will be as readable as possible.
+
+### Documentation
+
+If you change anything that requires a change to documentation then you will need to add it. New classes, methods, parameters, changing default values, etc are all things that will require a change to documentation. The change-log must also be updated for every change. Also PHPDoc blocks must be maintained.
+
+### Compatibility
+
+CodeIgniter recommends PHP 5.4 or newer to be used, but it should be
+compatible with PHP 5.2.4 so all code supplied must stick to this
+requirement. If PHP 5.3 (and above) functions or features are used then
+there must be a fallback for PHP 5.2.4.
+
+### Branching
+
+CodeIgniter uses the [Git-Flow](http://nvie.com/posts/a-successful-git-branching-model/) branching model which requires all pull requests to be sent to the "develop" branch. This is
+where the next planned version will be developed. The "master" branch will always contain the latest stable version and is kept clean so a "hotfix" (e.g: an emergency security patch) can be applied to master to create a new version, without worrying about other features holding it up. For this reason all commits need to be made to "develop" and any sent to "master" will be closed automatically. If you have multiple changes to submit, please place all changes into their own branch on your fork.
+
+One thing at a time: A pull request should only contain one change. That does not mean only one commit, but one change - however many commits it took. The reason for this is that if you change X and Y but send a pull request for both at the same time, we might really want X but disagree with Y, meaning we cannot merge the request. Using the Git-Flow branching model you can create new branches for both of these features and send two requests.
+
+### Signing
+
+You must sign your work, certifying that you either wrote the work or otherwise have the right to pass it on to an open source project. git makes this trivial as you merely have to use `--signoff` on your commits to your CodeIgniter fork.
+
+`git commit --signoff`
+
+or simply
+
+`git commit -s`
+
+This will sign your commits with the information setup in your git config, e.g.
+
+`Signed-off-by: John Q Public <john.public@example.com>`
+
+If you are using [Tower](http://www.git-tower.com/) there is a "Sign-Off" checkbox in the commit window. You could even alias git commit to use the `-s` flag so you don’t have to think about it.
+
+By signing your work in this manner, you certify to a "Developer's Certificate of Origin". The current version of this certificate is in the `DCO.txt` file in the root of this repository.
+
+## How-to Guide
+
+There are two ways to make changes, the easy way and the hard way. Either way you will need to [create a GitHub account](https://github.com/signup/free).
+
+Easy way GitHub allows in-line editing of files for making simple typo changes and quick-fixes. This is not the best way as you are unable to test the code works. If you do this you could be introducing syntax errors, etc, but for a Git-phobic user this is good for a quick-fix.
+
+Hard way The best way to contribute is to "clone" your fork of CodeIgniter to your development area. That sounds like some jargon, but "forking" on GitHub means "making a copy of that repo to your account" and "cloning" means "copying that code to your environment so you can work on it".
+
+1. [Set up Git](https://help.github.com/en/articles/set-up-git) (Windows, Mac & Linux)
+2. Go to the [CodeIgniter repo](https://github.com/bcit-ci/CodeIgniter)
+3. [Fork it](https://help.github.com/en/articles/fork-a-repo)
+4. [Clone](https://help.github.com/en/articles/fetching-a-remote#clone) your forked CodeIgniter repo: git@github.com:<your-name>/CodeIgniter.git.
+5. Checkout the "develop" branch. At this point you are ready to start making changes.
+6. Fix existing bugs on the Issue tracker after taking a look to see nobody else is working on them.
+7. [Commit](https://help.github.com/en/articles/adding-a-file-to-a-repository-using-the-command-line) the files
+8. [Push](https://help.github.com/en/articles/pushing-to-a-remote) your develop branch to your fork
+9. [Send a pull request](https://help.github.com/en/articles/creating-a-pull-request)
+
+The Reactor Engineers will now be alerted about the change and at least one of the team will respond. If your change fails to meet the guidelines it will be bounced, or feedback will be provided to help you improve it.
+
+Once the Reactor Engineer handling your pull request is happy with it they will merge it into develop and your patch will be part of the next release.
+
+### Keeping your fork up-to-date
+
+Unlike systems like Subversion, Git can have multiple remotes. A remote is the name for a URL of a Git repository. By default your fork will have a remote named "origin" which points to your fork, but you can add another remote named "codeigniter" which points to `git://github.com/bcit-ci/CodeIgniter.git`. This is a read-only remote but you can pull from this develop branch to update your own.
+
+If you are using command-line you can do the following:
+
+1. `git remote add codeigniter git://github.com/bcit-ci/CodeIgniter.git`
+2. `git pull codeigniter develop`
+3. `git push origin develop`
+
+Now your fork is up to date. This should be done regularly, or before you send a pull request at least.

+ 315 - 0
index.php

@@ -0,0 +1,315 @@
+<?php
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP
+ *
+ * This content is released under the MIT License (MIT)
+ *
+ * Copyright (c) 2014 - 2019, British Columbia Institute of Technology
+ *
+ * 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.
+ *
+ * @package	CodeIgniter
+ * @author	EllisLab Dev Team
+ * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
+ * @copyright	Copyright (c) 2014 - 2019, British Columbia Institute of Technology (https://bcit.ca/)
+ * @license	https://opensource.org/licenses/MIT	MIT License
+ * @link	https://codeigniter.com
+ * @since	Version 1.0.0
+ * @filesource
+ */
+
+/*
+ *---------------------------------------------------------------
+ * APPLICATION ENVIRONMENT
+ *---------------------------------------------------------------
+ *
+ * You can load different configurations depending on your
+ * current environment. Setting the environment also influences
+ * things like logging and error reporting.
+ *
+ * This can be set to anything, but default usage is:
+ *
+ *     development
+ *     testing
+ *     production
+ *
+ * NOTE: If you change these, also change the error_reporting() code below
+ */
+	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
+
+/*
+ *---------------------------------------------------------------
+ * ERROR REPORTING
+ *---------------------------------------------------------------
+ *
+ * Different environments will require different levels of error reporting.
+ * By default development will show errors but testing and live will hide them.
+ */
+switch (ENVIRONMENT)
+{
+	case 'development':
+		error_reporting(-1);
+		ini_set('display_errors', 1);
+	break;
+
+	case 'testing':
+	case 'production':
+		ini_set('display_errors', 0);
+		if (version_compare(PHP_VERSION, '5.3', '>='))
+		{
+			error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
+		}
+		else
+		{
+			error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
+		}
+	break;
+
+	default:
+		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
+		echo 'The application environment is not set correctly.';
+		exit(1); // EXIT_ERROR
+}
+
+/*
+ *---------------------------------------------------------------
+ * SYSTEM DIRECTORY NAME
+ *---------------------------------------------------------------
+ *
+ * This variable must contain the name of your "system" directory.
+ * Set the path if it is not in the same directory as this file.
+ */
+	$system_path = 'system';
+
+/*
+ *---------------------------------------------------------------
+ * APPLICATION DIRECTORY NAME
+ *---------------------------------------------------------------
+ *
+ * If you want this front controller to use a different "application"
+ * directory than the default one you can set its name here. The directory
+ * can also be renamed or relocated anywhere on your server. If you do,
+ * use an absolute (full) server path.
+ * For more info please see the user guide:
+ *
+ * https://codeigniter.com/user_guide/general/managing_apps.html
+ *
+ * NO TRAILING SLASH!
+ */
+	$application_folder = 'application';
+
+/*
+ *---------------------------------------------------------------
+ * VIEW DIRECTORY NAME
+ *---------------------------------------------------------------
+ *
+ * If you want to move the view directory out of the application
+ * directory, set the path to it here. The directory can be renamed
+ * and relocated anywhere on your server. If blank, it will default
+ * to the standard location inside your application directory.
+ * If you do move this, use an absolute (full) server path.
+ *
+ * NO TRAILING SLASH!
+ */
+	$view_folder = '';
+
+
+/*
+ * --------------------------------------------------------------------
+ * DEFAULT CONTROLLER
+ * --------------------------------------------------------------------
+ *
+ * Normally you will set your default controller in the routes.php file.
+ * You can, however, force a custom routing by hard-coding a
+ * specific controller class/function here. For most applications, you
+ * WILL NOT set your routing here, but it's an option for those
+ * special instances where you might want to override the standard
+ * routing in a specific front controller that shares a common CI installation.
+ *
+ * IMPORTANT: If you set the routing here, NO OTHER controller will be
+ * callable. In essence, this preference limits your application to ONE
+ * specific controller. Leave the function name blank if you need
+ * to call functions dynamically via the URI.
+ *
+ * Un-comment the $routing array below to use this feature
+ */
+	// The directory name, relative to the "controllers" directory.  Leave blank
+	// if your controller is not in a sub-directory within the "controllers" one
+	// $routing['directory'] = '';
+
+	// The controller class file name.  Example:  mycontroller
+	// $routing['controller'] = '';
+
+	// The controller function you wish to be called.
+	// $routing['function']	= '';
+
+
+/*
+ * -------------------------------------------------------------------
+ *  CUSTOM CONFIG VALUES
+ * -------------------------------------------------------------------
+ *
+ * The $assign_to_config array below will be passed dynamically to the
+ * config class when initialized. This allows you to set custom config
+ * items or override any default config values found in the config.php file.
+ * This can be handy as it permits you to share one application between
+ * multiple front controller files, with each file containing different
+ * config values.
+ *
+ * Un-comment the $assign_to_config array below to use this feature
+ */
+	// $assign_to_config['name_of_config_item'] = 'value of config item';
+
+
+
+// --------------------------------------------------------------------
+// END OF USER CONFIGURABLE SETTINGS.  DO NOT EDIT BELOW THIS LINE
+// --------------------------------------------------------------------
+
+/*
+ * ---------------------------------------------------------------
+ *  Resolve the system path for increased reliability
+ * ---------------------------------------------------------------
+ */
+
+	// Set the current directory correctly for CLI requests
+	if (defined('STDIN'))
+	{
+		chdir(dirname(__FILE__));
+	}
+
+	if (($_temp = realpath($system_path)) !== FALSE)
+	{
+		$system_path = $_temp.DIRECTORY_SEPARATOR;
+	}
+	else
+	{
+		// Ensure there's a trailing slash
+		$system_path = strtr(
+			rtrim($system_path, '/\\'),
+			'/\\',
+			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
+		).DIRECTORY_SEPARATOR;
+	}
+
+	// Is the system path correct?
+	if ( ! is_dir($system_path))
+	{
+		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
+		echo 'Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME);
+		exit(3); // EXIT_CONFIG
+	}
+
+/*
+ * -------------------------------------------------------------------
+ *  Now that we know the path, set the main path constants
+ * -------------------------------------------------------------------
+ */
+	// The name of THIS file
+	define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
+
+	// Path to the system directory
+	define('BASEPATH', $system_path);
+
+	// Path to the front controller (this file) directory
+	define('FCPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
+
+	// Name of the "system" directory
+	define('SYSDIR', basename(BASEPATH));
+
+	// The path to the "application" directory
+	if (is_dir($application_folder))
+	{
+		if (($_temp = realpath($application_folder)) !== FALSE)
+		{
+			$application_folder = $_temp;
+		}
+		else
+		{
+			$application_folder = strtr(
+				rtrim($application_folder, '/\\'),
+				'/\\',
+				DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
+			);
+		}
+	}
+	elseif (is_dir(BASEPATH.$application_folder.DIRECTORY_SEPARATOR))
+	{
+		$application_folder = BASEPATH.strtr(
+			trim($application_folder, '/\\'),
+			'/\\',
+			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
+		);
+	}
+	else
+	{
+		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
+		echo 'Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
+		exit(3); // EXIT_CONFIG
+	}
+
+	define('APPPATH', $application_folder.DIRECTORY_SEPARATOR);
+
+	// The path to the "views" directory
+	if ( ! isset($view_folder[0]) && is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR))
+	{
+		$view_folder = APPPATH.'views';
+	}
+	elseif (is_dir($view_folder))
+	{
+		if (($_temp = realpath($view_folder)) !== FALSE)
+		{
+			$view_folder = $_temp;
+		}
+		else
+		{
+			$view_folder = strtr(
+				rtrim($view_folder, '/\\'),
+				'/\\',
+				DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
+			);
+		}
+	}
+	elseif (is_dir(APPPATH.$view_folder.DIRECTORY_SEPARATOR))
+	{
+		$view_folder = APPPATH.strtr(
+			trim($view_folder, '/\\'),
+			'/\\',
+			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
+		);
+	}
+	else
+	{
+		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
+		echo 'Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
+		exit(3); // EXIT_CONFIG
+	}
+
+	define('VIEWPATH', $view_folder.DIRECTORY_SEPARATOR);
+
+/*
+ * --------------------------------------------------------------------
+ * LOAD THE BOOTSTRAP FILE
+ * --------------------------------------------------------------------
+ *
+ * And away we go...
+ */
+require_once BASEPATH.'core/CodeIgniter.php';

+ 21 - 0
license.txt

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 - 2019, British Columbia Institute of Technology
+
+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.

+ 66 - 0
lis/bar.php

@@ -0,0 +1,66 @@
+<?php
+	//设置utf-8格式,解决中文乱码
+	header("Content-type: text/html; charset=utf-8");
+    date_default_timezone_set("PRC");
+
+//    $WorkerCode = 'hg001';
+//    $WorkerName = '护工001';
+//    $txm = '1232345634P';
+//    $NurseConfirmCode = '192.1.1.21';
+
+    $reqMsg = $_POST['reqMsg'];
+
+    try{
+        $url = "http://127.0.0.1:8082";
+
+        $ret = curl_post($url,['data' => $reqMsg]);
+        $json = json_decode($ret,true);
+        if(!empty($json) && $json['success']){
+            return_ok('成功',$json['data']);
+        }else{
+            return_wrong('请求失败');
+        }
+    }catch (Exception $e){
+        return_wrong('请求失败'.$e->getMessage());
+    }
+
+    function curl_post($url, $data) {
+        $ch = curl_init ();
+        $header = array ("Accept-Charset: utf-8",'Expect:' );
+        curl_setopt ( $ch, CURLOPT_URL, $url );
+        curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
+        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
+        curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
+        curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
+        curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
+        curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
+        curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
+        curl_setopt ( $ch, CURLOPT_TIMEOUT, 60 );
+        // 最好加上http_build_query 转换,防止有些服务器不兼容
+        curl_setopt ( $ch, CURLOPT_POSTFIELDS, http_build_query ( $data ) );
+        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
+        $result = curl_exec ( $ch );
+        curl_close ( $ch );
+        return $result;
+    }
+
+    function xmltoarr($str){
+        return json_decode(json_encode(simplexml_load_string($str, null, LIBXML_NOCDATA)),true);
+    }
+
+ 	function return_ok($msg = '成功',$data = ''){
+        header('Content-Type:application/json; charset=utf-8');
+        $result['status'] = 1;
+        $result['msg'] = $msg ;
+        $result['data'] = $data;
+        exit(json_encode($result,JSON_UNESCAPED_UNICODE));
+    }
+
+    function return_wrong($msg = '失败'){
+        header('Content-Type:application/json; charset=utf-8');
+        $result['status'] = 0;
+        $result['msg'] = $msg ;
+        exit(json_encode($result,JSON_UNESCAPED_UNICODE));
+    }
+ 	
+?>

+ 587 - 0
public/bootstrap-3.3.5-dist/css/bootstrap-theme.css

@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+  text-shadow: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+}
+.btn-default {
+  text-shadow: 0 1px 0 #fff;
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #dbdbdb;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+  background-color: #e0e0e0;
+  background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+  background-color: #e0e0e0;
+  border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #e0e0e0;
+  background-image: none;
+}
+.btn-primary {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+  background-color: #265a88;
+  background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #265a88;
+  border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #265a88;
+  background-image: none;
+}
+.btn-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+  background-color: #419641;
+  background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+  background-color: #419641;
+  border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #419641;
+  background-image: none;
+}
+.btn-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+  background-color: #2aabd2;
+  background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+  background-color: #2aabd2;
+  border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #2aabd2;
+  background-image: none;
+}
+.btn-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+  background-color: #eb9316;
+  background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #eb9316;
+  border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #eb9316;
+  background-image: none;
+}
+.btn-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+  background-color: #c12e2a;
+  background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #c12e2a;
+  border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #c12e2a;
+  background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background-color: #e8e8e8;
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  background-color: #2e6da4;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.navbar-default {
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+@media (max-width: 767px) {
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+    background-repeat: repeat-x;
+  }
+}
+.alert {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #b2dba1;
+}
+.alert-info {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #9acfea;
+}
+.alert-warning {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #f5e79e;
+}
+.alert-danger {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dca7a7;
+}
+.progress {
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 #286090;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+  text-shadow: none;
+}
+.panel {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.well {
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dcdcdc;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because it is too large
+ 1 - 0
public/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map


File diff suppressed because it is too large
+ 5 - 0
public/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css


File diff suppressed because it is too large
+ 6800 - 0
public/bootstrap-3.3.5-dist/css/bootstrap.css


File diff suppressed because it is too large
+ 1 - 0
public/bootstrap-3.3.5-dist/css/bootstrap.css.map


File diff suppressed because it is too large
+ 5 - 0
public/bootstrap-3.3.5-dist/css/bootstrap.min.css


BIN
public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.eot


File diff suppressed because it is too large
+ 288 - 0
public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.svg


BIN
public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.ttf


BIN
public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff


BIN
public/bootstrap-3.3.5-dist/fonts/glyphicons-halflings-regular.woff2


File diff suppressed because it is too large
+ 2363 - 0
public/bootstrap-3.3.5-dist/js/bootstrap.js


File diff suppressed because it is too large
+ 7 - 0
public/bootstrap-3.3.5-dist/js/bootstrap.min.js


File diff suppressed because it is too large
+ 5 - 0
public/bootstrap-3.3.5-dist/js/jquery-1.11.3.min.js


+ 13 - 0
public/bootstrap-3.3.5-dist/js/npm.js

@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')

BIN
public/elementui/fonts/element-icons.ttf


BIN
public/elementui/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/elementui/index.min.css


File diff suppressed because it is too large
+ 1 - 0
public/elementui/index.min.js


File diff suppressed because it is too large
+ 6 - 0
public/elementui/vue.min.js


+ 2 - 0
public/elementui/说明.txt

@@ -0,0 +1,2 @@
+element-ui/2.14.1
+vue/2.6.12

BIN
public/images/bg2x.png


BIN
public/images/login2x.png


BIN
public/images/login_pw2x.png


BIN
public/images/login_user2x.png


BIN
public/images/logo.png


File diff suppressed because it is too large
+ 5 - 0
public/js/jquery-1.11.3.min.js


File diff suppressed because it is too large
+ 2 - 0
public/layer/layer.js


BIN
public/layer/skin/default/icon-ext.png


BIN
public/layer/skin/default/icon.png


+ 0 - 0
public/layer/skin/default/loading-0.gif


Some files were not shown because too many files changed in this diff