Full Code of CrazyRocks/goadmin for AI

master 49f7fb610c73 cached
196 files
3.6 MB
960.3k tokens
582 symbols
1 requests
Download .txt
Showing preview only (3,849K chars total). Download the full file or copy to clipboard to get everything.
Repository: CrazyRocks/goadmin
Branch: master
Commit: 49f7fb610c73
Files: 196
Total size: 3.6 MB

Directory structure:
gitextract_q1xzow4c/

├── .gitattributes
├── .idea/
│   ├── .gitignore
│   ├── goadmin.iml
│   ├── misc.xml
│   └── modules.xml
├── License
├── README.en.md
├── README.md
├── boot/
│   ├── boot.go
│   └── module.go
├── config/
│   └── config.toml
├── go.mod
├── go.sum
├── main.go
├── middleware/
│   └── rtoken/
│       ├── rtoken.go
│       ├── rtoken_cache.go
│       └── rtoken_resp.go
├── module/
│   ├── home/
│   │   ├── config/
│   │   │   └── router.go
│   │   ├── controller/
│   │   │   └── dashboard_controller.go
│   │   └── module.go
│   ├── public/
│   │   ├── config/
│   │   │   └── router.go
│   │   ├── controller/
│   │   │   └── login_controller.go
│   │   ├── model/
│   │   │   └── sys_login_user_model.go
│   │   └── module.go
│   └── sys/
│       ├── config/
│       │   └── router.go
│       ├── controller/
│       │   ├── sys_config_controller.go
│       │   ├── sys_oss_controller.go
│       │   └── sys_user_controller.go
│       ├── model/
│       │   ├── sys_config_model.go
│       │   ├── sys_oss_cloud.go
│       │   ├── sys_oss_model.go
│       │   └── sys_user_model.go
│       └── module.go
├── public/
│   ├── modules/
│   │   ├── common.js
│   │   └── sys/
│   │       ├── config.js
│   │       ├── oss.js
│   │       └── user.js
│   ├── plugins/
│   │   ├── ajaxupload/
│   │   │   └── ajaxupload.js
│   │   └── table/
│   │       ├── bootstrap-table-locale-all.js
│   │       ├── bootstrap-table-vue.esm.js
│   │       ├── bootstrap-table-vue.js
│   │       ├── bootstrap-table.css
│   │       ├── bootstrap-table.js
│   │       ├── extensions/
│   │       │   ├── accent-neutralise/
│   │       │   │   └── bootstrap-table-accent-neutralise.js
│   │       │   ├── addrbar/
│   │       │   │   └── bootstrap-table-addrbar.js
│   │       │   ├── auto-refresh/
│   │       │   │   └── bootstrap-table-auto-refresh.js
│   │       │   ├── cell-input/
│   │       │   │   ├── bootstrap-table-cell-input.css
│   │       │   │   └── bootstrap-table-cell-input.js
│   │       │   ├── cookie/
│   │       │   │   └── bootstrap-table-cookie.js
│   │       │   ├── copy-rows/
│   │       │   │   └── bootstrap-table-copy-rows.js
│   │       │   ├── defer-url/
│   │       │   │   └── bootstrap-table-defer-url.js
│   │       │   ├── editable/
│   │       │   │   └── bootstrap-table-editable.js
│   │       │   ├── export/
│   │       │   │   └── bootstrap-table-export.js
│   │       │   ├── filter-control/
│   │       │   │   ├── bootstrap-table-filter-control.css
│   │       │   │   └── bootstrap-table-filter-control.js
│   │       │   ├── fixed-columns/
│   │       │   │   ├── bootstrap-table-fixed-columns.css
│   │       │   │   └── bootstrap-table-fixed-columns.js
│   │       │   ├── group-by-v2/
│   │       │   │   ├── bootstrap-table-group-by.css
│   │       │   │   └── bootstrap-table-group-by.js
│   │       │   ├── i18n-enhance/
│   │       │   │   └── bootstrap-table-i18n-enhance.js
│   │       │   ├── key-events/
│   │       │   │   └── bootstrap-table-key-events.js
│   │       │   ├── mobile/
│   │       │   │   └── bootstrap-table-mobile.js
│   │       │   ├── multiple-sort/
│   │       │   │   └── bootstrap-table-multiple-sort.js
│   │       │   ├── natural-sorting/
│   │       │   │   └── bootstrap-table-natural-sorting.js
│   │       │   ├── page-jump-to/
│   │       │   │   ├── bootstrap-table-page-jump-to.css
│   │       │   │   └── bootstrap-table-page-jump-to.js
│   │       │   ├── pipeline/
│   │       │   │   └── bootstrap-table-pipeline.js
│   │       │   ├── print/
│   │       │   │   └── bootstrap-table-print.js
│   │       │   ├── reorder-columns/
│   │       │   │   └── bootstrap-table-reorder-columns.js
│   │       │   ├── reorder-rows/
│   │       │   │   ├── bootstrap-table-reorder-rows.css
│   │       │   │   └── bootstrap-table-reorder-rows.js
│   │       │   ├── resizable/
│   │       │   │   └── bootstrap-table-resizable.js
│   │       │   ├── sticky-header/
│   │       │   │   ├── bootstrap-table-sticky-header.css
│   │       │   │   └── bootstrap-table-sticky-header.js
│   │       │   ├── toolbar/
│   │       │   │   └── bootstrap-table-toolbar.js
│   │       │   └── treegrid/
│   │       │       └── bootstrap-table-treegrid.js
│   │       ├── locale/
│   │       │   ├── bootstrap-table-af-ZA.js
│   │       │   ├── bootstrap-table-ar-SA.js
│   │       │   ├── bootstrap-table-ca-ES.js
│   │       │   ├── bootstrap-table-cs-CZ.js
│   │       │   ├── bootstrap-table-da-DK.js
│   │       │   ├── bootstrap-table-de-DE.js
│   │       │   ├── bootstrap-table-el-GR.js
│   │       │   ├── bootstrap-table-en-US.js
│   │       │   ├── bootstrap-table-es-AR.js
│   │       │   ├── bootstrap-table-es-CL.js
│   │       │   ├── bootstrap-table-es-CR.js
│   │       │   ├── bootstrap-table-es-ES.js
│   │       │   ├── bootstrap-table-es-MX.js
│   │       │   ├── bootstrap-table-es-NI.js
│   │       │   ├── bootstrap-table-es-SP.js
│   │       │   ├── bootstrap-table-et-EE.js
│   │       │   ├── bootstrap-table-eu-EU.js
│   │       │   ├── bootstrap-table-fa-IR.js
│   │       │   ├── bootstrap-table-fi-FI.js
│   │       │   ├── bootstrap-table-fr-BE.js
│   │       │   ├── bootstrap-table-fr-CH.js
│   │       │   ├── bootstrap-table-fr-FR.js
│   │       │   ├── bootstrap-table-fr-LU.js
│   │       │   ├── bootstrap-table-he-IL.js
│   │       │   ├── bootstrap-table-hr-HR.js
│   │       │   ├── bootstrap-table-hu-HU.js
│   │       │   ├── bootstrap-table-id-ID.js
│   │       │   ├── bootstrap-table-it-IT.js
│   │       │   ├── bootstrap-table-ja-JP.js
│   │       │   ├── bootstrap-table-ka-GE.js
│   │       │   ├── bootstrap-table-ko-KR.js
│   │       │   ├── bootstrap-table-ms-MY.js
│   │       │   ├── bootstrap-table-nb-NO.js
│   │       │   ├── bootstrap-table-nl-BE.js
│   │       │   ├── bootstrap-table-nl-NL.js
│   │       │   ├── bootstrap-table-pl-PL.js
│   │       │   ├── bootstrap-table-pt-BR.js
│   │       │   ├── bootstrap-table-pt-PT.js
│   │       │   ├── bootstrap-table-ro-RO.js
│   │       │   ├── bootstrap-table-ru-RU.js
│   │       │   ├── bootstrap-table-sk-SK.js
│   │       │   ├── bootstrap-table-sr-Cyrl-RS.js
│   │       │   ├── bootstrap-table-sr-Latn-RS.js
│   │       │   ├── bootstrap-table-sv-SE.js
│   │       │   ├── bootstrap-table-th-TH.js
│   │       │   ├── bootstrap-table-tr-TR.js
│   │       │   ├── bootstrap-table-uk-UA.js
│   │       │   ├── bootstrap-table-ur-PK.js
│   │       │   ├── bootstrap-table-uz-Latn-UZ.js
│   │       │   ├── bootstrap-table-vi-VN.js
│   │       │   ├── bootstrap-table-zh-CN.js
│   │       │   └── bootstrap-table-zh-TW.js
│   │       └── themes/
│   │           ├── bulma/
│   │           │   ├── bootstrap-table-bulma.css
│   │           │   └── bootstrap-table-bulma.js
│   │           ├── foundation/
│   │           │   ├── bootstrap-table-foundation.css
│   │           │   └── bootstrap-table-foundation.js
│   │           ├── materialize/
│   │           │   ├── bootstrap-table-materialize.css
│   │           │   └── bootstrap-table-materialize.js
│   │           └── semantic/
│   │               ├── bootstrap-table-semantic.css
│   │               └── bootstrap-table-semantic.js
│   └── stisla/
│       ├── css/
│       │   ├── components.css
│       │   ├── custom.css
│       │   ├── reverse.css
│       │   ├── rtl.css
│       │   ├── skins/
│       │   │   └── reverse.css
│       │   └── style.css
│       ├── fonts/
│       │   └── vazir/
│       │       ├── LICENSE
│       │       └── font-face.css
│       └── js/
│           ├── custom.js
│           ├── page/
│           │   ├── auth-register.js
│           │   ├── bootstrap-modal.js
│           │   ├── components-chat-box.js
│           │   ├── components-multiple-upload.js
│           │   ├── components-statistic.js
│           │   ├── components-table.js
│           │   ├── components-user.js
│           │   ├── features-post-create.js
│           │   ├── features-posts.js
│           │   ├── features-setting-detail.js
│           │   ├── forms-advanced-forms.js
│           │   ├── gmaps-advanced-route.js
│           │   ├── gmaps-draggable-marker.js
│           │   ├── gmaps-geocoding.js
│           │   ├── gmaps-geolocation.js
│           │   ├── gmaps-marker.js
│           │   ├── gmaps-multiple-marker.js
│           │   ├── gmaps-route.js
│           │   ├── gmaps-simple.js
│           │   ├── index-0.js
│           │   ├── index.js
│           │   ├── modules-calendar.js
│           │   ├── modules-chartjs.js
│           │   ├── modules-datatables.js
│           │   ├── modules-ion-icons.js
│           │   ├── modules-slider.js
│           │   ├── modules-sparkline.js
│           │   ├── modules-sweetalert.js
│           │   ├── modules-toastr.js
│           │   ├── modules-vector-map.js
│           │   └── utilities-contact.js
│           ├── scripts.js
│           └── stisla.js
├── sql/
│   └── goadmin.sql
├── template/
│   ├── home/
│   │   └── index.html
│   ├── layout/
│   │   ├── footer.html
│   │   ├── header.html
│   │   └── nav.html
│   ├── public/
│   │   └── login.html
│   └── sys/
│       ├── config.html
│       ├── oss.html
│       └── user.html
└── utils/
    ├── base/
    │   ├── baseForm.go
    │   ├── baseModel.go
    │   └── baseRouter.go
    ├── bean/
    │   └── SessionUser.go
    ├── cloud/
    │   └── oss.go
    ├── resp/
    │   └── resp.go
    ├── time.go
    └── tools/
        ├── gid.go
        └── redis.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.js linguist-language=GO
*.css linguist-language=GO
*.html linguist-language=GO


================================================
FILE: .idea/.gitignore
================================================
# Default ignored files
/workspace.xml

================================================
FILE: .idea/goadmin.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
  <component name="Go" enabled="true" />
  <component name="NewModuleRootManager">
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="JavaScriptSettings">
    <option name="languageLevel" value="ES6" />
  </component>
</project>

================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/goadmin.iml" filepath="$PROJECT_DIR$/.idea/goadmin.iml" />
    </modules>
  </component>
</project>

================================================
FILE: License
================================================
MIT License

Copyright (c) 2020 CrazyRocks

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.en.md
================================================


================================================
FILE: README.md
================================================
# GoAdim

底层框架:GF<br/>
前端模板:stisla<br/>
数据库:mysql<br/>
缓存:redis<br/>
权限:token<br/>

安装:<br/>
1:数据库在:sql文件夹下<br/>
2:修改config文件下的config<br/>
3:请打开redis<br/>
4: go run main.go<br/>
5:账号:admin 密码:admin#1314<br/>
打包等细节:查看gf手册<br/>


配套工具
全自动生成脚手架:https://github.com/CrazyRocks/autocreate<br/>
1: 生成了model<br/>
2: 生成了controller<br/>
3: 生成了router<br/>
4: 生成了moudle<br/>
5: 生成了html模式下的模板(html,js)<br/>
6: 生成了vue模式下的vue<br/>
7: 自动生成了权限menu.sql<br/>
原来需要写一天,现在只需1分钟搞定<br/>
![输入图片说明](https://images.gitee.com/uploads/images/2019/1225/172725_0759aafc_1927330.jpeg "3.jpg")<br/>

项目说明:
1: 底层使用超级爽的:gf框架(爽到爆)<br/>
2: 该系统是一个golang admin(就是为了快)<br/>
3: 系统采用了token验证,所以全端一键生成API<br/>
5: 碾压的超级美观界面<br/>
![输入图片说明](https://images.gitee.com/uploads/images/2019/1225/172744_38454fdb_1927330.jpeg "5.jpg")<br/>
![输入图片说明](https://images.gitee.com/uploads/images/2019/1225/172758_27d955f0_1927330.jpeg "6.jpg")<br/>
![输入图片说明](https://images.gitee.com/uploads/images/2019/1225/172818_dd46545a_1927330.jpeg "7.jpg")<br/>

 **关注我,带你们技术搞流量,技术搞流量,轻松百万流量**<br/>
1:独家分享独立开发者1000万用户的操作<br/>
2:独家分享日活20万用户的全套代码<br/>
3:独家分享如果用技术短时间获取百万用户 <br/>
开源:<br/>
1:全套视频APP,上线3个月日活5万+ [https://gitee.com/rocks/zhanglubao](https://gitee.com/rocks/zhanglubao)<br/>
2: 全自动全栈代码生成器:[https://gitee.com/crazyrocks/goadmin](https://gitee.com/crazyrocks/goadmin)<br/>
3: 即将分享1个月打造日活10万+微信小程序<br/>
4: 关于安卓市场,快速上榜工具<br/>
 **全是野路子** <br/>

![输入图片说明](https://images.gitee.com/uploads/images/2020/0109/151918_f6733481_620187.jpeg "qrcode_for_gh_221095e67f12_1280.jpg")<br/>

关于百度:<br/>
1:如何做到1个月百度流量破万<br/>
2:如何做到1个月小程序日活20万<br/>
![输入图片说明](https://images.gitee.com/uploads/images/2020/0109/155739_ee8bdd72_1927330.png "1.png")<br/>
关于Google,直接上图<br/>

![输入图片说明](https://images.gitee.com/uploads/images/2020/0109/155759_10726b97_1927330.png "3.png")<br/>
<br/>

感谢大佬<br/>
| Name | Channel | Amount | Comment<br/>
|---|---|--- | ---<br/>
|李超|wechat|¥66.00 |<br/>


================================================
FILE: boot/boot.go
================================================
package boot

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/os/gsession"
	"goadmin/middleware/rtoken"
	"goadmin/module/public/controller"
	"goadmin/utils/base"
	"time"
)

func init() {
	InitConfig()
	InitModules()
	// 启动rtoken
	base.Token = &rtoken.RfToken{
		Timeout:          100 * 1000,
		CacheMode:        2,
		LoginPath:        "/login/submit",
		LoginBeforeFunc:  controller.LoginSubmit,
		LoginAfterFunc:   controller.LoginAfter,
		LogoutPath:       "/user/logout",
		LogoutBeforeFunc: controller.LogoutBefore,
		AuthPaths:        g.SliceStr{"/dashboard", "/sys/*"},
	}
	base.Token.Start()
}

// 用于应用初始化。
func InitConfig() {
	c := g.Config()
	s := g.Server()
	v := g.View()
	//session存内存
	_ = s.SetConfigWithMap(g.Map{
		"SessionMaxAge":  time.Minute,
		"SessionStorage": gsession.NewStorageMemory(),
	})

	// 配置对象及视图对象配置
	_ = c.AddPath("config")
	v.SetDelimiters("${", "}")
	_ = v.AddPath("template")

	s.SetServerRoot("public")
	// glog配置
	logpath := c.GetString("setting.logpath")
	_ = glog.SetPath(logpath)
	glog.SetStdoutPrint(true)

	s.SetLogPath(logpath)
	s.SetErrorLogEnabled(true)
	s.SetAccessLogEnabled(false)
	s.EnableAdmin()
	s.SetPort(8192)
}


================================================
FILE: boot/module.go
================================================
package boot

import (
	"goadmin/module/home"
	"goadmin/module/public"
	"goadmin/module/sys"
)

func InitModules() {
	public.InitModule()
	home.InitModule()
	sys.InitModule()
}


================================================
FILE: config/config.toml
================================================
url-path = ""

# 应用系统设置
[setting]
    logpath = "/logs"
    assest=""
    domain=""


# 数据库连接
[database]
   [[database.center]]
        host     = "localhost"
        port     = "3306"
        user     = "root"
        pass     = ""
        name     = "goadmin"
        type     = "mysql"
        role     = "master"
        charset  = "utf8"
        priority = "1"
        debug    = "false"

# 缓存模式 1 gcache 2 gredis
cache-mode = 2

# Redis数据库配置
[redis]
  default = "127.0.0.1:6379,0"
  cache   = "127.0.0.1:6379,1?idleTimeout=600"

================================================
FILE: go.mod
================================================
module goadmin

require github.com/gogf/gf v1.10.0

require (
	github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible
	github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
	github.com/kr/pretty v0.1.0 // indirect
	github.com/satori/go.uuid v1.2.0 // indirect
	golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
	google.golang.org/appengine v1.6.5 // indirect
	gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
)

go 1.13


================================================
FILE: go.sum
================================================
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible h1:EaK5256H3ELiyaq5O/Zwd6fnghD6DqmZDQmmzzJklUU=
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gf-third/mysql v1.4.2 h1:f1M5CNFUG3WkE07UOomtu4o0n/KJKeuUUf5Nc9ZFXs4=
github.com/gf-third/mysql v1.4.2/go.mod h1:+dd90V663ppI2fV5uQ6+rHk0u8KCyU6FkG8Um8Cx3ms=
github.com/gf-third/yaml v1.0.1 h1:pqD4ix+65DqGphU1MDnToPZfGYk0tuuwRzuTSl3g0d0=
github.com/gf-third/yaml v1.0.1/go.mod h1:t443vj0txEw3+E0MOtkr83kt+PrZg2I8SRuYfn85NM0=
github.com/gogf/gf v1.10.0 h1:O6QwrdlQ06Nq/mp3EMwGckPA6xnWg2L+k5u+mYCiges=
github.com/gogf/gf v1.10.0/go.mod h1:/37gncPmuM06D4YSqiDze9GsasDtF2QnWkUfKeiGW/Q=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf h1:wIOAyJMMen0ELGiFzlmqxdcV1yGbkyHBAB6PolcNbLA=
github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=


================================================
FILE: main.go
================================================
package main

import (
	"github.com/gogf/gf/frame/g"
	_ "goadmin/boot"
)

func main() {
	g.Server().Run()
}


================================================
FILE: middleware/rtoken/rtoken.go
================================================
package rtoken

import (
	"fmt"
	"github.com/gogf/gf/crypto/gaes"
	"github.com/gogf/gf/crypto/gmd5"
	"github.com/gogf/gf/encoding/gbase64"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/os/gtime"
	"github.com/gogf/gf/text/gstr"
	"github.com/gogf/gf/util/gconv"
	"github.com/gogf/gf/util/grand"
	"strings"
)

const (
	CacheModeCache = 1
	CacheModeRedis = 2
)

// RfToken rtoken结构体
type RfToken struct {
	// 缓存模式 1 gcache 2 gredis 默认1
	CacheMode int8
	// 缓存key
	CacheKey string
	// 超时时间 默认10天
	Timeout int
	// 缓存刷新时间 默认为超时时间的一半
	MaxRefresh int
	// Token分隔符
	TokenDelimiter string
	// Token加密key
	EncryptKey []byte
	// 认证失败中文提示
	AuthFailMsg string

	// 登录路径
	LoginPath string
	// 登录验证方法 return userKey 用户标识 如果userKey为空,结束执行
	LoginBeforeFunc func(r *ghttp.Request) (string, interface{})
	// 登录返回方法
	LoginAfterFunc func(r *ghttp.Request, respData Resp)
	// 登出地址
	LogoutPath string
	// 登出验证方法 return true 继续执行,否则结束执行
	LogoutBeforeFunc func(r *ghttp.Request) bool
	// 登出返回方法
	LogoutAfterFunc func(r *ghttp.Request, respData Resp)

	// 拦截地址
	AuthPaths g.SliceStr
	// 认证验证方法 return true 继续执行,否则结束执行
	AuthBeforeFunc func(r *ghttp.Request) bool
	// 认证返回方法
	AuthAfterFunc func(r *ghttp.Request, respData Resp)
}

// Init 初始化
func (m *RfToken) Init() bool {
	if m.CacheMode == 0 {
		m.CacheMode = CacheModeCache
	}

	if m.CacheKey == "" {
		m.CacheKey = "RToken:"
	}

	if m.Timeout == 0 {
		m.Timeout = 10 * 24 * 60 * 60 * 1000
	}

	if m.MaxRefresh == 0 {
		m.MaxRefresh = m.Timeout / 2
	}

	if m.TokenDelimiter == "" {
		m.TokenDelimiter = "_"
	}

	if len(m.EncryptKey) == 0 {
		m.EncryptKey = []byte("12345678912345678912345678912345")
	}

	if m.AuthFailMsg == "" {
		m.AuthFailMsg = "请求错误或登录超时"
	}

	if m.LoginAfterFunc == nil {
		m.LoginAfterFunc = func(r *ghttp.Request, respData Resp) {
			if !respData.Success() {
				r.Response.WriteJson(respData)
			} else {
				r.Response.WriteJson(Succ(g.Map{
					"token": respData.GetString("token"),
				}))
			}
		}
	}

	if m.LogoutBeforeFunc == nil {
		m.LogoutBeforeFunc = func(r *ghttp.Request) bool {
			return true
		}
	}

	if m.LogoutAfterFunc == nil {
		m.LogoutAfterFunc = func(r *ghttp.Request, respData Resp) {
			if respData.Success() {
				r.Response.WriteJson(Succ("Logout success"))
			} else {
				r.Response.WriteJson(respData)
			}
		}
	}

	if m.AuthBeforeFunc == nil {
		m.AuthBeforeFunc = func(r *ghttp.Request) bool {
			// 静态页面不拦截
			if r.IsFileRequest() {
				return false
			}

			return true
		}
	}
	if m.AuthAfterFunc == nil {
		m.AuthAfterFunc = func(r *ghttp.Request, respData Resp) {
			if respData.Success() {
				r.Middleware.Next()
			} else {
				var params map[string]interface{}
				if r.Method == "GET" {
					params = r.GetQueryMap()
				} else if r.Method == "POST" {
					params = r.GetPostMap()
				} else {
					r.Response.Writeln("Request Method is ERROR! ")
					return
				}

				no := gconv.String(gtime.Millisecond())

				glog.Info(fmt.Sprintf("[AUTH_%s][url:%s][params:%s][data:%s]",
					no, r.URL.Path, params, respData.Json()))
				respData.Msg = m.AuthFailMsg
				r.Response.WriteJson(respData)
				r.ExitAll()
			}
		}
	}

	return true
}

// Start 启动
func (m *RfToken) Start() bool {
	if !m.Init() {
		return false
	}
	glog.Info("[RToken][params:" + m.String() + "]start... ")

	s := g.Server()

	// 缓存模式
	if m.CacheMode > CacheModeRedis {
		glog.Error("[RToken]CacheMode set error")
		return false
	}

	// 认证拦截器
	if m.AuthPaths == nil {
		glog.Error("[RToken]HookPathList not set")
		return false
	}
	for _, authPath := range m.AuthPaths {
		if strings.HasSuffix(authPath, "/*") {
			s.BindMiddleware(authPath, m.AuthMiddleware)
		} else {
			s.BindMiddleware(authPath+"/*", m.AuthMiddleware)
		}
	}

	// 登录
	if m.LoginPath == "" || m.LoginBeforeFunc == nil {
		glog.Error("[RToken]LoginPath or LoginBeforeFunc not set")
		return false
	}
	s.BindHandler(m.LoginPath, m.Login)

	// 登出
	if m.LogoutPath == "" {
		glog.Error("[RToken]LogoutPath or LogoutFunc not set")
		return false
	}
	s.BindHandler(m.LogoutPath, m.Logout)

	return true
}

// Start 结束
func (m *RfToken) Stop() bool {
	glog.Info("[RToken]stop. ")
	return true
}

// GetTokenData 通过token获取对象
func (m *RfToken) GetTokenData(r *ghttp.Request) Resp {
	respData := m.getRequestToken(r)
	if respData.Success() {
		// 验证token
		respData = m.validToken(respData.DataString())
	}

	return respData
}

// Login 登录
func (m *RfToken) Login(r *ghttp.Request) {
	userKey, data := m.LoginBeforeFunc(r)
	if userKey != "" {
		// 生成token
		respToken := m.genToken(userKey, data)
		m.LoginAfterFunc(r, respToken)
	}

}

// Logout 登出
func (m *RfToken) Logout(r *ghttp.Request) {
	if m.LogoutBeforeFunc(r) {
		// 获取请求token
		respData := m.getRequestToken(r)
		if respData.Success() {
			// 删除token
			m.removeToken(respData.DataString())
		}

		m.LogoutAfterFunc(r, respData)
	}
}

// AuthMiddleware 认证拦截
func (m *RfToken) AuthMiddleware(r *ghttp.Request) {
	// 不需要认证,直接下一步
	if !m.AuthBeforeFunc(r) {
		r.Middleware.Next()
		return
	}

	// 获取请求token
	tokenResp := m.getRequestToken(r)
	if tokenResp.Success() {
		// 验证token
		tokenResp = m.validToken(tokenResp.DataString())
	}

	m.AuthAfterFunc(r, tokenResp)

}

// getRequestToken 返回请求Token
func (m *RfToken) getRequestToken(r *ghttp.Request) Resp {
	authHeader := r.Header.Get("Authorization")
	if authHeader != "" {
		parts := strings.SplitN(authHeader, " ", 2)
		if !(len(parts) == 2 && parts[0] == "Bearer") {
			glog.Warning("[RToken]authHeader:" + authHeader + " get token key fail")
			return Unauthorized("get token key fail", "")
		} else if parts[1] == "" {
			glog.Warning("[RToken]authHeader:" + authHeader + " get token fail")
			return Unauthorized("get token fail", "")
		}

		return Succ(parts[1])
	}
	token := r.Cookie.Get("token", "")
	if token != "" {
		return Succ(token)
	}

	authHeader = r.GetPostString("token")
	if authHeader == "" {
		return Unauthorized("query token fail", "")
	}
	return Succ(authHeader)

}

// genToken 生成Token
func (m *RfToken) genToken(userKey string, data interface{}) Resp {
	token := m.EncryptToken(userKey)
	if !token.Success() {
		return token
	}

	cacheKey := m.CacheKey + userKey
	userCache := g.Map{
		"userKey":     userKey,
		"uuid":        token.GetString("uuid"),
		"data":        data,
		"createTime":  gtime.Now().Millisecond(),
		"refreshTime": gtime.Now().Millisecond() + gconv.Int64(m.MaxRefresh),
	}

	cacheResp := m.setCache(cacheKey, userCache)
	if !cacheResp.Success() {
		return cacheResp
	}

	return token
}

// validToken 验证Token
func (m *RfToken) validToken(token string) Resp {
	if token == "" {
		return Unauthorized("valid token empty", "")
	}

	decryptToken := m.DecryptToken(token)
	if !decryptToken.Success() {
		return decryptToken
	}

	userKey := decryptToken.GetString("userKey")
	uuid := decryptToken.GetString("uuid")
	cacheKey := m.CacheKey + userKey

	userCacheResp := m.getCache(cacheKey)
	if !userCacheResp.Success() {
		return userCacheResp
	}
	userCache := gconv.Map(userCacheResp.Data)

	if uuid != userCache["uuid"] {
		glog.Error("[RToken]user auth error, decryptToken:" + decryptToken.Json() + " cacheValue:" + gconv.String(userCache))
		return Unauthorized("user auth error", "")
	}

	nowTime := gtime.Now().Millisecond()
	refreshTime := userCache["refreshTime"]

	// 需要进行缓存超时时间刷新
	if gconv.Int64(refreshTime) == 0 || nowTime > gconv.Int64(refreshTime) {
		userCache["createTime"] = gtime.Now().Millisecond()
		userCache["refreshTime"] = gtime.Now().Millisecond() + gconv.Int64(m.MaxRefresh)
		glog.Debug("[RToken]refreshToken:" + gconv.String(userCache))
		return m.setCache(cacheKey, userCache)
	}

	return Succ(userCache)
}

// removeToken 删除Token
func (m *RfToken) removeToken(token string) Resp {
	decryptToken := m.DecryptToken(token)
	if !decryptToken.Success() {
		return decryptToken
	}

	cacheKey := m.CacheKey + decryptToken.GetString("userKey")
	return m.removeCache(cacheKey)
}

// EncryptToken token加密方法
func (m *RfToken) EncryptToken(userKey string) Resp {
	if userKey == "" {
		return Fail("encrypt userKey empty")
	}

	uuid, err := gmd5.Encrypt(grand.Str(10))
	if err != nil {
		glog.Error("[RToken]uuid error", err)
		return Error("uuid error")
	}
	tokenStr := userKey + m.TokenDelimiter + uuid

	token, err := gaes.Encrypt([]byte(tokenStr), m.EncryptKey)
	if err != nil {
		glog.Error("[RToken]encrypt error", err)
		return Error("encrypt error")
	}

	return Succ(g.Map{
		"userKey": userKey,
		"uuid":    uuid,
		"token":   gbase64.Encode(token),
	})
}

// DecryptToken token解密方法
func (m *RfToken) DecryptToken(token string) Resp {
	if token == "" {
		return Fail("decrypt token empty")
	}

	token64, err := gbase64.Decode([]byte(token))
	if err != nil {
		glog.Error("[RToken]decode error", err)
		return Error("decode error")
	}
	decryptToken, err2 := gaes.Decrypt([]byte(token64), m.EncryptKey)
	if err2 != nil {
		glog.Error("[RToken]decrypt error", err2)
		return Error("decrypt error")
	}
	tokenArray := gstr.Split(string(decryptToken), m.TokenDelimiter)
	if len(tokenArray) < 2 {
		glog.Error("[RToken]token len error")
		return Error("token len error")
	}

	return Succ(g.Map{
		"userKey": tokenArray[0],
		"uuid":    tokenArray[1],
	})
}

// String token解密方法
func (m *RfToken) String() string {
	return gconv.String(g.Map{
		// 缓存模式 1 gcache 2 gredis 默认1
		"CacheMode":      m.CacheMode,
		"CacheKey":       m.CacheKey,
		"Timeout":        m.Timeout,
		"TokenDelimiter": m.TokenDelimiter,
		"EncryptKey":     string(m.EncryptKey),
		"LoginPath":      m.LoginPath,
		"LogoutPath":     m.LogoutPath,
		"AuthPaths":      gconv.String(m.AuthPaths),
	})
}


================================================
FILE: middleware/rtoken/rtoken_cache.go
================================================
package rtoken

import (
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/gcache"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"time"
)

// setCache 设置缓存
func (m *RfToken) setCache(cacheKey string, userCache g.Map) Resp {
	switch m.CacheMode {
	case CacheModeCache:
		gcache.Set(cacheKey, userCache, gconv.Duration(m.Timeout)*time.Millisecond)
	case CacheModeRedis:
		cacheValueJson, err1 := gjson.Encode(userCache)
		if err1 != nil {
			glog.Error("[GToken]cache json encode error", err1)
			return Error("cache json encode error")
		}
		_, err := g.Redis().Do("SETEX", cacheKey, m.Timeout, cacheValueJson)
		if err != nil {
			glog.Error("[GToken]cache set error", err)
			return Error("cache set error")
		}
	default:
		return Error("cache model error")
	}

	return Succ(userCache)
}

// getCache 获取缓存
func (m *RfToken) getCache(cacheKey string) Resp {
	var userCache g.Map
	switch m.CacheMode {
	case CacheModeCache:
		userCacheValue := gcache.Get(cacheKey)
		if userCacheValue == nil {
			return Unauthorized("login timeout or not login", "")
		}
		userCache = gconv.Map(userCacheValue)
	case CacheModeRedis:
		userCacheJson, err := g.Redis().Do("GET", cacheKey)
		if err != nil {
			glog.Error("[GToken]cache get error", err)
			return Error("cache get error")
		}
		if userCacheJson == nil {
			return Unauthorized("login timeout or not login", "")
		}

		err = gjson.DecodeTo(userCacheJson, &userCache)
		if err != nil {
			glog.Error("[GToken]cache get json error", err)
			return Error("cache get json error")
		}
	default:
		return Error("cache model error")
	}

	return Succ(userCache)
}

// removeCache 删除缓存
func (m *RfToken) removeCache(cacheKey string) Resp {
	switch m.CacheMode {
	case CacheModeCache:
		gcache.Remove(cacheKey)
	case CacheModeRedis:
		var err error
		_, err = g.Redis().Do("DEL", cacheKey)
		if err != nil {
			glog.Error("[GToken]cache remove error", err)
			return Error("cache remove error")
		}
	default:
		return Error("cache model error")
	}

	return Succ("")
}


================================================
FILE: middleware/rtoken/rtoken_resp.go
================================================
package rtoken

import (
	"encoding/json"
	"github.com/gogf/gf/util/gconv"
)

const (
	SUCCESS      = 0
	FAIL         = -1
	ERROR        = -99
	UNAUTHORIZED = -401
	//配置
	TypeConfig = 1
	//  字典
	TypeDict = 2
)

type Resp struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

// 获取Data值转字符串
func (resp Resp) Success() bool {
	return resp.Code == SUCCESS
}

// 获取Data转字符串
func (resp Resp) DataString() string {
	return gconv.String(resp.Data)
}

// 获取Data转Int
func (resp Resp) DataInt() int {
	return gconv.Int(resp.Data)
}

// 获取Data值转字符串
func (resp Resp) GetString(key string) string {
	return gconv.String(resp.Get(key))
}

// 获取Data值转Int
func (resp Resp) GetInt(key string) int {
	return gconv.Int(resp.Get(key))
}

// 获取Data值
func (resp Resp) Get(key string) interface{} {
	m := gconv.Map(resp.Data)
	if m == nil {
		return ""
	}
	return m[key]
}

func (resp Resp) Json() string {
	str, _ := json.Marshal(resp)
	return string(str)
}

// 成功
func Succ(data interface{}) Resp {
	return Resp{SUCCESS, "success", data}
}

// 失败
func Fail(msg string) Resp {
	return Resp{FAIL, msg, ""}
}

// 失败设置Data
func FailData(msg string, data interface{}) Resp {
	return Resp{FAIL, msg, data}
}

// 错误
func Error(msg string) Resp {
	return Resp{ERROR, msg, ""}
}

// 错误设置Data
func ErrorData(msg string, data interface{}) Resp {
	return Resp{ERROR, msg, data}
}

// 认证失败
func Unauthorized(msg string, data interface{}) Resp {
	return Resp{UNAUTHORIZED, msg, data}
}


================================================
FILE: module/home/config/router.go
================================================
package config

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"goadmin/module/home/controller"
)

func InitRouter() {
	urlPath := g.Config().GetString("url-path")
	s := g.Server()

	s.Group(urlPath+"/dashboard", func(g *ghttp.RouterGroup) {
		// 首页展示
		dashboardController := new(controller.DashboardController)
		g.ALL("dashboard", dashboardController)
		g.GET("/", dashboardController.Index)
	})
}


================================================
FILE: module/home/controller/dashboard_controller.go
================================================
package controller

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"goadmin/utils/base"
)

type DashboardController struct {
	base.BaseRouter
}

func (controller *DashboardController) Index(r *ghttp.Request) {
	base.WriteTpl(r, "home/index.html", g.Map{})
}


================================================
FILE: module/home/module.go
================================================
package home

import "goadmin/module/home/config"

func InitModule() {
	config.InitRouter()
}


================================================
FILE: module/public/config/router.go
================================================
package config

import (
	"github.com/gogf/gf/frame/g"
	"goadmin/module/public/controller"
)

func InitRouter() {
	urlPath := g.Config().GetString("url-path")
	s := g.Server()
	// 首页
	s.BindHandler(urlPath+"/", controller.Login)
}


================================================
FILE: module/public/controller/login_controller.go
================================================
package controller

import (
	"github.com/gogf/gf/crypto/gmd5"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/glog"
	"goadmin/middleware/rtoken"
	"goadmin/module/public/model"
	"goadmin/utils/base"
	"goadmin/utils/bean"
)

// Login 登录页面
func Login(r *ghttp.Request) {
	err := r.Response.WriteTpl("public/login.html", g.Map{})

	if err != nil {
		glog.Error(err)
	}
}

// LoginSubmit 登录认证
func LoginSubmit(r *ghttp.Request) (string, interface{}) {
	mobile := r.GetString("mobile")
	password := r.GetString("password")
	if mobile == "" || password == "" {
		base.Fail(r, "手机号或者密码错误")
	}
	sysLoginUser := model.SysLoginUser{Mobile: mobile}.GetUserByMobile()
	if sysLoginUser.Id <= 0 {
		base.Fail(r, "手机号或者密码错误:"+mobile)
	}
	if sysLoginUser.Status <= 0 {
		base.Fail(r, "账号状态异常,请联系管理员")
	}

	reqPassword, err := gmd5.Encrypt(password + sysLoginUser.Salt)
	if err != nil {
		glog.Error("login password encrypt error", err)
		base.Error(r, "login password encrypt error")
	}

	if reqPassword != sysLoginUser.Password {
		base.Fail(r, "用户名或者密码错误:"+mobile)
	}
	sessionUser := bean.SessionUser{
		Id:       sysLoginUser.Id,
		Username: sysLoginUser.Username,
		Mobile:   sysLoginUser.Mobile,
	}
	return mobile, sessionUser
}

func LoginAfter(r *ghttp.Request, respData rtoken.Resp) {
	r.Cookie.Set("token", respData.GetString("token"))
	if !respData.Success() {
		r.Response.WriteJson(respData)
	} else {
		r.Response.WriteJson(rtoken.Succ(g.Map{
			"token": respData.GetString("token"),
		}))
	}
}

// 登出
func LogoutBefore(r *ghttp.Request) bool {
	mobile := base.GetUser(r).Mobile
	sysLoginUser := model.SysLoginUser{Mobile: mobile}.GetUserByMobile()
	if sysLoginUser.Mobile != mobile {
		// 登出用户不存在
		glog.Warning("logout mobile error", mobile)
		return false
	}
	r.Cookie.Remove("token")
	return true
}


================================================
FILE: module/public/model/sys_login_user_model.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_user_model
* @Version: 1.0.0
* @Date: 2019-11-04
 */
package model

import (
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
)

import (
	"github.com/gogf/gf/os/gtime"
)

type SysLoginUser struct {
	Id         int         `orm:"id,primary"      json:"Id" gconv:"Id,omitempty"`
	Username   string      `orm:"username,unique" json:"Username" gconv:"Username,omitempty"`
	Password   string      `orm:"password"        json:"Password" gconv:"Password,omitempty"`
	Salt       string      `orm:"salt"            json:"Salt" gconv:"Salt,omitempty"`
	Mobile     string      `orm:"mobile"          json:"Mobile" gconv:"Mobile,omitempty"`
	CreateTime *gtime.Time `orm:"create_time"     json:"CreateTime" gconv:"CreateTime,omitempty"`
	UpdateTime *gtime.Time `orm:"update_time"     json:"UpdateTime" gconv:"UpdateTime,omitempty"`
	Status     int         `orm:"status"          json:"Status" gconv:"Status,omitempty"`
}

//根据手机号查询系统用户
func (model SysLoginUser) GetUserByMobile() SysLoginUser {
	var resData SysLoginUser
	err := model.dbModel("t").Where("mobile = ?", model.Mobile).Fields(model.columns()).Struct(&resData)
	if err != nil {
		glog.Error(model.TableName()+" get one error", err)
		return SysLoginUser{}
	}
	return resData

}

//返回数据库SysUser
func (model SysLoginUser) dbModel(alias ...string) *gdb.Model {
	var tmpAlias string
	if len(alias) > 0 {
		tmpAlias = " " + alias[0]
	}
	tableModel := g.DB("center").Table(model.TableName() + tmpAlias).Safe()
	return tableModel
}

//返回主键SysUser
func (model SysLoginUser) PkVal() int {
	return model.Id
}

//表名SysUser
func (model SysLoginUser) TableName() string {
	return "sys_user"
}

//列名SysUser
func (model SysLoginUser) columns() string {
	sqlColumns := "t.id as Id,t.username as Username,t.password as Password,t.salt as Salt,t.mobile as Mobile,t.create_time as CreateTime,t.update_time as UpdateTime,t.status as Status"
	return sqlColumns
}


================================================
FILE: module/public/module.go
================================================
package public

import "goadmin/module/public/config"

func InitModule() {
	config.InitRouter()
}


================================================
FILE: module/sys/config/router.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  router
* @Version: 1.0.0
* @Date: 2019-11-17
 */
package config

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"goadmin/module/sys/controller"
)

func InitRouter() {
	urlPath := g.Config().GetString("url-path")
	s := g.Server()
	s.Group(urlPath+"/sys", func(g *ghttp.RouterGroup) {
		sysConfigController := new(controller.SysConfigController)
		g.ALL("/config", sysConfigController)
		g.POST("/config/page", sysConfigController.Page)
		g.GET("/config/get/{id}", sysConfigController.Get)
		g.POST("/config/save", sysConfigController.Save)
		g.POST("/config/update", sysConfigController.Update)
		g.POST("/config/delete", sysConfigController.Delete)

		sysOssController := new(controller.SysOssController)
		g.ALL("/oss", sysOssController)
		g.POST("/oss/page", sysOssController.Page)
		g.GET("/oss/get/{id}", sysOssController.Get)
		g.POST("/oss/save", sysOssController.Save)
		g.POST("/oss/update", sysOssController.Update)
		g.POST("/oss/delete", sysOssController.Delete)
		g.GET("/oss/config/get", sysOssController.GetConfig)
		g.POST("/oss/config/save", sysOssController.SaveConfig)
		g.GET("/oss/upload", sysOssController.Upload)

		sysUserController := new(controller.SysUserController)
		g.ALL("/user", sysUserController)
		g.POST("/user/page", sysUserController.Page)
		g.GET("/user/get/{id}", sysUserController.Get)
		g.POST("/user/save", sysUserController.Save)
		g.POST("/user/update", sysUserController.Update)
		g.POST("/user/delete", sysUserController.Delete)

	})
}


================================================
FILE: module/sys/controller/sys_config_controller.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_config_controller
* @Version: 1.0.0
* @Date: 2019-11-17
 */

package controller

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/module/sys/model"
	"goadmin/utils/base"
)

type SysConfigController struct {
	base.BaseRouter
}

var (
	controllerNameSysConfig = "SysConfigController"
)

//SysConfig页面信息
func (controller *SysConfigController) Index(r *ghttp.Request) {
	base.WriteTpl(r, "sys/config.html", g.Map{})
}

//获取SysConfig单条信息
func (controller *SysConfigController) Get(r *ghttp.Request) {
	id := r.GetInt("id")
	model := model.SysConfig{Id: id}.Get()
	if model.Id <= 0 {
		base.Fail(r, controllerNameSysConfig+" get fail")
	}
	base.Succ(r, model)
}

//根据id或者ids删除{.TplModelName}
func (controller *SysConfigController) Delete(r *ghttp.Request) {
	ids := r.GetInts("ids")
	for _, id := range ids {
		model := model.SysConfig{Id: id}
		model.Delete()
	}
	base.Succ(r, "")
}

//创建一条{.TplModelName}
func (controller *SysConfigController) Save(r *ghttp.Request) {
	model := model.SysConfig{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysConfig+" save struct error", err)
		base.Error(r, "save error")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysConfig+" save fail")
	}

	base.Succ(r, "")
}

//更新一条{.TplModelName}
func (controller *SysConfigController) Update(r *ghttp.Request) {
	model := model.SysConfig{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysConfig+" save struct error", err)
		base.Error(r, "save error")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysConfig+" save fail")
	}

	base.Succ(r, "")
}

//分页列表{.TplModelName}
func (controller *SysConfigController) Page(r *ghttp.Request) {
	form := base.NewForm(r.GetQueryMap())
	model := model.SysConfig{}
	page := model.Page(&form)
	base.Succ(r, g.Map{"list": page, "form": form})
}


================================================
FILE: module/sys/controller/sys_oss_controller.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_oss_controller
* @Version: 1.0.0
* @Date: 2019-11-17
 */

package controller

import (
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/gfile"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/module/sys/model"
	"goadmin/utils/base"
	"goadmin/utils/tools"
)

type SysOssController struct {
	base.BaseRouter
}

var (
	controllerNameSysOss = "SysOssController"
	ossConfigKey         = "CLOUD_STORAGE_CONFIG_KEY"
)

//SysOss页面信息
func (controller *SysOssController) Index(r *ghttp.Request) {
	base.WriteTpl(r, "sys/oss.html", g.Map{})
}

//获取SysOss单条信息
func (controller *SysOssController) Get(r *ghttp.Request) {
	id := r.GetInt("id")
	model := model.SysOss{Id: id}.Get()
	if model.Id <= 0 {
		base.Fail(r, controllerNameSysOss+" get fail")
	}
	base.Succ(r, model)
}

//根据id或者ids删除{.TplModelName}
func (controller *SysOssController) Delete(r *ghttp.Request) {
	ids := r.GetInts("ids")
	for _, id := range ids {
		model := model.SysOss{Id: id}
		model.Delete()
	}
	base.Succ(r, "")
}

//创建一条{.TplModelName}
func (controller *SysOssController) Save(r *ghttp.Request) {
	model := model.SysOss{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysOss+" save struct error", err)
		base.Error(r, "save error")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysOss+" save fail")
	}

	base.Succ(r, "")
}

//更新一条{.TplModelName}
func (controller *SysOssController) Update(r *ghttp.Request) {
	model := model.SysOss{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysOss+" save struct error", err)
		base.Error(r, "save error")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysOss+" save fail")
	}

	base.Succ(r, "")
}

//分页列表{.TplModelName}
func (controller *SysOssController) Page(r *ghttp.Request) {
	form := base.NewForm(r.GetQueryMap())
	model := model.SysOss{}
	page := model.Page(&form)
	base.Succ(r, g.Map{"list": page, "form": form})
}

//获取OSS的Config
func (controller *SysOssController) GetConfig(r *ghttp.Request) {
	model := model.SysConfig{ParamKey: ossConfigKey}.GetByKey()
	if model.Id <= 0 {
		base.Fail(r, controllerNameSysConfig+" get fail")
	}
	base.Succ(r, model)
}

//保存OSS的Config
func (controller *SysOssController) SaveConfig(r *ghttp.Request) {
	model := model.SysConfig{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysOss+" save struct error", err)
		base.Error(r, "save error")
	}

	model.ParamKey = ossConfigKey
	model.Remark = "云存储配置信息"
	model.Status = 0
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.UpdateByKey()
	}
	if num <= 0 {
		base.Fail(r, controllerNameSysConfig+" save fail")
	}

	base.Succ(r, "")
}

//上传文件
func (controller *SysOssController) Upload(r *ghttp.Request) {
	if f, h, e := r.FormFile("upload-file"); e == nil {
		defer f.Close()
		ossConfig := tools.GetCache(ossConfigKey)
		if ossConfig == nil || ossConfig == "" {
			model := model.SysConfig{ParamKey: ossConfigKey}.GetByKey()
			if model.Id <= 0 {
				base.Fail(r, controllerNameSysConfig+" get fail")
			}
			ossConfig = model.ParamValue
		}
		configModel := model.SysOssCloud{}
		err := gjson.DecodeTo(ossConfig, &configModel)
		if err != nil {
			base.Fail(r, "解析错误")
		}
		client, err := oss.New(configModel.AliyunEndPoint, configModel.AliyunAccessKeyId, configModel.AliyunAccessKeySecret)
		if err != nil {
			base.Fail(r, "上传配置错误")
		}
		bucket, err := client.Bucket(configModel.AliyunBucketName)
		if err != nil {
			base.Fail(r, "选择bucket错误")
		}
		name := "file" + gfile.Separator + gconv.String(tools.GetId(2)) + "." + gfile.ExtName(h.Filename)
		err = bucket.PutObject(name, f)
		if err != nil {
			base.Fail(r, "存储错误")
		}
		model := model.SysOss{}
		model.Url = g.Config().GetString("setting.cdn") + name
		var num int64
		num = model.Insert()
		if num <= 0 {
			base.Fail(r, "存入数据库失败")
		}
		base.Succ(r, model)
	} else {
		r.Response.Write(e.Error())
	}
}


================================================
FILE: module/sys/controller/sys_user_controller.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_user_controller
* @Version: 1.0.0
* @Date: 2019-11-17
 */

package controller

import (
	"github.com/gogf/gf/crypto/gmd5"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/module/sys/model"
	"goadmin/utils/base"
	"goadmin/utils/tools"
)

type SysUserController struct {
	base.BaseRouter
}

var (
	controllerNameSysUser = "SysUserController"
)

//SysUser页面信息
func (controller *SysUserController) Index(r *ghttp.Request) {
	base.WriteTpl(r, "sys/user.html", g.Map{})
}

//获取SysUser单条信息
func (controller *SysUserController) Get(r *ghttp.Request) {
	id := r.GetInt("id")
	model := model.SysUser{Id: id}.Get()
	if model.Id <= 0 {
		base.Fail(r, controllerNameSysUser+" get fail")
	}
	base.Succ(r, model)
}

//根据id或者ids删除{.TplModelName}
func (controller *SysUserController) Delete(r *ghttp.Request) {
	ids := r.GetInts("ids")
	for _, id := range ids {
		model := model.SysUser{Id: id}
		model.Delete()
	}
	base.Succ(r, "")
}

//创建一条{.TplModelName}
func (controller *SysUserController) Save(r *ghttp.Request) {
	model := model.SysUser{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysUser+" save struct error", err)
		base.Error(r, "save error")
	}
	model.Salt = gconv.String(tools.GetId(1))
	if model.Password == "" {
		base.Error(r, "请输入密码")
	}
	model.Password, err = gmd5.Encrypt(model.Password + model.Salt)
	if err != nil {
		glog.Error(controllerNameSysUser+" save struct error", err)
		base.Error(r, "加密错误")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysUser+" save fail")
	}

	base.Succ(r, "")
}

//更新一条{.TplModelName}
func (controller *SysUserController) Update(r *ghttp.Request) {
	model := model.SysUser{}
	err := gconv.Struct(r.GetPostMap(), &model)
	if err != nil {
		glog.Error(controllerNameSysUser+" save struct error", err)
		base.Error(r, "save error")
	}
	model.Salt = gconv.String(tools.GetId(1))
	if model.Password == "" {
		base.Error(r, "请输入密码")
	}
	model.Password, err = gmd5.Encrypt(model.Password + model.Salt)
	if err != nil {
		glog.Error(controllerNameSysUser+" save struct error", err)
		base.Error(r, "加密错误")
	}
	var num int64
	if model.Id <= 0 {
		num = model.Insert()
	} else {
		num = model.Update()
	}

	if num <= 0 {
		base.Fail(r, controllerNameSysUser+" save fail")
	}

	base.Succ(r, "")
}

//分页列表{.TplModelName}
func (controller *SysUserController) Page(r *ghttp.Request) {
	form := base.NewForm(r.GetQueryMap())
	model := model.SysUser{}
	page := model.Page(&form)
	base.Succ(r, g.Map{"list": page, "form": form})
}


================================================
FILE: module/sys/model/sys_config_model.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_config_model
* @Version: 1.0.0
* @Date: 2019-11-17
 */
package model

import (
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/utils/base"
	"goadmin/utils/tools"
)

import (
	"github.com/gogf/gf/os/gtime"
)

type SysConfig struct {
	Id         int         `orm:"id,primary"       json:"Id" gconv:"Id,omitempty"`
	ParamKey   string      `orm:"param_key,unique" json:"ParamKey" gconv:"ParamKey,omitempty"`
	ParamValue string      `orm:"param_value"      json:"ParamValue" gconv:"ParamValue,omitempty"`
	Remark     string      `orm:"remark"           json:"Remark" gconv:"Remark,omitempty"`
	CreateTime *gtime.Time `orm:"create_time"      json:"CreateTime" gconv:"CreateTime,omitempty"`
	UpdateTime *gtime.Time `orm:"update_time"      json:"UpdateTime" gconv:"UpdateTime,omitempty"`
	Status     int         `orm:"status"           json:"Status" gconv:"Status,omitempty"`
}

//创建mSysConfig
func (model *SysConfig) Insert() int64 {
	model.CreateTime = gtime.Now()
	model.UpdateTime = gtime.Now()
	model.Status = 1
	r, err := model.dbModel().Data(model).Insert()
	if err != nil {
		glog.Error(model.TableName()+" insert error", err)
		return 0
	}

	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" insert res error", err2)
		return 0
	} else if res > 0 {
		lastId, err2 := r.LastInsertId()
		if err2 != nil {
			glog.Error(model.TableName()+" LastInsertId res error", err2)
			return 0
		} else {
			model.Id = gconv.Int(lastId)
		}
	}
	tools.SetCache(model.ParamKey, model.ParamValue)
	return res
}

//删除SysConfig
func (model SysConfig) Delete() int64 {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " delete id error")
		return 0
	}
	r, err := model.dbModel().Where(" id = ?", model.Id).Delete()
	if err != nil {
		glog.Error(model.TableName()+" delete error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" delete res error", err2)
		return 0
	}
	tools.DelCache(model.ParamKey)
	return res
}

//更新SysConfig
func (model *SysConfig) Update() int64 {
	model.UpdateTime = gtime.Now()
	r, err := model.dbModel().Data(model).Where(" id = ?", model.Id).Update()
	if err != nil {
		glog.Error(model.TableName()+" update error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" update res error", err2)
		return 0
	}
	tools.SetCache(model.ParamKey, model.ParamValue)
	return res
}

func (model *SysConfig) UpdateByKey() int64 {
	model.UpdateTime = gtime.Now()
	r, err := model.dbModel().Data(model).Where(" param_key = ?", model.ParamKey).Update()
	if err != nil {
		glog.Error(model.TableName()+" update error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" update res error", err2)
		return 0
	}
	tools.SetCache(model.ParamKey, model.ParamValue)
	return res
}

//根据Key查询SysConfig
func (model SysConfig) GetByKey() SysConfig {
	if model.ParamKey == "" {
		glog.Error("根据KEY获取配置失败")
		return SysConfig{}
	}
	var resData SysConfig
	err := model.dbModel("t").Where(" param_key = ?", model.ParamKey).Fields(model.columns()).Struct(&resData)
	if err != nil {
		glog.Error(model.TableName()+" get one error", err)
		return SysConfig{}
	}

	return resData
}

//根据ID查询SysConfig
func (model SysConfig) Get() SysConfig {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " get id error")
		return SysConfig{}
	}
	var resData SysConfig
	err := model.dbModel("t").Where(" id = ? and status=1", model.Id).Fields(model.columns()).Struct(&resData)
	if err != nil {
		glog.Error(model.TableName()+" get one error", err)
		return SysConfig{}
	}
	return resData
}

//分页查询SysConfig
func (model SysConfig) Page(form *base.BaseForm) []SysConfig {
	if form.Page <= 0 || form.Rows <= 0 {
		glog.Error(model.TableName()+" page param error", form.Page, form.Rows)
		return []SysConfig{}
	}
	where := " status = 1 "
	var params []interface{}
	if form.Params != nil && form.Params["name"] != "" {
		where += " and name like ? "
		params = append(params, "%"+form.Params["name"]+"%")
	}

	num, err := model.dbModel("t").Where(where, params).Count()
	form.TotalSize = num
	form.TotalPage = num / form.Rows

	// 没有数据直接返回
	if num == 0 {
		form.TotalPage = 0
		form.TotalSize = 0
		return []SysConfig{}
	}
	var resData []SysConfig
	pageNum, pageSize := (form.Page-1)*form.Rows, form.Rows
	dbModel := model.dbModel("t").Fields(model.columns()).Fields(model.columns())
	err = dbModel.Where(where, params).Limit(pageNum, pageSize).OrderBy(form.OrderBy).Structs(&resData)
	if err != nil {
		glog.Error(model.TableName()+" page list error", err)
		return []SysConfig{}
	}

	return resData
}

//返回数据库SysConfig
func (model SysConfig) dbModel(alias ...string) *gdb.Model {
	var tmpAlias string
	if len(alias) > 0 {
		tmpAlias = " " + alias[0]
	}
	tableModel := g.DB("center").Table(model.TableName() + tmpAlias).Safe()
	return tableModel
}

//返回主键SysConfig
func (model SysConfig) PkVal() int {
	return model.Id
}

//表名SysConfig
func (model SysConfig) TableName() string {
	return "sys_config"
}

//列名SysConfig
func (model SysConfig) columns() string {
	sqlColumns := "t.create_time as CreateTime,t.update_time as UpdateTime,t.status as Status,t.id as Id,t.param_key as ParamKey,t.param_value as ParamValue,t.remark as Remark"
	return sqlColumns
}


================================================
FILE: module/sys/model/sys_oss_cloud.go
================================================
package model

type SysOssCloud struct {
	AliyunDomain          string `json:"aliyunDomain" gconv:"AliyunDomain,omitempty"`
	AliyunEndPoint        string `json:"aliyunEndPoint" gconv:"AliyunEndPoint,omitempty"`
	AliyunAccessKeyId     string `json:"aliyunAccessKeyId" gconv:"AliyunAccessKeyId,omitempty"`
	AliyunAccessKeySecret string `json:"aliyunAccessKeySecret" gconv:"AliyunAccessKeySecret,omitempty"`
	AliyunBucketName      string `json:"aliyunBucketName" gconv:"AliyunBucketName,omitempty"`
}


================================================
FILE: module/sys/model/sys_oss_model.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_oss_model
* @Version: 1.0.0
* @Date: 2019-11-17
 */
package model

import (
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/utils/base"
)

import (
	"github.com/gogf/gf/os/gtime"
)

type SysOss struct {
	Id         int         `orm:"id,primary"  json:"Id" gconv:"Id,omitempty"`
	Url        string      `orm:"url"         json:"Url" gconv:"Url,omitempty"`
	CreateTime *gtime.Time `orm:"create_time" json:"CreateTime" gconv:"CreateTime,omitempty"`
	UpdateTime *gtime.Time `orm:"update_time" json:"UpdateTime" gconv:"UpdateTime,omitempty"`
	Status     int         `orm:"status"      json:"Status" gconv:"Status,omitempty"`
}

//创建mSysOss
func (model *SysOss) Insert() int64 {
	model.CreateTime = gtime.Now()
	model.UpdateTime = gtime.Now()
	model.Status = 1
	r, err := model.dbModel().Data(model).Insert()
	if err != nil {
		glog.Error(model.TableName()+" insert error", err)
		return 0
	}

	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" insert res error", err2)
		return 0
	} else if res > 0 {
		lastId, err2 := r.LastInsertId()
		if err2 != nil {
			glog.Error(model.TableName()+" LastInsertId res error", err2)
			return 0
		} else {
			model.Id = gconv.Int(lastId)
		}
	}
	return res
}

//删除SysOss
func (model SysOss) Delete() int64 {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " delete id error")
		return 0
	}
	r, err := model.dbModel().Where(" id = ?", model.Id).Delete()
	if err != nil {
		glog.Error(model.TableName()+" delete error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" delete res error", err2)
		return 0
	}
	return res
}

//更新SysOss
func (model *SysOss) Update() int64 {
	model.UpdateTime = gtime.Now()
	r, err := model.dbModel().Data(model).Where(" id = ?", model.Id).Update()
	if err != nil {
		glog.Error(model.TableName()+" update error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" update res error", err2)
		return 0
	}
	return res
}

//根据ID查询SysOss
func (model SysOss) Get() SysOss {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " get id error")
		return SysOss{}
	}
	var resData SysOss
	err := model.dbModel("t").Where(" id = ? and status=1", model.Id).Fields(model.columns()).Struct(&resData)
	if err != nil {
		glog.Error(model.TableName()+" get one error", err)
		return SysOss{}
	}
	return resData
}

//分页查询SysOss
func (model SysOss) Page(form *base.BaseForm) []SysOss {
	if form.Page <= 0 || form.Rows <= 0 {
		glog.Error(model.TableName()+" page param error", form.Page, form.Rows)
		return []SysOss{}
	}
	where := " status= 1 "
	var params []interface{}
	if form.Params != nil && form.Params["name"] != "" {
		where += " and name like ? "
		params = append(params, "%"+form.Params["name"]+"%")
	}

	num, err := model.dbModel("t").Where(where, params).Count()
	form.TotalSize = num
	form.TotalPage = num / form.Rows

	// 没有数据直接返回
	if num == 0 {
		form.TotalPage = 0
		form.TotalSize = 0
		return []SysOss{}
	}
	var resData []SysOss
	pageNum, pageSize := (form.Page-1)*form.Rows, form.Rows
	dbModel := model.dbModel("t").Fields(model.columns()).Fields(model.columns())
	err = dbModel.Where(where, params).Limit(pageNum, pageSize).OrderBy(form.OrderBy).Structs(&resData)
	if err != nil {
		glog.Error(model.TableName()+" page list error", err)
		return []SysOss{}
	}

	return resData
}

//返回数据库SysOss
func (model SysOss) dbModel(alias ...string) *gdb.Model {
	var tmpAlias string
	if len(alias) > 0 {
		tmpAlias = " " + alias[0]
	}
	tableModel := g.DB("center").Table(model.TableName() + tmpAlias).Safe()
	return tableModel
}

//返回主键SysOss
func (model SysOss) PkVal() int {
	return model.Id
}

//表名SysOss
func (model SysOss) TableName() string {
	return "sys_oss"
}

//列名SysOss
func (model SysOss) columns() string {
	sqlColumns := "t.id as Id,t.url as Url,t.create_time as CreateTime,t.update_time as UpdateTime,t.status as Status"
	return sqlColumns
}


================================================
FILE: module/sys/model/sys_user_model.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  sys_user_model
* @Version: 1.0.0
* @Date: 2019-11-17
 */
package model

import (
	"fmt"
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/glog"
	"github.com/gogf/gf/util/gconv"
	"goadmin/utils/base"
)

import (
	"github.com/gogf/gf/os/gtime"
)

type SysUser struct {
	Id         int         `orm:"id,primary"      json:"Id" gconv:"Id,omitempty"`
	Username   string      `orm:"username,unique" json:"Username" gconv:"Username,omitempty"`
	Password   string      `orm:"password"        json:"Password" gconv:"Password,omitempty"`
	Salt       string      `orm:"salt"            json:"Salt" gconv:"Salt,omitempty"`
	Mobile     string      `orm:"mobile"          json:"Mobile" gconv:"Mobile,omitempty"`
	CreateTime *gtime.Time `orm:"create_time"     json:"CreateTime" gconv:"CreateTime,omitempty"`
	UpdateTime *gtime.Time `orm:"update_time"     json:"UpdateTime" gconv:"UpdateTime,omitempty"`
	Status     int         `orm:"status"          json:"Status" gconv:"Status,omitempty"`
}

//创建mSysUser
func (model *SysUser) Insert() int64 {
	model.CreateTime = gtime.Now()
	model.UpdateTime = gtime.Now()
	model.Status = 1
	r, err := model.dbModel().Data(model).Insert()
	if err != nil {
		glog.Error(model.TableName()+" insert error", err)
		return 0
	}

	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" insert res error", err2)
		return 0
	} else if res > 0 {
		lastId, err2 := r.LastInsertId()
		if err2 != nil {
			glog.Error(model.TableName()+" LastInsertId res error", err2)
			return 0
		} else {
			model.Id = gconv.Int(lastId)
		}
	}
	return res
}

//删除SysUser
func (model SysUser) Delete() int64 {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " delete id error")
		return 0
	}
	r, err := model.dbModel().Where(" id = ?", model.Id).Delete()
	if err != nil {
		glog.Error(model.TableName()+" delete error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" delete res error", err2)
		return 0
	}
	return res
}

//更新SysUser
func (model *SysUser) Update() int64 {
	model.UpdateTime = gtime.Now()
	r, err := model.dbModel().Data(model).Where(" id = ?", model.Id).Update()
	if err != nil {
		glog.Error(model.TableName()+" update error", err)
		return 0
	}
	res, err2 := r.RowsAffected()
	if err2 != nil {
		glog.Error(model.TableName()+" update res error", err2)
		return 0
	}
	return res
}

//根据ID查询SysUser
func (model SysUser) Get() SysUser {
	if model.Id <= 0 {
		glog.Error(model.TableName() + " get id error")
		return SysUser{}
	}
	var resData SysUser
	err := model.dbModel("t").Where(" id = ? and status=1", model.Id).Fields(model.columns()).Struct(&resData)
	if err != nil {
		glog.Error(model.TableName()+" get one error", err)
		return SysUser{}
	}
	return resData
}

//分页查询SysUser
func (model SysUser) Page(form *base.BaseForm) []SysUser {
	if form.Page <= 0 || form.Rows <= 0 {
		glog.Error(model.TableName()+" page param error", form.Page, form.Rows)
		return []SysUser{}
	}
	where := " status = 1 "
	var params []interface{}
	if form.Params != nil && form.Params["name"] != "" {
		where += " and name like ? "
		params = append(params, "%"+form.Params["name"]+"%")
	}

	num, err := model.dbModel("t").Where(where, params).Count()
	form.TotalSize = num
	form.TotalPage = num / form.Rows

	// 没有数据直接返回
	if num == 0 {
		form.TotalPage = 0
		form.TotalSize = 0
		return []SysUser{}
	}
	var resData []SysUser
	fmt.Println("当前排序:%s", form.OrderBy)
	pageNum, pageSize := (form.Page-1)*form.Rows, form.Rows
	dbModel := model.dbModel("t").Fields(model.columns()).Fields(model.columns())
	err = dbModel.Where(where, params).Limit(pageNum, pageSize).OrderBy(form.OrderBy).Structs(&resData)
	if err != nil {
		glog.Error(model.TableName()+" page list error", err)
		return []SysUser{}
	}

	return resData
}

//返回数据库SysUser
func (model SysUser) dbModel(alias ...string) *gdb.Model {
	var tmpAlias string
	if len(alias) > 0 {
		tmpAlias = " " + alias[0]
	}
	tableModel := g.DB("center").Table(model.TableName() + tmpAlias).Safe()
	return tableModel
}

//返回主键SysUser
func (model SysUser) PkVal() int {
	return model.Id
}

//表名SysUser
func (model SysUser) TableName() string {
	return "sys_user"
}

//列名SysUser
func (model SysUser) columns() string {
	sqlColumns := "t.id as Id,t.username as Username,t.password as Password,t.salt as Salt,t.mobile as Mobile,t.create_time as CreateTime,t.update_time as UpdateTime,t.status as Status"
	return sqlColumns
}


================================================
FILE: module/sys/module.go
================================================
/**
* @Author: Rocks
* @Email: 451360994@qq.com
* @Description:
* @File:  module
* @Version: 1.0.0
* @Date: 2019-11-17
 */
package sys

import "goadmin/module/sys/config"

func InitModule() {
	config.InitRouter()
}


================================================
FILE: public/modules/common.js
================================================
//bootstrap-table配置

var baseURL = "http://localhost:8192/";

//工具集合Tools
window.T = {};

// 获取请求参数
// 使用示例
// location.href = http://localhost:8080/index.html?id=123
// T.p('id') --> 123;
var url = function (name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]);
    return null;
};
T.p = url;

//全局配置
$.ajaxSetup({
    dataType: "json",
    cache: false
});

//重写alert
window.alert = function (msg, callback) {
    top.swal({
        text: msg,
        icon: "error",
        buttons: false,
		timer:2000,
    }).then((isConfirm) => {
        if (isConfirm) {
            if (typeof (callback) === "function") {
                callback("ok");
            }
        }
    });
}

//重写confirm式样框
window.confirm = function (msg, callback) {
    top.swal({
        text: msg,
        icon: "warning",
        buttons: ["取消", "确定"],
        closeModal: true,
    }).then((isConfirm) => {
        if (isConfirm) {
            if (typeof (callback) === "function") {
                callback("ok");
            }
        }
    });
}

//选择一条记录
function getSelectedRow() {
    var grid = $("#table");
    var rowKey = grid.getGridParam("selrow");
    if (!rowKey) {
        alert("请选择一条记录");
        return;
    }

    var selectedIDs = grid.getGridParam("selarrrow");
    if (selectedIDs.length > 1) {
        alert("只能选择一条记录");
        return;
    }

    return selectedIDs[0];
}

//选择多条记录
//选择多条记录
function getSelectedRows() {
    var selected = $("#table").bootstrapTable('getSelections');
    var ids = new Array();
    for (var i = 0; i < selected.length; i++) {
        ids[i] = selected[i].Id;
    }
    if (ids.length == 0) {
		alert("请选择记录");
    }
    console.log(ids);
    return ids;

}


//判断是否为空
function isBlank(value) {
    return !value || !/\S/.test(value)
}

================================================
FILE: public/modules/sys/config.js
================================================
$(function () {

    function addButtonFunc(value, row, index) {
        return [
                '<div id="editButton"   class="badge badge-success m-1"><i class="far fa-edit mr-1"></i>编辑</div>',
                '<div id="deleteButton"  class="badge badge-danger m-1"> <i class="fas fa-times mr-1"></i>删除</div>',
            ].join('');
    }

    window.operateEvents = {
        'click #editButton': function (e, value, row, index) {
            vm.update(row.Id);
        }, 'click #deleteButton': function (e, value, row, index) {
            vm.del(row.Id);
        }
    };

    $('#table').bootstrapTable({
        url: baseURL + 'sys/config/page',
        method: "GET",
        striped: true,
        cache: false,
        pagination: true,
        pageList: [20, 40, 60, 100],
        pageSize: 20,
        pageNumber: 1,
        sortName: "id",
        sortOrder: "desc",
        sidePagination: 'server',
        search: false,
        uniqueId: "Id",
        silent: true,
        classes: "table table-hover",
        paginationHAlign: "left",
        paginationDetailHAlign: "right",
        queryParams: queryParams,
        responseHandler: function (res) {
        return {
            "total": res.data.form.TotalSize,
            "rows": res.data.list
        };

        },
        onLoadSuccess: function () {

        },
        onLoadError: function () {
            alert("数据加载失败!");
        },
        columns: [{
                checkbox: true,
                visible: true
                },
                 {
                    field: 'Id',
                    title: 'ID'
                },
                 {
                    field: 'ParamKey',
                    title: '参数名'
                },
                 {
                    field: 'ParamValue',
                    title: '参数值'
                },
                 {
                    field: 'Remark',
                    title: '备注'
                },
                {
                    field: 'operate',
                    title: '操作',
                    events: operateEvents,
                    formatter: addButtonFunc 
                }
            ]
    });

    function queryParams(params) {
        var temp = {
            offset: params.offset,
            limit: params.limit,
            search: $(".search-input").val(),
            rows: params.limit,
            page: (params.offset / params.limit) + 1,
            sort: params.sort,
            sortOrder: params.order
        };
        return temp;
    };
    $("#search-btn").click(function () {
        $('#table').bootstrapTable('refresh');
    });

});

var vm = new Vue({
    el: '#rrapp',
    data: {
        showList: true,
        title: null,
        sysconfig:{
        }
    },
    methods: {
        query: function () {
            vm.reload();
        },
        add: function () {
            vm.showList = false;
            vm.title = "新增";
            vm.sysconfig= {};
         },
        update: function (Id) {
            if (Id == null) {
                return;
            }
            vm.showList = false;
            vm.title = "修改";
            vm.getInfo(Id)
        },
    saveOrUpdate: function (event) {
        $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function () {
            var url = vm.sysconfig.Id ==null ? "sys/config/save" : "sys/config/update";
            $.ajax({
                type: "POST",
                url: baseURL + url,
                data: vm.sysconfig,
                success: function (r) {
                    if (r.code === 0) {
                        swal({
                            text: "操作成功",
                            icon: "success",
                            buttons: false,
                            timer: 2000,
                        });
                        vm.reload();
                        $('#btnSaveOrUpdate').button('reset');
                        $('#btnSaveOrUpdate').dequeue();
                    } else {
                        swal({
                            text: r.msg,
                            icon: "error",
                            buttons: false,
                            timer: 2000,
                        });
                        $('#btnSaveOrUpdate').button('reset');
                        $('#btnSaveOrUpdate').dequeue();
                    }
                }
        })
            ;
        });
    },
    del: function (Id) {
        var Ids = [Id];
        var lock = false;
        top.swal({
        title: "确定要删除该记录?",
        icon: "warning",
        buttons: ["取消", "确定"],
        closeModal: true,
    }).then((isConfirm) => {
            if (isConfirm) {
            top.swal.close();
            if (!lock) {
                lock = true;
                $.ajax({
                    type: "POST",
                    url: baseURL + "sys/config/delete",
                    data: {ids: Ids},
                    success: function (r) {
                        if (r.code == 0) {
                            swal({
                                text: "删除成功",
                                icon: "success",
                                buttons: false,
                                timer: 2000,
                            });
                            $('#table').bootstrapTable('refresh');
                        } else {
                            swal({
                                text: r.msg,
                                icon: "error",
                                buttons: false,
                                timer: 2000,
                            });
                        }
                    }
                });
            }
        }else {
            top.swal.close();
        }
    });
    },
    bulkdel: function (event) {
        var Ids = getSelectedRows();
        if (Ids == null || Ids.length == 0) {
            return;
        }
        var lock = false;
        top.swal({
            title: "确定要删除该记录?",
            icon: "warning",
            buttons: ["取消", "确定"],
            closeModal: true,
        }).then((isConfirm) => {
            if (isConfirm) {
                top.swal.close();
                if (!lock) {
                    lock = true;
                    $.ajax({
                        type: "POST",
                        url: baseURL + "sys/config/delete",
                        data: {ids: Ids},
                        success: function (r) {
                            if (r.code == 0) {
                                swal({
                                    text: "删除成功",
                                    icon: "success",
                                    buttons: false,
                                    timer: 2000,
                                });
                                $('#table').bootstrapTable('refresh');
                            } else {
                                swal({
                                    text: r.msg,
                                    icon: "error",
                                    buttons: false,
                                    timer: 2000,
                                });
                            }
                        }
                    });
                }
            }else {
                top.swal.close();
            }
        });
    },
    getInfo: function (Id) {
        $.get(baseURL + "sys/config/get/" +Id, function (r) {
            vm.sysconfig= r.data;
        });
    },
    reload: function (event) {
        vm.showList = true;
        $('#table').bootstrapTable('refresh');
    }
}
})
;

================================================
FILE: public/modules/sys/oss.js
================================================
$(function () {

    function addButtonFunc(value, row, index) {
        return '<div id="deleteButton"  class="badge badge-danger m-1"> <i class="fas fa-times mr-1"></i>删除</div>';
    }

    window.operateEvents = {
        'click #deleteButton': function (e, value, row, index) {
            vm.del(row.Id);
        }
    };

    $('#table').bootstrapTable({
        url: baseURL + 'sys/oss/page',
        method: "GET",
        striped: true,
        cache: false,
        pagination: true,
        pageList: [20, 40, 60, 100],
        pageSize: 20,
        pageNumber: 1,
        sortName: "id",
        sortOrder: "desc",
        sidePagination: 'server',
        search: false,
        uniqueId: "Id",
        silent: true,
        classes: "table table-hover",
        paginationHAlign: "left",
        paginationDetailHAlign: "right",
        queryParams: queryParams,
        responseHandler: function (res) {
            return {
                "total": res.data.form.TotalSize,
                "rows": res.data.list
            };

        },
        onLoadSuccess: function () {

        },
        onLoadError: function () {
            alert("数据加载失败!");
        },
        columns: [{
            checkbox: true,
            visible: true
        },
            {
                field: 'Id',
                title: 'ID'
            },
            {
                field: 'Url',
                title: '地址'
            },
            {
                field: 'operate',
                title: '操作',
                events: operateEvents,
                formatter: addButtonFunc
            }
        ]
    });

    function queryParams(params) {
        var temp = {
            offset: params.offset,
            limit: params.limit,
            search: $(".search-input").val(),
            rows: params.limit,
            page: (params.offset / params.limit) + 1,
            sort: params.sort,
            sortOrder: params.order
        };
        return temp;
    };
    $("#search-btn").click(function () {
        $('#table').bootstrapTable('refresh');
    });
    new AjaxUpload('#upload', {
        action: baseURL + "sys/oss/upload",
        name: 'upload-file',
        autoSubmit: true,
        responseType: "json",
        onSubmit: function (file, extension) {
            if (vm.ParamValue == null) {
                alert("云存储配置未配置");
                return false;
            }
            if (!(extension && /^(jpg|jpeg|png|gif)$/.test(extension.toLowerCase()))) {
                alert('只支持jpg、png、gif格式的图片!');
                return false;
            }
        },
        onComplete: function (file, r) {
            if (r.code == 0) {
                vm.reload();
            } else {
                alert(r.msg);
            }
        }
    });
});

var vm = new Vue({
        el: '#rrapp',
        data: {
            showList: true,
            title: null,
            sysoss: {},
            config: {
                ParamValue: {},
            },
            ParamValue: {}
        },
        created: function () {
            this.getConfig();
        },
        methods: {
            query: function () {
                vm.reload();
            },

            edit: function () {
                vm.showList = false;
                vm.title = "修改配置";
                vm.config = {};
                vm.getConfig()
            },
            upload: function () {
                vm.title = "修改配置";
            },
            saveConfig: function (event) {
                $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function () {
                    var url = "sys/oss/config/save";
                    vm.config.ParamValue = JSON.stringify(vm.ParamValue)
                    $.ajax({
                        type: "POST",
                        url: baseURL + url,
                        data: vm.config,
                        success: function (r) {
                            if (r.code === 0) {
                                swal({
                                    text: "操作成功",
                                    icon: "success",
                                    buttons: false,
                                    timer: 2000,
                                });
                                vm.reload();
                                $('#btnSaveOrUpdate').button('reset');
                                $('#btnSaveOrUpdate').dequeue();
                            } else {
                                swal({
                                    text: r.msg,
                                    icon: "error",
                                    buttons: false,
                                    timer: 2000,
                                });
                                $('#btnSaveOrUpdate').button('reset');
                                $('#btnSaveOrUpdate').dequeue();
                            }
                        }
                    })
                    ;
                });
            },
            del: function (Id) {
                var Ids = [Id];
                var lock = false;
                top.swal({
                    title: "确定要删除该记录?",
                    icon: "warning",
                    buttons: ["取消", "确定"],
                    closeModal: true,
                }).then((isConfirm) => {
                    if (isConfirm) {
                        top.swal.close();
                        if (!lock) {
                            lock = true;
                            $.ajax({
                                type: "POST",
                                url: baseURL + "sys/oss/delete",
                                data: {ids: Ids},
                                success: function (r) {
                                    if (r.code == 0) {
                                        swal({
                                            text: "删除成功",
                                            icon: "success",
                                            buttons: false,
                                            timer: 2000,
                                        });
                                        $('#table').bootstrapTable('refresh');
                                    } else {
                                        swal({
                                            text: r.msg,
                                            icon: "error",
                                            buttons: false,
                                            timer: 2000,
                                        });
                                    }
                                }
                            });
                        }
                    } else {
                        top.swal.close();
                    }
                });
            },
            bulkdel: function (event) {
                var Ids = getSelectedRows();
                if (Ids == null || Ids.length == 0) {
                    return;
                }
                var lock = false;
                top.swal({
                    title: "确定要删除该记录?",
                    icon: "warning",
                    buttons: ["取消", "确定"],
                    closeModal: true,
                }).then((isConfirm) => {
                    if (isConfirm) {
                        top.swal.close();
                        if (!lock) {
                            lock = true;
                            $.ajax({
                                type: "POST",
                                url: baseURL + "sys/oss/delete",
                                data: {ids: Ids},
                                success: function (r) {
                                    if (r.code == 0) {
                                        swal({
                                            text: "删除成功",
                                            icon: "success",
                                            buttons: false,
                                            timer: 2000,
                                        });
                                        $('#table').bootstrapTable('refresh');
                                    } else {
                                        swal({
                                            text: r.msg,
                                            icon: "error",
                                            buttons: false,
                                            timer: 2000,
                                        });
                                    }
                                }
                            });
                        }
                    } else {
                        top.swal.close();
                    }
                });
            },
            getConfig: function () {
                $.get(baseURL + "sys/oss/config/get", function (r) {
                    vm.config = r.data
                    vm.ParamValue = JSON.parse(r.data.ParamValue);
                });
            },
            reload: function (event) {
                vm.showList = true;
                $('#table').bootstrapTable('refresh');
            }
        }
    })
;

================================================
FILE: public/modules/sys/user.js
================================================
$(function () {

    function addButtonFunc(value, row, index) {
        return [
                '<div id="editButton"   class="badge badge-success m-1"><i class="far fa-edit mr-1"></i>编辑</div>',
                '<div id="deleteButton"  class="badge badge-danger m-1"> <i class="fas fa-times mr-1"></i>删除</div>',
            ].join('');
    }

    window.operateEvents = {
        'click #editButton': function (e, value, row, index) {
            vm.update(row.Id);
        }, 'click #deleteButton': function (e, value, row, index) {
            vm.del(row.Id);
        }
    };

    $('#table').bootstrapTable({
        url: baseURL + 'sys/user/page',
        method: "GET",
        striped: true,
        cache: false,
        pagination: true,
        pageList: [20, 40, 60, 100],
        pageSize: 20,
        pageNumber: 1,
        sortName: "id",
        sortOrder: "desc",
        sidePagination: 'server',
        search: false,
        uniqueId: "Id",
        silent: true,
        classes: "table table-hover",
        paginationHAlign: "left",
        paginationDetailHAlign: "right",
        queryParams: queryParams,
        responseHandler: function (res) {
        return {
            "total": res.data.form.TotalSize,
            "rows": res.data.list
        };

        },
        onLoadSuccess: function () {

        },
        onLoadError: function () {
            alert("数据加载失败!");
        },
        columns: [{
                checkbox: true,
                visible: true
                },
                 {
                    field: 'Id',
                    title: 'ID'
                },
                 {
                    field: 'Username',
                    title: '用户名'
                },
                 {
                    field: 'Mobile',
                    title: '手机号'
                },
                {
                    field: 'operate',
                    title: '操作',
                    events: operateEvents,
                    formatter: addButtonFunc 
                }
            ]
    });

    function queryParams(params) {
        var temp = {
            offset: params.offset,
            limit: params.limit,
            search: $(".search-input").val(),
            rows: params.limit,
            page: (params.offset / params.limit) + 1,
            sort: params.sort,
            sortOrder: params.order
        };
        return temp;
    };
    $("#search-btn").click(function () {
        $('#table').bootstrapTable('refresh');
    });

});

var vm = new Vue({
    el: '#rrapp',
    data: {
        showList: true,
        title: null,
        sysuser:{
        }
    },
    methods: {
        query: function () {
            vm.reload();
        },
        add: function () {
            vm.showList = false;
            vm.title = "新增";
            vm.sysuser= {};
         },
        update: function (Id) {
            if (Id == null) {
                return;
            }
            vm.showList = false;
            vm.title = "修改";
            vm.getInfo(Id)
        },
    saveOrUpdate: function (event) {
        $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function () {
            var url = vm.sysuser.Id ==null ? "sys/user/save" : "sys/user/update";
            $.ajax({
                type: "POST",
                url: baseURL + url,
                data: vm.sysuser,
                success: function (r) {
                    if (r.code === 0) {
                        swal({
                            text: "操作成功",
                            icon: "success",
                            buttons: false,
                            timer: 2000,
                        });
                        vm.reload();
                        $('#btnSaveOrUpdate').button('reset');
                        $('#btnSaveOrUpdate').dequeue();
                    } else {
                        swal({
                            text: r.msg,
                            icon: "error",
                            buttons: false,
                            timer: 2000,
                        });
                        $('#btnSaveOrUpdate').button('reset');
                        $('#btnSaveOrUpdate').dequeue();
                    }
                }
        })
            ;
        });
    },
    del: function (Id) {
        var Ids = [Id];
        var lock = false;
        top.swal({
        title: "确定要删除该记录?",
        icon: "warning",
        buttons: ["取消", "确定"],
        closeModal: true,
    }).then((isConfirm) => {
            if (isConfirm) {
            top.swal.close();
            if (!lock) {
                lock = true;
                $.ajax({
                    type: "POST",
                    url: baseURL + "sys/user/delete",
                    data: {ids: Ids},
                    success: function (r) {
                        if (r.code == 0) {
                            swal({
                                text: "删除成功",
                                icon: "success",
                                buttons: false,
                                timer: 2000,
                            });
                            $('#table').bootstrapTable('refresh');
                        } else {
                            swal({
                                text: r.msg,
                                icon: "error",
                                buttons: false,
                                timer: 2000,
                            });
                        }
                    }
                });
            }
        }else {
            top.swal.close();
        }
    });
    },
    bulkdel: function (event) {
        var Ids = getSelectedRows();
        if (Ids == null || Ids.length == 0) {
            return;
        }
        var lock = false;
        top.swal({
            title: "确定要删除该记录?",
            icon: "warning",
            buttons: ["取消", "确定"],
            closeModal: true,
        }).then((isConfirm) => {
            if (isConfirm) {
                top.swal.close();
                if (!lock) {
                    lock = true;
                    $.ajax({
                        type: "POST",
                        url: baseURL + "sys/user/delete",
                        data: {ids: Ids},
                        success: function (r) {
                            if (r.code == 0) {
                                swal({
                                    text: "删除成功",
                                    icon: "success",
                                    buttons: false,
                                    timer: 2000,
                                });
                                $('#table').bootstrapTable('refresh');
                            } else {
                                swal({
                                    text: r.msg,
                                    icon: "error",
                                    buttons: false,
                                    timer: 2000,
                                });
                            }
                        }
                    });
                }
            }else {
                top.swal.close();
            }
        });
    },
    getInfo: function (Id) {
        $.get(baseURL + "sys/user/get/" +Id, function (r) {
            vm.sysuser= r.data;
            vm.sysuser.Password = null;
        });
    },
    reload: function (event) {
        vm.showList = true;
        $('#table').bootstrapTable('refresh');
    }
}
})
;

================================================
FILE: public/plugins/ajaxupload/ajaxupload.js
================================================
/**
 * AJAX Upload ( http://valums.com/ajax-upload/ ) 
 * Copyright (c) Andris Valums
 * Licensed under the MIT license ( http://valums.com/mit-license/ )
 * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions 
 */
(function () {
    /* global window */
    /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */
    
    /**
     * Wrapper for FireBug's console.log
     */
    function log(){
        if (typeof(console) != 'undefined' && typeof(console.log) == 'function'){            
            Array.prototype.unshift.call(arguments, '[Ajax Upload]');
            console.log( Array.prototype.join.call(arguments, ' '));
        }
    } 

    /**
     * Attaches event to a dom element.
     * @param {Element} el
     * @param type event name
     * @param fn callback This refers to the passed element
     */
    function addEvent(el, type, fn){
        if (el.addEventListener) {
            el.addEventListener(type, fn, false);
        } else if (el.attachEvent) {
            el.attachEvent('on' + type, function(){
                fn.call(el);
	        });
	    } else {
            throw new Error('not supported or DOM not loaded');
        }
    }   
    
    /**
     * Attaches resize event to a window, limiting
     * number of event fired. Fires only when encounteres
     * delay of 100 after series of events.
     * 
     * Some browsers fire event multiple times when resizing
     * http://www.quirksmode.org/dom/events/resize.html
     * 
     * @param fn callback This refers to the passed element
     */
    function addResizeEvent(fn){
        var timeout;
               
	    addEvent(window, 'resize', function(){
            if (timeout){
                clearTimeout(timeout);
            }
            timeout = setTimeout(fn, 100);                        
        });
    }    
    
    // Needs more testing, will be rewriten for next version        
    // getOffset function copied from jQuery lib (http://jquery.com/)
    if (document.documentElement.getBoundingClientRect){
        // Get Offset using getBoundingClientRect
        // http://ejohn.org/blog/getboundingclientrect-is-awesome/
        var getOffset = function(el){
            var box = el.getBoundingClientRect();
            var doc = el.ownerDocument;
            var body = doc.body;
            var docElem = doc.documentElement; // for ie 
            var clientTop = docElem.clientTop || body.clientTop || 0;
            var clientLeft = docElem.clientLeft || body.clientLeft || 0;
             
            // In Internet Explorer 7 getBoundingClientRect property is treated as physical,
            // while others are logical. Make all logical, like in IE8.	
            var zoom = 1;            
            if (body.getBoundingClientRect) {
                var bound = body.getBoundingClientRect();
                zoom = (bound.right - bound.left) / body.clientWidth;
            }
            
            if (zoom > 1) {
                clientTop = 0;
                clientLeft = 0;
            }
            
            var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;
            
            return {
                top: top,
                left: left
            };
        };        
    } else {
        // Get offset adding all offsets 
        var getOffset = function(el){
            var top = 0, left = 0;
            do {
                top += el.offsetTop || 0;
                left += el.offsetLeft || 0;
                el = el.offsetParent;
            } while (el);
            
            return {
                left: left,
                top: top
            };
        };
    }
    
    /**
     * Returns left, top, right and bottom properties describing the border-box,
     * in pixels, with the top-left relative to the body
     * @param {Element} el
     * @return {Object} Contains left, top, right,bottom
     */
    function getBox(el){
        var left, right, top, bottom;
        var offset = getOffset(el);
        left = offset.left;
        top = offset.top;
        
        right = left + el.offsetWidth;
        bottom = top + el.offsetHeight;
        
        return {
            left: left,
            right: right,
            top: top,
            bottom: bottom
        };
    }
    
    /**
     * Helper that takes object literal
     * and add all properties to element.style
     * @param {Element} el
     * @param {Object} styles
     */
    function addStyles(el, styles){
        for (var name in styles) {
            if (styles.hasOwnProperty(name)) {
                el.style[name] = styles[name];
            }
        }
    }
        
    /**
     * Function places an absolutely positioned
     * element on top of the specified element
     * copying position and dimentions.
     * @param {Element} from
     * @param {Element} to
     */    
    function copyLayout(from, to){
	    var box = getBox(from);
        
        addStyles(to, {
	        position: 'absolute',                    
	        left : box.left + 'px',
	        top : box.top + 'px',
	        width : from.offsetWidth + 'px',
	        height : from.offsetHeight + 'px'
	    });        
    }

    /**
    * Creates and returns element from html chunk
    * Uses innerHTML to create an element
    */
    var toElement = (function(){
        var div = document.createElement('div');
        return function(html){
            div.innerHTML = html;
            var el = div.firstChild;
            return div.removeChild(el);
        };
    })();
            
    /**
     * Function generates unique id
     * @return unique id 
     */
    var getUID = (function(){
        var id = 0;
        return function(){
            return 'ValumsAjaxUpload' + id++;
        };
    })();        
 
    /**
     * Get file name from path
     * @param {String} file path to file
     * @return filename
     */  
    function fileFromPath(file){
        return file.replace(/.*(\/|\\)/, "");
    }
    
    /**
     * Get file extension lowercase
     * @param {String} file name
     * @return file extenstion
     */    
    function getExt(file){
        return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
    }

    function hasClass(el, name){        
        var re = new RegExp('\\b' + name + '\\b');        
        return re.test(el.className);
    }    
    function addClass(el, name){
        if ( ! hasClass(el, name)){   
            el.className += ' ' + name;
        }
    }    
    function removeClass(el, name){
        var re = new RegExp('\\b' + name + '\\b');                
        el.className = el.className.replace(re, '');        
    }
    
    function removeNode(el){
        el.parentNode.removeChild(el);
    }

    /**
     * Easy styling and uploading
     * @constructor
     * @param button An element you want convert to 
     * upload button. Tested dimentions up to 500x500px
     * @param {Object} options See defaults below.
     */
    window.AjaxUpload = function(button, options){
        this._settings = {
            // Location of the server-side upload script
            action: 'upload.php',
            // File upload name
            name: 'userfile',
            // Additional data to send
            data: {},
            // Submit file as soon as it's selected
            autoSubmit: true,
            // The type of data that you're expecting back from the server.
            // html and xml are detected automatically.
            // Only useful when you are using json data as a response.
            // Set to "json" in that case. 
            responseType: false,
            // Class applied to button when mouse is hovered
            hoverClass: 'hover',
            // Class applied to button when AU is disabled
            disabledClass: 'disabled',            
            // When user selects a file, useful with autoSubmit disabled
            // You can return false to cancel upload			
            onChange: function(file, extension){
            },
            // Callback to fire before file is uploaded
            // You can return false to cancel upload
            onSubmit: function(file, extension){
            },
            // Fired when file upload is completed
            // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
            onComplete: function(file, response){
            }
        };
                        
        // Merge the users options with our defaults
        for (var i in options) {
            if (options.hasOwnProperty(i)){
                this._settings[i] = options[i];
            }
        }
                
        // button isn't necessary a dom element
        if (button.jquery){
            // jQuery object was passed
            button = button[0];
        } else if (typeof button == "string") {
            if (/^#.*/.test(button)){
                // If jQuery user passes #elementId don't break it					
                button = button.slice(1);                
            }
            
            button = document.getElementById(button);
        }
        
        if ( ! button || button.nodeType !== 1){
            throw new Error("Please make sure that you're passing a valid element"); 
        }
                
        if ( button.nodeName.toUpperCase() == 'A'){
            // disable link                       
            addEvent(button, 'click', function(e){
                if (e && e.preventDefault){
                    e.preventDefault();
                } else if (window.event){
                    window.event.returnValue = false;
                }
            });
        }
                    
        // DOM element
        this._button = button;        
        // DOM element                 
        this._input = null;
        // If disabled clicking on button won't do anything
        this._disabled = false;
        
        // if the button was disabled before refresh if will remain
        // disabled in FireFox, let's fix it
        this.enable();        
        
        this._rerouteClicks();
    };
    
    // assigning methods to our class
    AjaxUpload.prototype = {
        setData: function(data){
            this._settings.data = data;
        },
        disable: function(){            
            addClass(this._button, this._settings.disabledClass);
            this._disabled = true;
            
            var nodeName = this._button.nodeName.toUpperCase();            
            if (nodeName == 'INPUT' || nodeName == 'BUTTON'){
                this._button.setAttribute('disabled', 'disabled');
            }            
            
            // hide input
            if (this._input){
                // We use visibility instead of display to fix problem with Safari 4
                // The problem is that the value of input doesn't change if it 
                // has display none when user selects a file           
                this._input.parentNode.style.visibility = 'hidden';
            }
        },
        enable: function(){
            removeClass(this._button, this._settings.disabledClass);
            this._button.removeAttribute('disabled');
            this._disabled = false;
            
        },
        /**
         * Creates invisible file input 
         * that will hover above the button
         * <div><input type='file' /></div>
         */
        _createInput: function(){ 
            var self = this;
                        
            var input = document.createElement("input");
            input.setAttribute('type', 'file');
            input.setAttribute('name', this._settings.name);
            
            addStyles(input, {
                'position' : 'absolute',
                // in Opera only 'browse' button
                // is clickable and it is located at
                // the right side of the input
                'right' : 0,
                'margin' : 0,
                'padding' : 0,
                'fontSize' : '480px',                
                'cursor' : 'pointer'
            });            

            var div = document.createElement("div");                        
            addStyles(div, {
                'display' : 'block',
                'position' : 'absolute',
                'overflow' : 'hidden',
                'margin' : 0,
                'padding' : 0,                
                'opacity' : 0,
                // Make sure browse button is in the right side
                // in Internet Explorer
                'direction' : 'ltr',
                //Max zIndex supported by Opera 9.0-9.2
                'zIndex': 2147483583
            });
            
            // Make sure that element opacity exists.
            // Otherwise use IE filter            
            if ( div.style.opacity !== "0") {
                if (typeof(div.filters) == 'undefined'){
                    throw new Error('Opacity not supported by the browser');
                }
                div.style.filter = "alpha(opacity=0)";
            }            
            
            addEvent(input, 'change', function(){
                 
                if ( ! input || input.value === ''){                
                    return;                
                }
                            
                // Get filename from input, required                
                // as some browsers have path instead of it          
                var file = fileFromPath(input.value);
                                
                if (false === self._settings.onChange.call(self, file, getExt(file))){
                    self._clearInput();                
                    return;
                }
                
                // Submit form when value is changed
                if (self._settings.autoSubmit) {
                    self.submit();
                }
            });            

            addEvent(input, 'mouseover', function(){
                addClass(self._button, self._settings.hoverClass);
            });
            
            addEvent(input, 'mouseout', function(){
                removeClass(self._button, self._settings.hoverClass);
                
                // We use visibility instead of display to fix problem with Safari 4
                // The problem is that the value of input doesn't change if it 
                // has display none when user selects a file           
                input.parentNode.style.visibility = 'hidden';

            });   
                        
	        div.appendChild(input);
            document.body.appendChild(div);
              
            this._input = input;
        },
        _clearInput : function(){
            if (!this._input){
                return;
            }            
                             
            // this._input.value = ''; Doesn't work in IE6                               
            removeNode(this._input.parentNode);
            this._input = null;                                                                   
            this._createInput();
            
            removeClass(this._button, this._settings.hoverClass);
        },
        /**
         * Function makes sure that when user clicks upload button,
         * the this._input is clicked instead
         */
        _rerouteClicks: function(){
            var self = this;
            
            // IE will later display 'access denied' error
            // if you use using self._input.click()
            // other browsers just ignore click()

            addEvent(self._button, 'mouseover', function(){
                if (self._disabled){
                    return;
                }
                                
                if ( ! self._input){
	                self._createInput();
                }
                
                var div = self._input.parentNode;                            
                copyLayout(self._button, div);
                div.style.visibility = 'visible';
                                
            });
            
            
            // commented because we now hide input on mouseleave
            /**
             * When the window is resized the elements 
             * can be misaligned if button position depends
             * on window size
             */
            //addResizeEvent(function(){
            //    if (self._input){
            //        copyLayout(self._button, self._input.parentNode);
            //    }
            //});            
                                         
        },
        /**
         * Creates iframe with unique name
         * @return {Element} iframe
         */
        _createIframe: function(){
            // We can't use getTime, because it sometimes return
            // same value in safari :(
            var id = getUID();            
             
            // We can't use following code as the name attribute
            // won't be properly registered in IE6, and new window
            // on form submit will open
            // var iframe = document.createElement('iframe');
            // iframe.setAttribute('name', id);                        
 
            var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
            // src="javascript:false; was added
            // because it possibly removes ie6 prompt 
            // "This page contains both secure and nonsecure items"
            // Anyway, it doesn't do any harm.            
            iframe.setAttribute('id', id);
            
            iframe.style.display = 'none';
            document.body.appendChild(iframe);
            
            return iframe;
        },
        /**
         * Creates form, that will be submitted to iframe
         * @param {Element} iframe Where to submit
         * @return {Element} form
         */
        _createForm: function(iframe){
            var settings = this._settings;
                        
            // We can't use the following code in IE6
            // var form = document.createElement('form');
            // form.setAttribute('method', 'post');
            // form.setAttribute('enctype', 'multipart/form-data');
            // Because in this case file won't be attached to request                    
            var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
                        
            form.setAttribute('action', settings.action);
            form.setAttribute('target', iframe.name);                                   
            form.style.display = 'none';
            document.body.appendChild(form);
            
            // Create hidden input element for each data key
            for (var prop in settings.data) {
                if (settings.data.hasOwnProperty(prop)){
                    var el = document.createElement("input");
                    el.setAttribute('type', 'hidden');
                    el.setAttribute('name', prop);
                    el.setAttribute('value', settings.data[prop]);
                    form.appendChild(el);
                }
            }
            return form;
        },
        /**
         * Gets response from iframe and fires onComplete event when ready
         * @param iframe
         * @param file Filename to use in onComplete callback 
         */
        _getResponse : function(iframe, file){            
            // getting response
            var toDeleteFlag = false, self = this, settings = this._settings;   
               
            addEvent(iframe, 'load', function(){                
                
                if (// For Safari 
                    iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
                    // For FF, IE
                    iframe.src == "javascript:'<html></html>';"){                                                                        
                        // First time around, do not delete.
                        // We reload to blank page, so that reloading main page
                        // does not re-submit the post.
                        
                        if (toDeleteFlag) {
                            // Fix busy state in FF3
                            setTimeout(function(){
                                removeNode(iframe);
                            }, 0);
                        }
                                                
                        return;
                }
                
                var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;
                
                // fixing Opera 9.26,10.00
                if (doc.readyState && doc.readyState != 'complete') {
                   // Opera fires load event multiple times
                   // Even when the DOM is not ready yet
                   // this fix should not affect other browsers
                   return;
                }
                
                // fixing Opera 9.64
                if (doc.body && doc.body.innerHTML == "false") {
                    // In Opera 9.64 event was fired second time
                    // when body.innerHTML changed from false 
                    // to server response approx. after 1 sec
                    return;
                }
                
                var response;
                
                if (doc.XMLDocument) {
                    // response is a xml document Internet Explorer property
                    response = doc.XMLDocument;
                } else if (doc.body){
                    // response is html document or plain text
                    response = doc.body.innerHTML;
                    
                    if (settings.responseType && settings.responseType.toLowerCase() == 'json') {
                        // If the document was sent as 'application/javascript' or
                        // 'text/javascript', then the browser wraps the text in a <pre>
                        // tag and performs html encoding on the contents.  In this case,
                        // we need to pull the original text content from the text node's
                        // nodeValue property to retrieve the unmangled content.
                        // Note that IE6 only understands text/html
                        if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {
                            response = doc.body.firstChild.firstChild.nodeValue;
                        }
                        
                        if (response) {
                            response = eval("(" + response + ")");
                        } else {
                            response = {};
                        }
                    }
                } else {
                    // response is a xml document
                    response = doc;
                }
                
                settings.onComplete.call(self, file, response);
                
                // Reload blank page, so that reloading main page
                // does not re-submit the post. Also, remember to
                // delete the frame
                toDeleteFlag = true;
                
                // Fix IE mixed content issue
                iframe.src = "javascript:'<html></html>';";
            });            
        },        
        /**
         * Upload file contained in this._input
         */
        submit: function(){                        
            var self = this, settings = this._settings;
            
            if ( ! this._input || this._input.value === ''){                
                return;                
            }
                                    
            var file = fileFromPath(this._input.value);
            
            // user returned false to cancel upload
            if (false === settings.onSubmit.call(this, file, getExt(file))){
                this._clearInput();                
                return;
            }
            
            // sending request    
            var iframe = this._createIframe();
            var form = this._createForm(iframe);
            
            // assuming following structure
            // div -> input type='file'
            removeNode(this._input.parentNode);            
            removeClass(self._button, self._settings.hoverClass);
                        
            form.appendChild(this._input);
                        
            form.submit();

            // request set, clean up                
            removeNode(form); form = null;                          
            removeNode(this._input); this._input = null;
            
            // Get response from iframe and fire onComplete event when ready
            this._getResponse(iframe, file);            

            // get ready for next request            
            this._createInput();
        }
    };
})(); 


================================================
FILE: public/plugins/table/bootstrap-table-locale-all.js
================================================
(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
	typeof define === 'function' && define.amd ? define(['jquery'], factory) :
	(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';

	$ = $ && $.hasOwnProperty('default') ? $['default'] : $;

	var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

	function createCommonjsModule(fn, module) {
		return module = { exports: {} }, fn(module, module.exports), module.exports;
	}

	var O = 'object';
	var check = function (it) {
	  return it && it.Math == Math && it;
	};

	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
	var global_1 =
	  // eslint-disable-next-line no-undef
	  check(typeof globalThis == O && globalThis) ||
	  check(typeof window == O && window) ||
	  check(typeof self == O && self) ||
	  check(typeof commonjsGlobal == O && commonjsGlobal) ||
	  // eslint-disable-next-line no-new-func
	  Function('return this')();

	var fails = function (exec) {
	  try {
	    return !!exec();
	  } catch (error) {
	    return true;
	  }
	};

	// Thank's IE8 for his funny defineProperty
	var descriptors = !fails(function () {
	  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
	});

	var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
	var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

	// Nashorn ~ JDK8 bug
	var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);

	// `Object.prototype.propertyIsEnumerable` method implementation
	// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
	var f = NASHORN_BUG ? function propertyIsEnumerable(V) {
	  var descriptor = getOwnPropertyDescriptor(this, V);
	  return !!descriptor && descriptor.enumerable;
	} : nativePropertyIsEnumerable;

	var objectPropertyIsEnumerable = {
		f: f
	};

	var createPropertyDescriptor = function (bitmap, value) {
	  return {
	    enumerable: !(bitmap & 1),
	    configurable: !(bitmap & 2),
	    writable: !(bitmap & 4),
	    value: value
	  };
	};

	var toString = {}.toString;

	var classofRaw = function (it) {
	  return toString.call(it).slice(8, -1);
	};

	var split = ''.split;

	// fallback for non-array-like ES3 and non-enumerable old V8 strings
	var indexedObject = fails(function () {
	  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
	  // eslint-disable-next-line no-prototype-builtins
	  return !Object('z').propertyIsEnumerable(0);
	}) ? function (it) {
	  return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);
	} : Object;

	// `RequireObjectCoercible` abstract operation
	// https://tc39.github.io/ecma262/#sec-requireobjectcoercible
	var requireObjectCoercible = function (it) {
	  if (it == undefined) throw TypeError("Can't call method on " + it);
	  return it;
	};

	// toObject with fallback for non-array-like ES3 strings



	var toIndexedObject = function (it) {
	  return indexedObject(requireObjectCoercible(it));
	};

	var isObject = function (it) {
	  return typeof it === 'object' ? it !== null : typeof it === 'function';
	};

	// `ToPrimitive` abstract operation
	// https://tc39.github.io/ecma262/#sec-toprimitive
	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
	// and the second argument - flag - preferred type is a string
	var toPrimitive = function (input, PREFERRED_STRING) {
	  if (!isObject(input)) return input;
	  var fn, val;
	  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
	  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
	  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
	  throw TypeError("Can't convert object to primitive value");
	};

	var hasOwnProperty = {}.hasOwnProperty;

	var has = function (it, key) {
	  return hasOwnProperty.call(it, key);
	};

	var document = global_1.document;
	// typeof document.createElement is 'object' in old IE
	var EXISTS = isObject(document) && isObject(document.createElement);

	var documentCreateElement = function (it) {
	  return EXISTS ? document.createElement(it) : {};
	};

	// Thank's IE8 for his funny defineProperty
	var ie8DomDefine = !descriptors && !fails(function () {
	  return Object.defineProperty(documentCreateElement('div'), 'a', {
	    get: function () { return 7; }
	  }).a != 7;
	});

	var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

	// `Object.getOwnPropertyDescriptor` method
	// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
	var f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
	  O = toIndexedObject(O);
	  P = toPrimitive(P, true);
	  if (ie8DomDefine) try {
	    return nativeGetOwnPropertyDescriptor(O, P);
	  } catch (error) { /* empty */ }
	  if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);
	};

	var objectGetOwnPropertyDescriptor = {
		f: f$1
	};

	var anObject = function (it) {
	  if (!isObject(it)) {
	    throw TypeError(String(it) + ' is not an object');
	  } return it;
	};

	var nativeDefineProperty = Object.defineProperty;

	// `Object.defineProperty` method
	// https://tc39.github.io/ecma262/#sec-object.defineproperty
	var f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
	  anObject(O);
	  P = toPrimitive(P, true);
	  anObject(Attributes);
	  if (ie8DomDefine) try {
	    return nativeDefineProperty(O, P, Attributes);
	  } catch (error) { /* empty */ }
	  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
	  if ('value' in Attributes) O[P] = Attributes.value;
	  return O;
	};

	var objectDefineProperty = {
		f: f$2
	};

	var hide = descriptors ? function (object, key, value) {
	  return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));
	} : function (object, key, value) {
	  object[key] = value;
	  return object;
	};

	var setGlobal = function (key, value) {
	  try {
	    hide(global_1, key, value);
	  } catch (error) {
	    global_1[key] = value;
	  } return value;
	};

	var shared = createCommonjsModule(function (module) {
	var SHARED = '__core-js_shared__';
	var store = global_1[SHARED] || setGlobal(SHARED, {});

	(module.exports = function (key, value) {
	  return store[key] || (store[key] = value !== undefined ? value : {});
	})('versions', []).push({
	  version: '3.1.3',
	  mode:  'global',
	  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
	});
	});

	var functionToString = shared('native-function-to-string', Function.toString);

	var WeakMap = global_1.WeakMap;

	var nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(functionToString.call(WeakMap));

	var id = 0;
	var postfix = Math.random();

	var uid = function (key) {
	  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
	};

	var keys = shared('keys');

	var sharedKey = function (key) {
	  return keys[key] || (keys[key] = uid(key));
	};

	var hiddenKeys = {};

	var WeakMap$1 = global_1.WeakMap;
	var set, get, has$1;

	var enforce = function (it) {
	  return has$1(it) ? get(it) : set(it, {});
	};

	var getterFor = function (TYPE) {
	  return function (it) {
	    var state;
	    if (!isObject(it) || (state = get(it)).type !== TYPE) {
	      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
	    } return state;
	  };
	};

	if (nativeWeakMap) {
	  var store = new WeakMap$1();
	  var wmget = store.get;
	  var wmhas = store.has;
	  var wmset = store.set;
	  set = function (it, metadata) {
	    wmset.call(store, it, metadata);
	    return metadata;
	  };
	  get = function (it) {
	    return wmget.call(store, it) || {};
	  };
	  has$1 = function (it) {
	    return wmhas.call(store, it);
	  };
	} else {
	  var STATE = sharedKey('state');
	  hiddenKeys[STATE] = true;
	  set = function (it, metadata) {
	    hide(it, STATE, metadata);
	    return metadata;
	  };
	  get = function (it) {
	    return has(it, STATE) ? it[STATE] : {};
	  };
	  has$1 = function (it) {
	    return has(it, STATE);
	  };
	}

	var internalState = {
	  set: set,
	  get: get,
	  has: has$1,
	  enforce: enforce,
	  getterFor: getterFor
	};

	var redefine = createCommonjsModule(function (module) {
	var getInternalState = internalState.get;
	var enforceInternalState = internalState.enforce;
	var TEMPLATE = String(functionToString).split('toString');

	shared('inspectSource', function (it) {
	  return functionToString.call(it);
	});

	(module.exports = function (O, key, value, options) {
	  var unsafe = options ? !!options.unsafe : false;
	  var simple = options ? !!options.enumerable : false;
	  var noTargetGet = options ? !!options.noTargetGet : false;
	  if (typeof value == 'function') {
	    if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);
	    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
	  }
	  if (O === global_1) {
	    if (simple) O[key] = value;
	    else setGlobal(key, value);
	    return;
	  } else if (!unsafe) {
	    delete O[key];
	  } else if (!noTargetGet && O[key]) {
	    simple = true;
	  }
	  if (simple) O[key] = value;
	  else hide(O, key, value);
	// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
	})(Function.prototype, 'toString', function toString() {
	  return typeof this == 'function' && getInternalState(this).source || functionToString.call(this);
	});
	});

	var path = global_1;

	var aFunction = function (variable) {
	  return typeof variable == 'function' ? variable : undefined;
	};

	var getBuiltIn = function (namespace, method) {
	  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace])
	    : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method];
	};

	var ceil = Math.ceil;
	var floor = Math.floor;

	// `ToInteger` abstract operation
	// https://tc39.github.io/ecma262/#sec-tointeger
	var toInteger = function (argument) {
	  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
	};

	var min = Math.min;

	// `ToLength` abstract operation
	// https://tc39.github.io/ecma262/#sec-tolength
	var toLength = function (argument) {
	  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
	};

	var max = Math.max;
	var min$1 = Math.min;

	// Helper for a popular repeating case of the spec:
	// Let integer be ? ToInteger(index).
	// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).
	var toAbsoluteIndex = function (index, length) {
	  var integer = toInteger(index);
	  return integer < 0 ? max(integer + length, 0) : min$1(integer, length);
	};

	// `Array.prototype.{ indexOf, includes }` methods implementation
	var createMethod = function (IS_INCLUDES) {
	  return function ($this, el, fromIndex) {
	    var O = toIndexedObject($this);
	    var length = toLength(O.length);
	    var index = toAbsoluteIndex(fromIndex, length);
	    var value;
	    // Array#includes uses SameValueZero equality algorithm
	    // eslint-disable-next-line no-self-compare
	    if (IS_INCLUDES && el != el) while (length > index) {
	      value = O[index++];
	      // eslint-disable-next-line no-self-compare
	      if (value != value) return true;
	    // Array#indexOf ignores holes, Array#includes - not
	    } else for (;length > index; index++) {
	      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
	    } return !IS_INCLUDES && -1;
	  };
	};

	var arrayIncludes = {
	  // `Array.prototype.includes` method
	  // https://tc39.github.io/ecma262/#sec-array.prototype.includes
	  includes: createMethod(true),
	  // `Array.prototype.indexOf` method
	  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
	  indexOf: createMethod(false)
	};

	var indexOf = arrayIncludes.indexOf;


	var objectKeysInternal = function (object, names) {
	  var O = toIndexedObject(object);
	  var i = 0;
	  var result = [];
	  var key;
	  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
	  // Don't enum bug & hidden keys
	  while (names.length > i) if (has(O, key = names[i++])) {
	    ~indexOf(result, key) || result.push(key);
	  }
	  return result;
	};

	// IE8- don't enum bug keys
	var enumBugKeys = [
	  'constructor',
	  'hasOwnProperty',
	  'isPrototypeOf',
	  'propertyIsEnumerable',
	  'toLocaleString',
	  'toString',
	  'valueOf'
	];

	var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');

	// `Object.getOwnPropertyNames` method
	// https://tc39.github.io/ecma262/#sec-object.getownpropertynames
	var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
	  return objectKeysInternal(O, hiddenKeys$1);
	};

	var objectGetOwnPropertyNames = {
		f: f$3
	};

	var f$4 = Object.getOwnPropertySymbols;

	var objectGetOwnPropertySymbols = {
		f: f$4
	};

	// all object keys, includes non-enumerable and symbols
	var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
	  var keys = objectGetOwnPropertyNames.f(anObject(it));
	  var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;
	  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
	};

	var copyConstructorProperties = function (target, source) {
	  var keys = ownKeys(source);
	  var defineProperty = objectDefineProperty.f;
	  var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
	  for (var i = 0; i < keys.length; i++) {
	    var key = keys[i];
	    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
	  }
	};

	var replacement = /#|\.prototype\./;

	var isForced = function (feature, detection) {
	  var value = data[normalize(feature)];
	  return value == POLYFILL ? true
	    : value == NATIVE ? false
	    : typeof detection == 'function' ? fails(detection)
	    : !!detection;
	};

	var normalize = isForced.normalize = function (string) {
	  return String(string).replace(replacement, '.').toLowerCase();
	};

	var data = isForced.data = {};
	var NATIVE = isForced.NATIVE = 'N';
	var POLYFILL = isForced.POLYFILL = 'P';

	var isForced_1 = isForced;

	var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;






	/*
	  options.target      - name of the target object
	  options.global      - target is the global object
	  options.stat        - export as static methods of target
	  options.proto       - export as prototype methods of target
	  options.real        - real prototype method for the `pure` version
	  options.forced      - export even if the native feature is available
	  options.bind        - bind methods to the target, required for the `pure` version
	  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
	  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
	  options.sham        - add a flag to not completely full polyfills
	  options.enumerable  - export as enumerable property
	  options.noTargetGet - prevent calling a getter on target
	*/
	var _export = function (options, source) {
	  var TARGET = options.target;
	  var GLOBAL = options.global;
	  var STATIC = options.stat;
	  var FORCED, target, key, targetProperty, sourceProperty, descriptor;
	  if (GLOBAL) {
	    target = global_1;
	  } else if (STATIC) {
	    target = global_1[TARGET] || setGlobal(TARGET, {});
	  } else {
	    target = (global_1[TARGET] || {}).prototype;
	  }
	  if (target) for (key in source) {
	    sourceProperty = source[key];
	    if (options.noTargetGet) {
	      descriptor = getOwnPropertyDescriptor$1(target, key);
	      targetProperty = descriptor && descriptor.value;
	    } else targetProperty = target[key];
	    FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
	    // contained in target
	    if (!FORCED && targetProperty !== undefined) {
	      if (typeof sourceProperty === typeof targetProperty) continue;
	      copyConstructorProperties(sourceProperty, targetProperty);
	    }
	    // add a flag to not completely full polyfills
	    if (options.sham || (targetProperty && targetProperty.sham)) {
	      hide(sourceProperty, 'sham', true);
	    }
	    // extend global
	    redefine(target, key, sourceProperty, options);
	  }
	};

	// `IsArray` abstract operation
	// https://tc39.github.io/ecma262/#sec-isarray
	var isArray = Array.isArray || function isArray(arg) {
	  return classofRaw(arg) == 'Array';
	};

	// `ToObject` abstract operation
	// https://tc39.github.io/ecma262/#sec-toobject
	var toObject = function (argument) {
	  return Object(requireObjectCoercible(argument));
	};

	var createProperty = function (object, key, value) {
	  var propertyKey = toPrimitive(key);
	  if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));
	  else object[propertyKey] = value;
	};

	var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {
	  // Chrome 38 Symbol has incorrect toString conversion
	  // eslint-disable-next-line no-undef
	  return !String(Symbol());
	});

	var Symbol$1 = global_1.Symbol;
	var store$1 = shared('wks');

	var wellKnownSymbol = function (name) {
	  return store$1[name] || (store$1[name] = nativeSymbol && Symbol$1[name]
	    || (nativeSymbol ? Symbol$1 : uid)('Symbol.' + name));
	};

	var SPECIES = wellKnownSymbol('species');

	// `ArraySpeciesCreate` abstract operation
	// https://tc39.github.io/ecma262/#sec-arrayspeciescreate
	var arraySpeciesCreate = function (originalArray, length) {
	  var C;
	  if (isArray(originalArray)) {
	    C = originalArray.constructor;
	    // cross-realm fallback
	    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
	    else if (isObject(C)) {
	      C = C[SPECIES];
	      if (C === null) C = undefined;
	    }
	  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
	};

	var SPECIES$1 = wellKnownSymbol('species');

	var arrayMethodHasSpeciesSupport = function (METHOD_NAME) {
	  return !fails(function () {
	    var array = [];
	    var constructor = array.constructor = {};
	    constructor[SPECIES$1] = function () {
	      return { foo: 1 };
	    };
	    return array[METHOD_NAME](Boolean).foo !== 1;
	  });
	};

	var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
	var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
	var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';

	var IS_CONCAT_SPREADABLE_SUPPORT = !fails(function () {
	  var array = [];
	  array[IS_CONCAT_SPREADABLE] = false;
	  return array.concat()[0] !== array;
	});

	var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');

	var isConcatSpreadable = function (O) {
	  if (!isObject(O)) return false;
	  var spreadable = O[IS_CONCAT_SPREADABLE];
	  return spreadable !== undefined ? !!spreadable : isArray(O);
	};

	var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;

	// `Array.prototype.concat` method
	// https://tc39.github.io/ecma262/#sec-array.prototype.concat
	// with adding support of @@isConcatSpreadable and @@species
	_export({ target: 'Array', proto: true, forced: FORCED }, {
	  concat: function concat(arg) { // eslint-disable-line no-unused-vars
	    var O = toObject(this);
	    var A = arraySpeciesCreate(O, 0);
	    var n = 0;
	    var i, k, length, len, E;
	    for (i = -1, length = arguments.length; i < length; i++) {
	      E = i === -1 ? O : arguments[i];
	      if (isConcatSpreadable(E)) {
	        len = toLength(E.length);
	        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
	        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
	      } else {
	        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
	        createProperty(A, n++, E);
	      }
	    }
	    A.length = n;
	    return A;
	  }
	});

	/**
	 * Bootstrap Table Afrikaans translation
	 * Author: Phillip Kruger <phillip.kruger@gmail.com>
	 */

	$.fn.bootstrapTable.locales['af-ZA'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Besig om te laai, wag asseblief';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " rekords per bladsy");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Resultate ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " rye (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Resultate ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " rye");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Soek';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Geen rekords gevind nie';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Wys/verberg bladsy nummering';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Herlaai';
	  },
	  formatToggle: function formatToggle() {
	    return 'Wissel';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Kolomme';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'All';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['af-ZA']);

	/**
	 * Bootstrap Table English translation
	 * Author: Zhixin Wen<wenzhixin2010@gmail.com>
	 */

	$.fn.bootstrapTable.locales['ar-SA'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'جاري التحميل, يرجى الإنتظار';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " \u0633\u062C\u0644 \u0644\u0643\u0644 \u0635\u0641\u062D\u0629");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "\u0627\u0644\u0638\u0627\u0647\u0631 ".concat(pageFrom, " \u0625\u0644\u0649 ").concat(pageTo, " \u0645\u0646 ").concat(totalRows, " \u0633\u062C\u0644 ").concat(totalNotFiltered, " total rows)");
	    }

	    return "\u0627\u0644\u0638\u0627\u0647\u0631 ".concat(pageFrom, " \u0625\u0644\u0649 ").concat(pageTo, " \u0645\u0646 ").concat(totalRows, " \u0633\u062C\u0644");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'بحث';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'لا توجد نتائج مطابقة للبحث';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    /* eslint-disable no-useless-escape */
	    return 'إخفاء\إظهار ترقيم الصفحات';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'تحديث';
	  },
	  formatToggle: function formatToggle() {
	    return 'تغيير';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'أعمدة';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'All';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ar-SA']);

	/**
	 * Bootstrap Table Catalan translation
	 * Authors: Marc Pina<iwalkalone69@gmail.com>
	 *          Claudi Martinez<claudix.kernel@gmail.com>
	 */

	$.fn.bootstrapTable.locales['ca-ES'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Espereu, si us plau';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " resultats per p\xE0gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrant de ".concat(pageFrom, " fins ").concat(pageTo, " - total ").concat(totalRows, " resultats (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrant de ".concat(pageFrom, " fins ").concat(pageTo, " - total ").concat(totalRows, " resultats");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Cerca';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No s\'han trobat resultats';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Amaga/Mostra paginació';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refresca';
	  },
	  formatToggle: function formatToggle() {
	    return 'Alterna formatació';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnes';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Tots';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ca-ES']);

	/**
	 * Bootstrap Table Czech translation
	 * Author: Lukas Kral (monarcha@seznam.cz)
	 * Author: Jakub Svestka <svestka1999@gmail.com>
	 */

	$.fn.bootstrapTable.locales['cs-CZ'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Čekejte, prosím';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " polo\u017Eek na str\xE1nku");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Zobrazena ".concat(pageFrom, ". - ").concat(pageTo, " . polo\u017Eka z celkov\xFDch ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Zobrazena ".concat(pageFrom, ". - ").concat(pageTo, " . polo\u017Eka z celkov\xFDch ").concat(totalRows);
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Vyhledávání';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Nenalezena žádná vyhovující položka';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Skrýt/Zobrazit stránkování';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Aktualizovat';
	  },
	  formatToggle: function formatToggle() {
	    return 'Přepni';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Sloupce';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Vše';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['cs-CZ']);

	/**
	 * Bootstrap Table danish translation
	 * Author: Your Name Jan Borup Coyle, github@coyle.dk
	 */

	$.fn.bootstrapTable.locales['da-DK'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Indlæser, vent venligst';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " poster pr side");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Viser ".concat(pageFrom, " til ").concat(pageTo, " af ").concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : '', " (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Viser ".concat(pageFrom, " til ").concat(pageTo, " af ").concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : '');
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Viser ".concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : '');
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Ryd filtre';
	  },
	  formatSearch: function formatSearch() {
	    return 'Søg';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Ingen poster fundet';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Skjul/vis nummerering';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Opdater';
	  },
	  formatToggle: function formatToggle() {
	    return 'Skift';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Kolonner';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Alle';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Eksporter';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['da-DK']);

	/**
	* Bootstrap Table German translation
	* Author: Paul Mohr - Sopamo<p.mohr@sopamo.de>
	*/

	$.fn.bootstrapTable.locales['de-DE'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Lade, bitte warten';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " Zeilen pro Seite.");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Zeige Zeile ".concat(pageFrom, " bis ").concat(pageTo, " von ").concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', " (Gefiltert von ").concat(totalNotFiltered, " Zeile").concat(totalNotFiltered > 1 ? 'n' : '', ")");
	    }

	    return "Zeige Zeile ".concat(pageFrom, " bis ").concat(pageTo, " von ").concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', ".");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'Vorherige Seite';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "Zu Seite ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'Nächste Seite';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Zeige ".concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', ".");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Lösche Filter';
	  },
	  formatSearch: function formatSearch() {
	    return 'Suchen';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Keine passenden Ergebnisse gefunden';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Verstecke/Zeige Nummerierung';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Zeige Nummerierung';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Verstecke Nummerierung';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Neu laden';
	  },
	  formatToggle: function formatToggle() {
	    return 'Umschalten';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Normale Ansicht';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Kartenansicht';
	  },
	  formatColumns: function formatColumns() {
	    return 'Spalten';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Alle umschalten';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Vollbild';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Alle';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Automatisches Neuladen';
	  },
	  formatExport: function formatExport() {
	    return 'Datenexport';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Erweiterte Suche';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Schließen';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['de-DE']);

	/**
	 * Bootstrap Table Greek translation
	 * Author: giannisdallas
	 */

	$.fn.bootstrapTable.locales['el-GR'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Φορτώνει, παρακαλώ περιμένετε';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BD\u03AC \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD ".concat(pageFrom, " \u03C9\u03C2 \u03C4\u03B7\u03BD ").concat(pageTo, " \u03B1\u03C0\u03CC \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF ").concat(totalRows, " \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD ".concat(pageFrom, " \u03C9\u03C2 \u03C4\u03B7\u03BD ").concat(pageTo, " \u03B1\u03C0\u03CC \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF ").concat(totalRows, " \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Αναζητήστε';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Δεν βρέθηκαν αποτελέσματα';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refresh';
	  },
	  formatToggle: function formatToggle() {
	    return 'Toggle';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columns';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'All';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['el-GR']);

	/**
	 * Bootstrap Table English translation
	 * Author: Zhixin Wen<wenzhixin2010@gmail.com>
	 */

	$.fn.bootstrapTable.locales['en-US'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Loading, please wait';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " rows per page");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Search';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No matching records found';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refresh';
	  },
	  formatToggle: function formatToggle() {
	    return 'Toggle';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columns';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'All';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['en-US']);

	/**
	 * Bootstrap Table Spanish (Argentina) translation
	 * Author: Felix Vera (felix.vera@gmail.com)
	 */

	$.fn.bootstrapTable.locales['es-AR'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, espere por favor';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " registros por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron registros';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refresh';
	  },
	  formatToggle: function formatToggle() {
	    return 'Toggle';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columns';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-AR']);

	/**
	 * Traducción de librería Bootstrap Table a Español (Chile)
	 * @author Brian Álvarez Azócar
	 * email brianalvarezazocar@gmail.com
	 */

	$.fn.bootstrapTable.locales['es-CL'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, espere por favor';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " filas por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron registros';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return "Ocultar/Mostrar paginaci\xF3n";
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refrescar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Cambiar';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-CL']);

	/**
	 * Bootstrap Table Spanish (Costa Rica) translation
	 * Author: Dennis Hernández (http://djhvscf.github.io/Blog/)
	 */

	$.fn.bootstrapTable.locales['es-CR'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, por favor espere';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " registros por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron registros';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refrescar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Alternar';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-CR']);

	/**
	 * Bootstrap Table Spanish Spain translation
	 * Author: Marc Pina<iwalkalone69@gmail.com>
	 */

	$.fn.bootstrapTable.locales['es-ES'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Por favor espere';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " resultados por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando desde ".concat(pageFrom, " hasta ").concat(pageTo, " - En total ").concat(totalRows, " resultados (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando desde ".concat(pageFrom, " hasta ").concat(pageTo, " - En total ").concat(totalRows, " resultados");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron resultados';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Ocultar/Mostrar paginación';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refrescar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Ocultar/Mostrar';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todos';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Exportar los datos';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Búsqueda avanzada';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Cerrar';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-ES']);

	/**
	 * Bootstrap Table Spanish (México) translation (Obtenido de traducción de Argentina)
	 * Author: Felix Vera (felix.vera@gmail.com)
	 * Copiado: Mauricio Vera (mauricioa.vera@gmail.com)
	 * Revisión: J Manuel Corona (jmcg92@gmail.com) (13/Feb/2018).
	 */

	$.fn.bootstrapTable.locales['es-MX'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, espere por favor';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " registros por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Mostrando ".concat(totalRows, " filas");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron registros que coincidan';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Mostrar/ocultar paginación';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Actualizar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Cambiar vista';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Pantalla completa';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-MX']);

	/**
	 * Bootstrap Table Spanish (Nicaragua) translation
	 * Author: Dennis Hernández (http://djhvscf.github.io/Blog/)
	 */

	$.fn.bootstrapTable.locales['es-NI'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, por favor espere';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " registros por p\xE1gina");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se encontraron registros';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Refrescar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Alternar';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-NI']);

	/**
	 * Bootstrap Table Spanish (España) translation
	 * Author: Antonio Pérez <anpegar@gmail.com>
	 */

	$.fn.bootstrapTable.locales['es-SP'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Cargando, por favor espera';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " registros por p&#225;gina.");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "".concat(pageFrom, " - ").concat(pageTo, " de ").concat(totalRows, " registros (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "".concat(pageFrom, " - ").concat(pageTo, " de ").concat(totalRows, " registros.");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Limpiar búsqueda';
	  },
	  formatSearch: function formatSearch() {
	    return 'Buscar';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'No se han encontrado registros.';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Hide/Show pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Actualizar';
	  },
	  formatToggle: function formatToggle() {
	    return 'Alternar';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Columnas';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Todo';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-SP']);

	/**
	 * Bootstrap Table Estonian translation
	 * Author: kristjan@logist.it>
	 */

	$.fn.bootstrapTable.locales['et-EE'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Päring käib, palun oota';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " rida lehe kohta");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "N\xE4itan tulemusi ".concat(pageFrom, " kuni ").concat(pageTo, " - kokku ").concat(totalRows, " tulemust (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "N\xE4itan tulemusi ".concat(pageFrom, " kuni ").concat(pageTo, " - kokku ").concat(totalRows, " tulemust");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Otsi';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Päringu tingimustele ei vastanud ühtegi tulemust';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Näita/Peida lehtedeks jagamine';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Värskenda';
	  },
	  formatToggle: function formatToggle() {
	    return 'Lülita';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Veerud';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Kõik';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['et-EE']);

	/**
	 * Bootstrap Table Basque (Basque Country) translation
	 * Author: Iker Ibarguren Berasaluze<ikerib@gmail.com>
	 */

	$.fn.bootstrapTable.locales['eu-EU'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Itxaron mesedez';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " emaitza orriko.");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "".concat(totalRows, " erregistroetatik ").concat(pageFrom, "etik ").concat(pageTo, "erakoak erakusten (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "".concat(totalRows, " erregistroetatik ").concat(pageFrom, "etik ").concat(pageTo, "erakoak erakusten.");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'Bilatu';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Ez da emaitzarik aurkitu';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Ezkutatu/Erakutsi orrikatzea';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Eguneratu';
	  },
	  formatToggle: function formatToggle() {
	    return 'Ezkutatu/Erakutsi';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Zutabeak';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Guztiak';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['eu-EU']);

	/**
	 * Bootstrap Table Persian translation
	 * Author: MJ Vakili <mjv.1989@Gmail.com>
	 */

	$.fn.bootstrapTable.locales['fa-IR'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'در حال بارگذاری, لطفا صبر کنید';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " \u0631\u06A9\u0648\u0631\u062F \u062F\u0631 \u0635\u0641\u062D\u0647");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "\u0646\u0645\u0627\u06CC\u0634 ".concat(pageFrom, " \u062A\u0627 ").concat(pageTo, " \u0627\u0632 ").concat(totalRows, " \u0631\u062F\u06CC\u0641 (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "\u0646\u0645\u0627\u06CC\u0634 ".concat(pageFrom, " \u062A\u0627 ").concat(pageTo, " \u0627\u0632 ").concat(totalRows, " \u0631\u062F\u06CC\u0641");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Clear Search';
	  },
	  formatSearch: function formatSearch() {
	    return 'جستجو';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'رکوردی یافت نشد.';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'نمایش/مخفی صفحه بندی';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'به روز رسانی';
	  },
	  formatToggle: function formatToggle() {
	    return 'تغییر نمایش';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'سطر ها';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'همه';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Export data';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fa-IR']);

	/**
	 * Bootstrap Table Finnish translations
	 * Author: Minna Lehtomäki <minna.j.lehtomaki@gmail.com>
	 */

	$.fn.bootstrapTable.locales['fi-FI'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Ladataan, ole hyvä ja odota';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " rivi\xE4 sivulla");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "N\xE4ytet\xE4\xE4n rivit ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)");
	    }

	    return "N\xE4ytet\xE4\xE4n rivit ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows);
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'previous page';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "to page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'next page';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Showing ".concat(totalRows, " rows");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Poista suodattimet';
	  },
	  formatSearch: function formatSearch() {
	    return 'Hae';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Hakuehtoja vastaavia tuloksia ei löytynyt';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Näytä/Piilota sivutus';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Show pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Hide pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Päivitä';
	  },
	  formatToggle: function formatToggle() {
	    return 'Valitse';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Show card view';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Hide card view';
	  },
	  formatColumns: function formatColumns() {
	    return 'Sarakkeet';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Toggle all';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Fullscreen';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Kaikki';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Auto Refresh';
	  },
	  formatExport: function formatExport() {
	    return 'Vie tiedot';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'GO';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Advanced search';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Close';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fi-FI']);

	/**
	 * Bootstrap Table French (Belgium) translation
	 * Author: Julien Bisconti (julien.bisconti@gmail.com)
	 *         Nevets82 <Nevets82@gmail.com>
	 */

	$.fn.bootstrapTable.locales['fr-BE'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Chargement en cours';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " lignes par page");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9s \xE0 partir de ").concat(totalNotFiltered, " lignes)");
	    }

	    return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'page précédente';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "vers la page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'page suivante';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Affiche ".concat(totalRows, " lignes");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Effacer la recherche';
	  },
	  formatSearch: function formatSearch() {
	    return 'Recherche';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Pas de lignes trouvés';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Cacher/Afficher pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Afficher pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Cacher pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Rafraichir';
	  },
	  formatToggle: function formatToggle() {
	    return 'Basculer';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Afficher vue carte';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Cacher vue carte';
	  },
	  formatColumns: function formatColumns() {
	    return 'Colonnes';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Tout basculer';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Plein écran';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Tout';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Rafraîchissement automatique';
	  },
	  formatExport: function formatExport() {
	    return 'Exporter les données';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'Aller à';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Recherche avancée';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Fermer';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-BE']);

	/**
	 * Bootstrap Table French (Suisse) translation
	 * Author: Nevets82 <Nevets82@gmail.com>
	 */

	$.fn.bootstrapTable.locales['fr-CH'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Chargement en cours';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " lignes par page");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9s \xE0 partir de ").concat(totalNotFiltered, " lignes)");
	    }

	    return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'page précédente';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "vers la page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'page suivante';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Affiche ".concat(totalRows, " lignes");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Effacer la recherche';
	  },
	  formatSearch: function formatSearch() {
	    return 'Recherche';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Pas de lignes trouvés';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Cacher/Afficher pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Afficher pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Cacher pagination';
	  },
	  formatRefresh: function formatRefresh() {
	    return 'Rafraichir';
	  },
	  formatToggle: function formatToggle() {
	    return 'Basculer';
	  },
	  formatToggleOn: function formatToggleOn() {
	    return 'Afficher vue carte';
	  },
	  formatToggleOff: function formatToggleOff() {
	    return 'Cacher vue carte';
	  },
	  formatColumns: function formatColumns() {
	    return 'Colonnes';
	  },
	  formatColumnsToggleAll: function formatColumnsToggleAll() {
	    return 'Tout basculer';
	  },
	  formatFullscreen: function formatFullscreen() {
	    return 'Plein écran';
	  },
	  formatAllRows: function formatAllRows() {
	    return 'Tout';
	  },
	  formatAutoRefresh: function formatAutoRefresh() {
	    return 'Rafraîchissement automatique';
	  },
	  formatExport: function formatExport() {
	    return 'Exporter les données';
	  },
	  formatJumpTo: function formatJumpTo() {
	    return 'Aller à';
	  },
	  formatAdvancedSearch: function formatAdvancedSearch() {
	    return 'Recherche avancée';
	  },
	  formatAdvancedCloseButton: function formatAdvancedCloseButton() {
	    return 'Fermer';
	  }
	};
	$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-CH']);

	/**
	 * Bootstrap Table French (France) translation
	 * Author: Dennis Hernández (http://djhvscf.github.io/Blog/)
	 *         Tidalf (https://github.com/TidalfFR)
	 *         Nevets82 <Nevets82@gmail.com>
	 */

	$.fn.bootstrapTable.locales['fr-FR'] = {
	  formatLoadingMessage: function formatLoadingMessage() {
	    return 'Chargement en cours';
	  },
	  formatRecordsPerPage: function formatRecordsPerPage(pageNumber) {
	    return "".concat(pageNumber, " lignes par page");
	  },
	  formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) {
	    if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) {
	      return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9s \xE0 partir de ").concat(totalNotFiltered, " lignes)");
	    }

	    return "Affiche de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes");
	  },
	  formatSRPaginationPreText: function formatSRPaginationPreText() {
	    return 'page précédente';
	  },
	  formatSRPaginationPageText: function formatSRPaginationPageText(page) {
	    return "vers la page ".concat(page);
	  },
	  formatSRPaginationNextText: function formatSRPaginationNextText() {
	    return 'page suivante';
	  },
	  formatDetailPagination: function formatDetailPagination(totalRows) {
	    return "Affiche ".concat(totalRows, " lignes");
	  },
	  formatClearSearch: function formatClearSearch() {
	    return 'Effacer la recherche';
	  },
	  formatSearch: function formatSearch() {
	    return 'Recherche';
	  },
	  formatNoMatches: function formatNoMatches() {
	    return 'Pas de lignes trouvés';
	  },
	  formatPaginationSwitch: function formatPaginationSwitch() {
	    return 'Cacher/Afficher pagination';
	  },
	  formatPaginationSwitchDown: function formatPaginationSwitchDown() {
	    return 'Afficher pagination';
	  },
	  formatPaginationSwitchUp: function formatPaginationSwitchUp() {
	    return 'Cach
Download .txt
gitextract_q1xzow4c/

├── .gitattributes
├── .idea/
│   ├── .gitignore
│   ├── goadmin.iml
│   ├── misc.xml
│   └── modules.xml
├── License
├── README.en.md
├── README.md
├── boot/
│   ├── boot.go
│   └── module.go
├── config/
│   └── config.toml
├── go.mod
├── go.sum
├── main.go
├── middleware/
│   └── rtoken/
│       ├── rtoken.go
│       ├── rtoken_cache.go
│       └── rtoken_resp.go
├── module/
│   ├── home/
│   │   ├── config/
│   │   │   └── router.go
│   │   ├── controller/
│   │   │   └── dashboard_controller.go
│   │   └── module.go
│   ├── public/
│   │   ├── config/
│   │   │   └── router.go
│   │   ├── controller/
│   │   │   └── login_controller.go
│   │   ├── model/
│   │   │   └── sys_login_user_model.go
│   │   └── module.go
│   └── sys/
│       ├── config/
│       │   └── router.go
│       ├── controller/
│       │   ├── sys_config_controller.go
│       │   ├── sys_oss_controller.go
│       │   └── sys_user_controller.go
│       ├── model/
│       │   ├── sys_config_model.go
│       │   ├── sys_oss_cloud.go
│       │   ├── sys_oss_model.go
│       │   └── sys_user_model.go
│       └── module.go
├── public/
│   ├── modules/
│   │   ├── common.js
│   │   └── sys/
│   │       ├── config.js
│   │       ├── oss.js
│   │       └── user.js
│   ├── plugins/
│   │   ├── ajaxupload/
│   │   │   └── ajaxupload.js
│   │   └── table/
│   │       ├── bootstrap-table-locale-all.js
│   │       ├── bootstrap-table-vue.esm.js
│   │       ├── bootstrap-table-vue.js
│   │       ├── bootstrap-table.css
│   │       ├── bootstrap-table.js
│   │       ├── extensions/
│   │       │   ├── accent-neutralise/
│   │       │   │   └── bootstrap-table-accent-neutralise.js
│   │       │   ├── addrbar/
│   │       │   │   └── bootstrap-table-addrbar.js
│   │       │   ├── auto-refresh/
│   │       │   │   └── bootstrap-table-auto-refresh.js
│   │       │   ├── cell-input/
│   │       │   │   ├── bootstrap-table-cell-input.css
│   │       │   │   └── bootstrap-table-cell-input.js
│   │       │   ├── cookie/
│   │       │   │   └── bootstrap-table-cookie.js
│   │       │   ├── copy-rows/
│   │       │   │   └── bootstrap-table-copy-rows.js
│   │       │   ├── defer-url/
│   │       │   │   └── bootstrap-table-defer-url.js
│   │       │   ├── editable/
│   │       │   │   └── bootstrap-table-editable.js
│   │       │   ├── export/
│   │       │   │   └── bootstrap-table-export.js
│   │       │   ├── filter-control/
│   │       │   │   ├── bootstrap-table-filter-control.css
│   │       │   │   └── bootstrap-table-filter-control.js
│   │       │   ├── fixed-columns/
│   │       │   │   ├── bootstrap-table-fixed-columns.css
│   │       │   │   └── bootstrap-table-fixed-columns.js
│   │       │   ├── group-by-v2/
│   │       │   │   ├── bootstrap-table-group-by.css
│   │       │   │   └── bootstrap-table-group-by.js
│   │       │   ├── i18n-enhance/
│   │       │   │   └── bootstrap-table-i18n-enhance.js
│   │       │   ├── key-events/
│   │       │   │   └── bootstrap-table-key-events.js
│   │       │   ├── mobile/
│   │       │   │   └── bootstrap-table-mobile.js
│   │       │   ├── multiple-sort/
│   │       │   │   └── bootstrap-table-multiple-sort.js
│   │       │   ├── natural-sorting/
│   │       │   │   └── bootstrap-table-natural-sorting.js
│   │       │   ├── page-jump-to/
│   │       │   │   ├── bootstrap-table-page-jump-to.css
│   │       │   │   └── bootstrap-table-page-jump-to.js
│   │       │   ├── pipeline/
│   │       │   │   └── bootstrap-table-pipeline.js
│   │       │   ├── print/
│   │       │   │   └── bootstrap-table-print.js
│   │       │   ├── reorder-columns/
│   │       │   │   └── bootstrap-table-reorder-columns.js
│   │       │   ├── reorder-rows/
│   │       │   │   ├── bootstrap-table-reorder-rows.css
│   │       │   │   └── bootstrap-table-reorder-rows.js
│   │       │   ├── resizable/
│   │       │   │   └── bootstrap-table-resizable.js
│   │       │   ├── sticky-header/
│   │       │   │   ├── bootstrap-table-sticky-header.css
│   │       │   │   └── bootstrap-table-sticky-header.js
│   │       │   ├── toolbar/
│   │       │   │   └── bootstrap-table-toolbar.js
│   │       │   └── treegrid/
│   │       │       └── bootstrap-table-treegrid.js
│   │       ├── locale/
│   │       │   ├── bootstrap-table-af-ZA.js
│   │       │   ├── bootstrap-table-ar-SA.js
│   │       │   ├── bootstrap-table-ca-ES.js
│   │       │   ├── bootstrap-table-cs-CZ.js
│   │       │   ├── bootstrap-table-da-DK.js
│   │       │   ├── bootstrap-table-de-DE.js
│   │       │   ├── bootstrap-table-el-GR.js
│   │       │   ├── bootstrap-table-en-US.js
│   │       │   ├── bootstrap-table-es-AR.js
│   │       │   ├── bootstrap-table-es-CL.js
│   │       │   ├── bootstrap-table-es-CR.js
│   │       │   ├── bootstrap-table-es-ES.js
│   │       │   ├── bootstrap-table-es-MX.js
│   │       │   ├── bootstrap-table-es-NI.js
│   │       │   ├── bootstrap-table-es-SP.js
│   │       │   ├── bootstrap-table-et-EE.js
│   │       │   ├── bootstrap-table-eu-EU.js
│   │       │   ├── bootstrap-table-fa-IR.js
│   │       │   ├── bootstrap-table-fi-FI.js
│   │       │   ├── bootstrap-table-fr-BE.js
│   │       │   ├── bootstrap-table-fr-CH.js
│   │       │   ├── bootstrap-table-fr-FR.js
│   │       │   ├── bootstrap-table-fr-LU.js
│   │       │   ├── bootstrap-table-he-IL.js
│   │       │   ├── bootstrap-table-hr-HR.js
│   │       │   ├── bootstrap-table-hu-HU.js
│   │       │   ├── bootstrap-table-id-ID.js
│   │       │   ├── bootstrap-table-it-IT.js
│   │       │   ├── bootstrap-table-ja-JP.js
│   │       │   ├── bootstrap-table-ka-GE.js
│   │       │   ├── bootstrap-table-ko-KR.js
│   │       │   ├── bootstrap-table-ms-MY.js
│   │       │   ├── bootstrap-table-nb-NO.js
│   │       │   ├── bootstrap-table-nl-BE.js
│   │       │   ├── bootstrap-table-nl-NL.js
│   │       │   ├── bootstrap-table-pl-PL.js
│   │       │   ├── bootstrap-table-pt-BR.js
│   │       │   ├── bootstrap-table-pt-PT.js
│   │       │   ├── bootstrap-table-ro-RO.js
│   │       │   ├── bootstrap-table-ru-RU.js
│   │       │   ├── bootstrap-table-sk-SK.js
│   │       │   ├── bootstrap-table-sr-Cyrl-RS.js
│   │       │   ├── bootstrap-table-sr-Latn-RS.js
│   │       │   ├── bootstrap-table-sv-SE.js
│   │       │   ├── bootstrap-table-th-TH.js
│   │       │   ├── bootstrap-table-tr-TR.js
│   │       │   ├── bootstrap-table-uk-UA.js
│   │       │   ├── bootstrap-table-ur-PK.js
│   │       │   ├── bootstrap-table-uz-Latn-UZ.js
│   │       │   ├── bootstrap-table-vi-VN.js
│   │       │   ├── bootstrap-table-zh-CN.js
│   │       │   └── bootstrap-table-zh-TW.js
│   │       └── themes/
│   │           ├── bulma/
│   │           │   ├── bootstrap-table-bulma.css
│   │           │   └── bootstrap-table-bulma.js
│   │           ├── foundation/
│   │           │   ├── bootstrap-table-foundation.css
│   │           │   └── bootstrap-table-foundation.js
│   │           ├── materialize/
│   │           │   ├── bootstrap-table-materialize.css
│   │           │   └── bootstrap-table-materialize.js
│   │           └── semantic/
│   │               ├── bootstrap-table-semantic.css
│   │               └── bootstrap-table-semantic.js
│   └── stisla/
│       ├── css/
│       │   ├── components.css
│       │   ├── custom.css
│       │   ├── reverse.css
│       │   ├── rtl.css
│       │   ├── skins/
│       │   │   └── reverse.css
│       │   └── style.css
│       ├── fonts/
│       │   └── vazir/
│       │       ├── LICENSE
│       │       └── font-face.css
│       └── js/
│           ├── custom.js
│           ├── page/
│           │   ├── auth-register.js
│           │   ├── bootstrap-modal.js
│           │   ├── components-chat-box.js
│           │   ├── components-multiple-upload.js
│           │   ├── components-statistic.js
│           │   ├── components-table.js
│           │   ├── components-user.js
│           │   ├── features-post-create.js
│           │   ├── features-posts.js
│           │   ├── features-setting-detail.js
│           │   ├── forms-advanced-forms.js
│           │   ├── gmaps-advanced-route.js
│           │   ├── gmaps-draggable-marker.js
│           │   ├── gmaps-geocoding.js
│           │   ├── gmaps-geolocation.js
│           │   ├── gmaps-marker.js
│           │   ├── gmaps-multiple-marker.js
│           │   ├── gmaps-route.js
│           │   ├── gmaps-simple.js
│           │   ├── index-0.js
│           │   ├── index.js
│           │   ├── modules-calendar.js
│           │   ├── modules-chartjs.js
│           │   ├── modules-datatables.js
│           │   ├── modules-ion-icons.js
│           │   ├── modules-slider.js
│           │   ├── modules-sparkline.js
│           │   ├── modules-sweetalert.js
│           │   ├── modules-toastr.js
│           │   ├── modules-vector-map.js
│           │   └── utilities-contact.js
│           ├── scripts.js
│           └── stisla.js
├── sql/
│   └── goadmin.sql
├── template/
│   ├── home/
│   │   └── index.html
│   ├── layout/
│   │   ├── footer.html
│   │   ├── header.html
│   │   └── nav.html
│   ├── public/
│   │   └── login.html
│   └── sys/
│       ├── config.html
│       ├── oss.html
│       └── user.html
└── utils/
    ├── base/
    │   ├── baseForm.go
    │   ├── baseModel.go
    │   └── baseRouter.go
    ├── bean/
    │   └── SessionUser.go
    ├── cloud/
    │   └── oss.go
    ├── resp/
    │   └── resp.go
    ├── time.go
    └── tools/
        ├── gid.go
        └── redis.go
Download .txt
SYMBOL INDEX (582 symbols across 124 files)

FILE: boot/boot.go
  function init (line 13) | func init() {
  function InitConfig (line 31) | func InitConfig() {

FILE: boot/module.go
  function InitModules (line 9) | func InitModules() {

FILE: main.go
  function main (line 8) | func main() {

FILE: middleware/rtoken/rtoken.go
  constant CacheModeCache (line 19) | CacheModeCache = 1
  constant CacheModeRedis (line 20) | CacheModeRedis = 2
  type RfToken (line 24) | type RfToken struct
    method Init (line 62) | func (m *RfToken) Init() bool {
    method Start (line 159) | func (m *RfToken) Start() bool {
    method Stop (line 204) | func (m *RfToken) Stop() bool {
    method GetTokenData (line 210) | func (m *RfToken) GetTokenData(r *ghttp.Request) Resp {
    method Login (line 221) | func (m *RfToken) Login(r *ghttp.Request) {
    method Logout (line 232) | func (m *RfToken) Logout(r *ghttp.Request) {
    method AuthMiddleware (line 246) | func (m *RfToken) AuthMiddleware(r *ghttp.Request) {
    method getRequestToken (line 265) | func (m *RfToken) getRequestToken(r *ghttp.Request) Resp {
    method genToken (line 293) | func (m *RfToken) genToken(userKey string, data interface{}) Resp {
    method validToken (line 317) | func (m *RfToken) validToken(token string) Resp {
    method removeToken (line 357) | func (m *RfToken) removeToken(token string) Resp {
    method EncryptToken (line 368) | func (m *RfToken) EncryptToken(userKey string) Resp {
    method DecryptToken (line 394) | func (m *RfToken) DecryptToken(token string) Resp {
    method String (line 422) | func (m *RfToken) String() string {

FILE: middleware/rtoken/rtoken_cache.go
  method setCache (line 13) | func (m *RfToken) setCache(cacheKey string, userCache g.Map) Resp {
  method getCache (line 36) | func (m *RfToken) getCache(cacheKey string) Resp {
  method removeCache (line 68) | func (m *RfToken) removeCache(cacheKey string) Resp {

FILE: middleware/rtoken/rtoken_resp.go
  constant SUCCESS (line 9) | SUCCESS      = 0
  constant FAIL (line 10) | FAIL         = -1
  constant ERROR (line 11) | ERROR        = -99
  constant UNAUTHORIZED (line 12) | UNAUTHORIZED = -401
  constant TypeConfig (line 14) | TypeConfig = 1
  constant TypeDict (line 16) | TypeDict = 2
  type Resp (line 19) | type Resp struct
    method Success (line 26) | func (resp Resp) Success() bool {
    method DataString (line 31) | func (resp Resp) DataString() string {
    method DataInt (line 36) | func (resp Resp) DataInt() int {
    method GetString (line 41) | func (resp Resp) GetString(key string) string {
    method GetInt (line 46) | func (resp Resp) GetInt(key string) int {
    method Get (line 51) | func (resp Resp) Get(key string) interface{} {
    method Json (line 59) | func (resp Resp) Json() string {
  function Succ (line 65) | func Succ(data interface{}) Resp {
  function Fail (line 70) | func Fail(msg string) Resp {
  function FailData (line 75) | func FailData(msg string, data interface{}) Resp {
  function Error (line 80) | func Error(msg string) Resp {
  function ErrorData (line 85) | func ErrorData(msg string, data interface{}) Resp {
  function Unauthorized (line 90) | func Unauthorized(msg string, data interface{}) Resp {

FILE: module/home/config/router.go
  function InitRouter (line 9) | func InitRouter() {

FILE: module/home/controller/dashboard_controller.go
  type DashboardController (line 9) | type DashboardController struct
    method Index (line 13) | func (controller *DashboardController) Index(r *ghttp.Request) {

FILE: module/home/module.go
  function InitModule (line 5) | func InitModule() {

FILE: module/public/config/router.go
  function InitRouter (line 8) | func InitRouter() {

FILE: module/public/controller/login_controller.go
  function Login (line 15) | func Login(r *ghttp.Request) {
  function LoginSubmit (line 24) | func LoginSubmit(r *ghttp.Request) (string, interface{}) {
  function LoginAfter (line 55) | func LoginAfter(r *ghttp.Request, respData rtoken.Resp) {
  function LogoutBefore (line 67) | func LogoutBefore(r *ghttp.Request) bool {

FILE: module/public/model/sys_login_user_model.go
  type SysLoginUser (line 21) | type SysLoginUser struct
    method GetUserByMobile (line 33) | func (model SysLoginUser) GetUserByMobile() SysLoginUser {
    method dbModel (line 45) | func (model SysLoginUser) dbModel(alias ...string) *gdb.Model {
    method PkVal (line 55) | func (model SysLoginUser) PkVal() int {
    method TableName (line 60) | func (model SysLoginUser) TableName() string {
    method columns (line 65) | func (model SysLoginUser) columns() string {

FILE: module/public/module.go
  function InitModule (line 5) | func InitModule() {

FILE: module/sys/config/router.go
  function InitRouter (line 17) | func InitRouter() {

FILE: module/sys/controller/sys_config_controller.go
  type SysConfigController (line 21) | type SysConfigController struct
    method Index (line 30) | func (controller *SysConfigController) Index(r *ghttp.Request) {
    method Get (line 35) | func (controller *SysConfigController) Get(r *ghttp.Request) {
    method Delete (line 45) | func (controller *SysConfigController) Delete(r *ghttp.Request) {
    method Save (line 55) | func (controller *SysConfigController) Save(r *ghttp.Request) {
    method Update (line 77) | func (controller *SysConfigController) Update(r *ghttp.Request) {
    method Page (line 99) | func (controller *SysConfigController) Page(r *ghttp.Request) {

FILE: module/sys/controller/sys_oss_controller.go
  type SysOssController (line 25) | type SysOssController struct
    method Index (line 35) | func (controller *SysOssController) Index(r *ghttp.Request) {
    method Get (line 40) | func (controller *SysOssController) Get(r *ghttp.Request) {
    method Delete (line 50) | func (controller *SysOssController) Delete(r *ghttp.Request) {
    method Save (line 60) | func (controller *SysOssController) Save(r *ghttp.Request) {
    method Update (line 82) | func (controller *SysOssController) Update(r *ghttp.Request) {
    method Page (line 104) | func (controller *SysOssController) Page(r *ghttp.Request) {
    method GetConfig (line 112) | func (controller *SysOssController) GetConfig(r *ghttp.Request) {
    method SaveConfig (line 121) | func (controller *SysOssController) SaveConfig(r *ghttp.Request) {
    method Upload (line 146) | func (controller *SysOssController) Upload(r *ghttp.Request) {

FILE: module/sys/controller/sys_user_controller.go
  type SysUserController (line 23) | type SysUserController struct
    method Index (line 32) | func (controller *SysUserController) Index(r *ghttp.Request) {
    method Get (line 37) | func (controller *SysUserController) Get(r *ghttp.Request) {
    method Delete (line 47) | func (controller *SysUserController) Delete(r *ghttp.Request) {
    method Save (line 57) | func (controller *SysUserController) Save(r *ghttp.Request) {
    method Update (line 88) | func (controller *SysUserController) Update(r *ghttp.Request) {
    method Page (line 119) | func (controller *SysUserController) Page(r *ghttp.Request) {

FILE: module/sys/model/sys_config_model.go
  type SysConfig (line 24) | type SysConfig struct
    method Insert (line 35) | func (model *SysConfig) Insert() int64 {
    method Delete (line 63) | func (model SysConfig) Delete() int64 {
    method Update (line 83) | func (model *SysConfig) Update() int64 {
    method UpdateByKey (line 99) | func (model *SysConfig) UpdateByKey() int64 {
    method GetByKey (line 116) | func (model SysConfig) GetByKey() SysConfig {
    method Get (line 132) | func (model SysConfig) Get() SysConfig {
    method Page (line 147) | func (model SysConfig) Page(form *base.BaseForm) []SysConfig {
    method dbModel (line 182) | func (model SysConfig) dbModel(alias ...string) *gdb.Model {
    method PkVal (line 192) | func (model SysConfig) PkVal() int {
    method TableName (line 197) | func (model SysConfig) TableName() string {
    method columns (line 202) | func (model SysConfig) columns() string {

FILE: module/sys/model/sys_oss_cloud.go
  type SysOssCloud (line 3) | type SysOssCloud struct

FILE: module/sys/model/sys_oss_model.go
  type SysOss (line 23) | type SysOss struct
    method Insert (line 32) | func (model *SysOss) Insert() int64 {
    method Delete (line 59) | func (model SysOss) Delete() int64 {
    method Update (line 78) | func (model *SysOss) Update() int64 {
    method Get (line 94) | func (model SysOss) Get() SysOss {
    method Page (line 109) | func (model SysOss) Page(form *base.BaseForm) []SysOss {
    method dbModel (line 144) | func (model SysOss) dbModel(alias ...string) *gdb.Model {
    method PkVal (line 154) | func (model SysOss) PkVal() int {
    method TableName (line 159) | func (model SysOss) TableName() string {
    method columns (line 164) | func (model SysOss) columns() string {

FILE: module/sys/model/sys_user_model.go
  type SysUser (line 24) | type SysUser struct
    method Insert (line 36) | func (model *SysUser) Insert() int64 {
    method Delete (line 63) | func (model SysUser) Delete() int64 {
    method Update (line 82) | func (model *SysUser) Update() int64 {
    method Get (line 98) | func (model SysUser) Get() SysUser {
    method Page (line 113) | func (model SysUser) Page(form *base.BaseForm) []SysUser {
    method dbModel (line 149) | func (model SysUser) dbModel(alias ...string) *gdb.Model {
    method PkVal (line 159) | func (model SysUser) PkVal() int {
    method TableName (line 164) | func (model SysUser) TableName() string {
    method columns (line 169) | func (model SysUser) columns() string {

FILE: module/sys/module.go
  function InitModule (line 13) | func InitModule() {

FILE: public/modules/common.js
  function getSelectedRow (line 59) | function getSelectedRow() {
  function getSelectedRows (line 78) | function getSelectedRows() {
  function isBlank (line 94) | function isBlank(value) {

FILE: public/modules/sys/config.js
  function addButtonFunc (line 3) | function addButtonFunc(value, row, index) {
  function queryParams (line 79) | function queryParams(params) {

FILE: public/modules/sys/oss.js
  function addButtonFunc (line 3) | function addButtonFunc(value, row, index) {
  function queryParams (line 66) | function queryParams(params) {

FILE: public/modules/sys/user.js
  function addButtonFunc (line 3) | function addButtonFunc(value, row, index) {
  function queryParams (line 75) | function queryParams(params) {

FILE: public/plugins/ajaxupload/ajaxupload.js
  function log (line 14) | function log(){
  function addEvent (line 27) | function addEvent(el, type, fn){
  function addResizeEvent (line 49) | function addResizeEvent(fn){
  function getBox (line 116) | function getBox(el){
  function addStyles (line 139) | function addStyles(el, styles){
  function copyLayout (line 154) | function copyLayout(from, to){
  function fileFromPath (line 195) | function fileFromPath(file){
  function getExt (line 204) | function getExt(file){
  function hasClass (line 208) | function hasClass(el, name){
  function addClass (line 212) | function addClass(el, name){
  function removeClass (line 217) | function removeClass(el, name){
  function removeNode (line 222) | function removeNode(el){

FILE: public/plugins/table/bootstrap-table-locale-all.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/bootstrap-table-vue.esm.js
  function createCommonjsModule (line 3) | function createCommonjsModule(fn, module) {
  function F (line 1155) | function F() { /* empty */ }
  function _defineProperty (line 1515) | function _defineProperty(obj, key, value) {
  function _objectSpread (line 1530) | function _objectSpread(target) {
  function _toConsumableArray (line 1549) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 1553) | function _arrayWithoutHoles(arr) {
  function _iterableToArray (line 1561) | function _iterableToArray(iter) {
  function _nonIterableSpread (line 1565) | function _nonIterableSpread() {
  function normalizeComponent (line 1686) | function normalizeComponent(template, style, script, scopeId, isFunction...

FILE: public/plugins/table/bootstrap-table-vue.js
  function createCommonjsModule (line 9) | function createCommonjsModule(fn, module) {
  function F (line 1161) | function F() { /* empty */ }
  function _defineProperty (line 1521) | function _defineProperty(obj, key, value) {
  function _objectSpread (line 1536) | function _objectSpread(target) {
  function _toConsumableArray (line 1555) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 1559) | function _arrayWithoutHoles(arr) {
  function _iterableToArray (line 1567) | function _iterableToArray(iter) {
  function _nonIterableSpread (line 1571) | function _nonIterableSpread() {
  function normalizeComponent (line 1692) | function normalizeComponent(template, style, script, scopeId, isFunction...

FILE: public/plugins/table/bootstrap-table.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1256) | function F() { /* empty */ }
  function getSubstitution (line 2238) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _typeof (line 2543) | function _typeof(obj) {
  function _classCallCheck (line 2557) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 2563) | function _defineProperties(target, props) {
  function _createClass (line 2573) | function _createClass(Constructor, protoProps, staticProps) {
  function _slicedToArray (line 2579) | function _slicedToArray(arr, i) {
  function _toConsumableArray (line 2583) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 2587) | function _arrayWithoutHoles(arr) {
  function _arrayWithHoles (line 2595) | function _arrayWithHoles(arr) {
  function _iterableToArray (line 2599) | function _iterableToArray(iter) {
  function _iterableToArrayLimit (line 2603) | function _iterableToArrayLimit(arr, i) {
  function _nonIterableSpread (line 2629) | function _nonIterableSpread() {
  function _nonIterableRest (line 2633) | function _nonIterableRest() {
  function VirtualScroll (line 3660) | function VirtualScroll(options) {
  function BootstrapTable (line 3809) | function BootstrapTable(el, options) {

FILE: public/plugins/table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1214) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 1248) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1254) | function _defineProperties(target, props) {
  function _createClass (line 1264) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1270) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1285) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1292) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1301) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1309) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1317) | function _superPropBase(object, property) {
  function _get (line 1326) | function _get(target, property, receiver) {
  function _slicedToArray (line 1347) | function _slicedToArray(arr, i) {
  function _arrayWithHoles (line 1351) | function _arrayWithHoles(arr) {
  function _iterableToArrayLimit (line 1355) | function _iterableToArrayLimit(arr, i) {
  function _nonIterableRest (line 1381) | function _nonIterableRest() {
  function _class (line 1680) | function _class() {

FILE: public/plugins/table/extensions/addrbar/bootstrap-table-addrbar.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1144) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 1213) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1219) | function _defineProperties(target, props) {
  function _createClass (line 1229) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1235) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1250) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1257) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1266) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1274) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1282) | function _superPropBase(object, property) {
  function _get (line 1291) | function _get(target, property, receiver) {
  function _slicedToArray (line 1312) | function _slicedToArray(arr, i) {
  function _arrayWithHoles (line 1316) | function _arrayWithHoles(arr) {
  function _iterableToArrayLimit (line 1320) | function _iterableToArrayLimit(arr, i) {
  function _nonIterableRest (line 1346) | function _nonIterableRest() {
  function _GET (line 1364) | function _GET(key) {
  function _buildUrl (line 1395) | function _buildUrl(dict) {
  function _class (line 1432) | function _class() {

FILE: public/plugins/table/extensions/auto-refresh/bootstrap-table-auto-refresh.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 816) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 822) | function _defineProperties(target, props) {
  function _createClass (line 832) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 838) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 853) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 860) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 869) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 877) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 885) | function _superPropBase(object, property) {
  function _get (line 894) | function _get(target, property, receiver) {
  function _class (line 947) | function _class() {

FILE: public/plugins/table/extensions/cell-input/bootstrap-table-cell-input.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1183) | function F() { /* empty */ }
  function getSubstitution (line 1800) | function getSubstitution(matched, str, position, captures, namedCaptures...

FILE: public/plugins/table/extensions/cookie/bootstrap-table-cookie.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1137) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 1348) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1354) | function _defineProperties(target, props) {
  function _createClass (line 1364) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1370) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1385) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1392) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1401) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1409) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1417) | function _superPropBase(object, property) {
  function _get (line 1426) | function _get(target, property, receiver) {
  function _class (line 1677) | function _class() {

FILE: public/plugins/table/extensions/copy-rows/bootstrap-table-copy-rows.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 837) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 843) | function _defineProperties(target, props) {
  function _createClass (line 853) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 859) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 874) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 881) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 890) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 898) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 906) | function _superPropBase(object, property) {
  function _get (line 915) | function _get(target, property, receiver) {
  function _class (line 977) | function _class() {

FILE: public/plugins/table/extensions/defer-url/bootstrap-table-defer-url.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 630) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 636) | function _defineProperties(target, props) {
  function _createClass (line 646) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 652) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 667) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 674) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 683) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 691) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 699) | function _superPropBase(object, property) {
  function _get (line 708) | function _get(target, property, receiver) {
  function _class (line 753) | function _class() {

FILE: public/plugins/table/extensions/editable/bootstrap-table-editable.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1144) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 1178) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1184) | function _defineProperties(target, props) {
  function _createClass (line 1194) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1200) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1215) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1222) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1231) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1239) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1247) | function _superPropBase(object, property) {
  function _get (line 1256) | function _get(target, property, receiver) {
  function _class (line 1310) | function _class() {

FILE: public/plugins/table/extensions/export/bootstrap-table-export.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1183) | function F() { /* empty */ }
  function getSubstitution (line 1812) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 2070) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 2076) | function _defineProperties(target, props) {
  function _createClass (line 2086) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 2092) | function _defineProperty(obj, key, value) {
  function _inherits (line 2107) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 2122) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 2129) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 2138) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 2146) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 2154) | function _superPropBase(object, property) {
  function _get (line 2163) | function _get(target, property, receiver) {
  function _class (line 2249) | function _class() {

FILE: public/plugins/table/extensions/filter-control/bootstrap-table-filter-control.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1292) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _typeof (line 1566) | function _typeof(obj) {
  function _classCallCheck (line 1580) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1586) | function _defineProperties(target, props) {
  function _createClass (line 1596) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1602) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1617) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1624) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1633) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1641) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1649) | function _superPropBase(object, property) {
  function _get (line 1658) | function _get(target, property, receiver) {
  function _class (line 2228) | function _class() {

FILE: public/plugins/table/extensions/fixed-columns/bootstrap-table-fixed-columns.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1104) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function _classCallCheck (line 1138) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1144) | function _defineProperties(target, props) {
  function _createClass (line 1154) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1160) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1175) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1182) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1191) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1199) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1207) | function _superPropBase(object, property) {
  function _get (line 1216) | function _get(target, property, receiver) {
  function _class (line 1251) | function _class() {

FILE: public/plugins/table/extensions/group-by-v2/bootstrap-table-group-by.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1175) | function getSubstitution(matched, str, position, captures, namedCaptures...

FILE: public/plugins/table/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js
  function _classCallCheck (line 9) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 15) | function _defineProperties(target, props) {
  function _createClass (line 25) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 31) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 46) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 53) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 62) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 70) | function _possibleConstructorReturn(self, call) {
  function _class (line 91) | function _class() {

FILE: public/plugins/table/extensions/key-events/bootstrap-table-key-events.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 1023) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1029) | function _defineProperties(target, props) {
  function _createClass (line 1039) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1045) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1060) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1067) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1076) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1084) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1092) | function _superPropBase(object, property) {
  function _get (line 1101) | function _get(target, property, receiver) {
  function _class (line 1137) | function _class() {

FILE: public/plugins/table/extensions/mobile/bootstrap-table-mobile.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 912) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 918) | function _defineProperties(target, props) {
  function _createClass (line 928) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 934) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 949) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 956) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 965) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 973) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 981) | function _superPropBase(object, property) {
  function _get (line 990) | function _get(target, property, receiver) {
  function _class (line 1049) | function _class() {

FILE: public/plugins/table/extensions/multiple-sort/bootstrap-table-multiple-sort.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _typeof (line 1426) | function _typeof(obj) {

FILE: public/plugins/table/extensions/natural-sorting/bootstrap-table-natural-sorting.js
  function createCommonjsModule (line 22) | function createCommonjsModule(fn, module) {
  function getSubstitution (line 1153) | function getSubstitution(matched, str, position, captures, namedCaptures...
  function alphanum (line 1196) | function alphanum(a, b) {
  function numericOnly (line 1249) | function numericOnly(a, b) {

FILE: public/plugins/table/extensions/page-jump-to/bootstrap-table-page-jump-to.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 816) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 822) | function _defineProperties(target, props) {
  function _createClass (line 832) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 838) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 853) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 860) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 869) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 877) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 885) | function _superPropBase(object, property) {
  function _get (line 894) | function _get(target, property, receiver) {
  function _class (line 936) | function _class() {

FILE: public/plugins/table/extensions/pipeline/bootstrap-table-pipeline.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/extensions/print/bootstrap-table-print.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1195) | function F() { /* empty */ }
  function _classCallCheck (line 1649) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1655) | function _defineProperties(target, props) {
  function _createClass (line 1665) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1671) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1686) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1693) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1702) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1710) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1718) | function _superPropBase(object, property) {
  function _get (line 1727) | function _get(target, property, receiver) {
  function printPageBuilderDefault (line 1754) | function printPageBuilderDefault(table) {
  function _class (line 1783) | function _class() {

FILE: public/plugins/table/extensions/reorder-columns/bootstrap-table-reorder-columns.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/extensions/reorder-rows/bootstrap-table-reorder-rows.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/extensions/resizable/bootstrap-table-resizable.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/extensions/sticky-header/bootstrap-table-sticky-header.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 816) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 822) | function _defineProperties(target, props) {
  function _createClass (line 832) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 838) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 853) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 860) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 869) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 877) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 885) | function _superPropBase(object, property) {
  function _get (line 894) | function _get(target, property, receiver) {
  function _class (line 937) | function _class() {

FILE: public/plugins/table/extensions/toolbar/bootstrap-table-toolbar.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1236) | function F() { /* empty */ }
  function _classCallCheck (line 1945) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1951) | function _defineProperties(target, props) {
  function _createClass (line 1961) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1967) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1982) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1989) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1998) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 2006) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 2014) | function _superPropBase(object, property) {
  function _get (line 2023) | function _get(target, property, receiver) {
  function _slicedToArray (line 2044) | function _slicedToArray(arr, i) {
  function _arrayWithHoles (line 2048) | function _arrayWithHoles(arr) {
  function _iterableToArrayLimit (line 2052) | function _iterableToArrayLimit(arr, i) {
  function _nonIterableRest (line 2078) | function _nonIterableRest() {
  function _class (line 2139) | function _class() {

FILE: public/plugins/table/extensions/treegrid/bootstrap-table-treegrid.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function F (line 1175) | function F() { /* empty */ }
  function _classCallCheck (line 1556) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 1562) | function _defineProperties(target, props) {
  function _createClass (line 1572) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 1578) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 1593) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 1600) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 1609) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 1617) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 1625) | function _superPropBase(object, property) {
  function _get (line 1634) | function _get(target, property, receiver) {
  function _class (line 1673) | function _class() {

FILE: public/plugins/table/locale/bootstrap-table-af-ZA.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ar-SA.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ca-ES.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-cs-CZ.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-da-DK.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-de-DE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-el-GR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-en-US.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-AR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-CL.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-CR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-ES.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-MX.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-NI.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-es-SP.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-et-EE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-eu-EU.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fa-IR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fi-FI.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fr-BE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fr-CH.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fr-FR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-fr-LU.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-he-IL.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-hr-HR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-hu-HU.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-id-ID.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-it-IT.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ja-JP.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ka-GE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ko-KR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ms-MY.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-nb-NO.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-nl-BE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-nl-NL.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-pl-PL.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-pt-BR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-pt-PT.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ro-RO.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ru-RU.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-sk-SK.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-sr-Cyrl-RS.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-sr-Latn-RS.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-sv-SE.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-th-TH.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-tr-TR.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-uk-UA.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-ur-PK.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-uz-Latn-UZ.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-vi-VN.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-zh-CN.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/locale/bootstrap-table-zh-TW.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {

FILE: public/plugins/table/themes/bulma/bootstrap-table-bulma.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 752) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 758) | function _defineProperties(target, props) {
  function _createClass (line 768) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 774) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 789) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 796) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 805) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 813) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 821) | function _superPropBase(object, property) {
  function _get (line 830) | function _get(target, property, receiver) {
  function _class (line 869) | function _class() {

FILE: public/plugins/table/themes/foundation/bootstrap-table-foundation.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 752) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 758) | function _defineProperties(target, props) {
  function _createClass (line 768) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 774) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 789) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 796) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 805) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 813) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 821) | function _superPropBase(object, property) {
  function _get (line 830) | function _get(target, property, receiver) {
  function _class (line 869) | function _class() {

FILE: public/plugins/table/themes/materialize/bootstrap-table-materialize.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 752) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 758) | function _defineProperties(target, props) {
  function _createClass (line 768) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 774) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 789) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 796) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 805) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 813) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 821) | function _superPropBase(object, property) {
  function _get (line 830) | function _get(target, property, receiver) {
  function _class (line 884) | function _class() {

FILE: public/plugins/table/themes/semantic/bootstrap-table-semantic.js
  function createCommonjsModule (line 11) | function createCommonjsModule(fn, module) {
  function _classCallCheck (line 752) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 758) | function _defineProperties(target, props) {
  function _createClass (line 768) | function _createClass(Constructor, protoProps, staticProps) {
  function _inherits (line 774) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 789) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 796) | function _setPrototypeOf(o, p) {
  function _assertThisInitialized (line 805) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 813) | function _possibleConstructorReturn(self, call) {
  function _superPropBase (line 821) | function _superPropBase(object, property) {
  function _get (line 830) | function _get(target, property, receiver) {
  function _class (line 869) | function _class() {

FILE: public/stisla/js/page/gmaps-draggable-marker.js
  function update_position (line 38) | function update_position() {

FILE: public/stisla/js/page/index-0.js
  function getWeather (line 79) | function getWeather() {

FILE: sql/goadmin.sql
  type `sys_config` (line 25) | CREATE TABLE `sys_config` (
  type `sys_oss` (line 54) | CREATE TABLE `sys_oss` (
  type `sys_user` (line 80) | CREATE TABLE `sys_user` (

FILE: utils/base/baseForm.go
  type BaseForm (line 7) | type BaseForm struct
    method SetParam (line 46) | func (form *BaseForm) SetParam(key string, value string) {
    method SetParams (line 50) | func (form *BaseForm) SetParams(params map[string]string) {
    method SetObject (line 57) | func (form *BaseForm) SetObject(object interface{}) {
  function NewForm (line 17) | func NewForm(params map[string]interface{}) BaseForm {

FILE: utils/base/baseModel.go
  type IModel (line 5) | type IModel interface

FILE: utils/base/baseRouter.go
  type BaseRouter (line 16) | type BaseRouter struct
  function GetUser (line 19) | func GetUser(r *ghttp.Request) bean.SessionUser {
  function Succ (line 34) | func Succ(r *ghttp.Request, data interface{}) {
  function Fail (line 39) | func Fail(r *ghttp.Request, msg string) {
  function Error (line 44) | func Error(r *ghttp.Request, msg string) {
  function Resp (line 48) | func Resp(r *ghttp.Request, code int, msg string, data interface{}) {
  function WriteTpl (line 58) | func WriteTpl(r *ghttp.Request, tpl string, params g.Map) error {

FILE: utils/bean/SessionUser.go
  type SessionUser (line 3) | type SessionUser struct

FILE: utils/resp/resp.go
  constant SUCCESS (line 9) | SUCCESS      = 0
  constant FAIL (line 10) | FAIL         = -1
  constant ERROR (line 11) | ERROR        = -99
  constant UNAUTHORIZED (line 12) | UNAUTHORIZED = -401
  constant TypeConfig (line 14) | TypeConfig = 1
  constant TypeDict (line 16) | TypeDict = 2
  type Resp (line 19) | type Resp struct
    method Success (line 26) | func (resp Resp) Success() bool {
    method DataString (line 31) | func (resp Resp) DataString() string {
    method DataInt (line 36) | func (resp Resp) DataInt() int {
    method GetString (line 41) | func (resp Resp) GetString(key string) string {
    method GetInt (line 46) | func (resp Resp) GetInt(key string) int {
    method Get (line 51) | func (resp Resp) Get(key string) interface{} {
    method Json (line 59) | func (resp Resp) Json() string {
  function Succ (line 65) | func Succ(data interface{}) Resp {
  function Fail (line 70) | func Fail(msg string) Resp {
  function FailData (line 75) | func FailData(msg string, data interface{}) Resp {
  function Error (line 80) | func Error(msg string) Resp {
  function ErrorData (line 85) | func ErrorData(msg string, data interface{}) Resp {
  function Unauthorized (line 90) | func Unauthorized(msg string, data interface{}) Resp {

FILE: utils/time.go
  function GetNow (line 5) | func GetNow() string {

FILE: utils/tools/gid.go
  function GetId (line 10) | func GetId(datacenterId int64) int64 {
  type IdWorker (line 17) | type IdWorker struct
    method InitIdWorker (line 36) | func (this *IdWorker) InitIdWorker(workerId, datacenterId int64) error {
    method NextId (line 66) | func (this *IdWorker) NextId() (int64, error) {
    method tilNextMillis (line 99) | func (this *IdWorker) tilNextMillis() int64 {

FILE: utils/tools/redis.go
  function SetCache (line 9) | func SetCache(key string, value interface{}) {
  function GetCache (line 13) | func GetCache(key string) interface{} {
  function DelCache (line 21) | func DelCache(key string) {
  function Publish (line 25) | func Publish(key string, value interface{}) {
  function Subscribe (line 33) | func Subscribe(key string) interface{} {
Condensed preview — 196 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,025K chars).
[
  {
    "path": ".gitattributes",
    "chars": 81,
    "preview": "*.js linguist-language=GO\n*.css linguist-language=GO\n*.html linguist-language=GO\n"
  },
  {
    "path": ".idea/.gitignore",
    "chars": 38,
    "preview": "# Default ignored files\n/workspace.xml"
  },
  {
    "path": ".idea/goadmin.iml",
    "chars": 322,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"Go\" enabled=\"true\" />\n "
  },
  {
    "path": ".idea/misc.xml",
    "chars": 174,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"JavaScriptSettings\">\n    <option name=\"l"
  },
  {
    "path": ".idea/modules.xml",
    "chars": 266,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n   "
  },
  {
    "path": "License",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2020 CrazyRocks\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.en.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "README.md",
    "chars": 1901,
    "preview": "# GoAdim\n\n底层框架:GF<br/>\n前端模板:stisla<br/>\n数据库:mysql<br/>\n缓存:redis<br/>\n权限:token<br/>\n\n安装:<br/>\n1:数据库在:sql文件夹下<br/>\n2:修改con"
  },
  {
    "path": "boot/boot.go",
    "chars": 1207,
    "preview": "package boot\n\nimport (\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/os/glog\"\n\t\"github.com/gogf/gf/os/gsession\"\n\t\"g"
  },
  {
    "path": "boot/module.go",
    "chars": 177,
    "preview": "package boot\n\nimport (\n\t\"goadmin/module/home\"\n\t\"goadmin/module/public\"\n\t\"goadmin/module/sys\"\n)\n\nfunc InitModules() {\n\tpu"
  },
  {
    "path": "config/config.toml",
    "chars": 533,
    "preview": "url-path = \"\"\n\n# 应用系统设置\n[setting]\n    logpath = \"/logs\"\n    assest=\"\"\n    domain=\"\"\n\n\n# 数据库连接\n[database]\n   [[database.c"
  },
  {
    "path": "go.mod",
    "chars": 483,
    "preview": "module goadmin\n\nrequire github.com/gogf/gf v1.10.0\n\nrequire (\n\tgithub.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible\n\t"
  },
  {
    "path": "go.sum",
    "chars": 4899,
    "preview": "github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=\ngithub.com/BurntSushi/toml v0.3.1/go.m"
  },
  {
    "path": "main.go",
    "chars": 108,
    "preview": "package main\n\nimport (\n\t\"github.com/gogf/gf/frame/g\"\n\t_ \"goadmin/boot\"\n)\n\nfunc main() {\n\tg.Server().Run()\n}\n"
  },
  {
    "path": "middleware/rtoken/rtoken.go",
    "chars": 9626,
    "preview": "package rtoken\n\nimport (\n\t\"fmt\"\n\t\"github.com/gogf/gf/crypto/gaes\"\n\t\"github.com/gogf/gf/crypto/gmd5\"\n\t\"github.com/gogf/gf"
  },
  {
    "path": "middleware/rtoken/rtoken_cache.go",
    "chars": 2063,
    "preview": "package rtoken\n\nimport (\n\t\"github.com/gogf/gf/encoding/gjson\"\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/os/gcac"
  },
  {
    "path": "middleware/rtoken/rtoken_resp.go",
    "chars": 1504,
    "preview": "package rtoken\n\nimport (\n\t\"encoding/json\"\n\t\"github.com/gogf/gf/util/gconv\"\n)\n\nconst (\n\tSUCCESS      = 0\n\tFAIL         = "
  },
  {
    "path": "module/home/config/router.go",
    "chars": 426,
    "preview": "package config\n\nimport (\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/net/ghttp\"\n\t\"goadmin/module/home/controller\""
  },
  {
    "path": "module/home/controller/dashboard_controller.go",
    "chars": 283,
    "preview": "package controller\n\nimport (\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/net/ghttp\"\n\t\"goadmin/utils/base\"\n)\n\ntype"
  },
  {
    "path": "module/home/module.go",
    "chars": 94,
    "preview": "package home\n\nimport \"goadmin/module/home/config\"\n\nfunc InitModule() {\n\tconfig.InitRouter()\n}\n"
  },
  {
    "path": "module/public/config/router.go",
    "chars": 231,
    "preview": "package config\n\nimport (\n\t\"github.com/gogf/gf/frame/g\"\n\t\"goadmin/module/public/controller\"\n)\n\nfunc InitRouter() {\n\turlPa"
  },
  {
    "path": "module/public/controller/login_controller.go",
    "chars": 1838,
    "preview": "package controller\n\nimport (\n\t\"github.com/gogf/gf/crypto/gmd5\"\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/net/gh"
  },
  {
    "path": "module/public/model/sys_login_user_model.go",
    "chars": 2016,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_user_model\n* @Version: 1.0.0\n* @Date: 2019"
  },
  {
    "path": "module/public/module.go",
    "chars": 98,
    "preview": "package public\n\nimport \"goadmin/module/public/config\"\n\nfunc InitModule() {\n\tconfig.InitRouter()\n}\n"
  },
  {
    "path": "module/sys/config/router.go",
    "chars": 1580,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  router\n* @Version: 1.0.0\n* @Date: 2019-11-17\n "
  },
  {
    "path": "module/sys/controller/sys_config_controller.go",
    "chars": 2207,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_config_controller\n* @Version: 1.0.0\n* @Dat"
  },
  {
    "path": "module/sys/controller/sys_oss_controller.go",
    "chars": 4335,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_oss_controller\n* @Version: 1.0.0\n* @Date: "
  },
  {
    "path": "module/sys/controller/sys_user_controller.go",
    "chars": 2756,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_user_controller\n* @Version: 1.0.0\n* @Date:"
  },
  {
    "path": "module/sys/model/sys_config_model.go",
    "chars": 5467,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_config_model\n* @Version: 1.0.0\n* @Date: 20"
  },
  {
    "path": "module/sys/model/sys_oss_cloud.go",
    "chars": 498,
    "preview": "package model\n\ntype SysOssCloud struct {\n\tAliyunDomain          string `json:\"aliyunDomain\" gconv:\"AliyunDomain,omitempt"
  },
  {
    "path": "module/sys/model/sys_oss_model.go",
    "chars": 4118,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_oss_model\n* @Version: 1.0.0\n* @Date: 2019-"
  },
  {
    "path": "module/sys/model/sys_user_model.go",
    "chars": 4552,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  sys_user_model\n* @Version: 1.0.0\n* @Date: 2019"
  },
  {
    "path": "module/sys/module.go",
    "chars": 215,
    "preview": "/**\n* @Author: Rocks\n* @Email: 451360994@qq.com\n* @Description:\n* @File:  module\n* @Version: 1.0.0\n* @Date: 2019-11-17\n "
  },
  {
    "path": "public/modules/common.js",
    "chars": 1882,
    "preview": "//bootstrap-table配置\n\nvar baseURL = \"http://localhost:8192/\";\n\n//工具集合Tools\nwindow.T = {};\n\n// 获取请求参数\n// 使用示例\n// location."
  },
  {
    "path": "public/modules/sys/config.js",
    "chars": 7630,
    "preview": "$(function () {\n\n    function addButtonFunc(value, row, index) {\n        return [\n                '<div id=\"editButton\" "
  },
  {
    "path": "public/modules/sys/oss.js",
    "chars": 9196,
    "preview": "$(function () {\n\n    function addButtonFunc(value, row, index) {\n        return '<div id=\"deleteButton\"  class=\"badge ba"
  },
  {
    "path": "public/modules/sys/user.js",
    "chars": 7537,
    "preview": "$(function () {\n\n    function addButtonFunc(value, row, index) {\n        return [\n                '<div id=\"editButton\" "
  },
  {
    "path": "public/plugins/ajaxupload/ajaxupload.js",
    "chars": 25271,
    "preview": "/**\n * AJAX Upload ( http://valums.com/ajax-upload/ ) \n * Copyright (c) Andris Valums\n * Licensed under the MIT license "
  },
  {
    "path": "public/plugins/table/bootstrap-table-locale-all.js",
    "chars": 184077,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/bootstrap-table-vue.esm.js",
    "chars": 59330,
    "preview": "var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof gl"
  },
  {
    "path": "public/plugins/table/bootstrap-table-vue.js",
    "chars": 61164,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory()"
  },
  {
    "path": "public/plugins/table/bootstrap-table.css",
    "chars": 9548,
    "preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.15.5\n * https://github.com/wenzhixin"
  },
  {
    "path": "public/plugins/table/bootstrap-table.js",
    "chars": 242172,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(r"
  },
  {
    "path": "public/plugins/table/extensions/accent-neutralise/bootstrap-table-accent-neutralise.js",
    "chars": 56722,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/addrbar/bootstrap-table-addrbar.js",
    "chars": 48973,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/auto-refresh/bootstrap-table-auto-refresh.js",
    "chars": 33148,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/cell-input/bootstrap-table-cell-input.css",
    "chars": 314,
    "preview": ".table-cell-input {\n  display: block !important;\n  padding: 5px !important;\n  margin: 0 !important;\n  border: 0 !importa"
  },
  {
    "path": "public/plugins/table/extensions/cell-input/bootstrap-table-cell-input.js",
    "chars": 75306,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/cookie/bootstrap-table-cookie.js",
    "chars": 66252,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/copy-rows/bootstrap-table-copy-rows.js",
    "chars": 33334,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/defer-url/bootstrap-table-defer-url.js",
    "chars": 24620,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/editable/bootstrap-table-editable.js",
    "chars": 48253,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/export/bootstrap-table-export.js",
    "chars": 87360,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/filter-control/bootstrap-table-filter-control.css",
    "chars": 186,
    "preview": "/**\n * @author: Dennis Hernández\n * @webSite: http://djhvscf.github.io/Blog\n * @version: v2.1.1\n */\n\n.no-filter-control "
  },
  {
    "path": "public/plugins/table/extensions/filter-control/bootstrap-table-filter-control.js",
    "chars": 86556,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/fixed-columns/bootstrap-table-fixed-columns.css",
    "chars": 547,
    "preview": ".fixed-table-header-columns,\n.fixed-table-body-columns {\n  position: absolute;\n  background-color: #fff;\n  box-sizing: b"
  },
  {
    "path": "public/plugins/table/extensions/fixed-columns/bootstrap-table-fixed-columns.js",
    "chars": 45655,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/group-by-v2/bootstrap-table-group-by.css",
    "chars": 151,
    "preview": ".bootstrap-table .table > tbody > tr.groupBy {\n  cursor: pointer;\n}\n\n.bootstrap-table .table > tbody > tr.hidden + tr.de"
  },
  {
    "path": "public/plugins/table/extensions/group-by-v2/bootstrap-table-group-by.js",
    "chars": 48494,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/i18n-enhance/bootstrap-table-i18n-enhance.js",
    "chars": 3588,
    "preview": "(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')"
  },
  {
    "path": "public/plugins/table/extensions/key-events/bootstrap-table-key-events.js",
    "chars": 39364,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/mobile/bootstrap-table-mobile.js",
    "chars": 36447,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/multiple-sort/bootstrap-table-multiple-sort.js",
    "chars": 76284,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/natural-sorting/bootstrap-table-natural-sorting.js",
    "chars": 43870,
    "preview": "(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory("
  },
  {
    "path": "public/plugins/table/extensions/page-jump-to/bootstrap-table-page-jump-to.css",
    "chars": 336,
    "preview": ".bootstrap-table.bootstrap3 .fixed-table-pagination > .pagination ul.pagination,\n.bootstrap-table.bootstrap3 .fixed-tabl"
  },
  {
    "path": "public/plugins/table/extensions/page-jump-to/bootstrap-table-page-jump-to.js",
    "chars": 31291,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/pipeline/bootstrap-table-pipeline.js",
    "chars": 38592,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/print/bootstrap-table-print.js",
    "chars": 68163,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/reorder-columns/bootstrap-table-reorder-columns.js",
    "chars": 32292,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/reorder-rows/bootstrap-table-reorder-rows.css",
    "chars": 802,
    "preview": ".reorder_rows_onDragClass td {\n  background-color: #eee;\n  -webkit-box-shadow: 11px 5px 12px 2px #333, 0 1px 0 #ccc inse"
  },
  {
    "path": "public/plugins/table/extensions/reorder-rows/bootstrap-table-reorder-rows.js",
    "chars": 24946,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/resizable/bootstrap-table-resizable.js",
    "chars": 21589,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/sticky-header/bootstrap-table-sticky-header.css",
    "chars": 361,
    "preview": "/**\n * @author vincent loh <vincent.ml@gmail.com>\n * @update zhixin wen <wenzhixin2010@gmail.com>\n */\n\n.fix-sticky {\n  p"
  },
  {
    "path": "public/plugins/table/extensions/sticky-header/bootstrap-table-sticky-header.js",
    "chars": 33484,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/toolbar/bootstrap-table-toolbar.js",
    "chars": 80384,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/extensions/treegrid/bootstrap-table-treegrid.js",
    "chars": 62328,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-af-ZA.js",
    "chars": 23395,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ar-SA.js",
    "chars": 23582,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ca-ES.js",
    "chars": 23473,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-cs-CZ.js",
    "chars": 23483,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-da-DK.js",
    "chars": 23471,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-de-DE.js",
    "chars": 23586,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-el-GR.js",
    "chars": 23899,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-en-US.js",
    "chars": 23361,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-AR.js",
    "chars": 23398,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-CL.js",
    "chars": 23442,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-CR.js",
    "chars": 23472,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-ES.js",
    "chars": 23459,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-MX.js",
    "chars": 23592,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-NI.js",
    "chars": 23471,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-es-SP.js",
    "chars": 23397,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-et-EE.js",
    "chars": 23428,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-eu-EU.js",
    "chars": 23446,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fa-IR.js",
    "chars": 23546,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fi-FI.js",
    "chars": 23423,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fr-BE.js",
    "chars": 23527,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fr-CH.js",
    "chars": 23470,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fr-FR.js",
    "chars": 23581,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-fr-LU.js",
    "chars": 23474,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-he-IL.js",
    "chars": 23470,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-hr-HR.js",
    "chars": 23480,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-hu-HU.js",
    "chars": 23408,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-id-ID.js",
    "chars": 23413,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-it-IT.js",
    "chars": 23532,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ja-JP.js",
    "chars": 23538,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ka-GE.js",
    "chars": 23871,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ko-KR.js",
    "chars": 23487,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ms-MY.js",
    "chars": 23483,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-nb-NO.js",
    "chars": 23353,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-nl-BE.js",
    "chars": 23550,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-nl-NL.js",
    "chars": 23594,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-pl-PL.js",
    "chars": 23414,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-pt-BR.js",
    "chars": 23556,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-pt-PT.js",
    "chars": 23442,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ro-RO.js",
    "chars": 23414,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ru-RU.js",
    "chars": 23569,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-sk-SK.js",
    "chars": 23431,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-sr-Cyrl-RS.js",
    "chars": 24001,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-sr-Latn-RS.js",
    "chars": 23465,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-sv-SE.js",
    "chars": 23355,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-th-TH.js",
    "chars": 23733,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-tr-TR.js",
    "chars": 23461,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-uk-UA.js",
    "chars": 23660,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-ur-PK.js",
    "chars": 23584,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-uz-Latn-UZ.js",
    "chars": 23441,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-vi-VN.js",
    "chars": 23456,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-zh-CN.js",
    "chars": 23424,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/locale/bootstrap-table-zh-TW.js",
    "chars": 23425,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/themes/bulma/bootstrap-table-bulma.css",
    "chars": 10977,
    "preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * https://github.com/wenzhixin/bootstrap-table/\n "
  },
  {
    "path": "public/plugins/table/themes/bulma/bootstrap-table-bulma.js",
    "chars": 30970,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/themes/foundation/bootstrap-table-foundation.css",
    "chars": 10462,
    "preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * https://github.com/wenzhixin/bootstrap-table/\n "
  },
  {
    "path": "public/plugins/table/themes/foundation/bootstrap-table-foundation.js",
    "chars": 31154,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/themes/materialize/bootstrap-table-materialize.css",
    "chars": 10381,
    "preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * https://github.com/wenzhixin/bootstrap-table/\n "
  },
  {
    "path": "public/plugins/table/themes/materialize/bootstrap-table-materialize.js",
    "chars": 30516,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/plugins/table/themes/semantic/bootstrap-table-semantic.css",
    "chars": 10857,
    "preview": "@charset \"UTF-8\";\n/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * https://github.com/wenzhixin/bootstrap-table/\n "
  },
  {
    "path": "public/plugins/table/themes/semantic/bootstrap-table-semantic.js",
    "chars": 29565,
    "preview": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'))"
  },
  {
    "path": "public/stisla/css/components.css",
    "chars": 210960,
    "preview": "/**\n * Components\n *\n * TABLE OF CONTENTS\n * 1. Components\n * \t  1.1 Article\n * \t  1.2 Author\n * \t  1.3 Avatar Item\n * \t"
  },
  {
    "path": "public/stisla/css/custom.css",
    "chars": 186,
    "preview": "/**\n *\n * You can write your CSS code here, DO NOT touch the default JavaScript file\n * because it will make it harder f"
  },
  {
    "path": "public/stisla/css/reverse.css",
    "chars": 2954,
    "preview": "body.skin-reverse.sidebar-mini .main-sidebar:after {\n  background-color: color(primary); }\n\nbody.skin-reverse.sidebar-mi"
  },
  {
    "path": "public/stisla/css/rtl.css",
    "chars": 11647,
    "preview": "@charset \"UTF-8\";\n/**\n * Stisla\n *\n * Stisla is a clean & modern HTML5 admin template based on Bootstrap 4.\n * Stisla wi"
  },
  {
    "path": "public/stisla/css/skins/reverse.css",
    "chars": 2755,
    "preview": "body.skin-reverse.sidebar-mini .main-sidebar:after {\n  background-color: #6777ef;\n}\nbody.skin-reverse.sidebar-mini .main"
  },
  {
    "path": "public/stisla/css/style.css",
    "chars": 126168,
    "preview": "@charset \"UTF-8\";\n/**\n * Stisla\n *\n * Stisla is a clean & modern HTML5 admin template based on Bootstrap 4.\n * Stisla wi"
  },
  {
    "path": "public/stisla/fonts/vazir/LICENSE",
    "chars": 2584,
    "preview": "Changes by Saber Rastikerdar are in public domain.\nGlyphs and data from Roboto font are licensed under the Apache Licens"
  },
  {
    "path": "public/stisla/fonts/vazir/font-face.css",
    "chars": 1773,
    "preview": "@font-face {\n  font-family: Vazir;\n  src: url('Vazir.eot');\n  src: url('Vazir.eot?#iefix') format('embedded-opentype'),\n"
  },
  {
    "path": "public/stisla/js/custom.js",
    "chars": 154,
    "preview": "/**\n *\n * You can write your JS code here, DO NOT touch the default style file\n * because it will make it harder for you"
  },
  {
    "path": "public/stisla/js/page/auth-register.js",
    "chars": 45,
    "preview": "\"use strict\";\n\n$(\".pwstrength\").pwstrength();"
  },
  {
    "path": "public/stisla/js/page/bootstrap-modal.js",
    "chars": 2469,
    "preview": "\"use strict\";\n\n$(\"#modal-1\").fireModal({body: 'Modal body text goes here.'});\n$(\"#modal-2\").fireModal({body: 'Modal body"
  },
  {
    "path": "public/stisla/js/page/components-chat-box.js",
    "chars": 2454,
    "preview": "\"use strict\";\n\nvar chats = [\n  {\n    text: 'Hi, dude!',\n    position: 'left'\n  },\n  {\n    text: 'Wat?',\n    position: 'r"
  },
  {
    "path": "public/stisla/js/page/components-multiple-upload.js",
    "chars": 1145,
    "preview": "\"use strict\";\n\nvar dropzone = new Dropzone(\"#mydropzone\", {\n  url: \"#\"\n});\n\nvar minSteps = 6,\n  maxSteps = 60,\n  timeBet"
  },
  {
    "path": "public/stisla/js/page/components-statistic.js",
    "chars": 6091,
    "preview": "\"use strict\";\n\nvar sparkline_values = [10, 7, 4, 8, 5, 8, 6, 5, 2, 4, 7, 4, 9, 6, 5, 9];\nvar sparkline_values_chart = [2"
  },
  {
    "path": "public/stisla/js/page/components-table.js",
    "chars": 870,
    "preview": "\"use strict\";\n\n$(\"[data-checkboxes]\").each(function() {\n  var me = $(this),\n    group = me.data('checkboxes'),\n    role "
  },
  {
    "path": "public/stisla/js/page/components-user.js",
    "chars": 253,
    "preview": "\"use strict\";\n\n$(\"#users-carousel\").owlCarousel({\n  items: 4,\n  margin: 20,\n  autoplay: true,\n  autoplayTimeout: 5000,\n "
  },
  {
    "path": "public/stisla/js/page/features-post-create.js",
    "chars": 497,
    "preview": "\"use strict\";\n\n$(\"select\").selectric();\n$.uploadPreview({\n  input_field: \"#image-upload\",   // Default: .image-upload\n  "
  },
  {
    "path": "public/stisla/js/page/features-posts.js",
    "chars": 801,
    "preview": "\"use strict\";\n\n$(\"[data-checkboxes]\").each(function() {\n  var me = $(this),\n    group = me.data('checkboxes'),\n    role "
  },
  {
    "path": "public/stisla/js/page/features-setting-detail.js",
    "chars": 673,
    "preview": "\"use strict\";\n\n$(\"#setting-form\").submit(function() {\n  let save_button = $(this).find('#save-btn'),\n    output_status ="
  },
  {
    "path": "public/stisla/js/page/forms-advanced-forms.js",
    "chars": 2168,
    "preview": "\"use strict\";\n\nvar cleavePN = new Cleave('.phone-number', {\n  phone: true,\n  phoneRegionCode: 'us'\n});\nvar cleaveC = new"
  },
  {
    "path": "public/stisla/js/page/gmaps-advanced-route.js",
    "chars": 967,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061\n});\n\n// when"
  },
  {
    "path": "public/stisla/js/page/gmaps-draggable-marker.js",
    "chars": 1194,
    "preview": "\"use strict\";\n\nvar input_lat = $(\"#input-lat\"), // latitude input text\n  input_lng = $(\"#input-lng\"), // longitude input"
  },
  {
    "path": "public/stisla/js/page/gmaps-geocoding.js",
    "chars": 552,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061\n});\n\n// when"
  },
  {
    "path": "public/stisla/js/page/gmaps-geolocation.js",
    "chars": 792,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061\n});\n// initi"
  },
  {
    "path": "public/stisla/js/page/gmaps-marker.js",
    "chars": 421,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061\n});\n// Added"
  },
  {
    "path": "public/stisla/js/page/gmaps-multiple-marker.js",
    "chars": 1062,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.8665409,\n  lng: 106.4836553,\n  zoom: 8\n}"
  },
  {
    "path": "public/stisla/js/page/gmaps-route.js",
    "chars": 361,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061,\n  zoom: 13\n"
  },
  {
    "path": "public/stisla/js/page/gmaps-simple.js",
    "chars": 107,
    "preview": "\"use strict\";\n\nvar simple_map = new GMaps({\n  div: '#simple-map',\n  lat: -6.5637928,\n  lng: 106.7535061\n})\n"
  },
  {
    "path": "public/stisla/js/page/index-0.js",
    "chars": 2755,
    "preview": "\"use strict\";\n\nvar statistics_chart = document.getElementById(\"myChart\").getContext('2d');\n\nvar myChart = new Chart(stat"
  },
  {
    "path": "public/stisla/js/page/index.js",
    "chars": 4827,
    "preview": "\"use strict\";\n\nvar ctx = document.getElementById(\"myChart\").getContext('2d');\nvar myChart = new Chart(ctx, {\n  type: 'li"
  },
  {
    "path": "public/stisla/js/page/modules-calendar.js",
    "chars": 1398,
    "preview": "\"use strict\";\n\n$(\"#myEvent\").fullCalendar({\n  height: 'auto',\n  header: {\n    left: 'prev,next today',\n    center: 'titl"
  },
  {
    "path": "public/stisla/js/page/modules-chartjs.js",
    "chars": 2963,
    "preview": "\"use strict\";\n\nvar ctx = document.getElementById(\"myChart\").getContext('2d');\nvar myChart = new Chart(ctx, {\n  type: 'li"
  },
  {
    "path": "public/stisla/js/page/modules-datatables.js",
    "chars": 996,
    "preview": "\"use strict\";\n\n$(\"[data-checkboxes]\").each(function() {\n  var me = $(this),\n    group = me.data('checkboxes'),\n    role "
  },
  {
    "path": "public/stisla/js/page/modules-ion-icons.js",
    "chars": 236,
    "preview": "\"use strict\";\n\n$(\"#icons li\").each(function() {\n  $(this).append('<div class=\"icon-name\">'+ $(this).attr('class') +'</di"
  },
  {
    "path": "public/stisla/js/page/modules-slider.js",
    "chars": 171,
    "preview": "\"use strict\";\n\n$(\"#slider1,#slider2\").owlCarousel({\n  items: 1,\n  nav: true,\n  navText: ['<i class=\"fas fa-chevron-left\""
  },
  {
    "path": "public/stisla/js/page/modules-sparkline.js",
    "chars": 1104,
    "preview": "\"use strict\";\n\nvar sparkline_values = [110, 147, 324, 108, 235, 498, 346, 525, 382, 214, 427, 424, 239, 236, 475, 569],\n"
  },
  {
    "path": "public/stisla/js/page/modules-sweetalert.js",
    "chars": 1283,
    "preview": "\"use strict\";\n\n$(\"#swal-1\").click(function() {\n\tswal('Hello');\n});\n\n$(\"#swal-2\").click(function() {\n\tswal('Good Job', 'Y"
  },
  {
    "path": "public/stisla/js/page/modules-toastr.js",
    "chars": 1415,
    "preview": "\"use strict\";\n\n$(\"#toastr-1\").click(function() {\n  iziToast.info({\n    title: 'Hello, world!',\n    message: 'This awesom"
  },
  {
    "path": "public/stisla/js/page/modules-vector-map.js",
    "chars": 2114,
    "preview": "\"use strict\";\n\n$('#visitorMap').vectorMap({\n  map: 'world_en',\n  backgroundColor: '#ffffff',\n  borderColor: '#f2f2f2',\n "
  },
  {
    "path": "public/stisla/js/page/utilities-contact.js",
    "chars": 663,
    "preview": "\"use strict\";\n\n// initialize map\nvar map = new GMaps({\n  div: '#map',\n  lat: -6.5637928,\n  lng: 106.7535061,\n  zoomContr"
  },
  {
    "path": "public/stisla/js/scripts.js",
    "chars": 19977,
    "preview": "\"use strict\";\n\n// ChartJS\nif (window.Chart) {\n    Chart.defaults.global.defaultFontFamily = \"'Nunito', 'Segoe UI', 'Aria"
  },
  {
    "path": "public/stisla/js/stisla.js",
    "chars": 8947,
    "preview": "\"use strict\";\n\n(function($, window, i) {\n  // Bootstrap 4 Modal\n  $.fn.fireModal = function(options) {\n    var options ="
  },
  {
    "path": "sql/goadmin.sql",
    "chars": 4235,
    "preview": "-- MySQL dump 10.13  Distrib 8.0.18, for macos10.14 (x86_64)\n--\n-- Host: 127.0.0.1    Database: goadmin\n-- -------------"
  },
  {
    "path": "template/home/index.html",
    "chars": 19393,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    ${include \"layout/header.html\" .}\n</head>\n\n${include \"layout/nav.html\" .}\n<div class=\""
  },
  {
    "path": "template/layout/footer.html",
    "chars": 1915,
    "preview": "</div>\n</div>\n<!-- General JS Scripts -->\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
  },
  {
    "path": "template/layout/header.html",
    "chars": 797,
    "preview": "\n    <meta charset=\"UTF-8\">\n    <meta content=\"width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no\" n"
  },
  {
    "path": "template/layout/nav.html",
    "chars": 7139,
    "preview": "<div id=\"app\">\n    <div class=\"main-wrapper\">\n        <div class=\"navbar-bg\"></div>\n        <nav class=\"navbar navbar-ex"
  },
  {
    "path": "template/public/login.html",
    "chars": 7240,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta content=\"width=device-width, initial-scale="
  },
  {
    "path": "template/sys/config.html",
    "chars": 5592,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    ${include  \"layout/header.html\" .}\n</head>\n\n${include  \"layout/nav.html\" .}\n<div class"
  },
  {
    "path": "template/sys/oss.html",
    "chars": 6670,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    ${include \"layout/header.html\" .}\n</head>\n\n${include \"layout/nav.html\" .}\n<div class=\""
  },
  {
    "path": "template/sys/user.html",
    "chars": 5566,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    ${include  \"layout/header.html\" .}\n</head>\n\n${include  \"layout/nav.html\" .}\n<div class"
  },
  {
    "path": "utils/base/baseForm.go",
    "chars": 1492,
    "preview": "package base\n\nimport (\n\t\"github.com/gogf/gf/util/gconv\"\n)\n\ntype BaseForm struct {\n\tPage      int    `form:\"page\",json:\"p"
  },
  {
    "path": "utils/base/baseModel.go",
    "chars": 114,
    "preview": "package base\n\n\n// 定义model interface\ntype IModel interface {\n\t// 获取表明\n\tTableName() string\n\t// 获取主键值\n\tPkVal() int\n}\n"
  },
  {
    "path": "utils/base/baseRouter.go",
    "chars": 1283,
    "preview": "package base\n\nimport (\n\t\"github.com/gogf/gf/encoding/gjson\"\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/net/ghttp"
  },
  {
    "path": "utils/bean/SessionUser.go",
    "chars": 222,
    "preview": "package bean\n\ntype SessionUser struct {\n\tId       int    `form:\"id\" json:\"id\"`             // 主键\n\tUsername string `form:"
  },
  {
    "path": "utils/cloud/oss.go",
    "chars": 14,
    "preview": "package cloud\n"
  },
  {
    "path": "utils/resp/resp.go",
    "chars": 1504,
    "preview": "package resp\n\nimport (\n\t\"encoding/json\"\n\t\"github.com/gogf/gf/util/gconv\"\n)\n\nconst (\n\tSUCCESS      = 0\n\tFAIL         = -1"
  },
  {
    "path": "utils/time.go",
    "chars": 103,
    "preview": "package utils\n\nimport \"github.com/gogf/gf/os/gtime\"\n\nfunc GetNow() string {\n\treturn gtime.Datetime()\n}\n"
  },
  {
    "path": "utils/tools/gid.go",
    "chars": 2875,
    "preview": "package tools\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n)\n\nfunc GetId(datacenterId int64) int64 {\n\tcurrWoker := &IdWork"
  },
  {
    "path": "utils/tools/redis.go",
    "chars": 726,
    "preview": "package tools\n\nimport (\n\t\"github.com/gogf/gf/encoding/gjson\"\n\t\"github.com/gogf/gf/frame/g\"\n\t\"github.com/gogf/gf/os/glog\""
  }
]

About this extraction

This page contains the full source code of the CrazyRocks/goadmin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 196 files (3.6 MB), approximately 960.3k tokens, and a symbol index with 582 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!