├── .gitignore ├── LICENSE ├── README.md ├── api ├── .editorconfig ├── .gitignore ├── .htaccess ├── application │ ├── .htaccess │ ├── cache │ │ ├── .htaccess │ │ └── index.html │ ├── config │ │ ├── autoload.php │ │ ├── config.php │ │ ├── constants.php │ │ ├── database.php │ │ ├── doctypes.php │ │ ├── foreign_chars.php │ │ ├── hooks.php │ │ ├── index.html │ │ ├── memcached.php │ │ ├── migration.php │ │ ├── mimes.php │ │ ├── profiler.php │ │ ├── routes.php │ │ ├── smileys.php │ │ └── user_agents.php │ ├── controllers │ │ ├── Admin.php │ │ ├── Naire.php │ │ ├── User.php │ │ └── index.html │ ├── core │ │ └── index.html │ ├── helpers │ │ ├── index.html │ │ └── jwt_helper.php │ ├── hooks │ │ └── index.html │ ├── index.html │ ├── language │ │ ├── english │ │ │ └── index.html │ │ └── index.html │ ├── libraries │ │ ├── JWT.php │ │ ├── PHPExcel.php │ │ ├── PHPExcel │ │ │ ├── Autoloader.php │ │ │ ├── CachedObjectStorage │ │ │ │ ├── APC.php │ │ │ │ ├── CacheBase.php │ │ │ │ ├── DiscISAM.php │ │ │ │ ├── ICache.php │ │ │ │ ├── Igbinary.php │ │ │ │ ├── Memcache.php │ │ │ │ ├── Memory.php │ │ │ │ ├── MemoryGZip.php │ │ │ │ ├── MemorySerialized.php │ │ │ │ ├── PHPTemp.php │ │ │ │ ├── SQLite.php │ │ │ │ ├── SQLite3.php │ │ │ │ └── Wincache.php │ │ │ ├── CachedObjectStorageFactory.php │ │ │ ├── CalcEngine │ │ │ │ ├── CyclicReferenceStack.php │ │ │ │ └── Logger.php │ │ │ ├── Calculation.php │ │ │ ├── Calculation │ │ │ │ ├── Database.php │ │ │ │ ├── DateTime.php │ │ │ │ ├── Engineering.php │ │ │ │ ├── Exception.php │ │ │ │ ├── ExceptionHandler.php │ │ │ │ ├── Financial.php │ │ │ │ ├── FormulaParser.php │ │ │ │ ├── FormulaToken.php │ │ │ │ ├── Function.php │ │ │ │ ├── Functions.php │ │ │ │ ├── Logical.php │ │ │ │ ├── LookupRef.php │ │ │ │ ├── MathTrig.php │ │ │ │ ├── Statistical.php │ │ │ │ ├── TextData.php │ │ │ │ ├── Token │ │ │ │ │ └── Stack.php │ │ │ │ └── functionlist.txt │ │ │ ├── Cell.php │ │ │ ├── Cell │ │ │ │ ├── AdvancedValueBinder.php │ │ │ │ ├── DataType.php │ │ │ │ ├── DataValidation.php │ │ │ │ ├── DefaultValueBinder.php │ │ │ │ ├── Hyperlink.php │ │ │ │ └── IValueBinder.php │ │ │ ├── Chart.php │ │ │ ├── Chart │ │ │ │ ├── Axis.php │ │ │ │ ├── DataSeries.php │ │ │ │ ├── DataSeriesValues.php │ │ │ │ ├── Exception.php │ │ │ │ ├── GridLines.php │ │ │ │ ├── Layout.php │ │ │ │ ├── Legend.php │ │ │ │ ├── PlotArea.php │ │ │ │ ├── Properties.php │ │ │ │ ├── Renderer │ │ │ │ │ ├── PHP Charting Libraries.txt │ │ │ │ │ └── jpgraph.php │ │ │ │ └── Title.php │ │ │ ├── Comment.php │ │ │ ├── DocumentProperties.php │ │ │ ├── DocumentSecurity.php │ │ │ ├── Exception.php │ │ │ ├── HashTable.php │ │ │ ├── Helper │ │ │ │ └── HTML.php │ │ │ ├── IComparable.php │ │ │ ├── IOFactory.php │ │ │ ├── NamedRange.php │ │ │ ├── Reader │ │ │ │ ├── Abstract.php │ │ │ │ ├── CSV.php │ │ │ │ ├── DefaultReadFilter.php │ │ │ │ ├── Excel2003XML.php │ │ │ │ ├── Excel2007.php │ │ │ │ ├── Excel2007 │ │ │ │ │ ├── Chart.php │ │ │ │ │ └── Theme.php │ │ │ │ ├── Excel5.php │ │ │ │ ├── Excel5 │ │ │ │ │ ├── Color.php │ │ │ │ │ ├── Color │ │ │ │ │ │ ├── BIFF5.php │ │ │ │ │ │ ├── BIFF8.php │ │ │ │ │ │ └── BuiltIn.php │ │ │ │ │ ├── ErrorCode.php │ │ │ │ │ ├── Escher.php │ │ │ │ │ ├── MD5.php │ │ │ │ │ ├── RC4.php │ │ │ │ │ └── Style │ │ │ │ │ │ ├── Border.php │ │ │ │ │ │ └── FillPattern.php │ │ │ │ ├── Exception.php │ │ │ │ ├── Gnumeric.php │ │ │ │ ├── HTML.php │ │ │ │ ├── IReadFilter.php │ │ │ │ ├── IReader.php │ │ │ │ ├── OOCalc.php │ │ │ │ └── SYLK.php │ │ │ ├── ReferenceHelper.php │ │ │ ├── RichText.php │ │ │ ├── RichText │ │ │ │ ├── ITextElement.php │ │ │ │ ├── Run.php │ │ │ │ └── TextElement.php │ │ │ ├── Settings.php │ │ │ ├── Shared │ │ │ │ ├── CodePage.php │ │ │ │ ├── Date.php │ │ │ │ ├── Drawing.php │ │ │ │ ├── Escher.php │ │ │ │ ├── Escher │ │ │ │ │ ├── DgContainer.php │ │ │ │ │ ├── DgContainer │ │ │ │ │ │ ├── SpgrContainer.php │ │ │ │ │ │ └── SpgrContainer │ │ │ │ │ │ │ └── SpContainer.php │ │ │ │ │ ├── DggContainer.php │ │ │ │ │ └── DggContainer │ │ │ │ │ │ ├── BstoreContainer.php │ │ │ │ │ │ └── BstoreContainer │ │ │ │ │ │ ├── BSE.php │ │ │ │ │ │ └── BSE │ │ │ │ │ │ └── Blip.php │ │ │ │ ├── Excel5.php │ │ │ │ ├── File.php │ │ │ │ ├── Font.php │ │ │ │ ├── JAMA │ │ │ │ │ ├── CHANGELOG.TXT │ │ │ │ │ ├── CholeskyDecomposition.php │ │ │ │ │ ├── EigenvalueDecomposition.php │ │ │ │ │ ├── LUDecomposition.php │ │ │ │ │ ├── Matrix.php │ │ │ │ │ ├── QRDecomposition.php │ │ │ │ │ ├── SingularValueDecomposition.php │ │ │ │ │ └── utils │ │ │ │ │ │ ├── Error.php │ │ │ │ │ │ └── Maths.php │ │ │ │ ├── OLE.php │ │ │ │ ├── OLE │ │ │ │ │ ├── ChainedBlockStream.php │ │ │ │ │ ├── PPS.php │ │ │ │ │ └── PPS │ │ │ │ │ │ ├── File.php │ │ │ │ │ │ └── Root.php │ │ │ │ ├── OLERead.php │ │ │ │ ├── PCLZip │ │ │ │ │ ├── gnu-lgpl.txt │ │ │ │ │ ├── pclzip.lib.php │ │ │ │ │ └── readme.txt │ │ │ │ ├── PasswordHasher.php │ │ │ │ ├── String.php │ │ │ │ ├── TimeZone.php │ │ │ │ ├── XMLWriter.php │ │ │ │ ├── ZipArchive.php │ │ │ │ ├── ZipStreamWrapper.php │ │ │ │ └── trend │ │ │ │ │ ├── bestFitClass.php │ │ │ │ │ ├── exponentialBestFitClass.php │ │ │ │ │ ├── linearBestFitClass.php │ │ │ │ │ ├── logarithmicBestFitClass.php │ │ │ │ │ ├── polynomialBestFitClass.php │ │ │ │ │ ├── powerBestFitClass.php │ │ │ │ │ └── trendClass.php │ │ │ ├── Style.php │ │ │ ├── Style │ │ │ │ ├── Alignment.php │ │ │ │ ├── Border.php │ │ │ │ ├── Borders.php │ │ │ │ ├── Color.php │ │ │ │ ├── Conditional.php │ │ │ │ ├── Fill.php │ │ │ │ ├── Font.php │ │ │ │ ├── NumberFormat.php │ │ │ │ ├── Protection.php │ │ │ │ └── Supervisor.php │ │ │ ├── Worksheet.php │ │ │ ├── Worksheet │ │ │ │ ├── AutoFilter.php │ │ │ │ ├── AutoFilter │ │ │ │ │ ├── Column.php │ │ │ │ │ └── Column │ │ │ │ │ │ └── Rule.php │ │ │ │ ├── BaseDrawing.php │ │ │ │ ├── CellIterator.php │ │ │ │ ├── Column.php │ │ │ │ ├── ColumnCellIterator.php │ │ │ │ ├── ColumnDimension.php │ │ │ │ ├── ColumnIterator.php │ │ │ │ ├── Dimension.php │ │ │ │ ├── Drawing.php │ │ │ │ ├── Drawing │ │ │ │ │ └── Shadow.php │ │ │ │ ├── HeaderFooter.php │ │ │ │ ├── HeaderFooterDrawing.php │ │ │ │ ├── MemoryDrawing.php │ │ │ │ ├── PageMargins.php │ │ │ │ ├── PageSetup.php │ │ │ │ ├── Protection.php │ │ │ │ ├── Row.php │ │ │ │ ├── RowCellIterator.php │ │ │ │ ├── RowDimension.php │ │ │ │ ├── RowIterator.php │ │ │ │ └── SheetView.php │ │ │ ├── WorksheetIterator.php │ │ │ ├── Writer │ │ │ │ ├── Abstract.php │ │ │ │ ├── CSV.php │ │ │ │ ├── Excel2007.php │ │ │ │ ├── Excel2007 │ │ │ │ │ ├── Chart.php │ │ │ │ │ ├── Comments.php │ │ │ │ │ ├── ContentTypes.php │ │ │ │ │ ├── DocProps.php │ │ │ │ │ ├── Drawing.php │ │ │ │ │ ├── Rels.php │ │ │ │ │ ├── RelsRibbon.php │ │ │ │ │ ├── RelsVBA.php │ │ │ │ │ ├── StringTable.php │ │ │ │ │ ├── Style.php │ │ │ │ │ ├── Theme.php │ │ │ │ │ ├── Workbook.php │ │ │ │ │ ├── Worksheet.php │ │ │ │ │ └── WriterPart.php │ │ │ │ ├── Excel5.php │ │ │ │ ├── Excel5 │ │ │ │ │ ├── BIFFwriter.php │ │ │ │ │ ├── Escher.php │ │ │ │ │ ├── Font.php │ │ │ │ │ ├── Parser.php │ │ │ │ │ ├── Workbook.php │ │ │ │ │ ├── Worksheet.php │ │ │ │ │ └── Xf.php │ │ │ │ ├── Exception.php │ │ │ │ ├── HTML.php │ │ │ │ ├── IWriter.php │ │ │ │ ├── OpenDocument.php │ │ │ │ ├── OpenDocument │ │ │ │ │ ├── Cell │ │ │ │ │ │ └── Comment.php │ │ │ │ │ ├── Content.php │ │ │ │ │ ├── Meta.php │ │ │ │ │ ├── MetaInf.php │ │ │ │ │ ├── Mimetype.php │ │ │ │ │ ├── Settings.php │ │ │ │ │ ├── Styles.php │ │ │ │ │ ├── Thumbnails.php │ │ │ │ │ └── WriterPart.php │ │ │ │ ├── PDF.php │ │ │ │ └── PDF │ │ │ │ │ ├── Core.php │ │ │ │ │ ├── DomPDF.php │ │ │ │ │ ├── mPDF.php │ │ │ │ │ └── tcPDF.php │ │ │ └── locale │ │ │ │ ├── bg │ │ │ │ └── config │ │ │ │ ├── cs │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── da │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── de │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── en │ │ │ │ └── uk │ │ │ │ │ └── config │ │ │ │ ├── es │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── fi │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── fr │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── hu │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── it │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── nl │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── no │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── pl │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── pt │ │ │ │ ├── br │ │ │ │ │ ├── config │ │ │ │ │ └── functions │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── ru │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ ├── sv │ │ │ │ ├── config │ │ │ │ └── functions │ │ │ │ └── tr │ │ │ │ ├── config │ │ │ │ └── functions │ │ └── index.html │ ├── logs │ │ └── index.html │ ├── models │ │ ├── Admin_model.php │ │ ├── Naire_model.php │ │ ├── User_model.php │ │ └── index.html │ ├── third_party │ │ └── index.html │ └── views │ │ ├── errors │ │ ├── cli │ │ │ ├── error_404.php │ │ │ ├── error_db.php │ │ │ ├── error_exception.php │ │ │ ├── error_general.php │ │ │ ├── error_php.php │ │ │ └── index.html │ │ ├── html │ │ │ ├── error_404.php │ │ │ ├── error_db.php │ │ │ ├── error_exception.php │ │ │ ├── error_general.php │ │ │ ├── error_php.php │ │ │ └── index.html │ │ └── index.html │ │ ├── index.html │ │ └── welcome_message.php ├── composer.json ├── contributing.md ├── database.sql ├── index.php ├── license.txt ├── readme.rst └── system │ ├── .htaccess │ ├── core │ ├── Benchmark.php │ ├── CodeIgniter.php │ ├── Common.php │ ├── Config.php │ ├── Controller.php │ ├── Exceptions.php │ ├── Hooks.php │ ├── Input.php │ ├── Lang.php │ ├── Loader.php │ ├── Log.php │ ├── Model.php │ ├── Output.php │ ├── Router.php │ ├── Security.php │ ├── URI.php │ ├── Utf8.php │ ├── compat │ │ ├── hash.php │ │ ├── index.html │ │ ├── mbstring.php │ │ ├── password.php │ │ └── standard.php │ └── index.html │ ├── database │ ├── DB.php │ ├── DB_cache.php │ ├── DB_driver.php │ ├── DB_forge.php │ ├── DB_query_builder.php │ ├── DB_result.php │ ├── DB_utility.php │ ├── drivers │ │ ├── cubrid │ │ │ ├── cubrid_driver.php │ │ │ ├── cubrid_forge.php │ │ │ ├── cubrid_result.php │ │ │ ├── cubrid_utility.php │ │ │ └── index.html │ │ ├── ibase │ │ │ ├── ibase_driver.php │ │ │ ├── ibase_forge.php │ │ │ ├── ibase_result.php │ │ │ ├── ibase_utility.php │ │ │ └── index.html │ │ ├── index.html │ │ ├── mssql │ │ │ ├── index.html │ │ │ ├── mssql_driver.php │ │ │ ├── mssql_forge.php │ │ │ ├── mssql_result.php │ │ │ └── mssql_utility.php │ │ ├── mysql │ │ │ ├── index.html │ │ │ ├── mysql_driver.php │ │ │ ├── mysql_forge.php │ │ │ ├── mysql_result.php │ │ │ └── mysql_utility.php │ │ ├── mysqli │ │ │ ├── index.html │ │ │ ├── mysqli_driver.php │ │ │ ├── mysqli_forge.php │ │ │ ├── mysqli_result.php │ │ │ └── mysqli_utility.php │ │ ├── oci8 │ │ │ ├── index.html │ │ │ ├── oci8_driver.php │ │ │ ├── oci8_forge.php │ │ │ ├── oci8_result.php │ │ │ └── oci8_utility.php │ │ ├── odbc │ │ │ ├── index.html │ │ │ ├── odbc_driver.php │ │ │ ├── odbc_forge.php │ │ │ ├── odbc_result.php │ │ │ └── odbc_utility.php │ │ ├── pdo │ │ │ ├── index.html │ │ │ ├── pdo_driver.php │ │ │ ├── pdo_forge.php │ │ │ ├── pdo_result.php │ │ │ ├── pdo_utility.php │ │ │ └── subdrivers │ │ │ │ ├── index.html │ │ │ │ ├── pdo_4d_driver.php │ │ │ │ ├── pdo_4d_forge.php │ │ │ │ ├── pdo_cubrid_driver.php │ │ │ │ ├── pdo_cubrid_forge.php │ │ │ │ ├── pdo_dblib_driver.php │ │ │ │ ├── pdo_dblib_forge.php │ │ │ │ ├── pdo_firebird_driver.php │ │ │ │ ├── pdo_firebird_forge.php │ │ │ │ ├── pdo_ibm_driver.php │ │ │ │ ├── pdo_ibm_forge.php │ │ │ │ ├── pdo_informix_driver.php │ │ │ │ ├── pdo_informix_forge.php │ │ │ │ ├── pdo_mysql_driver.php │ │ │ │ ├── pdo_mysql_forge.php │ │ │ │ ├── pdo_oci_driver.php │ │ │ │ ├── pdo_oci_forge.php │ │ │ │ ├── pdo_odbc_driver.php │ │ │ │ ├── pdo_odbc_forge.php │ │ │ │ ├── pdo_pgsql_driver.php │ │ │ │ ├── pdo_pgsql_forge.php │ │ │ │ ├── pdo_sqlite_driver.php │ │ │ │ ├── pdo_sqlite_forge.php │ │ │ │ ├── pdo_sqlsrv_driver.php │ │ │ │ └── pdo_sqlsrv_forge.php │ │ ├── postgre │ │ │ ├── index.html │ │ │ ├── postgre_driver.php │ │ │ ├── postgre_forge.php │ │ │ ├── postgre_result.php │ │ │ └── postgre_utility.php │ │ ├── sqlite │ │ │ ├── index.html │ │ │ ├── sqlite_driver.php │ │ │ ├── sqlite_forge.php │ │ │ ├── sqlite_result.php │ │ │ └── sqlite_utility.php │ │ ├── sqlite3 │ │ │ ├── index.html │ │ │ ├── sqlite3_driver.php │ │ │ ├── sqlite3_forge.php │ │ │ ├── sqlite3_result.php │ │ │ └── sqlite3_utility.php │ │ └── sqlsrv │ │ │ ├── index.html │ │ │ ├── sqlsrv_driver.php │ │ │ ├── sqlsrv_forge.php │ │ │ ├── sqlsrv_result.php │ │ │ └── sqlsrv_utility.php │ └── index.html │ ├── fonts │ ├── index.html │ └── texb.ttf │ ├── helpers │ ├── array_helper.php │ ├── captcha_helper.php │ ├── cookie_helper.php │ ├── date_helper.php │ ├── directory_helper.php │ ├── download_helper.php │ ├── email_helper.php │ ├── file_helper.php │ ├── form_helper.php │ ├── html_helper.php │ ├── index.html │ ├── inflector_helper.php │ ├── language_helper.php │ ├── number_helper.php │ ├── path_helper.php │ ├── security_helper.php │ ├── smiley_helper.php │ ├── string_helper.php │ ├── text_helper.php │ ├── typography_helper.php │ ├── url_helper.php │ └── xml_helper.php │ ├── index.html │ ├── language │ ├── english │ │ ├── calendar_lang.php │ │ ├── date_lang.php │ │ ├── db_lang.php │ │ ├── email_lang.php │ │ ├── form_validation_lang.php │ │ ├── ftp_lang.php │ │ ├── imglib_lang.php │ │ ├── index.html │ │ ├── migration_lang.php │ │ ├── number_lang.php │ │ ├── pagination_lang.php │ │ ├── profiler_lang.php │ │ ├── unit_test_lang.php │ │ └── upload_lang.php │ └── index.html │ └── libraries │ ├── Cache │ ├── Cache.php │ ├── drivers │ │ ├── Cache_apc.php │ │ ├── Cache_dummy.php │ │ ├── Cache_file.php │ │ ├── Cache_memcached.php │ │ ├── Cache_redis.php │ │ ├── Cache_wincache.php │ │ └── index.html │ └── index.html │ ├── Calendar.php │ ├── Cart.php │ ├── Driver.php │ ├── Email.php │ ├── Encrypt.php │ ├── Encryption.php │ ├── Form_validation.php │ ├── Ftp.php │ ├── Image_lib.php │ ├── Javascript.php │ ├── Javascript │ ├── Jquery.php │ └── index.html │ ├── Migration.php │ ├── Pagination.php │ ├── Parser.php │ ├── Profiler.php │ ├── Session │ ├── Session.php │ ├── SessionHandlerInterface.php │ ├── Session_driver.php │ ├── drivers │ │ ├── Session_database_driver.php │ │ ├── Session_files_driver.php │ │ ├── Session_memcached_driver.php │ │ ├── Session_redis_driver.php │ │ └── index.html │ └── index.html │ ├── Table.php │ ├── Trackback.php │ ├── Typography.php │ ├── Unit_test.php │ ├── Upload.php │ ├── User_agent.php │ ├── Xmlrpc.php │ ├── Xmlrpcs.php │ ├── Zip.php │ └── index.html ├── front-end ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── data.json ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── api │ │ ├── index.js │ │ └── resource.js │ ├── assets │ │ ├── logo.png │ │ └── 未标题-1.psd │ ├── common │ │ └── js │ │ │ └── utils.js │ ├── components │ │ └── common │ │ │ └── questionList │ │ │ └── questionList.vue │ ├── config │ │ └── index.js │ ├── main.js │ ├── router │ │ └── index.js │ ├── store │ │ ├── actions.js │ │ ├── getters.js │ │ ├── index.js │ │ ├── mutation-types.js │ │ └── mutations.js │ └── views │ │ ├── admin │ │ └── changePwd.vue │ │ ├── common │ │ ├── complete │ │ │ └── complete.vue │ │ └── error │ │ │ └── error.vue │ │ ├── edit │ │ └── edit.vue │ │ ├── layout │ │ └── layout.vue │ │ ├── list │ │ └── list.vue │ │ ├── login │ │ └── login.vue │ │ ├── statis │ │ ├── cross-analysis.vue │ │ ├── result.vue │ │ ├── source-data.vue │ │ └── statis.vue │ │ ├── user │ │ └── user.vue │ │ └── view │ │ └── view.vue └── static │ ├── .gitkeep │ └── favicon.ico └── 批量导入模板.xls /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .DS_Store 3 | node_modules/ 4 | dist/ 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 WangYingjie 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-questionnaire 2 | 3 | 注意: 4 | 5 | 本项目已暂停维护,取而代之的是 TypeScript 版本的微型问卷调查系统,[点击查看](https://github.com/52admln/ts-vue-questionnaire)。 6 | 7 | 8 | > 简易问卷系统,目前功能正在逐步完善中... 9 | 10 | > 由于本系统用于校内学生,所以在提交问卷时需要先查看用户的有效性(参与问卷调查的人员是可控的),如不需要此功能,可以自行修改代码。 11 | 12 | ## 功能 13 | 1. 创建问卷、删除问卷、预览问卷、编辑问卷截止时间 14 | 2. 问卷结果统计,样本数据查看,已填写问卷用户查看 15 | 3. 使用 Excel 批量导入用户、批量删除用户,单个添加、修改、搜索、删除用户 16 | 4. 问卷调查页面适配移动端 17 | 5. 问卷单题目交叉分析 18 | 19 | ## TODO 20 | 1. 编辑问卷(未发布状态) 21 | 2. 查看问题选项所选人员信息(姓名、班级) 22 | 3. 修改用户已填写的选项 23 | 24 | ## 前端部署说明 25 | 26 | 前端文件存放于 `/front-end/ ` 文件夹下 27 | 28 | ``` bash 29 | # 安装依赖 30 | npm install 31 | 32 | # 服务热重载地址:localhost:8080 33 | npm run dev 34 | 35 | # 线上部署编译 36 | npm run build 37 | 38 | ``` 39 | 40 | ## 前台配置 41 | ### proxyTable 42 | 43 | 如果遇到访问接口出现 44 | 45 | > Error occured while trying to proxy to: localhost:8080/api/admin/test` 46 | 47 | 可以参照下面方法解决: 48 | 49 | 如将 `/api` 文件夹放在了 PHP 环境中的 `vue-questionnaire` 文件夹中,且访问地址为:`http://localhost:8888/vue-questionnaire/api` ,那么可以根据我的配置来使用了。 50 | 51 | 同时也可以根据本地PHP环境的访问地址来修改 `/config/index.js` 中 `proxyTabel` 相关配置。 52 | 53 | ### API接口请求地址 54 | 55 | 修改 `/src/config/index.js` 中的 `baseURL` 56 | 57 | ## 后台配置 58 | 数据库文件: `api/database.sql`,使用前请先导入。 59 | 60 | CI框架数据库连接配置信息请先设置。 61 | 62 | ## 打赏 63 | 如果我的付出能够帮助到你,我也乐于接受你的帮助,小小的赞赏是我们持续进步的动力。 64 | 65 | 昵称 | 金额 66 | ---|--- 67 | [Little Mo](https://github.com/one-mo) | ¥50.00 68 | [mike](https://github.com/zhezhe168) | ¥1600.00 69 | [stepven8](https://github.com/stepven8) | ¥50.00 70 | 飞 | ¥50.00 71 | 72 | 73 | -------------------------------------------------------------------------------- /api/.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | 9 | # Matches multiple files with brace expansion notation 10 | # Set default charset 11 | [*] 12 | charset = utf-8 13 | 14 | # Tab indentation (no size specified) 15 | indent_style = tab 16 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | application/cache/* 4 | !application/cache/index.html 5 | !application/cache/.htaccess 6 | 7 | application/logs/* 8 | !application/logs/index.html 9 | !application/logs/.htaccess 10 | 11 | composer.lock 12 | 13 | user_guide_src/build/* 14 | user_guide_src/cilexer/build/* 15 | user_guide_src/cilexer/dist/* 16 | user_guide_src/cilexer/pycilexer.egg-info/* 17 | /vendor/ 18 | 19 | # IDE Files 20 | #------------------------- 21 | /nbproject/ 22 | .idea/* 23 | 24 | ## Sublime Text cache files 25 | *.tmlanguage.cache 26 | *.tmPreferences.cache 27 | *.stTheme.cache 28 | *.sublime-workspace 29 | *.sublime-project 30 | -------------------------------------------------------------------------------- /api/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteEngine On 2 | RewriteCond %{REQUEST_FILENAME} !-f 3 | RewriteCond %{REQUEST_FILENAME} !-d 4 | RewriteRule ^(.*)$ index.php/$1 [L] 5 | # 用于修复丢失 Authorization header 头信息的问题 6 | RewriteCond %{HTTP:Authorization} ^(.*) 7 | RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 8 | -------------------------------------------------------------------------------- /api/application/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | -------------------------------------------------------------------------------- /api/application/cache/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | -------------------------------------------------------------------------------- /api/application/cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/config/doctypes.php: -------------------------------------------------------------------------------- 1 | '', 6 | 'xhtml1-strict' => '', 7 | 'xhtml1-trans' => '', 8 | 'xhtml1-frame' => '', 9 | 'xhtml-basic11' => '', 10 | 'html5' => '', 11 | 'html4-strict' => '', 12 | 'html4-trans' => '', 13 | 'html4-frame' => '', 14 | 'mathml1' => '', 15 | 'mathml2' => '', 16 | 'svg10' => '', 17 | 'svg11' => '', 18 | 'svg11-basic' => '', 19 | 'svg11-tiny' => '', 20 | 'xhtml-math-svg-xh' => '', 21 | 'xhtml-math-svg-sh' => '', 22 | 'xhtml-rdfa-1' => '', 23 | 'xhtml-rdfa-2' => '' 24 | ); 25 | -------------------------------------------------------------------------------- /api/application/config/hooks.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/config/memcached.php: -------------------------------------------------------------------------------- 1 | array( 15 | 'hostname' => '127.0.0.1', 16 | 'port' => '11211', 17 | 'weight' => '1', 18 | ), 19 | ); 20 | -------------------------------------------------------------------------------- /api/application/config/profiler.php: -------------------------------------------------------------------------------- 1 | my_controller/index 50 | | my-controller/my-method -> my_controller/my_method 51 | */ 52 | $route['default_controller'] = 'welcome'; 53 | $route['404_override'] = ''; 54 | $route['translate_uri_dashes'] = FALSE; 55 | -------------------------------------------------------------------------------- /api/application/controllers/Admin.php: -------------------------------------------------------------------------------- 1 | load->model('admin_model'); 8 | $userid = $this->admin_model->login(); 9 | 10 | if ($userid != false) { 11 | $token = jwt_helper::create($userid); 12 | $error = 0; 13 | echo json_encode(array('err' => $error, "token" => $token)); 14 | } else { 15 | $error = 1; 16 | echo json_encode(array('err' => $error, "message" => "登录失败")); 17 | } 18 | } 19 | 20 | public function changepwd() 21 | { 22 | $this->load->model('admin_model'); 23 | $header = $this->input->get_request_header('Authorization', TRUE); 24 | list($token) = sscanf($header, 'token %s'); 25 | if ($header != '' && jwt_helper::validate($token)) { 26 | $userid = jwt_helper::decode($token)->userId; 27 | $result = $this->admin_model->changePwd($userid); 28 | echo json_encode($result); 29 | } else { 30 | show_error("Permission denied", 401, "Please check your token."); 31 | } 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/application/controllers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/core/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/helpers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/helpers/jwt_helper.php: -------------------------------------------------------------------------------- 1 | load->library('JWT'); 14 | $token = $CI->jwt->encode(array( 15 | 'consumerKey' => self::CONSUMER_KEY, 16 | 'userId' => $userid, 17 | 'issuedAt' => date(DATE_ISO8601, strtotime("now")), 18 | 'ttl' => self::CONSUMER_TTL 19 | ), self::CONSUMER_SECRET); 20 | return $token; 21 | } 22 | 23 | // 验证 token 有效性 24 | public static function validate($token) 25 | { 26 | $CI =& get_instance(); 27 | $CI->load->library('JWT'); 28 | try { 29 | $decodeToken = $CI->jwt->decode($token, self::CONSUMER_SECRET); 30 | // token 有效期验证 31 | $ttl_time = strtotime($decodeToken->issuedAt); 32 | $now_time = strtotime(date(DATE_ISO8601, strtotime("now"))); 33 | if(($now_time - $ttl_time) > $decodeToken->ttl) { 34 | throw new Exception('Expired'); 35 | } else { 36 | return true; 37 | } 38 | } catch (Exception $e) { 39 | return false; 40 | } 41 | 42 | } 43 | 44 | // 解码 token 45 | public static function decode($token) 46 | { 47 | $CI =& get_instance(); 48 | $CI->load->library('JWT'); 49 | try { 50 | $decodeToken = $CI->jwt->decode($token, self::CONSUMER_SECRET); 51 | return $decodeToken; 52 | } catch (Exception $e) { 53 | return false; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /api/application/hooks/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/language/english/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/language/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/CalcEngine/CyclicReferenceStack.php: -------------------------------------------------------------------------------- 1 | stack); 45 | } 46 | 47 | /** 48 | * Push a new entry onto the stack 49 | * 50 | * @param mixed $value 51 | */ 52 | public function push($value) 53 | { 54 | $this->stack[$value] = $value; 55 | } 56 | 57 | /** 58 | * Pop the last entry from the stack 59 | * 60 | * @return mixed 61 | */ 62 | public function pop() 63 | { 64 | return array_pop($this->stack); 65 | } 66 | 67 | /** 68 | * Test to see if a specified entry exists on the stack 69 | * 70 | * @param mixed $value The value to test 71 | */ 72 | public function onStack($value) 73 | { 74 | return isset($this->stack[$value]); 75 | } 76 | 77 | /** 78 | * Clear the stack 79 | */ 80 | public function clear() 81 | { 82 | $this->stack = array(); 83 | } 84 | 85 | /** 86 | * Return an array of all entries on the stack 87 | * 88 | * @return mixed[] 89 | */ 90 | public function showStack() 91 | { 92 | return $this->stack; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Calculation/Exception.php: -------------------------------------------------------------------------------- 1 | line = $line; 43 | $e->file = $file; 44 | throw $e; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Calculation/ExceptionHandler.php: -------------------------------------------------------------------------------- 1 | line = $line; 43 | $e->file = $file; 44 | throw $e; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt: -------------------------------------------------------------------------------- 1 | ChartDirector 2 | http://www.advsofteng.com/cdphp.html 3 | 4 | GraPHPite 5 | http://graphpite.sourceforge.net/ 6 | 7 | JpGraph 8 | http://www.aditus.nu/jpgraph/ 9 | 10 | LibChart 11 | http://naku.dohcrew.com/libchart/pages/introduction/ 12 | 13 | pChart 14 | http://pchart.sourceforge.net/ 15 | 16 | TeeChart 17 | http://www.steema.com/products/teechart/overview.html 18 | 19 | PHPGraphLib 20 | http://www.ebrueggeman.com/phpgraphlib -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Chart/Title.php: -------------------------------------------------------------------------------- 1 | caption = $caption; 51 | $this->layout = $layout; 52 | } 53 | 54 | /** 55 | * Get caption 56 | * 57 | * @return string 58 | */ 59 | public function getCaption() 60 | { 61 | return $this->caption; 62 | } 63 | 64 | /** 65 | * Set caption 66 | * 67 | * @param string $caption 68 | * @return PHPExcel_Chart_Title 69 | */ 70 | public function setCaption($caption = null) 71 | { 72 | $this->caption = $caption; 73 | 74 | return $this; 75 | } 76 | 77 | /** 78 | * Get Layout 79 | * 80 | * @return PHPExcel_Chart_Layout 81 | */ 82 | public function getLayout() 83 | { 84 | return $this->layout; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Exception.php: -------------------------------------------------------------------------------- 1 | line = $line; 51 | $e->file = $file; 52 | throw $e; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/IComparable.php: -------------------------------------------------------------------------------- 1 | 'FF0000') 11 | */ 12 | public static function map($color, $palette, $version) 13 | { 14 | if ($color <= 0x07 || $color >= 0x40) { 15 | // special built-in color 16 | return PHPExcel_Reader_Excel5_Color_BuiltIn::lookup($color); 17 | } elseif (isset($palette) && isset($palette[$color - 8])) { 18 | // palette color, color index 0x08 maps to pallete index 0 19 | return $palette[$color - 8]; 20 | } else { 21 | // default color table 22 | if ($version == PHPExcel_Reader_Excel5::XLS_BIFF8) { 23 | return PHPExcel_Reader_Excel5_Color_BIFF8::lookup($color); 24 | } else { 25 | // BIFF5 26 | return PHPExcel_Reader_Excel5_Color_BIFF5::lookup($color); 27 | } 28 | } 29 | 30 | return $color; 31 | } 32 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/Color/BIFF5.php: -------------------------------------------------------------------------------- 1 | '000000', 7 | 0x09 => 'FFFFFF', 8 | 0x0A => 'FF0000', 9 | 0x0B => '00FF00', 10 | 0x0C => '0000FF', 11 | 0x0D => 'FFFF00', 12 | 0x0E => 'FF00FF', 13 | 0x0F => '00FFFF', 14 | 0x10 => '800000', 15 | 0x11 => '008000', 16 | 0x12 => '000080', 17 | 0x13 => '808000', 18 | 0x14 => '800080', 19 | 0x15 => '008080', 20 | 0x16 => 'C0C0C0', 21 | 0x17 => '808080', 22 | 0x18 => '8080FF', 23 | 0x19 => '802060', 24 | 0x1A => 'FFFFC0', 25 | 0x1B => 'A0E0F0', 26 | 0x1C => '600080', 27 | 0x1D => 'FF8080', 28 | 0x1E => '0080C0', 29 | 0x1F => 'C0C0FF', 30 | 0x20 => '000080', 31 | 0x21 => 'FF00FF', 32 | 0x22 => 'FFFF00', 33 | 0x23 => '00FFFF', 34 | 0x24 => '800080', 35 | 0x25 => '800000', 36 | 0x26 => '008080', 37 | 0x27 => '0000FF', 38 | 0x28 => '00CFFF', 39 | 0x29 => '69FFFF', 40 | 0x2A => 'E0FFE0', 41 | 0x2B => 'FFFF80', 42 | 0x2C => 'A6CAF0', 43 | 0x2D => 'DD9CB3', 44 | 0x2E => 'B38FEE', 45 | 0x2F => 'E3E3E3', 46 | 0x30 => '2A6FF9', 47 | 0x31 => '3FB8CD', 48 | 0x32 => '488436', 49 | 0x33 => '958C41', 50 | 0x34 => '8E5E42', 51 | 0x35 => 'A0627A', 52 | 0x36 => '624FAC', 53 | 0x37 => '969696', 54 | 0x38 => '1D2FBE', 55 | 0x39 => '286676', 56 | 0x3A => '004500', 57 | 0x3B => '453E01', 58 | 0x3C => '6A2813', 59 | 0x3D => '85396A', 60 | 0x3E => '4A3285', 61 | 0x3F => '424242', 62 | ); 63 | 64 | /** 65 | * Map color array from BIFF5 built-in color index 66 | * 67 | * @param int $color 68 | * @return array 69 | */ 70 | public static function lookup($color) 71 | { 72 | if (isset(self::$map[$color])) { 73 | return array('rgb' => self::$map[$color]); 74 | } 75 | return array('rgb' => '000000'); 76 | } 77 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/Color/BIFF8.php: -------------------------------------------------------------------------------- 1 | '000000', 7 | 0x09 => 'FFFFFF', 8 | 0x0A => 'FF0000', 9 | 0x0B => '00FF00', 10 | 0x0C => '0000FF', 11 | 0x0D => 'FFFF00', 12 | 0x0E => 'FF00FF', 13 | 0x0F => '00FFFF', 14 | 0x10 => '800000', 15 | 0x11 => '008000', 16 | 0x12 => '000080', 17 | 0x13 => '808000', 18 | 0x14 => '800080', 19 | 0x15 => '008080', 20 | 0x16 => 'C0C0C0', 21 | 0x17 => '808080', 22 | 0x18 => '9999FF', 23 | 0x19 => '993366', 24 | 0x1A => 'FFFFCC', 25 | 0x1B => 'CCFFFF', 26 | 0x1C => '660066', 27 | 0x1D => 'FF8080', 28 | 0x1E => '0066CC', 29 | 0x1F => 'CCCCFF', 30 | 0x20 => '000080', 31 | 0x21 => 'FF00FF', 32 | 0x22 => 'FFFF00', 33 | 0x23 => '00FFFF', 34 | 0x24 => '800080', 35 | 0x25 => '800000', 36 | 0x26 => '008080', 37 | 0x27 => '0000FF', 38 | 0x28 => '00CCFF', 39 | 0x29 => 'CCFFFF', 40 | 0x2A => 'CCFFCC', 41 | 0x2B => 'FFFF99', 42 | 0x2C => '99CCFF', 43 | 0x2D => 'FF99CC', 44 | 0x2E => 'CC99FF', 45 | 0x2F => 'FFCC99', 46 | 0x30 => '3366FF', 47 | 0x31 => '33CCCC', 48 | 0x32 => '99CC00', 49 | 0x33 => 'FFCC00', 50 | 0x34 => 'FF9900', 51 | 0x35 => 'FF6600', 52 | 0x36 => '666699', 53 | 0x37 => '969696', 54 | 0x38 => '003366', 55 | 0x39 => '339966', 56 | 0x3A => '003300', 57 | 0x3B => '333300', 58 | 0x3C => '993300', 59 | 0x3D => '993366', 60 | 0x3E => '333399', 61 | 0x3F => '333333', 62 | ); 63 | 64 | /** 65 | * Map color array from BIFF8 built-in color index 66 | * 67 | * @param int $color 68 | * @return array 69 | */ 70 | public static function lookup($color) 71 | { 72 | if (isset(self::$map[$color])) { 73 | return array('rgb' => self::$map[$color]); 74 | } 75 | return array('rgb' => '000000'); 76 | } 77 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/Color/BuiltIn.php: -------------------------------------------------------------------------------- 1 | '000000', 7 | 0x01 => 'FFFFFF', 8 | 0x02 => 'FF0000', 9 | 0x03 => '00FF00', 10 | 0x04 => '0000FF', 11 | 0x05 => 'FFFF00', 12 | 0x06 => 'FF00FF', 13 | 0x07 => '00FFFF', 14 | 0x40 => '000000', // system window text color 15 | 0x41 => 'FFFFFF', // system window background color 16 | ); 17 | 18 | /** 19 | * Map built-in color to RGB value 20 | * 21 | * @param int $color Indexed color 22 | * @return array 23 | */ 24 | public static function lookup($color) 25 | { 26 | if (isset(self::$map[$color])) { 27 | return array('rgb' => self::$map[$color]); 28 | } 29 | return array('rgb' => '000000'); 30 | } 31 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/ErrorCode.php: -------------------------------------------------------------------------------- 1 | '#NULL!', 7 | 0x07 => '#DIV/0!', 8 | 0x0F => '#VALUE!', 9 | 0x17 => '#REF!', 10 | 0x1D => '#NAME?', 11 | 0x24 => '#NUM!', 12 | 0x2A => '#N/A', 13 | ); 14 | 15 | /** 16 | * Map error code, e.g. '#N/A' 17 | * 18 | * @param int $code 19 | * @return string 20 | */ 21 | public static function lookup($code) 22 | { 23 | if (isset(self::$map[$code])) { 24 | return self::$map[$code]; 25 | } 26 | return false; 27 | } 28 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/Style/Border.php: -------------------------------------------------------------------------------- 1 | PHPExcel_Style_Border::BORDER_NONE, 7 | 0x01 => PHPExcel_Style_Border::BORDER_THIN, 8 | 0x02 => PHPExcel_Style_Border::BORDER_MEDIUM, 9 | 0x03 => PHPExcel_Style_Border::BORDER_DASHED, 10 | 0x04 => PHPExcel_Style_Border::BORDER_DOTTED, 11 | 0x05 => PHPExcel_Style_Border::BORDER_THICK, 12 | 0x06 => PHPExcel_Style_Border::BORDER_DOUBLE, 13 | 0x07 => PHPExcel_Style_Border::BORDER_HAIR, 14 | 0x08 => PHPExcel_Style_Border::BORDER_MEDIUMDASHED, 15 | 0x09 => PHPExcel_Style_Border::BORDER_DASHDOT, 16 | 0x0A => PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT, 17 | 0x0B => PHPExcel_Style_Border::BORDER_DASHDOTDOT, 18 | 0x0C => PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT, 19 | 0x0D => PHPExcel_Style_Border::BORDER_SLANTDASHDOT, 20 | ); 21 | 22 | /** 23 | * Map border style 24 | * OpenOffice documentation: 2.5.11 25 | * 26 | * @param int $index 27 | * @return string 28 | */ 29 | public static function lookup($index) 30 | { 31 | if (isset(self::$map[$index])) { 32 | return self::$map[$index]; 33 | } 34 | return PHPExcel_Style_Border::BORDER_NONE; 35 | } 36 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Excel5/Style/FillPattern.php: -------------------------------------------------------------------------------- 1 | PHPExcel_Style_Fill::FILL_NONE, 7 | 0x01 => PHPExcel_Style_Fill::FILL_SOLID, 8 | 0x02 => PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY, 9 | 0x03 => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY, 10 | 0x04 => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY, 11 | 0x05 => PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL, 12 | 0x06 => PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL, 13 | 0x07 => PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN, 14 | 0x08 => PHPExcel_Style_Fill::FILL_PATTERN_DARKUP, 15 | 0x09 => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID, 16 | 0x0A => PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS, 17 | 0x0B => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL, 18 | 0x0C => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL, 19 | 0x0D => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN, 20 | 0x0E => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP, 21 | 0x0F => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID, 22 | 0x10 => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS, 23 | 0x11 => PHPExcel_Style_Fill::FILL_PATTERN_GRAY125, 24 | 0x12 => PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625, 25 | ); 26 | 27 | /** 28 | * Get fill pattern from index 29 | * OpenOffice documentation: 2.5.12 30 | * 31 | * @param int $index 32 | * @return string 33 | */ 34 | public static function lookup($index) 35 | { 36 | if (isset(self::$map[$index])) { 37 | return self::$map[$index]; 38 | } 39 | return PHPExcel_Style_Fill::FILL_NONE; 40 | } 41 | } -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/Exception.php: -------------------------------------------------------------------------------- 1 | line = $line; 43 | $e->file = $file; 44 | throw $e; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Reader/IReadFilter.php: -------------------------------------------------------------------------------- 1 | dggContainer; 52 | } 53 | 54 | /** 55 | * Set Drawing Group Container 56 | * 57 | * @param PHPExcel_Shared_Escher_DggContainer $dggContainer 58 | */ 59 | public function setDggContainer($dggContainer) 60 | { 61 | return $this->dggContainer = $dggContainer; 62 | } 63 | 64 | /** 65 | * Get Drawing Container 66 | * 67 | * @return PHPExcel_Shared_Escher_DgContainer 68 | */ 69 | public function getDgContainer() 70 | { 71 | return $this->dgContainer; 72 | } 73 | 74 | /** 75 | * Set Drawing Container 76 | * 77 | * @param PHPExcel_Shared_Escher_DgContainer $dgContainer 78 | */ 79 | public function setDgContainer($dgContainer) 80 | { 81 | return $this->dgContainer = $dgContainer; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/Escher/DgContainer.php: -------------------------------------------------------------------------------- 1 | dgId; 49 | } 50 | 51 | public function setDgId($value) 52 | { 53 | $this->dgId = $value; 54 | } 55 | 56 | public function getLastSpId() 57 | { 58 | return $this->lastSpId; 59 | } 60 | 61 | public function setLastSpId($value) 62 | { 63 | $this->lastSpId = $value; 64 | } 65 | 66 | public function getSpgrContainer() 67 | { 68 | return $this->spgrContainer; 69 | } 70 | 71 | public function setSpgrContainer($spgrContainer) 72 | { 73 | return $this->spgrContainer = $spgrContainer; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php: -------------------------------------------------------------------------------- 1 | BSECollection[] = $BSE; 45 | $BSE->setParent($this); 46 | } 47 | 48 | /** 49 | * Get the collection of BLIP Store Entries 50 | * 51 | * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE[] 52 | */ 53 | public function getBSECollection() 54 | { 55 | return $this->BSECollection; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php: -------------------------------------------------------------------------------- 1 | data; 52 | } 53 | 54 | /** 55 | * Set the raw image data 56 | * 57 | * @param string 58 | */ 59 | public function setData($data) 60 | { 61 | $this->data = $data; 62 | } 63 | 64 | /** 65 | * Set parent BSE 66 | * 67 | * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE $parent 68 | */ 69 | public function setParent($parent) 70 | { 71 | $this->parent = $parent; 72 | } 73 | 74 | /** 75 | * Get parent BSE 76 | * 77 | * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE $parent 78 | */ 79 | public function getParent() 80 | { 81 | return $this->parent; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/JAMA/CHANGELOG.TXT: -------------------------------------------------------------------------------- 1 | Mar 1, 2005 11:15 AST by PM 2 | 3 | + For consistency, renamed Math.php to Maths.java, utils to util, 4 | tests to test, docs to doc - 5 | 6 | + Removed conditional logic from top of Matrix class. 7 | 8 | + Switched to using hypo function in Maths.php for all php-hypot calls. 9 | NOTE TO SELF: Need to make sure that all decompositions have been 10 | switched over to using the bundled hypo. 11 | 12 | Feb 25, 2005 at 10:00 AST by PM 13 | 14 | + Recommend using simpler Error.php instead of JAMA_Error.php but 15 | can be persuaded otherwise. 16 | 17 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/JAMA/utils/Maths.php: -------------------------------------------------------------------------------- 1 | abs($b)) { 17 | $r = $b / $a; 18 | $r = abs($a) * sqrt(1 + $r * $r); 19 | } elseif ($b != 0) { 20 | $r = $a / $b; 21 | $r = abs($b) * sqrt(1 + $r * $r); 22 | } else { 23 | $r = 0.0; 24 | } 25 | return $r; 26 | } // function hypo() 27 | 28 | 29 | /** 30 | * Mike Bommarito's version. 31 | * Compute n-dimensional hyotheneuse. 32 | * 33 | function hypot() { 34 | $s = 0; 35 | foreach (func_get_args() as $d) { 36 | if (is_numeric($d)) { 37 | $s += pow($d, 2); 38 | } else { 39 | throw new PHPExcel_Calculation_Exception(JAMAError(ARGUMENT_TYPE_EXCEPTION)); 40 | } 41 | } 42 | return sqrt($s); 43 | } 44 | */ 45 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Shared/PasswordHasher.php: -------------------------------------------------------------------------------- 1 | . 44 | * 45 | * @param string $pPassword Password to hash 46 | * @return string Hashed password 47 | */ 48 | public static function hashPassword($pPassword = '') 49 | { 50 | $password = 0x0000; 51 | $charPos = 1; // char position 52 | 53 | // split the plain text password in its component characters 54 | $chars = preg_split('//', $pPassword, -1, PREG_SPLIT_NO_EMPTY); 55 | foreach ($chars as $char) { 56 | $value = ord($char) << $charPos++; // shifted ASCII value 57 | $rotated_bits = $value >> 15; // rotated bits beyond bit 15 58 | $value &= 0x7fff; // first 15 bits 59 | $password ^= ($value | $rotated_bits); 60 | } 61 | 62 | $password ^= strlen($pPassword); 63 | $password ^= 0xCE4B; 64 | 65 | return(strtoupper(dechex($password))); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Worksheet/CellIterator.php: -------------------------------------------------------------------------------- 1 | subject); 57 | } 58 | 59 | /** 60 | * Get loop only existing cells 61 | * 62 | * @return boolean 63 | */ 64 | public function getIterateOnlyExistingCells() 65 | { 66 | return $this->onlyExistingCells; 67 | } 68 | 69 | /** 70 | * Validate start/end values for "IterateOnlyExistingCells" mode, and adjust if necessary 71 | * 72 | * @throws PHPExcel_Exception 73 | */ 74 | abstract protected function adjustForExistingOnlyRange(); 75 | 76 | /** 77 | * Set the iterator to loop only existing cells 78 | * 79 | * @param boolean $value 80 | * @throws PHPExcel_Exception 81 | */ 82 | public function setIterateOnlyExistingCells($value = true) 83 | { 84 | $this->onlyExistingCells = (boolean) $value; 85 | 86 | $this->adjustForExistingOnlyRange(); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Worksheet/Row.php: -------------------------------------------------------------------------------- 1 | parent = $parent; 54 | $this->rowIndex = $rowIndex; 55 | } 56 | 57 | /** 58 | * Destructor 59 | */ 60 | public function __destruct() 61 | { 62 | unset($this->parent); 63 | } 64 | 65 | /** 66 | * Get row index 67 | * 68 | * @return int 69 | */ 70 | public function getRowIndex() 71 | { 72 | return $this->rowIndex; 73 | } 74 | 75 | /** 76 | * Get cell iterator 77 | * 78 | * @param string $startColumn The column address at which to start iterating 79 | * @param string $endColumn Optionally, the column address at which to stop iterating 80 | * @return PHPExcel_Worksheet_CellIterator 81 | */ 82 | public function getCellIterator($startColumn = 'A', $endColumn = null) 83 | { 84 | return new PHPExcel_Worksheet_RowCellIterator($this->parent, $this->rowIndex, $startColumn, $endColumn); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Writer/Excel2007/RelsVBA.php: -------------------------------------------------------------------------------- 1 | getParentWriter()->getUseDiskCaching()) { 42 | $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 43 | } else { 44 | $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); 45 | } 46 | 47 | // XML header 48 | $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 49 | 50 | // Relationships 51 | $objWriter->startElement('Relationships'); 52 | $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); 53 | $objWriter->startElement('Relationship'); 54 | $objWriter->writeAttribute('Id', 'rId1'); 55 | $objWriter->writeAttribute('Type', 'http://schemas.microsoft.com/office/2006/relationships/vbaProjectSignature'); 56 | $objWriter->writeAttribute('Target', 'vbaProjectSignature.bin'); 57 | $objWriter->endElement(); 58 | $objWriter->endElement(); 59 | 60 | return $objWriter->getData(); 61 | 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Writer/Excel2007/WriterPart.php: -------------------------------------------------------------------------------- 1 | parentWriter = $pWriter; 46 | } 47 | 48 | /** 49 | * Get parent IWriter object 50 | * 51 | * @return PHPExcel_Writer_IWriter 52 | * @throws PHPExcel_Writer_Exception 53 | */ 54 | public function getParentWriter() 55 | { 56 | if (!is_null($this->parentWriter)) { 57 | return $this->parentWriter; 58 | } else { 59 | throw new PHPExcel_Writer_Exception("No parent PHPExcel_Writer_IWriter assigned."); 60 | } 61 | } 62 | 63 | /** 64 | * Set parent IWriter object 65 | * 66 | * @param PHPExcel_Writer_IWriter $pWriter 67 | * @throws PHPExcel_Writer_Exception 68 | */ 69 | public function __construct(PHPExcel_Writer_IWriter $pWriter = null) 70 | { 71 | if (!is_null($pWriter)) { 72 | $this->parentWriter = $pWriter; 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Writer/Exception.php: -------------------------------------------------------------------------------- 1 | line = $line; 43 | $e->file = $file; 44 | throw $e; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /api/application/libraries/PHPExcel/Writer/IWriter.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/logs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/models/Admin_model.php: -------------------------------------------------------------------------------- 1 | load->database(); 11 | } 12 | 13 | // 登录 14 | public function login() 15 | { 16 | // $data = json_decode($this->input->raw_input_stream); 17 | $username = $this->input->post_get('username', TRUE); 18 | // $username = $data->username; 19 | $password = $this->input->post_get('password', TRUE); 20 | // $password = $data->password; 21 | $where_array = array('a_username' => $username, 'a_password' => sha1($password)); 22 | $query = $this->db->get_where('admin', $where_array); 23 | // 用户名密码正确后,生成token,返回给前台 24 | if ($query->num_rows() > 0) { 25 | return $query->first_row()->a_id; 26 | } else { 27 | return false; 28 | } 29 | } 30 | 31 | // 修改管理员密码 32 | public function changePwd($userid) 33 | { 34 | $oldpwd = json_decode($this->input->raw_input_stream, true)['oldpwd']; 35 | $newpwd = json_decode($this->input->raw_input_stream, true)['newpwd']; 36 | $where_array = array('a_id' => $userid, 'a_password' => sha1($oldpwd)); 37 | $query = $this->db->get_where('admin', $where_array); 38 | if (!$query) { 39 | $error = 1; // ERROR 40 | } else { 41 | $error = 0; // OK 42 | } 43 | // 如果返回结果大于0 , 则继续执行修改密码 44 | if ($query->num_rows() == 0) { 45 | return array('err' => $error, "data" => '原密码错误,请重试'); 46 | } 47 | 48 | $data = array( 49 | 'a_password' => sha1($newpwd) 50 | ); 51 | $this->db->where('a_id', $userid); 52 | $this->db->update('admin', $data); 53 | $result = $this->db->affected_rows(); 54 | return array('err' => $error, "data" => $result); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /api/application/models/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/third_party/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/views/errors/cli/error_404.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | An uncaught Exception was encountered 4 | 5 | Type: 6 | Message: 7 | Filename: getFile(), "\n"; ?> 8 | Line Number: getLine(); ?> 9 | 10 | 11 | 12 | Backtrace: 13 | getTrace() as $error): ?> 14 | 15 | File: 16 | Line: 17 | Function: 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /api/application/views/errors/cli/error_general.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | A PHP Error was encountered 4 | 5 | Severity: 6 | Message: 7 | Filename: 8 | Line Number: 9 | 10 | 11 | 12 | Backtrace: 13 | 14 | 15 | File: 16 | Line: 17 | Function: 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /api/application/views/errors/cli/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/views/errors/html/error_404.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 404 Page Not Found 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /api/application/views/errors/html/error_db.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Database Error 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /api/application/views/errors/html/error_exception.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |

An uncaught Exception was encountered

8 | 9 |

Type:

10 |

Message:

11 |

Filename: getFile(); ?>

12 |

Line Number: getLine(); ?>

13 | 14 | 15 | 16 |

Backtrace:

17 | getTrace() as $error): ?> 18 | 19 | 20 | 21 |

22 | File:
23 | Line:
24 | Function: 25 |

26 | 27 | 28 | 29 | 30 | 31 | 32 |
-------------------------------------------------------------------------------- /api/application/views/errors/html/error_general.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Error 8 | 57 | 58 | 59 |
60 |

61 | 62 |
63 | 64 | -------------------------------------------------------------------------------- /api/application/views/errors/html/error_php.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |

A PHP Error was encountered

8 | 9 |

Severity:

10 |

Message:

11 |

Filename:

12 |

Line Number:

13 | 14 | 15 | 16 |

Backtrace:

17 | 18 | 19 | 20 | 21 |

22 | File:
23 | Line:
24 | Function: 25 |

26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
-------------------------------------------------------------------------------- /api/application/views/errors/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/views/errors/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/application/views/welcome_message.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | Welcome to CodeIgniter 8 | 9 | 67 | 68 | 69 | 70 |
71 |

Welcome to CodeIgniter!

72 | 73 |
74 |

The page you are looking at is being generated dynamically by CodeIgniter.

75 | 76 |

If you would like to edit this page you'll find it located at:

77 | application/views/welcome_message.php 78 | 79 |

The corresponding controller for this page is found at:

80 | application/controllers/Welcome.php 81 | 82 |

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.

83 |
84 | 85 | 86 |
87 | 88 | 89 | -------------------------------------------------------------------------------- /api/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "The CodeIgniter framework", 3 | "name": "codeigniter/framework", 4 | "type": "project", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "support": { 8 | "forum": "http://forum.codeigniter.com/", 9 | "wiki": "https://github.com/bcit-ci/CodeIgniter/wiki", 10 | "irc": "irc://irc.freenode.net/codeigniter", 11 | "source": "https://github.com/bcit-ci/CodeIgniter" 12 | }, 13 | "require": { 14 | "php": ">=5.2.4" 15 | }, 16 | "suggest": { 17 | "paragonie/random_compat": "Provides better randomness in PHP 5.x" 18 | }, 19 | "require-dev": { 20 | "mikey179/vfsStream": "1.1.*", 21 | "phpunit/phpunit": "4.* || 5.*" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /api/license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 - 2017, British Columbia Institute of Technology 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /api/readme.rst: -------------------------------------------------------------------------------- 1 | ################### 2 | What is CodeIgniter 3 | ################### 4 | 5 | CodeIgniter is an Application Development Framework - a toolkit - for people 6 | who build web sites using PHP. Its goal is to enable you to develop projects 7 | much faster than you could if you were writing code from scratch, by providing 8 | a rich set of libraries for commonly needed tasks, as well as a simple 9 | interface and logical structure to access these libraries. CodeIgniter lets 10 | you creatively focus on your project by minimizing the amount of code needed 11 | for a given task. 12 | 13 | ******************* 14 | Release Information 15 | ******************* 16 | 17 | This repo contains in-development code for future releases. To download the 18 | latest stable release please visit the `CodeIgniter Downloads 19 | `_ page. 20 | 21 | ************************** 22 | Changelog and New Features 23 | ************************** 24 | 25 | You can find a list of all changes for each release in the `user 26 | guide change log `_. 27 | 28 | ******************* 29 | Server Requirements 30 | ******************* 31 | 32 | PHP version 5.6 or newer is recommended. 33 | 34 | It should work on 5.3.7 as well, but we strongly advise you NOT to run 35 | such old versions of PHP, because of potential security and performance 36 | issues, as well as missing features. 37 | 38 | ************ 39 | Installation 40 | ************ 41 | 42 | Please see the `installation section `_ 43 | of the CodeIgniter User Guide. 44 | 45 | ******* 46 | License 47 | ******* 48 | 49 | Please see the `license 50 | agreement `_. 51 | 52 | ********* 53 | Resources 54 | ********* 55 | 56 | - `User Guide `_ 57 | - `Language File Translations `_ 58 | - `Community Forums `_ 59 | - `Community Wiki `_ 60 | - `Community IRC `_ 61 | 62 | Report security issues to our `Security Panel `_ 63 | or via our `page on HackerOne `_, thank you. 64 | 65 | *************** 66 | Acknowledgement 67 | *************** 68 | 69 | The CodeIgniter team would like to thank EllisLab, all the 70 | contributors to the CodeIgniter project and you, the CodeIgniter user. 71 | -------------------------------------------------------------------------------- /api/system/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | -------------------------------------------------------------------------------- /api/system/core/compat/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/core/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/cubrid/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/ibase/ibase_utility.php: -------------------------------------------------------------------------------- 1 | db->hostname, $this->db->username, $this->db->password)) 58 | { 59 | $res = ibase_backup($service, $this->db->database, $filename.'.fbk'); 60 | 61 | // Close the service connection 62 | ibase_service_detach($service); 63 | return $res; 64 | } 65 | 66 | return FALSE; 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /api/system/database/drivers/ibase/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/mssql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/mssql/mssql_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /api/system/database/drivers/mysql/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/mysqli/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/oci8/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/oci8/oci8_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /api/system/database/drivers/odbc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/odbc/odbc_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /api/system/database/drivers/pdo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/pdo/pdo_forge.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /api/system/database/drivers/pdo/subdrivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/sqlite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/sqlite/sqlite_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /api/system/database/drivers/sqlite3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/drivers/sqlite3/sqlite3_utility.php: -------------------------------------------------------------------------------- 1 | db->display_error('db_unsupported_feature'); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /api/system/database/drivers/sqlsrv/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/database/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/fonts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/fonts/texb.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/api/system/fonts/texb.ttf -------------------------------------------------------------------------------- /api/system/helpers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/language/english/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/language/english/migration_lang.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/Cache/drivers/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/Cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/Javascript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/Session/SessionHandlerInterface.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/Session/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /api/system/libraries/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /front-end/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime", "syntax-dynamic-import"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "presets": ["env", "stage-2"], 11 | "plugins": [ "istanbul" ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /front-end/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /front-end/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /front-end/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /front-end/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .DS_Store 3 | node_modules/ 4 | dist/ 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | -------------------------------------------------------------------------------- /front-end/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /front-end/build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | console.log(chalk.cyan(' Build complete.\n')) 30 | console.log(chalk.yellow( 31 | ' Tip: built files are meant to be served over an HTTP server.\n' + 32 | ' Opening index.html over file:// won\'t work.\n' 33 | )) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /front-end/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | var shell = require('shelljs') 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | ] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function () { 26 | var warnings = [] 27 | for (var i = 0; i < versionRequirements.length; i++) { 28 | var mod = versionRequirements[i] 29 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 30 | warnings.push(mod.name + ': ' + 31 | chalk.red(mod.currentVersion) + ' should be ' + 32 | chalk.green(mod.versionRequirement) 33 | ) 34 | } 35 | } 36 | 37 | if (warnings.length) { 38 | console.log('') 39 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 40 | console.log() 41 | for (var i = 0; i < warnings.length; i++) { 42 | var warning = warnings[i] 43 | console.log(' ' + warning) 44 | } 45 | console.log() 46 | process.exit(1) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /front-end/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /front-end/build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = require('./webpack.dev.conf') 14 | 15 | // default port where dev server listens for incoming traffic 16 | var port = process.env.PORT || config.dev.port 17 | // automatically open browser, if not set will be false 18 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 19 | // Define HTTP proxies to your custom API backend 20 | // https://github.com/chimurai/http-proxy-middleware 21 | var proxyTable = config.dev.proxyTable 22 | 23 | var app = express() 24 | var compiler = webpack(webpackConfig) 25 | 26 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 27 | publicPath: webpackConfig.output.publicPath, 28 | quiet: true 29 | }) 30 | 31 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 32 | log: () => {} 33 | }) 34 | // force page reload when html-webpack-plugin template changes 35 | compiler.plugin('compilation', function (compilation) { 36 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 37 | hotMiddleware.publish({ action: 'reload' }) 38 | cb() 39 | }) 40 | }) 41 | 42 | // proxy api requests 43 | Object.keys(proxyTable).forEach(function (context) { 44 | var options = proxyTable[context] 45 | if (typeof options === 'string') { 46 | options = { target: options } 47 | } 48 | app.use(proxyMiddleware(options.filter || context, options)) 49 | }) 50 | 51 | // handle fallback for HTML5 history API 52 | app.use(require('connect-history-api-fallback')()) 53 | 54 | // serve webpack bundle output 55 | app.use(devMiddleware) 56 | 57 | // enable hot-reload and state-preserving 58 | // compilation error display 59 | app.use(hotMiddleware) 60 | 61 | // serve pure static assets 62 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 63 | app.use(staticPath, express.static('./static')) 64 | 65 | var uri = 'http://localhost:' + port 66 | 67 | var _resolve 68 | var readyPromise = new Promise(resolve => { 69 | _resolve = resolve 70 | }) 71 | 72 | console.log('> Starting dev server...') 73 | devMiddleware.waitUntilValid(() => { 74 | console.log('> Listening at ' + uri + '\n') 75 | // when env is testing, don't need open it 76 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 77 | opn(uri) 78 | } 79 | _resolve() 80 | }) 81 | 82 | var server = app.listen(port) 83 | 84 | module.exports = { 85 | ready: readyPromise, 86 | close: () => { 87 | server.close() 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /front-end/build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | // generate loader string to be used with extract text plugin 24 | function generateLoaders (loader, loaderOptions) { 25 | var loaders = [cssLoader] 26 | if (loader) { 27 | loaders.push({ 28 | loader: loader + '-loader', 29 | options: Object.assign({}, loaderOptions, { 30 | sourceMap: options.sourceMap 31 | }) 32 | }) 33 | } 34 | 35 | // Extract CSS when that option is specified 36 | // (which is the case during production build) 37 | if (options.extract) { 38 | return ExtractTextPlugin.extract({ 39 | use: loaders, 40 | fallback: 'vue-style-loader' 41 | }) 42 | } else { 43 | return ['vue-style-loader'].concat(loaders) 44 | } 45 | } 46 | 47 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 48 | return { 49 | css: generateLoaders(), 50 | postcss: generateLoaders(), 51 | less: generateLoaders('less'), 52 | sass: generateLoaders('sass', { indentedSyntax: true }), 53 | scss: generateLoaders('sass'), 54 | stylus: generateLoaders('stylus'), 55 | styl: generateLoaders('stylus') 56 | } 57 | } 58 | 59 | // Generate loaders for standalone style files (outside of .vue) 60 | exports.styleLoaders = function (options) { 61 | var output = [] 62 | var loaders = exports.cssLoaders(options) 63 | for (var extension in loaders) { 64 | var loader = loaders[extension] 65 | output.push({ 66 | test: new RegExp('\\.' + extension + '$'), 67 | use: loader 68 | }) 69 | } 70 | return output 71 | } 72 | -------------------------------------------------------------------------------- /front-end/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /front-end/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve (dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' 18 | ? config.build.assetsPublicPath 19 | : config.dev.assetsPublicPath 20 | }, 21 | resolve: { 22 | extensions: ['.js', '.vue', '.json'], 23 | alias: { 24 | 'vue$': 'vue/dist/vue.esm.js', 25 | '@': resolve('src') 26 | } 27 | }, 28 | module: { 29 | rules: [ 30 | { 31 | test: /\.(js|vue)$/, 32 | loader: 'eslint-loader', 33 | enforce: 'pre', 34 | include: [resolve('src'), resolve('test')], 35 | options: { 36 | formatter: require('eslint-friendly-formatter') 37 | } 38 | }, 39 | { 40 | test: /\.vue$/, 41 | loader: 'vue-loader', 42 | options: vueLoaderConfig 43 | }, 44 | { 45 | test: /\.js$/, 46 | loader: 'babel-loader', 47 | include: [resolve('src'), resolve('test')] 48 | }, 49 | { 50 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 51 | loader: 'url-loader', 52 | options: { 53 | limit: 10000, 54 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 55 | } 56 | }, 57 | { 58 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 59 | loader: 'url-loader', 60 | options: { 61 | limit: 10000, 62 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 63 | } 64 | } 65 | ] 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /front-end/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /front-end/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /front-end/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: false, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: true, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 9090, 27 | autoOpenBrowser: false, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | // 解决跨域问题 31 | proxyTable: { 32 | '/api': { 33 | target: 'http://localhost:8888/vue-questionnaire/', 34 | changeOrigin: true, 35 | pathRewrite: { 36 | '^/api': '/api' 37 | } 38 | } 39 | }, 40 | // CSS Sourcemaps off by default because relative paths are "buggy" 41 | // with this option, according to the CSS-Loader README 42 | // (https://github.com/webpack/css-loader#sourcemaps) 43 | // In our experience, they generally work as expected, 44 | // just be aware of this issue when enabling this option. 45 | cssSourceMap: false 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /front-end/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /front-end/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "topic": [ 4 | { 5 | "question": "问题1", 6 | "order": 1, 7 | "q_id": 1, 8 | "isRequired": true, 9 | "type": "单选", 10 | "selectContent": "选项4", 11 | "additional": "附加说明1", 12 | "options": [ 13 | { 14 | "content": "选项1", 15 | "o_id": 1, 16 | "isAddition": true 17 | }, 18 | { 19 | "content": "选项1", 20 | "o_id": 2, 21 | "isAddition": false 22 | } 23 | ] 24 | }, 25 | { 26 | "question": "多选问题2", 27 | "order": 2, 28 | "q_id": 2, 29 | "isRequired": true, 30 | "type": "多选", 31 | "selectMultipleContent": [ 32 | "选项1", 33 | "选项2" 34 | ], 35 | "options": [ 36 | { 37 | "content": "选项1", 38 | "o_id": 3, 39 | "isAddition": false 40 | }, 41 | { 42 | "content": "选项1", 43 | "o_id": 4, 44 | "isAddition": false 45 | } 46 | ] 47 | }, 48 | { 49 | "question": "文本题3", 50 | "order": 3, 51 | "q_id": 3, 52 | "isRequired": true, 53 | "type": "文本", 54 | "selectContent": "测试内容" 55 | } 56 | ] 57 | } 58 | ] 59 | -------------------------------------------------------------------------------- /front-end/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 微型问卷系统 - v1.3 RC 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /front-end/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-questionnaire", 3 | "version": "1.3.0", 4 | "description": "A Vue.js project", 5 | "author": "52admin ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "start": "node build/dev-server.js", 10 | "build": "node build/build.js", 11 | "lint": "eslint --ext .js,.vue src" 12 | }, 13 | "dependencies": { 14 | "axios": "~0.15.3", 15 | "clipboard": "^1.7.1", 16 | "iview": "=2.0.0-rc.13", 17 | "qrcodejs2": "0.0.2", 18 | "url-search-params": "~0.9.0", 19 | "vue": "~2.2.1", 20 | "vue-router": "~2.2.0", 21 | "vuex": "~2.2.1" 22 | }, 23 | "devDependencies": { 24 | "autoprefixer": "^6.7.2", 25 | "babel-core": "^6.22.1", 26 | "babel-eslint": "^7.1.1", 27 | "babel-loader": "^6.2.10", 28 | "babel-plugin-syntax-dynamic-import": "^6.18.0", 29 | "babel-plugin-transform-runtime": "^6.22.0", 30 | "babel-preset-env": "^1.3.2", 31 | "babel-preset-stage-2": "^6.22.0", 32 | "babel-register": "^6.22.0", 33 | "chalk": "^1.1.3", 34 | "compression-webpack-plugin": "^1.1.3", 35 | "connect-history-api-fallback": "^1.3.0", 36 | "copy-webpack-plugin": "^4.0.1", 37 | "css-loader": "^0.28.0", 38 | "echarts": "^3.5.4", 39 | "eslint": "^3.19.0", 40 | "eslint-config-standard": "^6.2.1", 41 | "eslint-friendly-formatter": "^2.0.7", 42 | "eslint-loader": "^1.7.1", 43 | "eslint-plugin-html": "^2.0.0", 44 | "eslint-plugin-promise": "^3.4.0", 45 | "eslint-plugin-standard": "^2.0.1", 46 | "eventsource-polyfill": "^0.9.6", 47 | "express": "^4.14.1", 48 | "extract-text-webpack-plugin": "^2.0.0", 49 | "file-loader": "^0.11.1", 50 | "friendly-errors-webpack-plugin": "^1.1.3", 51 | "html-webpack-plugin": "^2.28.0", 52 | "http-proxy-middleware": "^0.17.3", 53 | "opn": "^4.0.2", 54 | "optimize-css-assets-webpack-plugin": "^1.3.0", 55 | "ora": "^1.2.0", 56 | "rimraf": "^2.6.0", 57 | "semver": "^5.3.0", 58 | "shelljs": "^0.7.6", 59 | "url-loader": "^0.5.8", 60 | "vue-loader": "~11.3.4", 61 | "vue-style-loader": "~2.0.5", 62 | "vue-template-compiler": "~2.2.6", 63 | "webpack": "^2.3.3", 64 | "webpack-bundle-analyzer": "^2.2.1", 65 | "webpack-dev-middleware": "^1.10.0", 66 | "webpack-hot-middleware": "^2.18.0", 67 | "webpack-merge": "^4.1.0" 68 | }, 69 | "engines": { 70 | "node": ">= 4.0.0", 71 | "npm": ">= 3.0.0" 72 | }, 73 | "browserslist": [ 74 | "> 1%", 75 | "last 2 versions", 76 | "not ie <= 8" 77 | ] 78 | } 79 | -------------------------------------------------------------------------------- /front-end/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 28 | -------------------------------------------------------------------------------- /front-end/src/api/index.js: -------------------------------------------------------------------------------- 1 | import * as api from 'resource' 2 | const _questionlist = [ 3 | { 4 | q_id: 1, 5 | question: '问题1', 6 | isRequired: true, 7 | type: '单选', 8 | description: '这个是一段描述文本描述文本描述文本描述文本', 9 | selectContent: '', 10 | additional: '', 11 | options: [ 12 | { 13 | content: '选项1', 14 | o_id: 1, 15 | isAddition: true 16 | }, 17 | { 18 | content: '选项1', 19 | o_id: 2, 20 | isAddition: false 21 | } 22 | ] 23 | }, 24 | { 25 | question: '多选问题2', 26 | order: 2, 27 | q_id: 2, 28 | isRequired: true, 29 | type: '多选', 30 | description: '这个是一段描述文本描述文本描述文本描述文本', 31 | selectMultipleContent: [], 32 | options: [ 33 | { 34 | content: '选项1', 35 | o_id: 3, 36 | isAddition: false 37 | }, 38 | { 39 | content: '选项1', 40 | o_id: 4, 41 | isAddition: false 42 | } 43 | ] 44 | }, 45 | { 46 | question: '多选多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3多选问题3问题3', 47 | order: 22, 48 | q_id: 211, 49 | isRequired: true, 50 | type: '多选', 51 | description: '这个是一段描述文本描述文本描述文本描述文本', 52 | selectMultipleContent: [], 53 | options: [ 54 | { 55 | content: '选项1', 56 | o_id: 223, 57 | isAddition: false 58 | }, 59 | { 60 | content: '选项1', 61 | o_id: 554, 62 | isAddition: false 63 | } 64 | ] 65 | }, 66 | { 67 | question: '文本题3', 68 | order: 3, 69 | q_id: 3, 70 | isRequired: true, 71 | type: '文本', 72 | description: '这个是一段描述文本描述文本描述文本描述文本', 73 | selectContent: '' 74 | } 75 | ] 76 | 77 | export default { 78 | // quesitonList 79 | getQuestionList () { 80 | api.getNaire.post() 81 | console.log(_questionlist) 82 | return _questionlist 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /front-end/src/api/resource.js: -------------------------------------------------------------------------------- 1 | // axios 后端接口 2 | // 引入vue 3 | import Vue from 'vue' 4 | // 引入axios 5 | import axios from 'axios' 6 | // 建立 user question的接口 axios promise 7 | // return promise 对象 8 | 9 | export default { 10 | // 获取问卷详情 11 | getNaire () { 12 | return axios('/api/naire/detail') 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /front-end/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/front-end/src/assets/logo.png -------------------------------------------------------------------------------- /front-end/src/assets/未标题-1.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/front-end/src/assets/未标题-1.psd -------------------------------------------------------------------------------- /front-end/src/common/js/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Wyj on 17/5/17. 3 | */ 4 | export const formatDate = (timestamp) => { 5 | timestamp = typeof timestamp === 'number' ? timestamp : Number(timestamp) 6 | const date = new Date(timestamp) 7 | const Y = date.getFullYear() + '-' 8 | const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-' 9 | const D = date.getDate() + ' ' 10 | const h = date.getHours() + ':' 11 | const m = date.getMinutes() + ':' 12 | const s = date.getSeconds() 13 | return Y + M + D + h + m + s 14 | } 15 | -------------------------------------------------------------------------------- /front-end/src/config/index.js: -------------------------------------------------------------------------------- 1 | const baseURL = '/api/' 2 | export default baseURL 3 | -------------------------------------------------------------------------------- /front-end/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import store from './store' 7 | import axios from 'axios' 8 | import iView from 'iview' 9 | import 'iview/dist/styles/iview.css' // 使用 CSS 10 | // import IEcharts from 'vue-echarts-v3/src/full.vue'; 11 | import baseURL from './config' 12 | Vue.use(iView) 13 | 14 | axios.defaults.baseURL = baseURL 15 | 16 | // http request 拦截器 17 | axios.interceptors.request.use( 18 | config => { 19 | if (localStorage.JWT_TOKEN) { // 判断是否存在token,如果存在的话,则每个http header都加上token 20 | config.headers.Authorization = `token ${localStorage.JWT_TOKEN}` 21 | } 22 | return config 23 | }, 24 | err => { 25 | return Promise.reject(err) 26 | }) 27 | 28 | // http response 拦截器 29 | axios.interceptors.response.use( 30 | response => { 31 | return response 32 | }, 33 | error => { 34 | if (error.response) { 35 | switch (error.response.status) { 36 | case 401: 37 | // 返回 401 清除token信息并跳转到登录页面 38 | store.commit('LOG_OUT') 39 | router.replace({ 40 | path: '/login', 41 | query: {redirect: router.currentRoute.fullPath} 42 | }) 43 | this.$Message.error('非法访问,请重试!') 44 | } 45 | } 46 | return Promise.reject(error.response.data) // 返回接口返回的错误信息 47 | }) 48 | 49 | Vue.prototype.$http = axios 50 | Vue.config.productionTip = false 51 | 52 | /* eslint-disable no-new */ 53 | const vm = new Vue({ 54 | el: '#app', 55 | router, 56 | store, 57 | ...App 58 | }).$mount('#app') 59 | 60 | export default vm 61 | -------------------------------------------------------------------------------- /front-end/src/store/actions.js: -------------------------------------------------------------------------------- 1 | // import api from '../api/index' 2 | import * as types from './mutation-types' 3 | import vm from '@/main' 4 | 5 | // 全局的actions 6 | 7 | // questionList 8 | export const getNaire = ({commit, state}, data) => { 9 | console.log('commit REQUEST_QUESTION_LIST') 10 | return vm.$http.post('/naire/detail', { 11 | n_id: data.n_id 12 | }) 13 | } 14 | // 新增问卷 15 | export const createNaire = ({commit, state}, data) => { 16 | commit(types.CREATE_NEW_NAIRE, { 17 | naire: data 18 | }) 19 | } 20 | export const saveNewNaire = ({commit, state}, data) => { 21 | // const params = new URLSearchParams() 22 | // params.append('naire', JSON.stringify(state.naire)) 23 | // params.append('status', state.status) 24 | return vm.$http.post('/naire/save', { 25 | naire: state.naire, 26 | status: state.status 27 | }) 28 | } 29 | 30 | // 新增问题 31 | export const addQuestion = ({commit, state}, data) => { 32 | commit(types.ADD_NEW_QUESTION, { 33 | topic: data 34 | }) 35 | } 36 | 37 | export const delQuestion = ({commit, state}, data) => { 38 | commit(types.DEL_QUESTION, data) 39 | } 40 | 41 | export const delOption = ({commit, state}, data) => { 42 | commit(types.DEL_OPTION, data) 43 | } 44 | 45 | export const changeStatus = ({commit, state}, data) => { 46 | commit(types.CHANGE_STATUS, data) 47 | } 48 | 49 | export const changeNaireStatus = ({commit, state}, data) => { 50 | commit(types.CHANGE_NAIRE_STATUS, data) 51 | } 52 | // 管理员登录时,将 is_admin 设置为 true 53 | export const login = ({commit}, data) => { 54 | commit(types.USER_LOGIN, { 55 | username: data.username, 56 | token: data.token 57 | }) 58 | } 59 | 60 | export const logout = ({commit}) => { 61 | commit(types.LOG_OUT) 62 | } 63 | -------------------------------------------------------------------------------- /front-end/src/store/getters.js: -------------------------------------------------------------------------------- 1 | export const naire = state => state.naire 2 | export const status = state => state.status 3 | export const isAdmin = state => state.isAdmin 4 | export const getUser = state => localStorage.getItem('USER_NAME') 5 | export const getToken = state => localStorage.getItem('JWT_TOKEN') 6 | 7 | -------------------------------------------------------------------------------- /front-end/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import * as actions from './actions' 4 | import * as getters from './getters' 5 | import mutations from './mutations' 6 | 7 | Vue.use(Vuex) 8 | 9 | const debug = process.env.NODE_ENV !== 'production' 10 | 11 | export default new Vuex.Store({ 12 | // 将各组件分别模块化存入 Store 13 | state: { 14 | naire: {}, 15 | isAdmin: false, 16 | status: 'create' // create or update 17 | }, 18 | actions, 19 | getters, 20 | mutations, 21 | strict: debug 22 | }) 23 | -------------------------------------------------------------------------------- /front-end/src/store/mutation-types.js: -------------------------------------------------------------------------------- 1 | // 列出所有的 动作名称 2 | export const REQUEST_QUESTION_LIST = 'REQUEST_QUESTION_LIST' 3 | 4 | export const CREATE_NEW_NAIRE = 'CREATE_NEW_NAIRE' 5 | export const SAVE_NEW_NAIRE = 'SAVE_NEW_NAIRE' 6 | export const ADD_NEW_QUESTION = 'ADD_NEW_QUESTION' 7 | export const DEL_QUESTION = 'DEL_QUESTION' 8 | export const DEL_OPTION = 'DEL_OPTION' 9 | export const CHANGE_STATUS = 'CHANGE_STATUS' 10 | export const UPDATE_TITLE = 'UPDATE_TITLE' 11 | export const UPDATE_INTRO = 'UPDATE_INTRO' 12 | export const UPDATE_DEADLINE = 'UPDATE_DEADLINE' 13 | export const CHANGE_NAIRE_STATUS = 'CHANGE_NAIRE_STATUS' 14 | export const USER_LOGIN = 'USER_LOGIN' 15 | export const LOG_OUT = 'LOG_OUT' 16 | -------------------------------------------------------------------------------- /front-end/src/store/mutations.js: -------------------------------------------------------------------------------- 1 | // 引入 api 接口 2 | import * as types from './mutation-types' 3 | 4 | export default { 5 | [types.REQUEST_QUESTION_LIST] (state, action) { 6 | // 获取mock数据 7 | let data = JSON.stringify(action.naire) 8 | state.naire = JSON.parse(data) 9 | }, 10 | [types.CREATE_NEW_NAIRE] (state, data) { 11 | // state.naire = data.naire 12 | state.naire = {...state.naire, ...data.naire} 13 | }, 14 | [types.SAVE_NEW_NAIRE] (state, data) { 15 | // state.naire = action.naire 16 | state.naire = {...state.naire, ...data.naire} 17 | }, 18 | [types.ADD_NEW_QUESTION] (state, action) { 19 | state.naire.topic.push(action.topic) 20 | }, 21 | [types.DEL_QUESTION] (state, index) { 22 | state.naire.topic.splice(index, 1) 23 | }, 24 | [types.DEL_OPTION] (state, data) { 25 | state.naire.topic[data.index].options.splice(data.opIndex, 1) 26 | }, 27 | [types.CHANGE_STATUS] (state, data) { 28 | state.status = data 29 | }, 30 | [types.CHANGE_NAIRE_STATUS] (state, data) { 31 | state.naire.status = data 32 | }, 33 | [types.UPDATE_TITLE] (state, data) { 34 | // state.title = data 35 | state.naire = {...state.naire, title: data} 36 | }, 37 | [types.UPDATE_INTRO] (state, data) { 38 | // state.intro = data 39 | state.naire = {...state.naire, intro: data} 40 | }, 41 | [types.UPDATE_DEADLINE] (state, data) { 42 | // state.deadline = data 43 | state.naire = {...state.naire, deadline: data} 44 | }, 45 | [types.USER_LOGIN] (state, payload) { 46 | state.isAdmin = true 47 | localStorage.setItem('USER_NAME', payload.username) 48 | localStorage.setItem('JWT_TOKEN', payload.token) 49 | }, 50 | [types.LOG_OUT] (state) { 51 | state.isAdmin = false 52 | localStorage.removeItem('JWT_TOKEN') 53 | localStorage.removeItem('USER_NAME') 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /front-end/src/views/common/complete/complete.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | 21 | 63 | -------------------------------------------------------------------------------- /front-end/src/views/common/error/error.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 33 | 34 | 76 | -------------------------------------------------------------------------------- /front-end/src/views/statis/statis.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /front-end/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/front-end/static/.gitkeep -------------------------------------------------------------------------------- /front-end/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/front-end/static/favicon.ico -------------------------------------------------------------------------------- /批量导入模板.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/52admln/vue-questionnaire/859a96ecf4268154c349b9f2d11efe3d8937229e/批量导入模板.xls --------------------------------------------------------------------------------