upgolang
This commit is contained in:
parent
00790ad84e
commit
feb780157f
25
route_adm.go
25
route_adm.go
|
|
@ -7,6 +7,7 @@ import (
|
|||
"ciyon/web/admin/ap"
|
||||
"ciyon/web/admin/autotask"
|
||||
"ciyon/web/admin/datasse"
|
||||
"ciyon/web/admin/demo"
|
||||
"ciyon/web/admin/rigger"
|
||||
"ciyon/web/admin/wsdemo"
|
||||
c "ciyon/zciyon"
|
||||
|
|
@ -130,16 +131,6 @@ func setWebRoute_adm(web *c.CiyWebServer) {
|
|||
},
|
||||
})
|
||||
web.RouterFunc("admin/ap", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
|
||||
"demo": {
|
||||
"list": ap.Demo_list,
|
||||
"del": ap.Demo_del,
|
||||
"getdata": ap.Demo_getdata,
|
||||
"update": ap.Demo_update,
|
||||
"audit": ap.Demo_audit,
|
||||
"exportxls": ap.Demo_exportxls,
|
||||
"importxls_in": ap.Demo_importxls_in,
|
||||
"importxls_data": ap.Demo_importxls_data,
|
||||
},
|
||||
"paper": {
|
||||
"init": ap.Paper_init,
|
||||
"update": ap.Paper_update,
|
||||
|
|
@ -147,6 +138,18 @@ func setWebRoute_adm(web *c.CiyWebServer) {
|
|||
"del": ap.Paper_del,
|
||||
},
|
||||
})
|
||||
web.RouterFunc("admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
|
||||
"normal": {
|
||||
"list": demo.Normal_list,
|
||||
"del": demo.Normal_del,
|
||||
"getdata": demo.Normal_getdata,
|
||||
"update": demo.Normal_update,
|
||||
"audit": demo.Normal_audit,
|
||||
"exportxls": demo.Normal_exportxls,
|
||||
"importxls_in": demo.Normal_importxls_in,
|
||||
"importxls_data": demo.Normal_importxls_data,
|
||||
},
|
||||
})
|
||||
web.RouterFunc("admin/autotask", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
|
||||
"task": {
|
||||
"main": autotask.Task_main,
|
||||
|
|
@ -166,7 +169,7 @@ func setWebRoute_adm(web *c.CiyWebServer) {
|
|||
"logout": admin.Login_logout,
|
||||
"restorage": admin.Login_restorage,
|
||||
},
|
||||
"manage": {
|
||||
"index": {
|
||||
"init": admin.Index_init,
|
||||
"favadd": admin.Index_favadd,
|
||||
"favdel": admin.Index_favdel,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ func paper_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Paper_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -79,11 +79,11 @@ func Paper_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Paper_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -142,11 +142,11 @@ func Paper_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
func Paper_getdata(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -162,11 +162,11 @@ func Paper_getdata(w http.ResponseWriter, r *http.Request) bool {
|
|||
return c.ErrJSON(w, "读取失败:"+err.Error())
|
||||
}
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Paper_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -194,5 +194,5 @@ func Paper_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ func Main() bool {
|
|||
}
|
||||
func Task_main(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, err := admin.Verifyuser(c.CiyDB, post)
|
||||
rsuser, err := admin.Verifyuser(r, c.CiyDB, post)
|
||||
if err != nil {
|
||||
w.Write([]byte("您未登录"))
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -2,21 +2,31 @@ package admin
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
c "ciyon/zciyon"
|
||||
)
|
||||
|
||||
var Gtokentype string //cookie(更安全,只支持https) 、 localstorage(兼容性好)
|
||||
var Gtokenfield string //header api field
|
||||
var Gtokensalt string //登录盐值
|
||||
var Gtokenswapsec int //更换JWT时间
|
||||
var Gtokenexpsec int //过期退出时间
|
||||
var Gdefpass string //默认密码
|
||||
var Gusermap sync.Map //用户全局缓存
|
||||
|
||||
func init() {
|
||||
Gtokentype = "localstorage"
|
||||
Gtokenfield = "ciyadm"
|
||||
Gtokensalt = "bka02$59gG"
|
||||
Gtokenswapsec = 3600
|
||||
Gtokenexpsec = 86400 * 7
|
||||
Gdefpass = "1q2w"
|
||||
}
|
||||
func Verifyfast(db *c.CiyMysql, post *c.CiyPost) (map[string]any, int) {
|
||||
rsuser, err := Verifyuser(c.CiyDB, post)
|
||||
func Verifyfast(r *http.Request, db *c.CiyMysql, post *c.CiyPost) (map[string]any, int) {
|
||||
rsuser, err := Verifyuser(r, c.CiyDB, post)
|
||||
if err != nil {
|
||||
c.ErrJSON(post.W, "请重新登录", 2)
|
||||
return nil, 0
|
||||
|
|
@ -24,13 +34,13 @@ func Verifyfast(db *c.CiyMysql, post *c.CiyPost) (map[string]any, int) {
|
|||
return rsuser, c.Toint(rsuser["id"])
|
||||
}
|
||||
|
||||
func Verifyuser(db *c.CiyMysql, post *c.CiyPost) (map[string]any, error) {
|
||||
ciyauth := post.R.Header.Get(Gtokenfield)
|
||||
func Verifyuser(r *http.Request, db *c.CiyMysql, post *c.CiyPost) (map[string]any, error) {
|
||||
ciyauth := post.R.Header.Get("ciyauth")
|
||||
if ciyauth == "" {
|
||||
ciyauth = c.GetQuery("_"+Gtokenfield, post.R)
|
||||
ciyauth = c.GetQuery("_ciyauth", post.R)
|
||||
}
|
||||
if ciyauth == "" {
|
||||
return nil, fmt.Errorf("verify nofind %v in header or query", Gtokenfield)
|
||||
return nil, fmt.Errorf("verify nofind ciyauth header or query")
|
||||
}
|
||||
auth := c.Str_JSON(c.Encrypt(ciyauth, "D", Gtokensalt))
|
||||
if auth == nil {
|
||||
|
|
@ -48,6 +58,9 @@ func Verifyuser(db *c.CiyMysql, post *c.CiyPost) (map[string]any, error) {
|
|||
if c.Tostr(onlinerow["sid"]) != c.Tostr(auth["_s"]) {
|
||||
return nil, fmt.Errorf("verify sid not match oid=%v", onlinerow["id"])
|
||||
}
|
||||
if c.Toint(onlinerow["exptimes"]) < c.Tostamp()-Gtokenexpsec {
|
||||
return nil, fmt.Errorf("verify exptimes timeout oid=%v", onlinerow["id"])
|
||||
}
|
||||
if c.Toint(onlinerow["usrchg"]) == 9 {
|
||||
csql := c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", auth["_o"])
|
||||
|
|
@ -60,17 +73,24 @@ func Verifyuser(db *c.CiyMysql, post *c.CiyPost) (map[string]any, error) {
|
|||
}
|
||||
}
|
||||
if c.Toint(onlinerow["usrchg"]) == 2 {
|
||||
post.W.Header().Set(Gtokenfield+"re", "true")
|
||||
post.W.Header().Set("_re", "true")
|
||||
}
|
||||
if c.Toint(onlinerow["exptimes"]) > c.Tostamp() {
|
||||
return auth, nil
|
||||
}
|
||||
exptimes := c.Tostamp() + 86400
|
||||
exptimes := c.Tostamp() + Gtokenswapsec
|
||||
sid := c.Randstr(10)
|
||||
auth["_s"] = sid
|
||||
authstr := c.JSON_Str(auth)
|
||||
newauth := c.Encrypt(authstr, "E", Gtokensalt)
|
||||
post.W.Header().Set(Gtokenfield, newauth)
|
||||
ctx := r.Context().Value(c.GhttpKey)
|
||||
if ctx != nil {
|
||||
reqCtx := ctx.(*c.RequestContext)
|
||||
if reqCtx != nil {
|
||||
reqCtx.CiyAuth = newauth
|
||||
}
|
||||
}
|
||||
//post.W.Header().Set(Gtokenfield, newauth)
|
||||
userid := c.Toint(auth["id"])
|
||||
db.UserID = userid
|
||||
updata := map[string]any{}
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
*/
|
||||
|
||||
$_token = array();
|
||||
$_token['type'] = 'cookie'; //cookie(更安全) 、 localstorage(兼容性好)
|
||||
$_token['swapsec'] = 3600; //更换JWT时间
|
||||
$_token['expsec'] = 86400*7; //过期退出时间
|
||||
$_token['type'] = 'localstorage'; //cookie(更安全,只支持https) 、 localstorage(兼容性好)
|
||||
$_token['swapsec'] = 6; //更换JWT时间
|
||||
$_token['expsec'] = 86400 * 7; //过期退出时间
|
||||
$_token['field'] = 'ciyadm';
|
||||
$_token['salt'] = 'bka02$59gG'; //做数据加解密时的加密因子,每个项目都不要相同。
|
||||
|
||||
|
|
@ -33,11 +33,11 @@ function verifyfast() {
|
|||
function verifyuser() {
|
||||
global $db;
|
||||
global $_token;
|
||||
if (isset($_COOKIE[$_token['field']]))
|
||||
if ($_token['type'] == 'cookie')
|
||||
$ciyauth = $_COOKIE[$_token['field']];
|
||||
else if (isset($_SERVER['HTTP_CIYAUTH']))
|
||||
$ciyauth = $_SERVER['HTTP_CIYAUTH'];
|
||||
else
|
||||
$ciyauth = $_SERVER['HTTP_CIYAUTH'];
|
||||
if (!$ciyauth)
|
||||
$ciyauth = get('_ciyauth');
|
||||
$auth = json_decode(encrypt($ciyauth, 'D', $_token['salt']), true);
|
||||
if ($auth == null)
|
||||
|
|
@ -76,12 +76,10 @@ function verifyuser() {
|
|||
$enauth = encrypt($authstr, 'E', $_token['salt']);
|
||||
|
||||
if ($_token['type'] == 'cookie') {
|
||||
$headercookie = 'Set-Cookie: ' . $_token['field'] . '=' . $enauth . '; expires=' . gmdate('D, d-M-Y H:i:s T', time() + $_token['swapsec'] + $_token['expsec']) . '; path=/; httponly';
|
||||
if (ishttps())
|
||||
$headercookie .= '; SameSite=None; Secure';
|
||||
header($headercookie); //Cookie方式,安全性好
|
||||
$headercookie = 'Set-Cookie: ' . $_token['field'] . '=' . $enauth . '; expires=' . gmdate('D, d-M-Y H:i:s T', time() + $_token['swapsec'] + $_token['expsec']) . '; path=/; httponly; SameSite=None; Secure';
|
||||
header($headercookie);
|
||||
} else {
|
||||
$_token['__ciyauth'] = $enauth; //Localstorage方式,兼容性更好
|
||||
$_token['__ciyauth'] = $enauth;
|
||||
//header('_ciyauth: ' . $enauth);
|
||||
}
|
||||
return $auth;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ func DataSSE_demo(w http.ResponseWriter, r *http.Request) bool {
|
|||
return false
|
||||
}
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, err := admin.Verifyuser(c.CiyDB, post)
|
||||
rsuser, err := admin.Verifyuser(r, c.CiyDB, post)
|
||||
if err != nil {
|
||||
c.SSESend_event(w, "请重新登录")
|
||||
return false
|
||||
|
|
@ -43,7 +43,7 @@ func DataSSE_demo_ch(w http.ResponseWriter, r *http.Request) bool {
|
|||
return false
|
||||
}
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, err := admin.Verifyuser(c.CiyDB, post)
|
||||
rsuser, err := admin.Verifyuser(r, c.CiyDB, post)
|
||||
if err != nil {
|
||||
c.SSESend_event(w, "请重新登录")
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -0,0 +1,251 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
<style>
|
||||
.tabledepart {
|
||||
white-space: nowrap;
|
||||
background: var(--bg1);
|
||||
min-width: 10em;
|
||||
padding: 0.5em 0;
|
||||
border-radius: 0.5em;
|
||||
line-height: 2em;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tabledepart>div {
|
||||
padding: 0 0.5em;
|
||||
transition: all 0.8s;
|
||||
}
|
||||
|
||||
.tabledepart>div.selected {
|
||||
color: var(--man5);
|
||||
background: var(--bg2);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<form class="search" onsubmit="table.search(this,'btn');return false;">
|
||||
<ul></ul>
|
||||
<div>
|
||||
<div class="sinps"></div>
|
||||
<div class="sbtns">
|
||||
<button class="lang btn" type="submit">查询</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<div style="display:flex;flex:1;min-height: 0;">
|
||||
<div class="hidden-dn-sm" style="margin-top:0.5em;overflow: overlay;margin-right: 0.5em;">
|
||||
<div class="tabledepart"></div>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;min-width: 0;">
|
||||
<div class="topbtn">
|
||||
<a class="lang btn" onclick="edit(0)">添加管理员</a>
|
||||
<a class="lang btn" onclick="multiin()">导入</a>
|
||||
<a class="lang btn" onclick="exportxls()">导出</a>
|
||||
</div>
|
||||
<div class="table">
|
||||
<div class="loading col-24">Loading...</div>
|
||||
<div class="list">
|
||||
</div>
|
||||
<div>
|
||||
<div class="btmbtn">
|
||||
<a class="lang btn def" onclick="ciyfn.select_all(table)">全选</a>
|
||||
<a class="lang btn def" onclick="ciyfn.select_diff(table)">反选</a>
|
||||
|
|
||||
<a class="lang btn dag" onclick="ciyfn.select_callfunc(table, this,'del','已选{n}条,是否批量删除?',{},function(json){table.delline(json)})">批量删除</a>
|
||||
</div>
|
||||
<div class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="alert_multiin" style="display:none;">
|
||||
<div style="display:flex;">
|
||||
<div>
|
||||
<ciy-upload com="file" />
|
||||
</div>
|
||||
<div style="margin-left:0.3em;">
|
||||
<a class="lang btn btn-sm def" href="/ud/inpl/zc_admin.xlsx" target="_blank">下载导入模板</a><br />
|
||||
<div class="lang">每次导入建议不超过1000条</div>
|
||||
<div class="lang">导入更新,首列为导出的行码</div>
|
||||
<div class="lang">请按模版列填写</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_edit" style="display:none;">
|
||||
<div class="char4 row">
|
||||
<div class="ciy-form col-24 col-sm-8">
|
||||
<div>
|
||||
<ciy-upload path="{Y}/{m}{d}/avar" showwh="13em" com="icon" num="1" type="jpg,png" zipjpg="0.7" imgwidth="400" imgheight="400" zipext="jpg" style="justify-content: center;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-8">
|
||||
<label class="lang imp">姓名</label>
|
||||
<div>
|
||||
<input type="text" name="name" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-8">
|
||||
<label class="lang imp">状态</label>
|
||||
<div>
|
||||
<ciy-select com="stpstatus" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-8">
|
||||
<label class="lang imp">手机号</label>
|
||||
<div>
|
||||
<input type="text" name="mobile" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-8">
|
||||
<label class="lang imp">性别</label>
|
||||
<div>
|
||||
<ciy-select com="sex" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-16">
|
||||
<label class="lang">所属组织</label>
|
||||
<div>
|
||||
<ciy-selcas com="departid" all="本级" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-16">
|
||||
<label class="lang" id="id_role_label">岗位角色</label>
|
||||
<div id="id_role">
|
||||
<ciy-select com="roleid" minwidth="10em" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
var Glob = {};
|
||||
ciyfn.pageload(function () {
|
||||
table = new ciyclass.table({
|
||||
dom: '.table'
|
||||
, url: 'init'
|
||||
, pagecount: 10
|
||||
, fn_beforedata: function (json) {
|
||||
if (json.once)
|
||||
filldepart(json.once.zc_depart);
|
||||
ciyfn.fillsearch({
|
||||
searchdom: '.search'
|
||||
, data: json
|
||||
, liall: '全部'
|
||||
, lidata: 'stpstatus'
|
||||
, liclick: function (dom) {
|
||||
table.search(dom, 'li');
|
||||
}
|
||||
});
|
||||
return json;
|
||||
}
|
||||
, fn_tdcontent: function (key, datashow, field, data) {
|
||||
if (key == '_btn') {
|
||||
var html = '';
|
||||
html += `<a class="lang btn" onclick="menubtn(this, 'edit')">修改</a>`;
|
||||
html += `<a class="lang btn warn" onclick="menubtn(this, 'repass')">重置密码</a>`;
|
||||
return html;
|
||||
}
|
||||
}
|
||||
});
|
||||
table.callpage(1);
|
||||
});
|
||||
function filldepart(departs) {
|
||||
departs = ciyfn.conv_treerow(departs, 0, 0);
|
||||
var html = '<div data-id="" class="lang selected">全部</div>';
|
||||
for (var i in departs) {
|
||||
var deep = toint(departs[i]['_deep']);
|
||||
html += '<div data-id="' + departs[i]['id'] + '" class="lang">' + ' '.repeat(deep) + departs[i]['name'] + '</div>';
|
||||
}
|
||||
$5('.tabledepart').html(html);
|
||||
$5('.tabledepart').on('click', 'div', function (e) {
|
||||
$5('.tabledepart .selected').removeClass('selected');
|
||||
$5(e.currentTarget).addClass('selected');
|
||||
var id = $5(e.currentTarget).attr('data-id');
|
||||
table.post.departid = id;
|
||||
table.callpage(1);
|
||||
});
|
||||
}
|
||||
function chgdepart(departid) {
|
||||
table.post.departid = departid;
|
||||
table.callpage(1);
|
||||
}
|
||||
function menubtn(dom, btn) {
|
||||
var id = $5(dom).parent('tr').attr('data-id');
|
||||
if (btn == 'edit') {
|
||||
edit(id);
|
||||
}
|
||||
if (btn == 'repass') {
|
||||
ciyfn.callfastfunc(dom, '是否重置密码?', 'repass', { id: id }, function (json) { ciyfn.alert(json.msg) });
|
||||
}
|
||||
}
|
||||
function edit(id) {
|
||||
ciyfn.alert({
|
||||
title: id == 0 ? '新建' : '修改'
|
||||
, width: 'pc'
|
||||
, content: document.getElementById("alert_edit").innerHTML
|
||||
//, noparent:true
|
||||
, fn_showed: function (doc, dom) {
|
||||
Glob.edit = id;
|
||||
if (id == 0 && !table.data[0])
|
||||
table.data[0] = { stpstatus: 10, _urole: [] };
|
||||
$5('[name=id]', dom).val(table.data[id].id);
|
||||
$5('[name=name]', dom).val(table.data[id].name);
|
||||
$5('[name=mobile]', dom).val(table.data[id].mobile);
|
||||
ciycmp({ dom: $5('[com=icon]', dom), value: table.data[id].icon });
|
||||
ciycmp({ dom: $5('[com=stpstatus]', dom), value: table.data[id].stpstatus, range: 'stpstatus' });
|
||||
ciycmp({ dom: $5('[com=sex]', dom), value: table.data[id].sex, range: 'sex' });
|
||||
ciycmp({ dom: $5('[com=departid]', dom), value: table.data[id].departid, range: table.once.zc_depart });
|
||||
ciycmp({ dom: $5('[com=roleid]', dom), value: table.data[id].roleid, range: table.once.zc_role });
|
||||
}
|
||||
, btns: ["提交", "*关闭"]
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == "关闭")
|
||||
return opn.close();
|
||||
opn.inputs.id = id;
|
||||
if (ciyfn.throttle(opn.dombtn)) return;
|
||||
ciyfn.callfunc('update', opn.inputs, function (json) {
|
||||
table.updateline(json);
|
||||
opn.close();
|
||||
ciyfn.toast('提交成功');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
function multiin() {
|
||||
ciyfn.table_multiin('importxls', document.getElementById("alert_multiin").innerHTML, function (json) {
|
||||
ciyfn.toast('导入成功');
|
||||
table.cachecount = -1;
|
||||
table.callpage();
|
||||
});
|
||||
}
|
||||
function exportxls() {
|
||||
ciyfn.table_exportxls('exportxls', table, function (json) {
|
||||
ciyfn.alert({
|
||||
content: '<div style="text-align:center;"><span class="lang">导出数据已生成</span><br/><br/><a class="lang btn lg" href="' + json.url + '" target="_blank">下载数据</a></div>'
|
||||
, btns: null
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,523 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class catlist {
|
||||
static function setwhere($db, $post) {
|
||||
$query = $post->get('query');
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('departid', $post->get('departid'));
|
||||
$liid = objint($query, 'liid');
|
||||
if ($liid > 0)
|
||||
$csql->where('stpstatus', $liid);
|
||||
$csql->where('name like', objstr($query, 'name'));
|
||||
$csql->where('mobile like', objstr($query, 'mobile'));
|
||||
$csql->where('sex', objstr($query, 'sex'));
|
||||
$csql->wheredaterange('logintimes', objstr($query, 'logintimes'));
|
||||
$csql->wheredaterange('addtimes', objstr($query, 'addtimes'));
|
||||
$order = objstr($query, 'order', 'id desc');
|
||||
$csql->order($order);
|
||||
$query['order'] = $order;
|
||||
return [$query, $csql];
|
||||
}
|
||||
public static function json_init() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$pageno = $post->getint('pageno', 1);
|
||||
$pagecount = $post->getint('pagecount', 10);
|
||||
$csql->limit($pageno, $pagecount);
|
||||
$mainrowcount = $post->getint('count');
|
||||
$rows = $db->get($csql, $mainrowcount);
|
||||
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = $db->getfield($field, 'zc_admin');
|
||||
foreach ($field as $fr => $v) {
|
||||
if ($post->is('_' . $fr))
|
||||
$field[$fr]['c'] = ',' . $field[$fr]['c'];
|
||||
}
|
||||
$fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
|
||||
$ret['field'] = $field;
|
||||
$ret['fshow'] = $fshow;
|
||||
}
|
||||
|
||||
if ($post->getbool('once')) {
|
||||
$ret['once'] = array();
|
||||
$input = array();
|
||||
$input[] = array(
|
||||
'type' => 'input',
|
||||
'form' => 'name',
|
||||
'name' => '姓名',
|
||||
'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'input',
|
||||
'form' => 'mobile',
|
||||
'name' => '手机号',
|
||||
'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'select',
|
||||
'form' => 'sex',
|
||||
'name' => '性别',
|
||||
'select' => 'sex',
|
||||
'all' => '全部'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'daterange',
|
||||
'form' => 'logintimes',
|
||||
'name' => '登录时间'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'daterange',
|
||||
'form' => 'addtimes',
|
||||
'name' => '注册时间'
|
||||
);
|
||||
$ret['once']['input'] = $input;
|
||||
$csql = (new \ciy\sql('zc_depart'))->column('id,upid,name,isuse');
|
||||
$ret['once']['zc_depart'] = $db->get($csql);
|
||||
$csql = new \ciy\sql('zc_role');
|
||||
$csql->column('id,name');
|
||||
$ret['once']['zc_role'] = $db->get($csql);
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_update() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
$id = $post->getint('id');
|
||||
$name = $post->get('name');
|
||||
if (empty($name))
|
||||
return errjson('请填写姓名');
|
||||
$stpstatus = $post->getint('stpstatus');
|
||||
if ($stpstatus <= 0)
|
||||
return errjson('请填写状态');
|
||||
$mobile = $post->get('mobile');
|
||||
if (empty($mobile))
|
||||
return errjson('请填写手机号');
|
||||
$sex = $post->getint('sex');
|
||||
if ($sex <= 0)
|
||||
return errjson('请填写性别');
|
||||
$departid = $post->getint('departid');
|
||||
if ($departid == 0)
|
||||
return errjson('请选择组织/部门');
|
||||
$roleid = $post->getint('roleid');
|
||||
$icon = $post->get('icon');
|
||||
$datarow = null;
|
||||
if ($id > 0) {
|
||||
if (nopower($db, $rsuser['id'], 'p500u'))
|
||||
return errjson('您未被授权操作修改');
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
return errjson('数据不存在');
|
||||
if ($datarow['roleid'] != $roleid) {
|
||||
if (nopower($db, $rsuser['id'], 'p500r'))
|
||||
return errjson('您没有赋予角色的权限');
|
||||
} else
|
||||
$roleid = 0;
|
||||
} else {
|
||||
if (nopower($db, $rsuser['id'], 'p500a'))
|
||||
return errjson('您未被授权操作新增');
|
||||
if (nopower($db, $rsuser['id'], 'p500r'))
|
||||
$roleid = 0;
|
||||
}
|
||||
if ($roleid > 0) {
|
||||
$csql = new \ciy\sql('zc_role');
|
||||
$csql->where('id', $roleid);
|
||||
$rolerow = $db->getone($csql);
|
||||
if (!is_array($rolerow))
|
||||
return errjson('角色不存在');
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('mobile', $mobile);
|
||||
$csql->column('id');
|
||||
$chkid = toint($db->get1($csql));
|
||||
if ($chkid > 0 && (($id > 0 && $chkid != $id) || $id == 0))
|
||||
throw new \Exception('CIYIGN数据已存在');
|
||||
|
||||
$updata = array();
|
||||
$updata['icon'] = $icon;
|
||||
$updata['name'] = $name;
|
||||
$updata['stpstatus'] = $stpstatus;
|
||||
$updata['mobile'] = $mobile;
|
||||
$updata['sex'] = $sex;
|
||||
$updata['departid'] = $departid;
|
||||
$updata['roleid'] = $roleid;
|
||||
if ($roleid > 0) {
|
||||
$updata['power'] = $rolerow['power'];
|
||||
}
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
if ($id > 0) {
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
if ($stpstatus == 10) {
|
||||
if ($roleid > 0 || $datarow['name'] != $name || $datarow['icon'] != $icon)
|
||||
if ($db->execute('update zc_online set usrchg=2 where user=?', array($id)) === false)
|
||||
throw new \Exception('更新online失败:' . $db->error);
|
||||
} else {
|
||||
if ($db->execute('delete from zc_online where user=?', array($id)) === false)
|
||||
throw new \Exception('删除online失败:' . $db->error);
|
||||
}
|
||||
if ($datarow['name'] != $name)
|
||||
$db->execute('update zc_online set usrchg=2');
|
||||
} else {
|
||||
$updata['addtimes'] = tostamp();
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('新增失败:' . $db->error);
|
||||
$id = $db->insert_id();
|
||||
if ($db->execute('update zc_online set usrchg=2') === false)
|
||||
throw new \Exception('更新online失败:' . $db->error);
|
||||
}
|
||||
$updata['id'] = $id;
|
||||
savelogdb($db, $rsuser['id'], 'zc_admin', $datarow, $updata);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['data'] = $updata;
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_del() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
if (nopower($db, $rsuser['id'], 'p500d'))
|
||||
return errjson('您未被授权操作');
|
||||
|
||||
$post = new \ciy\post();
|
||||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
$delid = $row['id'];
|
||||
if ($rsuser['id'] == $delid)
|
||||
throw new \Exception('CIYIGN不能删除本人');
|
||||
if ($row['id'] == 10)
|
||||
throw new \Exception('CIYIGN不能删除超级管理员');
|
||||
delme($db, $delid, 'zc_admin');
|
||||
$db->execute('delte from zc_online where user=?', array($delid));
|
||||
savelogdb($db, $rsuser['id'], 'zc_admin', $row, null);
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$db->execute('update zc_online set usrchg=2');
|
||||
$ret['ids'] = $vids;
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_repass() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
global $_token;
|
||||
if (nopower($db, $rsuser['id'], 'p500p'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$id = $post->getint('id');
|
||||
$newpass = rand(100000, 999999);
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['trytime'] = 0;
|
||||
$updata['password'] = sha256($newpass . $_token['salt']);
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
if ($db->execute('delete from zc_online where user=?', array($id)) === false)
|
||||
throw new \Exception('删除online失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['msg'] = '重置后密码: ' . $newpass;
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_exportxls() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
if (nopower($db, $rsuser['id'], 'p500e'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$rows = $db->get($csql);
|
||||
if (count($rows) > 10000)
|
||||
return errjson('将导出' . count($rows) . '条,不建议超过1万条,请筛选缩小范围');
|
||||
$fields = array();
|
||||
$fields[] = array('width' => 60, 'style' => 'c', 'field' => 'id', 'name' => '行码');
|
||||
$fields[] = array('width' => 100, 'style' => 'l', 'field' => 'name', 'name' => '姓名');
|
||||
$fields[] = array('width' => 60, 'style' => 'c', 'field' => 'stpstatus', 'name' => '状态');
|
||||
$fields[] = array('width' => 100, 'style' => 'l', 'field' => 'mobile', 'name' => '手机号');
|
||||
$fields[] = array('width' => 60, 'style' => 'c', 'field' => 'sex', 'name' => '性别');
|
||||
$fields[] = array('width' => 100, 'style' => 'l', 'field' => 'departid', 'name' => '所属组织');
|
||||
$fields[] = array('width' => 100, 'style' => 'l', 'field' => 'logintimes', 'name' => '活跃时间');
|
||||
$fields[] = array('width' => 100, 'style' => 'l', 'field' => 'addtimes', 'name' => '注册时间');
|
||||
$code_stpstatus = getcatas($db, 'stpstatus', 'zc_cata');
|
||||
$code_sex = getcatas($db, 'sex', 'zc_cata');
|
||||
$csql = (new \ciy\sql('zc_depart'))->column('id,upid,name');
|
||||
$code_departid = $db->get($csql);
|
||||
$datas = array();
|
||||
foreach ($rows as $row) {
|
||||
$dat = array();
|
||||
foreach ($fields as $field) {
|
||||
$field = $field['field'];
|
||||
$val = isset($row[$field]) ? $row[$field] : '';
|
||||
if ($field == 'id')
|
||||
$val = enid($val);
|
||||
if ($field == 'stpstatus')
|
||||
$val = ccode($code_stpstatus, $val);
|
||||
if ($field == 'sex')
|
||||
$val = ccode($code_sex, $val);
|
||||
if ($field == 'departid')
|
||||
$val = implode('-', mcode($code_departid, $val));
|
||||
if ($field == 'logintimes')
|
||||
$val = ($val == 0 ? '--' : date('Y-m-d H:i', $val));
|
||||
if ($field == 'addtimes')
|
||||
$val = ($val == 0 ? '--' : date('Y-m-d H:i', $val));
|
||||
$dat[] = $val;
|
||||
}
|
||||
$datas[] = $dat;
|
||||
}
|
||||
|
||||
$param = array();
|
||||
$param['field'] = $fields;
|
||||
$param['data'] = $datas;
|
||||
|
||||
$param['sheetname'] = '数据报表';
|
||||
$param['titleheight'] = '25'; //列头高度
|
||||
$param['landscape'] = true; //横向打印
|
||||
$param['fixtopage'] = true; //打印整个工作表
|
||||
|
||||
$param['toptitle'] = '管理员数据报表';
|
||||
// $param['total'] = array();
|
||||
// $param['total'][] = array('name'=>'合计','merge'=>8,'style'=>'l');
|
||||
// $param['total'][] = array('name'=>'=SUM(R[-'.count($datas).']C:R[-1]C)','style'=>'r');
|
||||
// $param['total'][] = array('name'=>'=MAX(R[-'.count($datas).']C:R[-1]C)','style'=>'r');
|
||||
// $param['total'][] = array('name'=>'','style'=>'l');
|
||||
// $param['total'][] = array('name'=>'','style'=>'l');
|
||||
|
||||
//$param['rowstop'] = '<Row ss:Height="45"><Cell ss:MergeAcross="4" ss:StyleID="cap"><Data ss:Type="String">众产CIYPHP</Data></Cell></Row>';//顶部行
|
||||
//$param['rowsfooter'] = '<Row><Cell ss:MergeAcross="1"><Data ss:Type="String" ss:StyleID="r">合计</Data></Cell><Cell ss:Formula="=SUM(R[-2]C:R[-1]C)"><Data ss:Type="Number"></Data></Cell></Row>';//底部行
|
||||
|
||||
$str = \ciy\excel::general_excel_xml($param);
|
||||
$filename = '';
|
||||
if (empty($filename))
|
||||
$filename = date('Y-m-d_H-i-s') . rand(1000, 9999);
|
||||
$filename .= '.xls';
|
||||
file_put_contents(PATH_WEB . 'ud/tmp/' . $filename, $str);
|
||||
return succjson(array('url' => '/ud/tmp/' . $filename));
|
||||
}
|
||||
public static function json_importxls_in() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
if (nopower($db, $rsuser['id'], 'p500a'))
|
||||
return errjson('您未被授权操作新增');
|
||||
|
||||
$post = new \ciy\post();
|
||||
$file = $post->get('file');
|
||||
if (!file_exists(PATH_WEB . 'ud/' . $file))
|
||||
return errjson('文件不存在');
|
||||
require_once PATH_ROOT . '../libs/phpoffice/autoload.php';
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load(PATH_WEB . 'ud/' . $file);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$datas = $sheet->toArray('', true, true, false);
|
||||
$datacnt = count($datas);
|
||||
if ($datacnt < 2)
|
||||
return errjson('数据为空');
|
||||
$html = '';
|
||||
$headsn = array();
|
||||
$headsn[] = '姓名.name';
|
||||
$headsn[] = '手机号.mobile';
|
||||
$headsn[] = '性别.sex';
|
||||
$headsn[] = '所属组织.departid';
|
||||
$xlsidx = 1;
|
||||
if (empty($datas[0][count($headsn) - 1]))
|
||||
$xlsidx = 2;
|
||||
$heads = array();
|
||||
foreach ($headsn as $_head) {
|
||||
$hd = explode('.', $_head);
|
||||
if (count($hd) < 2)
|
||||
continue;
|
||||
$heads[] = array(
|
||||
'idx' => array_search($hd[0], $datas[$xlsidx - 1]),
|
||||
'fld' => $hd[1],
|
||||
'name' => $hd[0]
|
||||
);
|
||||
}
|
||||
$code_sex = getcatas($db, 'sex', 'zc_cata');
|
||||
$csql = (new \ciy\sql('zc_depart'))->column('id,upid,name');
|
||||
$code_departid = $db->get($csql);
|
||||
$html .= '<div class="table">';
|
||||
$html .= '<table><tbody><tr>';
|
||||
$html .= '<th>#</th>';
|
||||
foreach ($heads as $arr) {
|
||||
$html .= '<th>' . $arr['name'] . '</th>';
|
||||
}
|
||||
$html .= '</tr>';
|
||||
$cnt = 0;
|
||||
$uniques = array();
|
||||
$id = 0;
|
||||
for ($rowidx = $xlsidx; $rowidx < $datacnt; $rowidx++) {
|
||||
$lineidx = $rowidx - $xlsidx + 1;
|
||||
$hrhtml = '';
|
||||
$firsthtml = '<td><div>' . $lineidx . '</div></td>';
|
||||
$bempty = true;
|
||||
$unqs = array();
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
foreach ($heads as $arr) {
|
||||
$name = $arr['name'];
|
||||
$errmsg = ''; //数据有误,显示红色说明
|
||||
$showdat = ''; //显示在表格中的数据
|
||||
if ($arr['idx'] > -1)
|
||||
$showdat = trim($datas[$rowidx][$arr['idx']]);
|
||||
if ($showdat == '--')
|
||||
$showdat = '';
|
||||
$value = $showdat; //在表单中的数据(转换后)
|
||||
$ext = ''; //扩展表单
|
||||
if ($name == '行码') {
|
||||
if (empty($showdat)) {
|
||||
$value = 0;
|
||||
$showdat = '<kbd>新增</kbd>';
|
||||
} else {
|
||||
$id = deid($showdat);
|
||||
if ($id == 0)
|
||||
$errmsg = $name . '解析错误';
|
||||
else {
|
||||
$csqlchk = new \ciy\sql('zc_admin');
|
||||
$csqlchk->where('id', $id)->column('id');
|
||||
$chkid = toint($db->get1($csqlchk));
|
||||
if ($chkid != $id)
|
||||
$errmsg = $name . '在数据库中不存在';
|
||||
$value = $id;
|
||||
}
|
||||
}
|
||||
} else if ($name == '姓名') {
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '为必填项';
|
||||
}
|
||||
} else if ($name == '手机号') {
|
||||
$csql->where('mobile', $showdat);
|
||||
$unqs[] = $showdat;
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '为必填项';
|
||||
}
|
||||
} else if ($name == '性别') {
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '为必填项';
|
||||
} else {
|
||||
$value = dcode($code_sex, $showdat);
|
||||
if ($value == -1)
|
||||
$errmsg = $name . '文字与系统数据不匹配';
|
||||
}
|
||||
} else if ($name == '所属组织') {
|
||||
if (empty($showdat)) {
|
||||
$value = 0;
|
||||
} else {
|
||||
$dats = explode('-', $showdat);
|
||||
$value = dcode($code_departid, $dats[count($dats) - 1]);
|
||||
if ($value == -1)
|
||||
$errmsg = $name . '文字与系统数据不匹配';
|
||||
}
|
||||
}
|
||||
if (!empty($showdat))
|
||||
$bempty = false;
|
||||
|
||||
if (empty($errmsg))
|
||||
$hrhtml .= '<td><div>' . $showdat . '<input type="hidden" name="' . $arr['fld'] . '_' . $lineidx . '" value="' . $value . '"/>' . $ext . '</div></td>';
|
||||
else
|
||||
$hrhtml .= '<td style="background:#e09420;" title="#' . $lineidx . ':' . $errmsg . '"><div>' . $showdat . '</div></td>';
|
||||
}
|
||||
if ($bempty)
|
||||
continue;
|
||||
|
||||
if (count($unqs) > 0) {
|
||||
$unq = implode('|', $unqs);
|
||||
if (in_array($unq, $uniques))
|
||||
$firsthtml = '<td style="background:#ffe8c5;" title="#' . $lineidx . ':该行与待导入数据有重复"><div class="lang">重复</div></td>';
|
||||
else {
|
||||
$uniques[] = $unq;
|
||||
$csql->column('id');
|
||||
$chkid = toint($db->get1($csql));
|
||||
if ($chkid > 0 && (($id > 0 && $chkid != $id) || $id == 0))
|
||||
$firsthtml = '<td style="background:#ffe8c5;" title="#' . $lineidx . ':该行与数据库数据有重复"><div class="lang">重复</div></td>';
|
||||
}
|
||||
}
|
||||
$html .= '<tr>' . $firsthtml . $hrhtml . '</tr>';
|
||||
$cnt++;
|
||||
}
|
||||
$html .= '</tbody></table></div>';
|
||||
$html .= '<input type="hidden" name="total" value="' . $cnt . '"/>';
|
||||
$html .= '<code>共' . $cnt . '条数据</code>';
|
||||
return succjson(array('html' => $html, 'count' => $cnt));
|
||||
}
|
||||
public static function json_importxls_data() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
if (nopower($db, $rsuser['id'], 'p500a'))
|
||||
return errjson('您未被授权操作新增');
|
||||
$post = new \ciy\post();
|
||||
$total = $post->getint('total');
|
||||
try {
|
||||
$db->begin();
|
||||
for ($i = 1; $i <= $total; $i++) {
|
||||
$id = $post->getint('id_' . $i);
|
||||
$name = $post->get('name_' . $i);
|
||||
$mobile = $post->get('mobile_' . $i);
|
||||
$sex = $post->get('sex_' . $i);
|
||||
$departid = $post->get('departid_' . $i);
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
$csql->where('mobile', $mobile);
|
||||
$csql->column('id');
|
||||
$chkid = toint($db->get1($csql));
|
||||
if ($chkid > 0 && (($id > 0 && $chkid != $id) || $id == 0))
|
||||
throw new \Exception('CIYIGN发现数据有重复');
|
||||
|
||||
$updata = array();
|
||||
$updata['name'] = $name;
|
||||
$updata['mobile'] = $mobile;
|
||||
$updata['stpstatus'] = 10;
|
||||
$updata['sex'] = $sex;
|
||||
$updata['departid'] = $departid;
|
||||
$updata['addtimes'] = tostamp();
|
||||
$csql = new \ciy\sql('zc_admin');
|
||||
if ($id == 0) {
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('新增失败:' . $db->error);
|
||||
} else {
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
}
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$db->execute('update zc_online set usrchg=2');
|
||||
return succjson();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
namespace web\admin\demo\dyn;
|
||||
|
||||
class demo_ecc_ukey_ad {
|
||||
class ecc_ukey_ad {
|
||||
public static function json_checkecc() {
|
||||
$post = new \ciy\post();
|
||||
$pubkey = $post->get('pubkey');
|
||||
|
|
@ -22,41 +22,33 @@
|
|||
websocket示例。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="dyn/sse.html" target="_blank">SSE</a>
|
||||
<a class="btn sm" href="sse.html" target="_blank">SSE</a>
|
||||
SSE示例。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="bs/" target="_blank">bigscreen</a>
|
||||
数据大屏实现原理。
|
||||
<a class="btn sm" href="realip.html" target="_blank">realip</a>
|
||||
复杂网络环境下获取真实ip
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_rsa.html" target="_blank">rsa sign</a>
|
||||
<a class="btn sm" href="rsa.html" target="_blank">rsa sign</a>
|
||||
RSA私钥签名
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_ecc_ukey_ad.html" target="_blank">ecc sign</a>
|
||||
<a class="btn sm" href="ecc_ukey_ad.html" target="_blank">ecc sign</a>
|
||||
ECC UKey签名(VN)
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_web3.html" target="_blank">web3</a>
|
||||
<a class="btn sm" href="web3.html" target="_blank">web3</a>
|
||||
web3登录、签名、验签
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="dyn/mail.html" target="_blank">mail</a>
|
||||
<a class="btn sm" href="mail.html" target="_blank">mail</a>
|
||||
Mail收发邮件。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="dyn/openai.html" target="_blank">deepseek</a>
|
||||
<a class="btn sm" href="openai.html" target="_blank">deepseek</a>
|
||||
DeepSeek接口。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="tool_alipaycb.html" target="_blank">alipaycb</a>
|
||||
阿里API,回调数据分析
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="tool_realip.html" target="_blank">realip</a>
|
||||
复杂网络环境下获取真实ip
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
namespace web\admin\demo\dyn;
|
||||
|
||||
class tool_realip {
|
||||
class realip {
|
||||
public static function json_realip() {
|
||||
$post = new \ciy\post();
|
||||
$headers = explode("\n", $post->get('header'));
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
namespace web\admin\demo\dyn;
|
||||
|
||||
class demo_rsa {
|
||||
class rsa {
|
||||
public static function json_checkrsa() {
|
||||
$post = new \ciy\post();
|
||||
$pubkey = $post->get('pubkey');
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
namespace web\admin\demo\dyn;
|
||||
|
||||
class demo_web3 {
|
||||
class web3 {
|
||||
public static function json_checkweb3() {
|
||||
$post = new \ciy\post();
|
||||
$addr = $post->get('addr');
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>GamePad手柄示例</title>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="px4 py4">
|
||||
<blockquote>getGamepads 0-3</blockquote>
|
||||
<div class="flex">
|
||||
<pre id="gamepad0"></pre>
|
||||
<pre id="gamepad1"></pre>
|
||||
<pre id="gamepad2"></pre>
|
||||
<pre id="gamepad3"></pre>
|
||||
</div>
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script>
|
||||
var Glob = {};
|
||||
function checkGamepadsHandel() {
|
||||
let gamepads = navigator.getGamepads();
|
||||
for (let i = 0; i < gamepads.length; i++) {
|
||||
let gamepad = gamepads[i];
|
||||
if (!gamepad)
|
||||
continue;
|
||||
var pre = JSON.stringify(gamepad.axes, null, 2) + '\n';
|
||||
for (var bi in gamepad.buttons) {
|
||||
pre += bi + ':' + gamepad.buttons[bi].pressed + ',' + gamepad.buttons[bi].touched + ',' + gamepad.buttons[bi].value + '\n';
|
||||
}
|
||||
$5('#gamepad' + i).text(pre);
|
||||
}
|
||||
}
|
||||
Glob._gametimer = null;
|
||||
addEventListener("gamepadconnected", (event) => {
|
||||
Glob._gametimer = setInterval(checkGamepadsHandel, 50);
|
||||
});
|
||||
addEventListener("gamepaddisconnected", (event) => {
|
||||
clearInterval(Glob._gametimer);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -42,6 +42,7 @@
|
|||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<a class="btn" onclick="chgrange()">改选项</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -49,7 +50,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -59,7 +60,7 @@
|
|||
for (var i = 1; i < 15; i++) {
|
||||
rg.push({ id: i, name: '测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', range: rg });
|
||||
ciycmp({ dom: '[com=c]', range: rg, value: '1,3' });
|
||||
ciycmp({ dom: '[com=d]', range: [{ id: 'aa', name: 'AAA' }, { id: 'bb', name: 'BBB' }], value: 'bb' });
|
||||
|
|
@ -69,7 +70,12 @@
|
|||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue('2,4,5');
|
||||
|
|
@ -31,6 +31,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -39,20 +40,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'2023-1-2~2024-6-3', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'2023-1-2~2024-6-3', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
console.log(c);
|
||||
|
|
@ -31,6 +31,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -39,20 +40,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'1720717728', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'1720717728', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
console.log(c);
|
||||
|
|
@ -37,6 +37,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -46,23 +47,28 @@
|
|||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]' });
|
||||
c.onchange = function (d) { console.log(d) };
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value: 100, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=d]', value: "0", onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=e]', value: "023", onchange: function (d) { console.log(d) } });
|
||||
c.onchange = function (d) { showlog(d) };
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value: 100, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=d]', value: "0", onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=e]', value: "023", onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue(220);
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -37,20 +38,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'-2', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'-2', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
console.log(c);
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -37,20 +38,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'盒|20|箱', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'盒|20|箱', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
console.log(c);
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -37,20 +38,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=loc]', value: { lat: 12, lng: 34 }, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=loc]', value: { lat: 12, lng: 34 }, onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
console.log(c);
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -29,18 +30,23 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', path:'demo', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', path:'demo', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
c.setvalue('aaabbb\ncccddd');
|
||||
|
|
@ -33,6 +33,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -40,7 +41,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -50,7 +51,7 @@
|
|||
for (var i = 1; i < 5; i++) {
|
||||
rg.push({ id: i, name: '测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', range: rg });
|
||||
ciycmp({ dom: '[com=c]', range: rg, value: '1' });
|
||||
ciycmp({ dom: '[com=d]', range: [{ id: 'aa', name: 'AAA' }, { id: 'bb', name: 'BBB' }], value: 'bb' });
|
||||
|
|
@ -58,7 +59,12 @@
|
|||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue(2);
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<a class="btn" onclick="chgrange()">改选项</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
</form>
|
||||
|
|
@ -44,7 +45,7 @@
|
|||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -54,7 +55,7 @@
|
|||
for (var i = 1; i < 115; i++) {
|
||||
rg.push({ id: i, name: '测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', range: ciy_arearpc, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', range: ciy_arearpc, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', range: ciy_arearpc });
|
||||
ciycmp({ dom: '[com=c]', range: 'prodcata', value: '11031' });//11036
|
||||
ciycmp({ dom: '[com=d]', range: [{ id: 'aa', name: 'AAA' }, { id: 'bb', name: 'BBB' }], value: 'bb' });
|
||||
|
|
@ -62,7 +63,12 @@
|
|||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue('140215');
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<a class="btn" onclick="chgrange()">改选项</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
</form>
|
||||
|
|
@ -43,7 +44,7 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -53,7 +54,7 @@
|
|||
for (var i = 1; i < 115; i++) {
|
||||
rg.push({ id: i, name: '测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', range: ciy_arearpc, filter: { field: 'upid', value: '140700' } });
|
||||
ciycmp({ dom: '[com=c]', range: rg });
|
||||
ciycmp({ dom: '[com=d]', range: [{ id: 'aa', name: 'AAA' }, { id: 'bb', name: 'BBB' }], value: 'bb' });
|
||||
|
|
@ -61,7 +62,12 @@
|
|||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue('2');
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<a class="btn" onclick="chgrange()">改选项</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
</form>
|
||||
|
|
@ -44,7 +45,7 @@
|
|||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -54,7 +55,7 @@
|
|||
for (var i = 1; i < 115; i++) {
|
||||
rg.push({ id: i, name: '测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', range: rg, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', range: ciy_arearpc, filter: { field: 'upid', value: '140700' }, value: ',140721,140724,' });
|
||||
ciycmp({ dom: '[com=c]', range: rg });
|
||||
ciycmp({ dom: '[com=d]', range: [{ id: 'aa', name: 'AAA' }, { id: 'bb', name: 'BBB' }], value: 'bb' });
|
||||
|
|
@ -62,7 +63,12 @@
|
|||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
c.setvalue('2,4,5');
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -37,7 +38,7 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -47,14 +48,19 @@
|
|||
for (var i = 1; i < 114; i++) {
|
||||
rg.push({ id: i, name: '测试测试测试测试测试' + i });
|
||||
}
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]' });
|
||||
ciycmp({ dom: '[com=c]', value: '1' });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
c.setvalue(2);
|
||||
|
|
@ -29,6 +29,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -37,20 +38,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value: 'aaaa\nbbb\nccc\ndddd\neeee\nffffff\nggg', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value: 'aaaa\nbbb\nccc\ndddd\neeee\nffffff\nggg', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
c.setvalue(2000);
|
||||
|
|
@ -31,6 +31,7 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
<div style="height:30em;">占位</div>
|
||||
|
|
@ -40,20 +41,25 @@
|
|||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var c;
|
||||
ciyfn.pageload(function () {
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'15916346', onchange: function (d) { console.log(d) } });
|
||||
c = ciycmp({ dom: '[com=a]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=b]', onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', value:'15916346', onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg(){
|
||||
console.log(c);
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<body>
|
||||
|
||||
<form>
|
||||
<form onsubmit="formsubmit(event);">
|
||||
<div style="height:10em;">占位123</div>
|
||||
<div class="row" style="background:#eeeeee;">
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
|
|
@ -53,12 +53,13 @@
|
|||
</div>
|
||||
<button type="submit" class="btn lg">提交</button>
|
||||
<a class="btn" onclick="chg()">改变值</a>
|
||||
<pre id="id_result"></pre>
|
||||
<div style="height:10em;">占位</div>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
|
|
@ -66,27 +67,32 @@
|
|||
ciyfn.pageload(function () {
|
||||
var path = ciyfn.makeuploadpath('demo', ciyfn.getstorage(ciy_vars.tokenfield));
|
||||
c = ciycmp({ dom: '[com=a]', path: path });
|
||||
c.onchange = function (d) { console.log(d) };
|
||||
ciycmp({ dom: '[com=b]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=c]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=d]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=e]', path: path, onchange: function (d) { console.log(d) } });
|
||||
c.onchange = function (d) { showlog(d) };
|
||||
ciycmp({ dom: '[com=b]', path: path, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=c]', path: path, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=d]', path: path, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=e]', path: path, onchange: function (d) { showlog(d) } });
|
||||
var f = ciycmp({
|
||||
dom: '[com=f]', path: path, onchange: function (d) { console.log(d) }, fn_imgdraw: function (canvas, ctx, img) {
|
||||
dom: '[com=f]', path: path, onchange: function (d) { showlog(d) }, fn_imgdraw: function (canvas, ctx, img) {
|
||||
ctx.font = '40px Arial';
|
||||
ctx.fillStyle = '#cc0000';
|
||||
ctx.fillText('测试测试测试测试测试', 10, 60);
|
||||
}
|
||||
});
|
||||
ciycmp({ dom: '[com=g]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=h]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=i]', path: path, onchange: function (d) { console.log(d) } });
|
||||
ciycmp({ dom: '[com=g]', path: path, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=h]', path: path, onchange: function (d) { showlog(d) } });
|
||||
ciycmp({ dom: '[com=i]', path: path, onchange: function (d) { showlog(d) } });
|
||||
});
|
||||
document.querySelector('form').addEventListener('submit', function (event) {
|
||||
function formsubmit(event) {
|
||||
event.preventDefault();
|
||||
var postparam = ciyfn.getform(event.target);
|
||||
console.log(postparam);
|
||||
});
|
||||
showlog(postparam);
|
||||
}
|
||||
function showlog(dat) {
|
||||
console.log(dat);
|
||||
delete dat.dom;
|
||||
$5('#id_result').html(JSON.stringify(dat, null, 2));
|
||||
}
|
||||
function chg() {
|
||||
console.log(c);
|
||||
c.setvalue('/img/face.png');
|
||||
|
|
@ -91,27 +91,27 @@
|
|||
</div>
|
||||
<div class="bg2 px3 py3">
|
||||
<div>
|
||||
<a class="btn sm" href="demo_ajax.html" target="_blank">ajax</a>
|
||||
<a class="btn sm" href="win_ajax.html" target="_blank">ajax</a>
|
||||
通用函数。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_toast.html" target="_blank">toast</a>
|
||||
<a class="btn sm" href="win_toast.html" target="_blank">toast</a>
|
||||
通用提示框。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_showend.html" target="_blank">showend</a>
|
||||
<a class="btn sm" href="win_showend.html" target="_blank">showend</a>
|
||||
右下角叠加提示。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_alert.html" target="_blank">alert</a>
|
||||
<a class="btn sm" href="win_alert.html" target="_blank">alert</a>
|
||||
通用对话框。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_tabcard.html" target="_blank">tabcard</a>
|
||||
<a class="btn sm" href="win_tabcard.html" target="_blank">tabcard</a>
|
||||
选项卡。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_button.html" target="_blank">button</a>
|
||||
<a class="btn sm" href="win_button.html" target="_blank">button</a>
|
||||
按钮。
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -160,9 +160,13 @@
|
|||
Proxy响应式示例。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="lab/tesseract.html" target="_blank">tesseract</a>
|
||||
<a class="btn sm" href="../lab/tesseract.html" target="_blank">tesseract</a>
|
||||
文字OCR识别。
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn sm" href="demo_gamepad.html" target="_blank">gamepad</a>
|
||||
GamePad手柄控制。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ciy-form inline"><label>滑动选择</label>
|
||||
|
|
@ -177,7 +181,7 @@
|
|||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
</script>
|
||||
|
|
@ -212,7 +212,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
</script>
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
function formsubmit(event) {
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
</div>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
ciyfn.dropmenu('.btn-menu');
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
</script>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript" src="../../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
</script>
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<form class="search" onsubmit="table.search(this,'btn');return false;">
|
||||
<div>
|
||||
<div class="sinps"></div>
|
||||
<div class="sbtns">
|
||||
<button class="lang btn" type="submit">查询</button>
|
||||
<a class="lang btn def" onclick="pagehelp()">帮助</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="table">
|
||||
<div class="loading col-24">Loading...</div>
|
||||
<div class="list"></div>
|
||||
<div>
|
||||
<div class="btmbtn">
|
||||
<a class="lang btn def" onclick="ciyfn.select_all(table)">全选</a>
|
||||
<a class="lang btn def" onclick="ciyfn.select_diff(table)">反选</a>
|
||||
|
|
||||
<a class="lang btn dag" onclick="ciyfn.select_callfunc(table, this,'del','已选{n}条,确认是否删除?',{},function(json){table.delline(json)})">批量删除</a>
|
||||
</div>
|
||||
<div class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_pagehelp" style="display:none;">
|
||||
<b>调用方法</b>
|
||||
<div style="margin: 0 0 1em 1em;">
|
||||
getconfig/setconfig函数调用。<br />
|
||||
在admin/common.*中封装。<br />
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
ciyfn.pageload(function () {
|
||||
$5(document).on('keydown', function (e) {
|
||||
if (e.ctrlKey && e.keyCode == 83) {//Ctrl+S
|
||||
e.preventDefault();
|
||||
var upbtns = $5('.upbtn:not(.def)');
|
||||
upbtns.each(function (dom) {
|
||||
menubtn(dom, 'edit');
|
||||
}, 0.5);
|
||||
}
|
||||
});
|
||||
table = new ciyclass.table({
|
||||
dom: '.table'
|
||||
, url: 'init'
|
||||
, pagecount: 10
|
||||
, fn_beforedata: function (json) {
|
||||
json.list = ciyfn.conv_treerow(json.list, 0, 0);
|
||||
ciyfn.fillsearch({
|
||||
searchdom: '.search'
|
||||
, data: json
|
||||
});
|
||||
return json;
|
||||
}
|
||||
, fn_tdcontent: function (key, datashow, field, data) {
|
||||
if (key == 'types' || key == 'params') {
|
||||
return '<input style="width:100%;" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + datashow + '"/>';
|
||||
}
|
||||
if (key == '_btn') {
|
||||
var html = '';
|
||||
if (data['id'] == 0)
|
||||
html += '<a class="lang btn def upbtn" onclick="menubtn(this, \'edit\')">新增</a>';
|
||||
else
|
||||
html += '<a class="lang btn def upbtn" onclick="menubtn(this, \'edit\')">更新</a>';
|
||||
return html;
|
||||
}
|
||||
}
|
||||
});
|
||||
table.callpage(1);
|
||||
});
|
||||
function btnset(dom) {
|
||||
var domtr = $5(dom).parent('tr');
|
||||
$5('.btn.upbtn', domtr).removeClass('def');
|
||||
}
|
||||
function pagehelp() {
|
||||
ciyfn.alert({
|
||||
title: '页面帮助'
|
||||
, content: document.getElementById("alert_pagehelp").innerHTML
|
||||
});
|
||||
}
|
||||
function menubtn(dom, btn) {
|
||||
var trdom = $5(dom).parent('tr');
|
||||
var id = trdom.attr('data-id');
|
||||
if (btn == 'edit') {
|
||||
var postparam = ciyfn.getform(dom, 'TR');
|
||||
postparam.id = id;
|
||||
ciyfn.callfunc('update', postparam, function (json) {
|
||||
$5(dom).addClass('def');
|
||||
if (id == 0) {
|
||||
$5('input', trdom).val('');
|
||||
table.updateline(json);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class lineedit {
|
||||
static function setwhere($db, $post) {
|
||||
$query = $post->get('query');
|
||||
$csql = new \ciy\sql('zc_config');
|
||||
$csql->where('types like', objstr($query, 'types'));
|
||||
$csql->where('params like', objstr($query, 'params'));
|
||||
$order = objstr($query, 'order', 'id desc');
|
||||
$csql->order($order);
|
||||
$query['order'] = $order;
|
||||
return [$query, $csql];
|
||||
}
|
||||
public static function json_init() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$pageno = $post->getint('pageno', 1);
|
||||
$pagecount = $post->getint('pagecount', 10);
|
||||
$csql->limit($pageno, $pagecount);
|
||||
$mainrowcount = $post->getint('count');
|
||||
$rows = $db->get($csql, $mainrowcount);
|
||||
$rows[] = array('id' => 0, 'types' => '');
|
||||
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = '';
|
||||
$fshow = fieldadd($fshow, $field, -1, 'types', '参数代码');
|
||||
$fshow = fieldadd($fshow, $field, -1, 'params', '参数值');
|
||||
$fshow = fieldadd($fshow, $field, -1, '_btn', '操作');
|
||||
$field['types']['thwidth'] = '12em';
|
||||
$field['params']['thwidth'] = '21em';
|
||||
$ret['fshow'] = $fshow;
|
||||
$ret['field'] = $field;
|
||||
}
|
||||
if ($post->getbool('once')) {
|
||||
$ret['once'] = array();
|
||||
$input = array();
|
||||
$input[] = array(
|
||||
'type' => 'input', 'form' => 'types', 'name' => '参数代码', 'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'input', 'form' => 'params', 'name' => '参数值', 'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$ret['once']['input'] = $input;
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
public static function json_update() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p600u'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$id = $post->getint('id');
|
||||
$types = $post->get('types');
|
||||
if ($types == '')
|
||||
return errjson('请填写代码');
|
||||
$params = $post->get('params');
|
||||
$datarow = null;
|
||||
if ($id > 0) {
|
||||
$csql = new \ciy\sql('zc_config');
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
return errjson('数据不存在');
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
$csql = new \ciy\sql('zc_config');
|
||||
$csql->where('types', $types);
|
||||
$csql->column('id');
|
||||
$chkid = toint($db->get1($csql));
|
||||
if ($chkid > 0 && (($id > 0 && $chkid != $id) || $id == 0))
|
||||
throw new \Exception('CIYIGN代码重复');
|
||||
|
||||
$updata = array();
|
||||
$updata['types'] = $types;
|
||||
$updata['params'] = $params;
|
||||
$csql = new \ciy\sql('zc_config');
|
||||
if ($id > 0) {
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
} else {
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('新增失败:' . $db->error);
|
||||
$id = $db->insert_id();
|
||||
}
|
||||
$updata['id'] = $id;
|
||||
savelogdb($db, $rsuser['id'], 'zc_config', $datarow, $updata);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['data'] = $updata;
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
public static function json_del() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p600d'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql = new \ciy\sql('zc_config');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
$delid = $row['id'];
|
||||
delme($db, $delid, 'zc_config');
|
||||
savelogdb($db, $rsuser['id'], 'zc_config', $row, null);
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['ids'] = $vids;
|
||||
return succjson($ret);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,341 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<form class="search" onsubmit="search(this);return false;">
|
||||
<div>
|
||||
<div class="sinps"></div>
|
||||
<div class="sbtns">
|
||||
<button class="lang btn" type="submit">查询</button>
|
||||
<a class="lang btn" onclick="multiadd()">添加新部门</a>
|
||||
<a class="lang btn" onclick="datatxt()">部门结构</a>
|
||||
<a class="lang btn dag" onclick="deltree()">批量删除</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class='table'>
|
||||
<div class="loading">Loading...</div>
|
||||
<div class="list"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_modifyupid" style="display:none;">
|
||||
<div class="ciy-form">
|
||||
<label style="min-width:3em;" class="lang">调整到</label>
|
||||
<div>
|
||||
<ciy-select com="newupid"></select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_multiadd" style="display:none;">
|
||||
<div class="ciy-form">
|
||||
<label style="min-width:3em;" class="lang">添加到</label>
|
||||
<div>
|
||||
<ciy-select com="upid"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form v">
|
||||
<label style="min-width:3em;"><span class="lang">部门名称</span><code class="lang">(一行一个)</code></label>
|
||||
<div>
|
||||
<ciy-textarea com="multi" minheight="30em"></ciy-textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
var Glob = {};
|
||||
ciyfn.pageload(function () {
|
||||
$5(document).on('keydown', function (e) {
|
||||
if (e.ctrlKey && e.keyCode == 83) {//Ctrl+S
|
||||
e.preventDefault();
|
||||
var upbtns = $5('.upbtn:not(.def)');
|
||||
upbtns.each(function (dom) {
|
||||
menubtn(dom, 'edit');
|
||||
},0.5);
|
||||
}
|
||||
});
|
||||
table = new ciyclass.table({
|
||||
dom: '.table'
|
||||
, url: 'init'
|
||||
, thfield: function (name, key, field, json) {
|
||||
if (key == 'name')
|
||||
return '<a style="font-size: 1.5em;vertical-align: middle;padding-right: 0.5em;" onclick="exall()">⇅</a> ' + ciyfn.lang(name);
|
||||
}
|
||||
, fn_beforedata: function (json) {
|
||||
json.list = ciyfn.conv_treerow(json.list, 0, 0);
|
||||
ciyfn.fillsearch({
|
||||
searchdom: '.search'
|
||||
, data: json
|
||||
});
|
||||
return json;
|
||||
}
|
||||
, fn_trprop: function (data, json) {
|
||||
var rettxt = ' data-upid="' + data['upid'] + '"';
|
||||
if (data['_count'] == '0')
|
||||
rettxt += ' data-search="ok"';
|
||||
// if (data['_deep'] > 0)
|
||||
// rettxt += ' style="display:none;"';
|
||||
return rettxt;
|
||||
}
|
||||
, fn_tdcontent: function (key, datashow, field, data) {
|
||||
if (key == 'isuse') {
|
||||
return '<ciy-switch com="' + key + '" value="' + data[key] + '" y="显示" n="隐藏" />';
|
||||
}
|
||||
if (key == 'leaderuser') {
|
||||
return '<ciy-select com="' + key + '" value="' + data[key] + '"/>';
|
||||
}
|
||||
if (key == 'csort') {
|
||||
return '<input spellcheck="false" style="width:100%;" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + datashow + '"/>';
|
||||
}
|
||||
if (key == '_btn') {
|
||||
var html = '<a class="lang btn def upbtn" onclick="menubtn(this, \'edit\')">' + (data['id'] == 0 ? '新增' : '更新') + '</a>';
|
||||
html += '<a class="lang btn" onclick="menubtn(this, \'tz\')">调整</a>';
|
||||
return html;
|
||||
}
|
||||
if (key == 'name') {
|
||||
var deep = toint(data['_deep']);
|
||||
var html = ' '.repeat(deep);
|
||||
if (data['_count'] > 0) {
|
||||
html += '<span class="ciy-tree-dot">▶</span> <input style="margin-left: 0.3em;width:100%;" onclick="event.stopPropagation();" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + data['name'] + '"/>';
|
||||
} else {
|
||||
if (deep > 0)
|
||||
html += ' ';
|
||||
html += '<input style="width:100%;" onclick="event.stopPropagation();" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + data['name'] + '"/>';
|
||||
}
|
||||
return {
|
||||
divprop: (data['_count'] > 0 ? ' data-treeid="' + data['id'] + '"' : '') + ' data-deep="' + data['_deep'] + '" style="display: flex;" class="ciy-tree-spread"'// class="ciy-tree-spread"
|
||||
, datashow: html
|
||||
};
|
||||
}
|
||||
}
|
||||
, fn_done: function () {
|
||||
table.tree();
|
||||
var doms = $5('[com=isuse]');
|
||||
for (var i = 0; i < doms.length; i++) {
|
||||
ciycmp({
|
||||
dom: doms[i], onchange: function (e) {
|
||||
if (e.from == 'init') return;
|
||||
btnset(e.dom);
|
||||
}
|
||||
});
|
||||
}
|
||||
var doms = $5('ciy-select[com]');
|
||||
for (var i = 0; i < doms.length; i++) {
|
||||
ciycmp({
|
||||
dom: doms[i], range:'adminuser', onchange: function (e) {
|
||||
if (e.from == 'init') return;
|
||||
btnset(e.dom);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
table.callpage(1);
|
||||
});
|
||||
function exall() {
|
||||
$5('div[data-deep="0"]').trigger('click');
|
||||
}
|
||||
function search(dom) {
|
||||
Glob.key = ciyfn.getform(dom);
|
||||
$5('[data-search]').each(function (rdom) {
|
||||
var bshow = true;
|
||||
for (var k in Glob.key) {
|
||||
if (!Glob.key[k])
|
||||
continue;
|
||||
var val = $5('[name=' + k + ']', rdom).val();
|
||||
if (val.indexOf(Glob.key[k]) == -1) {
|
||||
bshow = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rdom.style.display = bshow ? '' : 'none';
|
||||
});
|
||||
}
|
||||
function btnset(dom) {
|
||||
var domtr = $5(dom).parent('tr');
|
||||
$5('.btn.upbtn', domtr).removeClass('def');
|
||||
}
|
||||
function multiadd() {
|
||||
ciyfn.alert({
|
||||
title: '添加新部门'
|
||||
, width: 'mb'
|
||||
, contentstyle: 'overflow:hidden;'
|
||||
, content: document.getElementById("alert_multiadd").innerHTML
|
||||
, fn_showed: function (doc, dom) {
|
||||
ciycmp({ dom: $5('[com="upid"]', dom), range: fillrange(), value: 0 });
|
||||
ciycmp({ dom: $5('[com="multi"]', dom) });
|
||||
}
|
||||
, btns: ["添加", "*关闭"]
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == "关闭")
|
||||
return opn.close();
|
||||
if (ciyfn.throttle(opn.dombtn)) return;
|
||||
ciyfn.callfunc('multiadd', opn.inputs, function (json) {
|
||||
ciyfn.toast('操作成功', function () {
|
||||
opn.close();
|
||||
ciyfn.sendsignal(window.top, 'manage_refresh');
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
function datatxt() {
|
||||
var tdata = new Array();
|
||||
for (var i in table.data) {
|
||||
if (table.data[i].isuse != 1)
|
||||
continue;
|
||||
tdata.push(table.data[i]);
|
||||
}
|
||||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||||
function deeptxt(tdata, upid = 0, indent = '') {
|
||||
var menutxt = '';
|
||||
for (var i in tdata) {
|
||||
if (tdata[i].upid != upid)
|
||||
continue;
|
||||
menutxt += indent + tdata[i].name + '\n';
|
||||
if (tdata[i].upid === upid)
|
||||
menutxt += deeptxt(tdata, tdata[i].id, indent + ' ');
|
||||
}
|
||||
return menutxt;
|
||||
}
|
||||
ciyfn.alert({
|
||||
title: '部门结构'
|
||||
, width: 'mb'
|
||||
, height: 'pc'
|
||||
, content: '<textarea style="height: 100%;">' + deeptxt(tdata) + '</textarea>'
|
||||
});
|
||||
}
|
||||
|
||||
function menubtn(dom, btn) {
|
||||
var domtr = $5(dom).parent('tr');
|
||||
var id = toint(domtr.attr('data-id'));
|
||||
if (btn == 'edit') {
|
||||
var postparam = ciyfn.getform(dom, 'TR');
|
||||
postparam.id = id;
|
||||
postparam.upid = table.data[id].upid;
|
||||
postparam.cbid = table.once.cbid;
|
||||
ciyfn.callfastfunc(dom, '', 'update', postparam, function (json) {
|
||||
$5(dom).addClass('def');
|
||||
});
|
||||
}
|
||||
if (btn == 'tz') {
|
||||
ciyfn.alert({
|
||||
title: '调整部门层级'
|
||||
, content: document.getElementById("alert_modifyupid").innerHTML
|
||||
, fn_showed: function (doc, dom) {
|
||||
if (id == 0)
|
||||
return;
|
||||
ciycmp({ dom: $5('[com="newupid"]', dom), range: fillrange(), value: table.data[id].upid });
|
||||
}
|
||||
, btns: ["调整", "*关闭"]
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == "关闭")
|
||||
return opn.close();
|
||||
opn.inputs.id = id;
|
||||
if (ciyfn.throttle(opn.dombtn)) return;
|
||||
ciyfn.callfunc('modifyupid', opn.inputs, function (json) {
|
||||
opn.close();
|
||||
ciyfn.sendsignal(window.top, 'manage_refresh');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
function fillrange() {
|
||||
var tdata = [];
|
||||
for (var i in table.data)
|
||||
tdata.push(table.data[i]);
|
||||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||||
var ranges = [];
|
||||
ranges.push({ id: 0, name: '顶层' });
|
||||
deephtml(tdata, 0, 1, 9);
|
||||
function deephtml(tdata, upid, deep, maxdeep) {
|
||||
if (deep > maxdeep)
|
||||
return;
|
||||
for (var i in tdata) {
|
||||
if (tdata[i].upid != upid)
|
||||
continue;
|
||||
ranges.push({ id: tdata[i].id, name: ' '.repeat(deep) + ciyfn.lang(tdata[i].name) });
|
||||
deephtml(tdata, tdata[i].id, deep + 1, maxdeep);
|
||||
}
|
||||
}
|
||||
return ranges;
|
||||
}
|
||||
function fillhtmloption(selid) {
|
||||
var html = '';
|
||||
var tdata = new Array();
|
||||
for (var i in table.data)
|
||||
tdata.push(table.data[i]);
|
||||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||||
html += '<option value="0">【顶层】</option>';
|
||||
html += deephtml(tdata, 0, selid, 1, 9);
|
||||
|
||||
function deephtml(tdata, upid, selid, deep, maxdeep) {
|
||||
if (deep > maxdeep)
|
||||
return '';
|
||||
var htmld = '';
|
||||
for (var i in tdata) {
|
||||
if (tdata[i].upid != upid)
|
||||
continue;
|
||||
htmld += '<option value="' + tdata[i].id + '"';
|
||||
if (tdata[i].id == selid)
|
||||
htmld += ' selected="true"';
|
||||
htmld += '>' + ' '.repeat(deep) + tdata[i].name + '</option>';
|
||||
htmld += deephtml(tdata, tdata[i].id, selid, deep + 1, maxdeep);
|
||||
}
|
||||
return htmld;
|
||||
}
|
||||
return html;
|
||||
}
|
||||
function deltree() {
|
||||
var array = [];
|
||||
$5('[data-id]', '.table').each(function (dom) {
|
||||
if (!$5(dom).hasClass("selected"))
|
||||
return;
|
||||
var deep = toint($5('[data-deep]', dom).attr("data-deep"));
|
||||
array.push({ id: $5(dom).attr("data-id"), deep: deep });
|
||||
});
|
||||
if (array.length == 0)
|
||||
return ciyfn.toast("请至少选择一条信息");
|
||||
ciyfn.alert('已选<span class="txt-lggg px1">' + array.length + '</span>条,确认批量删除?', function (opn) {
|
||||
opn.close();
|
||||
if (opn.btn == "关闭")
|
||||
return;
|
||||
function deldeep(deep) {
|
||||
if (deep < 0)
|
||||
return;
|
||||
var ids = [];
|
||||
for (var j = 0; j < array.length; j++) {
|
||||
if (array[j].deep == deep) {
|
||||
ids.push(array[j].id);
|
||||
}
|
||||
}
|
||||
if (ids.length == 0)
|
||||
return deldeep(deep - 1);
|
||||
var postparam = {};
|
||||
postparam.ids = ids.join(",");
|
||||
ciyfn.callfunc('del', postparam, function (json) {
|
||||
table.delline(json);
|
||||
deldeep(deep - 1);
|
||||
});
|
||||
}
|
||||
deldeep(9);
|
||||
}, { btns: ["删除", "*关闭"] });
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,182 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class multicat {
|
||||
public static function json_init() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$csql->order('csort desc,id');
|
||||
$rows = $db->get($csql);
|
||||
$ret = array('list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = $db->getfield($field, 'zc_depart');
|
||||
$fshow = fieldadd($fshow, $field, -1, '_btn', '操作');
|
||||
$field['csort']['thwidth'] = '6em';
|
||||
$field['leaderuser']['thwidth'] = '15em';
|
||||
$ret['field'] = $field;
|
||||
$ret['fshow'] = $fshow;
|
||||
}
|
||||
if ($post->getbool('once')) {
|
||||
$ret['once'] = array();
|
||||
$input = array();
|
||||
$input[] = array(
|
||||
'type' => 'input', 'form' => 'name', 'name' => '组织名称', 'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$ret['once']['input'] = $input;
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
public static function json_update() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p501u'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$updata = array();
|
||||
$id = $post->getint('id');
|
||||
$name = $post->get('name');
|
||||
if ($name == '')
|
||||
return errjson('请填写部门名称');
|
||||
$upid = $post->getint('upid');
|
||||
$csort = $post->getint('csort');
|
||||
$isuse = $post->getint('isuse');
|
||||
$leaderuser = $post->getint('leaderuser');
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
return errjson('数据不存在');
|
||||
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['name'] = $name;
|
||||
$updata['isuse'] = $isuse;
|
||||
$updata['upid'] = $upid;
|
||||
$updata['csort'] = $csort;
|
||||
$updata['leaderuser'] = $leaderuser;
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$updata['id'] = $id;
|
||||
savelogdb($db, $rsuser['id'], 'zc_depart', $datarow, $updata);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
public static function json_del() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p501d'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
$delid = $row['id'];
|
||||
delcheck($db, $delid, 'zc_admin', 'departid', '人员');
|
||||
delcheck($db, $delid, 'zc_depart', 'upid', '下级部门');
|
||||
delme($db, $delid, 'zc_depart');
|
||||
savelogdb($db, $rsuser['id'], 'zc_depart', $row, null);
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['ids'] = $vids;
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_modifyupid() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p501u'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$id = $post->getint('id');
|
||||
$newupid = $post->getint('newupid');
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
return errjson('数据不存在');
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['upid'] = $newupid;
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('操作数据库失败:' . $db->error);
|
||||
$updata['id'] = $id;
|
||||
savelogdb($db, $rsuser['id'], 'zc_depart', $datarow, $updata);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
public static function json_multiadd() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
|
||||
if (nopower($db, $rsuser['id'], 'p501u'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$upid = $post->getint('upid');
|
||||
$multi = explode("\n", $post->get('multi'));
|
||||
|
||||
$cnt = 0;
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($multi as $m) {
|
||||
$m = trim($m);
|
||||
if (empty($m))
|
||||
continue;
|
||||
$updata = array();
|
||||
$updata['name'] = $m;
|
||||
$updata['isuse'] = 1;
|
||||
$updata['upid'] = $upid;
|
||||
$updata['csort'] = 10;
|
||||
$csql = new \ciy\sql('zc_depart');
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('新增失败:' . $db->error);
|
||||
$updata['id'] = $db->insert_id();
|
||||
$cnt++;
|
||||
savelogdb($db, $rsuser['id'], 'zc_depart', null, $updata);
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
if ($cnt == 0)
|
||||
return errjson('没有任何新增');
|
||||
return succjson();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package ap
|
||||
package demo
|
||||
|
||||
import (
|
||||
"ciyon/web/admin"
|
||||
|
|
@ -12,10 +12,10 @@ import (
|
|||
"strings"
|
||||
)
|
||||
|
||||
func demo_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
||||
func normal_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
||||
ret := map[string]any{}
|
||||
query := post.Getobj("query")
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
liid := c.Getint(query, "liid")
|
||||
if liid > 0 {
|
||||
csql.Where("auditstatus", liid)
|
||||
|
|
@ -47,13 +47,13 @@ func demo_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
query["order"] = order
|
||||
return query, csql
|
||||
}
|
||||
func Demo_list(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_list(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
where, csql := demo_setwhere(post)
|
||||
where, csql := normal_setwhere(post)
|
||||
csql.Column("!content")
|
||||
pageno := post.Getint("pageno", 1)
|
||||
pagecount := post.Getint("pagecount", 10)
|
||||
|
|
@ -111,7 +111,7 @@ func Demo_list(w http.ResponseWriter, r *http.Request) bool {
|
|||
"form": "isopen",
|
||||
"type": "select",
|
||||
"name": "是否开启",
|
||||
"select": c.CiyDB.Getdbcodes("ap_demo", "isopen"),
|
||||
"select": c.CiyDB.Getdbcodes("demo_normal", "isopen"),
|
||||
"all": "全部",
|
||||
})
|
||||
input = append(input, map[string]any{
|
||||
|
|
@ -152,25 +152,24 @@ func Demo_list(w http.ResponseWriter, r *http.Request) bool {
|
|||
"select": orders,
|
||||
})
|
||||
once["input"] = input
|
||||
once["renzheng"] = c.CiyDB.Getdbcodes("ap_demo", "renzheng")
|
||||
once["renzheng"] = c.CiyDB.Getdbcodes("demo_normal", "renzheng")
|
||||
// csql = c.NewCiySQL("zc_menu")
|
||||
// csql.Column("id,name")
|
||||
// once["zc_menu"], _, _ = c.CiyDB.Get(csql)
|
||||
ret["once"] = once
|
||||
}
|
||||
ret["zc_menu"] = c.Getrelation(c.CiyDB, rows, "zc_menu", "menuid", map[string]string{"column": "id,name"}, map[string]string{"queryid": "id"})
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Demo_getdata(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_getdata(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, _userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, _userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if _userid == 0 {
|
||||
return false
|
||||
}
|
||||
id := post.Getint("id")
|
||||
ret := map[string]any{}
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql.Column("content,md")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("id", id)
|
||||
datarow, _ := c.CiyDB.Getone(csql)
|
||||
if datarow == nil {
|
||||
|
|
@ -183,11 +182,11 @@ func Demo_getdata(w http.ResponseWriter, r *http.Request) bool {
|
|||
menurows, _, _ := c.CiyDB.Get(csql)
|
||||
ret["zc_menu"] = menurows
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, _userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, _userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if _userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -233,7 +232,7 @@ func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
var datarow map[string]any
|
||||
if id > 0 {
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("id", id)
|
||||
datarow, err = c.CiyDB.Getone(csql)
|
||||
if err != nil {
|
||||
|
|
@ -246,7 +245,7 @@ func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
|
||||
var updata = map[string]any{}
|
||||
err = c.CiyDB.Tran(func() error {
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("name", name)
|
||||
csql.Column("id")
|
||||
chkid := c.Toint(c.CiyDB.Get1(csql))
|
||||
|
|
@ -285,7 +284,7 @@ func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
updata["eartmpr"] = eartmpr
|
||||
updata["content"] = content
|
||||
updata["md"] = md
|
||||
csql = c.NewCiySQL("ap_demo")
|
||||
csql = c.NewCiySQL("demo_normal")
|
||||
if id > 0 {
|
||||
csql.Where("id", id)
|
||||
_, err = c.CiyDB.Update(csql, updata)
|
||||
|
|
@ -298,7 +297,7 @@ func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return fmt.Errorf("更新失败:%v", err)
|
||||
}
|
||||
admin.SaveLogDB(c.CiyDB, "ap_demo", datarow, updata)
|
||||
admin.SaveLogDB(c.CiyDB, "demo_normal", datarow, updata)
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
|
|
@ -306,12 +305,12 @@ func Demo_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Demo_audit(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_audit(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -319,11 +318,15 @@ func Demo_audit(w http.ResponseWriter, r *http.Request) bool {
|
|||
// return c.ErrJSON(w, "您未被授权操作")
|
||||
// }
|
||||
ids := post.Get("ids")
|
||||
status := post.Getint("status")
|
||||
auditstatus := post.Getint("auditstatus")
|
||||
auditmsg := post.Get("auditmsg")
|
||||
if ids == "" {
|
||||
return c.ErrJSON(w, "请选择至少一条")
|
||||
}
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
if auditstatus == 90 && auditmsg == "" {
|
||||
return c.ErrJSON(w, "请填写驳回原因")
|
||||
}
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("id in", ids)
|
||||
rows, _, err := c.CiyDB.Get(csql)
|
||||
if err != nil {
|
||||
|
|
@ -333,10 +336,11 @@ func Demo_audit(w http.ResponseWriter, r *http.Request) bool {
|
|||
var updata = map[string]any{}
|
||||
err = c.CiyDB.Tran(func() error {
|
||||
for _, row := range rows {
|
||||
updata["auditstatus"] = status
|
||||
updata["auditstatus"] = auditstatus
|
||||
updata["audituser"] = userid
|
||||
updata["audittimes"] = c.Tostamp()
|
||||
csql = c.NewCiySQL("ap_demo")
|
||||
updata["auditmsg"] = auditmsg
|
||||
csql = c.NewCiySQL("demo_normal")
|
||||
csql.Where("id", row["id"])
|
||||
_, err = c.CiyDB.Update(csql, updata)
|
||||
if err != nil {
|
||||
|
|
@ -352,11 +356,11 @@ func Demo_audit(w http.ResponseWriter, r *http.Request) bool {
|
|||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Demo_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -367,7 +371,7 @@ func Demo_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
if ids == "" {
|
||||
return c.ErrJSON(w, "请选择至少一条")
|
||||
}
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("id in", ids)
|
||||
rows, _, err := c.CiyDB.Get(csql)
|
||||
if err != nil {
|
||||
|
|
@ -379,8 +383,8 @@ func Demo_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
delid := c.Toint(row["id"])
|
||||
//c.Delcheck(c.CiyDB, delid, "tablexx", "xxid", "xxx");
|
||||
//c.Delall(c.CiyDB, delid, "tablexx", "xxid", "xxx");
|
||||
c.Delme(c.CiyDB, delid, "ap_demo")
|
||||
admin.SaveLogDB(c.CiyDB, "ap_demo", row, nil)
|
||||
c.Delme(c.CiyDB, delid, "demo_normal")
|
||||
admin.SaveLogDB(c.CiyDB, "demo_normal", row, nil)
|
||||
vids = append(vids, delid)
|
||||
}
|
||||
return nil
|
||||
|
|
@ -390,19 +394,19 @@ func Demo_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Demo_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
// if admin.Nopower(c.CiyDB, userid, "p00e") {
|
||||
// return c.ErrJSON(w, "您未被授权操作")
|
||||
// }
|
||||
_, csql := demo_setwhere(post)
|
||||
_, csql := normal_setwhere(post)
|
||||
rows, _, err := c.CiyDB.Get(csql)
|
||||
if err != nil {
|
||||
return c.ErrJSON(w, "读取错误", err)
|
||||
|
|
@ -448,8 +452,8 @@ func Demo_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
code_auditstatus := admin.Getcatas(c.CiyDB, "auditstatus")
|
||||
code_audituser := c.Getrelation(c.CiyDB, rows, "xa_user", "audituser")
|
||||
code_menuid, _, _ := c.CiyDB.Get(c.NewCiySQL("zc_menu").Column("id,name"))
|
||||
code_isuse := c.CiyDB.Getdbcodes("ap_demo", "isuse")
|
||||
code_isopen := c.CiyDB.Getdbcodes("ap_demo", "isopen")
|
||||
code_isuse := c.CiyDB.Getdbcodes("demo_normal", "isuse")
|
||||
code_isopen := c.CiyDB.Getdbcodes("demo_normal", "isopen")
|
||||
code_mauditstatus := admin.Getcatas(c.CiyDB, "auditstatus")
|
||||
code_prodcata := admin.Getcatas(c.CiyDB, "prodcata")
|
||||
code_areacode, _, _ := c.CiyDB.Get(c.NewCiySQL("ciy_arearpc").Column("id,name,upid"))
|
||||
|
|
@ -559,11 +563,11 @@ func Demo_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["url"] = filename
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Demo_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -646,8 +650,8 @@ func Demo_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
|||
code_auditstatus := admin.Getcatas(c.CiyDB, "auditstatus")
|
||||
code_userid, _, _ := c.CiyDB.Get(c.NewCiySQL("xa_user").Column("id,name"))
|
||||
code_menuid, _, _ := c.CiyDB.Get(c.NewCiySQL("zc_menu").Column("id,name"))
|
||||
code_isuse := c.CiyDB.Getdbcodes("ap_demo", "isuse")
|
||||
code_isopen := c.CiyDB.Getdbcodes("ap_demo", "isopen")
|
||||
code_isuse := c.CiyDB.Getdbcodes("demo_normal", "isuse")
|
||||
code_isopen := c.CiyDB.Getdbcodes("demo_normal", "isopen")
|
||||
code_mauditstatus := admin.Getcatas(c.CiyDB, "auditstatus")
|
||||
code_prodcata := admin.Getcatas(c.CiyDB, "prodcata")
|
||||
code_areacode, _, _ := c.CiyDB.Get(c.NewCiySQL("ciy_arearpc").Column("id,name,upid"))
|
||||
|
|
@ -669,7 +673,7 @@ func Demo_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
|||
firsthtml := "<td><div>" + lineidx + "</div></td>"
|
||||
bempty := true
|
||||
unqs := make([]string, 0)
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
for _, arr := range heads {
|
||||
name := arr["name"]
|
||||
errmsg := "" //数据有误,显示红色说明
|
||||
|
|
@ -692,7 +696,7 @@ func Demo_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
|||
if id == 0 {
|
||||
errmsg = name + "解析错误"
|
||||
} else {
|
||||
csqlchk := c.NewCiySQL("ap_demo")
|
||||
csqlchk := c.NewCiySQL("demo_normal")
|
||||
csqlchk.Where("id", id).Column("id")
|
||||
chkid := c.Toint(c.CiyDB.Get1(csqlchk))
|
||||
if chkid != id {
|
||||
|
|
@ -1071,14 +1075,14 @@ func Demo_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
|||
html += "</div>\n"
|
||||
html += "<input type=\"hidden\" name=\"total\" value=\"" + c.Tostr(cnt) + "\"/>\n"
|
||||
html += "<code>共" + c.Tostr(cnt) + "条数据</code>\n"
|
||||
return c.SuccJSON(w, map[string]any{
|
||||
return c.SuccJSON(w, r, map[string]any{
|
||||
"html": html,
|
||||
"count": cnt,
|
||||
})
|
||||
}
|
||||
func Demo_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
||||
func Normal_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -1117,7 +1121,7 @@ func Demo_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
|||
weightg := post.Get("weightg_" + istr)
|
||||
eartmpr := post.Get("eartmpr_" + istr)
|
||||
content := post.Get("content_" + istr)
|
||||
csql := c.NewCiySQL("ap_demo")
|
||||
csql := c.NewCiySQL("demo_normal")
|
||||
csql.Where("name", name)
|
||||
csql.Column("id")
|
||||
chkid := c.Toint(c.CiyDB.Get1(csql))
|
||||
|
|
@ -1156,7 +1160,7 @@ func Demo_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
|||
updata["eartmpr"] = eartmpr
|
||||
updata["content"] = content
|
||||
updata["addtimes"] = c.Tostamp()
|
||||
csql = c.NewCiySQL("ap_demo")
|
||||
csql = c.NewCiySQL("demo_normal")
|
||||
var err error
|
||||
if id == 0 {
|
||||
_, err = c.CiyDB.Insert(csql, updata)
|
||||
|
|
@ -1173,5 +1177,5 @@ func Demo_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\ap;
|
||||
namespace web\admin\demo;
|
||||
|
||||
class demo {
|
||||
class normal {
|
||||
static function setwhere($db, $post) {
|
||||
$query = $post->get('query');
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$liid = objint($query, 'liid');
|
||||
if ($liid > 0)
|
||||
$csql->where('auditstatus', $liid);
|
||||
|
|
@ -51,7 +51,7 @@ class demo {
|
|||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$csql->column('!content,md', $db->getraw('show full fields from ap_demo'));
|
||||
$csql->column('!content,md', $db->getraw('show full fields from demo_normal'));
|
||||
$pageno = $post->getint('pageno', 1);
|
||||
$pagecount = $post->getint('pagecount', 10);
|
||||
$csql->limit($pageno, $pagecount);
|
||||
|
|
@ -62,7 +62,7 @@ class demo {
|
|||
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = $db->getfield($field, 'ap_demo');
|
||||
$fshow = $db->getfield($field, 'demo_normal');
|
||||
foreach ($field as $fr => $v) {
|
||||
if (get('_' . $fr))
|
||||
$field[$fr]['c'] = ',' . $field[$fr]['c'];
|
||||
|
|
@ -97,7 +97,7 @@ class demo {
|
|||
$id = $post->getint('id');
|
||||
$act = $post->get('act');
|
||||
if ($id > 0) {
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id', $id);
|
||||
$row = $db->getone($csql);
|
||||
if (!is_array($row))
|
||||
|
|
@ -169,7 +169,7 @@ class demo {
|
|||
return errjson('请填写默认标题');
|
||||
$datarow = null;
|
||||
if ($id > 0) {
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
|
|
@ -219,7 +219,7 @@ class demo {
|
|||
$updata['addtimes'] = tostamp();
|
||||
$updata['content'] = $content;
|
||||
$updata['md'] = $md;
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
if ($id > 0) {
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
|
|
@ -236,7 +236,7 @@ class demo {
|
|||
$id = $db->insert_id();
|
||||
}
|
||||
$updata['id'] = $id;
|
||||
//savelogdb($db, $rsuser['id'], 'ap_demo', $datarow, $updata);
|
||||
//savelogdb($db, $rsuser['id'], 'demo_normal', $datarow, $updata);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
|
|
@ -257,7 +257,7 @@ class demo {
|
|||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
|
|
@ -267,8 +267,8 @@ class demo {
|
|||
$delid = $row['id'];
|
||||
//delcheck($db, $delid, 'tablexx', 'xxid', '管理员');
|
||||
//delall($db, $delid, 'tablexx', 'xxid', '运动员'); //deltimeall
|
||||
delme($db, $delid, 'ap_demo');
|
||||
savelogdb($db, $rsuser['id'], 'ap_demo', $row, null);
|
||||
delme($db, $delid, 'demo_normal');
|
||||
savelogdb($db, $rsuser['id'], 'demo_normal', $row, null);
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
|
|
@ -294,21 +294,21 @@ class demo {
|
|||
$auditmsg = $post->get('auditmsg');
|
||||
if ($auditstatus == 90 && empty($auditmsg))
|
||||
return errjson('请填写驳回原因');
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$ids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id', $row['id']);
|
||||
$updata = array();
|
||||
$updata['auditstatus'] = $auditstatus;
|
||||
$updata['audituser'] = $rsuser['id'];
|
||||
$updata['audittimes'] = tostamp();
|
||||
$updata['auditmsg'] = $auditmsg;
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
$csql->where('id', $row['id']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('审核失败:' . $db->error);
|
||||
|
|
@ -386,14 +386,14 @@ class demo {
|
|||
$code_auditstatus = getcatas($db, 'auditstatus');
|
||||
$code_audituser = getcatas($db, 'adminuser');
|
||||
$code_menuid = getrelation($db, $rows, 'zc_menu', 'menuid', 'id,name');
|
||||
$code_isuse = $db->getdbcodes('ap_demo', 'isuse');
|
||||
$code_isopen = $db->getdbcodes('ap_demo', 'isopen');
|
||||
$code_isuse = $db->getdbcodes('demo_normal', 'isuse');
|
||||
$code_isopen = $db->getdbcodes('demo_normal', 'isopen');
|
||||
$code_sigstatus = getcatas($db, 'auditstatus');
|
||||
$code_mauditstatus = getcatas($db, 'auditstatus');
|
||||
$code_prodcata = $db->get((new \ciy\sql('zc_depart'))->column('id,name,upid'));
|
||||
$code_areacode = $db->get((new \ciy\sql('ciy_arearpc'))->column('id,name,upid'));
|
||||
$code_renzheng = $db->getdbcodes('ap_demo', 'renzheng');
|
||||
$code_ppint = $db->getdbcodes('ap_demo', 'ppint');
|
||||
$code_renzheng = $db->getdbcodes('demo_normal', 'renzheng');
|
||||
$code_ppint = $db->getdbcodes('demo_normal', 'ppint');
|
||||
$datas = array();
|
||||
foreach ($rows as $row) {
|
||||
$dat = array();
|
||||
|
|
@ -552,14 +552,14 @@ class demo {
|
|||
);
|
||||
}
|
||||
$code_menuid = $db->get((new \ciy\sql('zc_menu'))->column('id,name'));
|
||||
$code_isuse = $db->getdbcodes('ap_demo', 'isuse');
|
||||
$code_isopen = $db->getdbcodes('ap_demo', 'isopen');
|
||||
$code_isuse = $db->getdbcodes('demo_normal', 'isuse');
|
||||
$code_isopen = $db->getdbcodes('demo_normal', 'isopen');
|
||||
$code_sigstatus = getcatas($db, 'auditstatus');
|
||||
$code_mauditstatus = getcatas($db, 'auditstatus');
|
||||
$code_prodcata = $db->get((new \ciy\sql('zc_depart'))->column('id,name,upid'));
|
||||
$code_areacode = $db->get((new \ciy\sql('ciy_arearpc'))->column('id,name,upid'));
|
||||
$code_renzheng = $db->getdbcodes('ap_demo', 'renzheng');
|
||||
$code_ppint = $db->getdbcodes('ap_demo', 'ppint');
|
||||
$code_renzheng = $db->getdbcodes('demo_normal', 'renzheng');
|
||||
$code_ppint = $db->getdbcodes('demo_normal', 'ppint');
|
||||
$html .= '<div class="table" style="width: 100%;height: calc(100% - 2.2em);overflow: auto;">';
|
||||
$html .= '<table><tbody><tr>';
|
||||
$html .= '<th>#</th>';
|
||||
|
|
@ -576,7 +576,7 @@ class demo {
|
|||
$firsthtml = '<td><div>' . $lineidx . '</div></td>';
|
||||
$bempty = true;
|
||||
$unqs = array();
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
foreach ($heads as $arr) {
|
||||
$name = $arr['name'];
|
||||
$errmsg = ''; //数据有误,显示红色说明
|
||||
|
|
@ -596,7 +596,7 @@ class demo {
|
|||
if ($id == 0)
|
||||
$errmsg = $name . '解析错误';
|
||||
else {
|
||||
$csqlchk = new \ciy\sql('ap_demo');
|
||||
$csqlchk = new \ciy\sql('demo_normal');
|
||||
$csqlchk->where('id', $id)->column('id');
|
||||
$chkid = toint($db->get1($csqlchk));
|
||||
if ($chkid != $id)
|
||||
|
|
@ -1064,7 +1064,7 @@ class demo {
|
|||
$updata['skt'] = $post->get('skt_' . $i);
|
||||
$updata['idcard'] = $post->get('idcard_' . $i);
|
||||
$updata['content'] = $post->get('content_' . $i);
|
||||
$csql = new \ciy\sql('ap_demo');
|
||||
$csql = new \ciy\sql('demo_normal');
|
||||
if ($id == 0) {
|
||||
$updata['auditstatus'] = 2;
|
||||
$updata['addtimes'] = tostamp();
|
||||
|
|
@ -0,0 +1,414 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<form class="search" onsubmit="table.search(this,'btn');return false;">
|
||||
<ul></ul>
|
||||
<div>
|
||||
<div class="sinps"></div>
|
||||
<div class="sbtns">
|
||||
<button class="lang btn" type="submit">查询</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="topbtn">
|
||||
<a class="lang btn" onclick="edit(0)">单笔转账</a>
|
||||
<a class="lang btn" onclick="multiedit()">批量录入转账</a>
|
||||
<a class="lang btn" onclick="multiin()">Excel导入转账</a>
|
||||
<a class="lang btn succ" onclick="dopay()">开始转账操作</a>
|
||||
</div>
|
||||
<div class="table">
|
||||
<div class="loading col-24">Loading...</div>
|
||||
<div class="list"></div>
|
||||
<div>
|
||||
<div class="btmbtn">
|
||||
<a class="lang btn def" onclick="ciyfn.select_all(table)">全选</a>
|
||||
<a class="lang btn def" onclick="ciyfn.select_diff(table)">反选</a>
|
||||
|
|
||||
<a class="lang btn dag" onclick="ciyfn.select_callfunc(table, this, 'del','已选{n}条,是否批量删除?', {},function(json){table.delline(json)})">批量删除</a>
|
||||
</div>
|
||||
<div class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_multiin" style="display:none;">
|
||||
<div style="display:flex;">
|
||||
<div>
|
||||
<ciy-upload com="file" />
|
||||
</div>
|
||||
<div style="margin-left:0.3em;">
|
||||
<a class="lang btn btn-sm def" href="/ud/inpl/hf_merchantalipayorder2.xlsx" target="_blank">下载导入模板</a><br />
|
||||
<div class="lang">每次导入建议不超过1000条</div>
|
||||
<div class="lang">导入更新,首列为导出的行码</div>
|
||||
<div class="lang">请按模版列填写</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="alert_edit" style="display:none;">
|
||||
<div class="char4 row">
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang imp">账号类型</label>
|
||||
<div>
|
||||
<ciy-radio com="accounttype" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang imp">金额</label>
|
||||
<div>
|
||||
<ciy-inputbet com="amount" unit="元" bet="100" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24">
|
||||
<label class="lang imp">账号</label>
|
||||
<div>
|
||||
<input type="text" name="tranaccount" style="width:13em;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24">
|
||||
<label class="lang imp">姓名</label>
|
||||
<div>
|
||||
<input type="text" name="tranname" style="width:8em;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24">
|
||||
<label class="lang">身份证号</label>
|
||||
<div>
|
||||
<input type="text" name="tranidid" style="width:12em;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24">
|
||||
<label class="lang">备注</label>
|
||||
<div>
|
||||
<input type="text" name="memo" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alert_multiedit" style="display:none;">
|
||||
<table class="edittab">
|
||||
<tr>
|
||||
<th>类型<span style="color:red;">*</span></th>
|
||||
<th>金额<span style="color:red;">*</span></th>
|
||||
<th>账户<span style="color:red;">*</span></th>
|
||||
<th>姓名<span style="color:red;">*</span></th>
|
||||
<th>身份证号</th>
|
||||
<th>备注</th>
|
||||
<th class="cursor-p" onclick="newline($5(this).parent('.edittab'));">➕</th>
|
||||
</tr>
|
||||
</table>
|
||||
<style>
|
||||
.edittab {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.edittab th {
|
||||
padding: 0.3em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
.edittab td {
|
||||
padding: 0.3em;
|
||||
line-height: 1em;
|
||||
}
|
||||
</style>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="/jscss/web3.min.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
var Glob = {};
|
||||
ciyfn.pageload(function () {
|
||||
//Glob.urlp = ciyfn.urlparam();
|
||||
table = new ciyclass.table({
|
||||
dom: '.table'
|
||||
, url: 'list'
|
||||
, pagecount: 10
|
||||
, fn_beforedata: function (json) {
|
||||
ciyfn.fillsearch({
|
||||
searchdom: '.search'
|
||||
, data: json
|
||||
, liall: '全部'
|
||||
, lidata: 'accounttype'
|
||||
, liclick: function (dom) {
|
||||
table.search(dom, 'li');
|
||||
}
|
||||
});
|
||||
return json;
|
||||
}
|
||||
, fn_tdcontent: function (key, datashow, field, data) {
|
||||
if (key == 'id') {
|
||||
return 'P' + datashow;
|
||||
}
|
||||
if (key == 'apiuser') {
|
||||
if (data['apiuser'] < 0)
|
||||
return 'API:' + -data['apiuser'];
|
||||
}
|
||||
if (key == '_btn') {
|
||||
var html = '';
|
||||
html += `<a class="lang btn" onclick="menubtn(this, 'chksign')">验签</a>`;
|
||||
html += `<a class="lang btn" onclick="menubtn(this, 'edit')">修改</a>`;
|
||||
return html;
|
||||
}
|
||||
}
|
||||
, fn_done: function (json) {
|
||||
// table.mergecol('auditstatus');
|
||||
// table.mergefix('总计', 'center', 6, 0, 8, 1);
|
||||
// table.footertotal();
|
||||
}
|
||||
});
|
||||
table.callpage(1);
|
||||
});
|
||||
function menubtn(dom, btn) {
|
||||
var id = $5(dom).parent('tr').attr('data-id');
|
||||
if (btn == 'edit') {
|
||||
edit(id);
|
||||
}
|
||||
if (btn == 'sub') {
|
||||
ciyfn.sendsignal(window.top, 'manage_ifropen', {
|
||||
url: 'xxx.html?_xxxid=' + id
|
||||
, name: '转账单<code>' + table.data[id].name + '</code>'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getdata(id, act, cb) {
|
||||
cb({ data: id == 0 ? { accounttype: 20 } : table.data[id] });
|
||||
}
|
||||
|
||||
function edit(id) {
|
||||
getdata(id, 'edit', function (jsndat) {
|
||||
ciyfn.alert({
|
||||
title: id == 0 ? '单笔转账' : '修改'
|
||||
, width: 'mb'
|
||||
, content: document.getElementById("alert_edit").innerHTML
|
||||
//, noparent:true
|
||||
, fn_showed: function (doc, dom) {
|
||||
var dat = jsndat.data;
|
||||
ciycmp({ dom: $5('[com=accounttype]', dom), value: dat.accounttype, range: 'accounttype' });
|
||||
ciycmp({ dom: $5('[com=amount]', dom), value: dat.amount });
|
||||
$5('[name=tranaccount]', dom).val(dat.tranaccount);
|
||||
$5('[name=tranname]', dom).val(dat.tranname);
|
||||
$5('[name=tranidid]', dom).val(dat.tranidid);
|
||||
$5('[name=memo]', dom).val(dat.memo);
|
||||
}
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == "关闭")
|
||||
return opn.close();
|
||||
opn.inputs.id = id;
|
||||
if (ciyfn.throttle(opn.dombtn)) return;
|
||||
ciyfn.callfunc('update', opn.inputs, function (json) {
|
||||
table.updateline(json);
|
||||
opn.close();
|
||||
ciyfn.toast('提交成功');
|
||||
});
|
||||
},
|
||||
btns: id == 0 ? ["暂存转账", "*关闭"] : ["修改", "*关闭"],
|
||||
});
|
||||
});
|
||||
}
|
||||
function multiedit() {
|
||||
var trhtml = `<tr data-idx="{idx}">
|
||||
<td><ciy-switch com="accounttype_{idx}" y="支付宝" n="银行" /></td>
|
||||
<td><ciy-inputbet com="amount_{idx}" unit="元" bet="100" /></td>
|
||||
<td><input type="text" name="tranaccount_{idx}" style="width:13em;" /></td>
|
||||
<td><input type="text" name="tranname_{idx}" style="width:8em;" /></td>
|
||||
<td><input type="text" name="tranidid_{idx}" style="width:12em;" /></td>
|
||||
<td><input type="text" name="memo_{idx}" style="width:5em;" /></td>
|
||||
<td onclick="delline(this)" style="cursor: pointer;">➖</td>
|
||||
</tr>`;
|
||||
var trcount = 0;
|
||||
ciyfn.alert({
|
||||
title: '批量转账'
|
||||
, width: 'pc'
|
||||
, height: 'max'
|
||||
, content: document.getElementById("alert_multiedit").innerHTML
|
||||
//, noparent:true
|
||||
, fn_showed: function (doc, dom) {
|
||||
doc.newline = function (alertdom) {
|
||||
var tr = $5('.edittab tr', alertdom);
|
||||
$5(tr[tr.length - 1]).after(trhtml.replace(/\{idx\}/g, trcount));
|
||||
ciycmp({ dom: $5('[com=accounttype_' + trcount + ']', alertdom), value: 1, range: 'accounttype' });
|
||||
ciycmp({ dom: $5('[com=amount_' + trcount + ']', alertdom) });
|
||||
trcount++;
|
||||
}
|
||||
doc.delline = function (alertdom) {
|
||||
if ($5('tr[data-idx]', dom).length < 2)
|
||||
return;
|
||||
$5(alertdom).parent('tr').remove();
|
||||
}
|
||||
doc.newline(dom);
|
||||
}
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == "关闭")
|
||||
return opn.close();
|
||||
if (opn.btn == "新增一行") {
|
||||
opn.doc.newline(opn.dom);
|
||||
return;
|
||||
}
|
||||
if (ciyfn.throttle(opn.dombtn)) return;
|
||||
opn.inputs.count = trcount;
|
||||
ciyfn.callfunc('multiedit', opn.inputs, function (json) {
|
||||
opn.close();
|
||||
location.reload();
|
||||
});
|
||||
},
|
||||
btns: ["*新增一行", "暂存转账", "*关闭"],
|
||||
});
|
||||
}
|
||||
function dopay() {
|
||||
ciyfn.callfunc("getdopay", {}, async function (json) {
|
||||
var html = '';
|
||||
if (json.total == 0)
|
||||
return ciyfn.toast('请先录入待转账任务');
|
||||
if (json.safecase == 10) {
|
||||
html += '<div class="ciy-form">';
|
||||
html += '<label class="lang" style="min-width:5em;">安全密码</label>';
|
||||
html += '<div><input type="password" name="pass2" style="width:100%;" /></div>';
|
||||
html += '</div>';
|
||||
}
|
||||
if (json.safecase == 20) {
|
||||
var web3 = null;
|
||||
if (!json.pubkey)
|
||||
return ciyfn.alert('请先绑定用户钱包');
|
||||
if (!window.ethereum)
|
||||
return ciyfn.alert('MetaMask 没有安装');
|
||||
try {
|
||||
await window.ethereum.request({ method: 'eth_requestAccounts' });
|
||||
web3 = new Web3(window.ethereum);
|
||||
const accounts = await web3.eth.getAccounts();
|
||||
if (accounts.length == 0)
|
||||
return ciyfn.alert('MetaMask 请先建立钱包账户');
|
||||
var account = accounts[0];
|
||||
} catch (error) {
|
||||
return ciyfn.alert('MetaMask 出现错误:' + error);
|
||||
}
|
||||
}
|
||||
if (json.safecase == 30) {//安当
|
||||
if (!json.pubkey)
|
||||
return ciyfn.alert('请先绑定UKey设备');
|
||||
var res = ciyfn.ajaxsync({
|
||||
url: "http://127.0.0.1:2300/api/ExportECCPublicKey"
|
||||
});
|
||||
if (res.code != 1)
|
||||
return ciyfn.alert('UKey设备未连接,请确认是否插入Ukey。<br/>需安装驱动');
|
||||
if (json.pubkey != res.data.PublicKey)
|
||||
return ciyfn.alert('UKey公钥不一致,请检查UKey设备是否插错');
|
||||
var res = ciyfn.ajaxsync({
|
||||
url: "http://127.0.0.1:2300/api/VerifyUserPIN"
|
||||
, data: {
|
||||
UserPIN: "12345678"
|
||||
}
|
||||
});
|
||||
if (res.code != 1) {
|
||||
html += '<div class="ciy-form">';
|
||||
html += '<label class="lang" style="min-width:3em;">PIN码</label>';
|
||||
html += '<div><input type="password" name="pin" style="width:100%;" /></div>';
|
||||
html += '</div>';
|
||||
}
|
||||
}
|
||||
html += '共计<span class="txt9 txt-lgg px2">' + json.total + '</span>笔转账,<span class="txt9 txt-lgg px1">' + (json.money / 100) + '</span>元';
|
||||
html += '<br/>确认开始转账操作吗?';
|
||||
ciyfn.alert({
|
||||
content: html
|
||||
, btns: ["开始转账", '*关闭']
|
||||
, cb: async function (opn) {
|
||||
if (opn.btn == '关闭')
|
||||
return opn.close();
|
||||
var post = {};
|
||||
post.sign = [];
|
||||
if (json.safecase == 10) {
|
||||
post.auth = (new Date()).getTime();
|
||||
post.pass = await ciyfn.sha512(await ciyfn.sha512(opn.inputs.pass2 + ciy_vars.tokensalt) + post.auth);
|
||||
for (var i in json.datas)
|
||||
post.sign.push({ id: json.datas[i].id });
|
||||
}
|
||||
if (json.safecase == 20) {
|
||||
try {
|
||||
for (var i in json.datas) {
|
||||
//json.datas[i].hash = "H" + json.datas[i].hash;
|
||||
const signature = await window.ethereum.request({
|
||||
method: 'personal_sign',
|
||||
params: ['CIY' + json.datas[i].hash, account],
|
||||
});
|
||||
post.sign.push({ id: json.datas[i].id, sign: signature, hash: json.datas[i].hash });
|
||||
}
|
||||
} catch (error) {
|
||||
return ciyfn.alert('MetaMask 签名失败:' + error);
|
||||
}
|
||||
}
|
||||
if (json.safecase == 30) {
|
||||
if (opn.inputs.pin) {
|
||||
var res = ciyfn.ajaxsync({
|
||||
url: "http://127.0.0.1:2300/api/VerifyUserPIN"
|
||||
, data: {
|
||||
UserPIN: opn.inputs.pin
|
||||
}
|
||||
});
|
||||
if (res.code != 1)
|
||||
return ciyfn.alert('PIN码错误:' + res.errmsg);
|
||||
}
|
||||
for (var i in json.datas) {
|
||||
var res = ciyfn.ajaxsync({
|
||||
url: "http://127.0.0.1:2300/api/GetECCSignData"
|
||||
, data: {
|
||||
pbData: json.datas[i].hash
|
||||
}
|
||||
});
|
||||
if (res.code != 1)
|
||||
return ciyfn.alert('UKey签名失败:' + res.errmsg);
|
||||
post.sign.push({ id: json.datas[i].id, sign: res.data.HashData, hash: json.datas[i].hash });
|
||||
}
|
||||
}
|
||||
ciyfn.callfunc("dopay", post, function (json) {
|
||||
opn.close();
|
||||
ciyfn.alert({
|
||||
content: '转账任务已提交,请前往转账记录中查看执行结果。'
|
||||
, btns: ["打开转账记录", '*关闭']
|
||||
, cb: async function (opn) {
|
||||
opn.close();
|
||||
if (opn.btn == '关闭') {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
setTimeout(function () {
|
||||
window.location.reload();
|
||||
}, 2000);
|
||||
ciyfn.sendsignal(window.top, 'manage_ifropen', {
|
||||
url: "mer/merchantalipayorder.html?_t=" + tostamp()
|
||||
, name: "转账记录"
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function multiin() {
|
||||
ciyfn.table_multiin('importxls', document.getElementById("alert_multiin").innerHTML, function (json) {
|
||||
ciyfn.toast('导入成功');
|
||||
table.cachecount = -1;
|
||||
table.callpage();
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,582 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class safeop {
|
||||
static function setwhere($db, $post) {
|
||||
$query = $post->get('query');
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$liid = objint($query, 'liid');
|
||||
if ($liid > 0)
|
||||
$csql->where('accounttype', $liid);
|
||||
$val = objstr($query, 'id');
|
||||
if (!empty($val) && $val[0] == 'P')
|
||||
$csql->where('id', substr($val, 1));
|
||||
$csql->wherenumrange('amount', objstr($query, 'amount_1'), objstr($query, 'amount_2'), 100);
|
||||
$csql->where('tranaccount like', objstr($query, 'tranaccount'));
|
||||
$csql->where('tranname like', objstr($query, 'tranname'));
|
||||
$csql->where('tranidid like', objstr($query, 'tranidid'));
|
||||
$csql->where('memo like', objstr($query, 'memo'));
|
||||
$csql->wheredaterange('addtimes', objstr($query, 'addtimes'));
|
||||
$csql->where('apiuser', objstr($query, 'apiuser'));
|
||||
$order = objstr($query, 'order', 'id desc');
|
||||
$csql->order($order);
|
||||
$query['order'] = $order;
|
||||
return [$query, $csql];
|
||||
}
|
||||
|
||||
public static function json_list() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$csql->where('orderstatus', 10);
|
||||
$pageno = $post->getint('pageno', 1);
|
||||
$pagecount = $post->getint('pagecount', 10);
|
||||
$csql->limit($pageno, $pagecount);
|
||||
$mainrowcount = $post->getint('count');
|
||||
$rows = $db->get($csql, $mainrowcount);
|
||||
if ($rows === false)
|
||||
return errjson($db->error);
|
||||
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = $db->getfield($field, 'ap_transfer');
|
||||
foreach ($field as $fr => $v) {
|
||||
if (get('_' . $fr))
|
||||
$field[$fr]['c'] = ',' . $field[$fr]['c'];
|
||||
if ($fr == 'merchantid')
|
||||
$field[$fr]['c'] = ',' . $field[$fr]['c'];
|
||||
}
|
||||
$field['orderstatus']['c'] = '';
|
||||
$field['fee']['c'] = '';
|
||||
$field['wano']['c'] = '';
|
||||
$field['uptimes']['c'] = '';
|
||||
$field['orderno']['c'] = '';
|
||||
$field['pubkeyid']['c'] = '';
|
||||
$field['signtimes']['c'] = '';
|
||||
$field['tranreceipt']['c'] = '';
|
||||
$field['errmsg']['c'] = '';
|
||||
$ret['field'] = $field;
|
||||
$ret['fshow'] = $fshow;
|
||||
}
|
||||
if ($post->getbool('once')) {
|
||||
$ret['once'] = array();
|
||||
$input = array();
|
||||
$input[] = array('type' => 'input', 'form' => 'id', 'name' => '流水号', 'prop' => ' style="width:8em;"');
|
||||
$input[] = array('type' => 'num', 'form' => 'amount', 'name' => '金额', 'prop' => ' style="width:4em;"');
|
||||
$input[] = array('type' => 'input', 'form' => 'tranaccount', 'name' => '账号', 'prop' => ' style="width:8em;"');
|
||||
$input[] = array('type' => 'input', 'form' => 'tranname', 'name' => '姓名', 'prop' => ' style="width:8em;"');
|
||||
$input[] = array('type' => 'input', 'form' => 'tranidid', 'name' => '身份证号', 'prop' => ' style="width:8em;"');
|
||||
$input[] = array('type' => 'input', 'form' => 'memo', 'name' => '备注', 'prop' => ' style="width:8em;"');
|
||||
$input[] = array('type' => 'daterange', 'form' => 'addtimes', 'name' => '创建时间');
|
||||
$input[] = array('type' => 'select', 'form' => 'apiuser', 'name' => '操作人', 'all' => '全部', 'select' => 'meruser');
|
||||
$ret['once']['input'] = $input;
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$ret['once']['merchant'] = $db->getone($csql);
|
||||
$csql = new \ciy\sql('hf_merchantpubkey');
|
||||
$csql->where('merchantid', $rsuser['s_b']);
|
||||
$ret['once']['hf_merchantpubkey'] = $db->get($csql);
|
||||
// if($ret['once']['merchant']['safecase'] > 10){
|
||||
// $csql = new \ciy\sql('hf_merchantuser');
|
||||
// $csql->where('id', $ret['once']['merchant']['s_b']);
|
||||
// $ret['once']['merchant'] = $db->getone($csql);
|
||||
|
||||
// }
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_update() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p u'))
|
||||
// return errjson('您未被授权操作');
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
$post = new \ciy\post();
|
||||
$id = $post->getint('id');
|
||||
$data = array();
|
||||
$data['accounttype'] = $post->getint('accounttype');
|
||||
$data['amount'] = $post->getint('amount');
|
||||
$data['tranaccount'] = $post->get('tranaccount');
|
||||
$data['tranname'] = $post->get('tranname');
|
||||
$data['tranidid'] = $post->get('tranidid');
|
||||
$data['memo'] = $post->get('memo');
|
||||
$retchk = check_transtr($data['amount'], $data['accounttype'], $data['tranaccount'], $data['tranname'], $data['tranidid'], $data['memo'], $merchantrow['safecase']);
|
||||
if (is_string($retchk))
|
||||
return errjson($retchk);
|
||||
if ($id > 0) {
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$csql->where('merchantid', $rsuser['s_b']);
|
||||
$csql->where('id', $id);
|
||||
$datarow = $db->getone($csql);
|
||||
if (!is_array($datarow))
|
||||
return errjson('数据不存在');
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = self::updatedata($db, $rsuser, $id, $data, $merchantrow);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['data'] = $updata;
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_multiedit() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p u'))
|
||||
// return errjson('您未被授权操作');
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
$post = new \ciy\post();
|
||||
$count = $post->getint('count');
|
||||
$datas = array();
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
if ($post->get('accounttype_' . $i) == '')
|
||||
continue;
|
||||
$data = array();
|
||||
$data['accounttype'] = $post->getint('accounttype_' . $i);
|
||||
$data['accounttype'] = ($data['accounttype'] == 1 ? 20 : 10);
|
||||
$data['amount'] = $post->getint('amount_' . $i);
|
||||
$data['tranaccount'] = $post->get('tranaccount_' . $i);
|
||||
$data['tranname'] = $post->get('tranname_' . $i);
|
||||
$data['tranidid'] = $post->get('tranidid_' . $i);
|
||||
$data['memo'] = $post->get('memo_' . $i);
|
||||
$retchk = check_transtr($data['amount'], $data['accounttype'], $data['tranaccount'], $data['tranname'], $data['tranidid'], $data['memo'], $merchantrow['safecase']);
|
||||
if (is_string($retchk))
|
||||
return errjson('第' . ($i + 1) . '行,' . $retchk);
|
||||
$datas[] = $data;
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($datas as $data) {
|
||||
self::updatedata($db, $rsuser, 0, $data, $merchantrow);
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
static function updatedata($db, $rsuser, $id, $data, $merchantrow) {
|
||||
$updata = array();
|
||||
$updata['amount'] = $data['amount'];
|
||||
$updata['accounttype'] = $data['accounttype'];
|
||||
$updata['tranaccount'] = $data['tranaccount'];
|
||||
$updata['tranname'] = $data['tranname'];
|
||||
$updata['tranidid'] = $data['tranidid'];
|
||||
$updata['memo'] = $data['memo'];
|
||||
$updata['apiuser'] = $rsuser['id'];
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
if ($id > 0) {
|
||||
$csql->where('id', $id);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
} else {
|
||||
$updata['providerid'] = $rsuser['s_a'];
|
||||
$updata['merchantid'] = $rsuser['s_b'];
|
||||
$updata['thirdno'] = '';
|
||||
$updata['orderstatus'] = 10;
|
||||
$updata['iswa'] = $merchantrow['bwa'];
|
||||
$updata['wano'] = '';
|
||||
$updata['addtimes'] = tostamp();
|
||||
$updata['signtimes'] = 0;
|
||||
$updata['uptimes'] = 0;
|
||||
$updata['orderno'] = '';
|
||||
$updata['payfundno'] = '';
|
||||
$updata['signature'] = '';
|
||||
$updata['pubkeyid'] = 0;
|
||||
$updata['fee'] = 0;
|
||||
$updata['tranreceipt'] = 10;
|
||||
$updata['errmsg'] = '';
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
throw new \Exception('新增失败:' . $db->error);
|
||||
$id = $db->insert_id();
|
||||
}
|
||||
$updata['id'] = $id;
|
||||
return $updata;
|
||||
}
|
||||
|
||||
public static function json_del() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p d'))
|
||||
// return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$csql->where('merchantid', $rsuser['s_b']);
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
if ($row['orderstatus'] != 10)
|
||||
continue;
|
||||
$delid = $row['id'];
|
||||
//delcheck($db, $delid, 'tablexx', 'xxid', '管理员');
|
||||
//delall($db, $delid, 'tablexx', 'xxid', '运动员'); //deltimeall
|
||||
delme($db, $delid, 'ap_transfer');
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['ids'] = $vids;
|
||||
return succjson($ret);
|
||||
}
|
||||
|
||||
public static function json_getdopay() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$csql->where('merchantid', $rsuser['s_b']);
|
||||
$csql->where('orderstatus', 10);
|
||||
$orderrows = $db->get($csql);
|
||||
$ret['datas'] = array();
|
||||
$money = 0;
|
||||
foreach ($orderrows as $orderrow) {
|
||||
$money += $orderrow['amount'];
|
||||
$ret['datas'][] = array(
|
||||
'id' => $orderrow['id'],
|
||||
'hash' => hash('sha256', signorder($orderrow))
|
||||
);
|
||||
}
|
||||
$ret['total'] = count($orderrows);
|
||||
$ret['money'] = $money;
|
||||
$ret['safecase'] = $merchantrow['safecase'];
|
||||
if ($ret['safecase'] > 0) {
|
||||
$csql = new \ciy\sql('hf_merchantuser');
|
||||
$csql->where('id', $rsuser['id']);
|
||||
$userrow = $db->getone($csql);
|
||||
if ($userrow['pubkeyid'] > 0) {
|
||||
$csql = new \ciy\sql('hf_merchantpubkey');
|
||||
$csql->where('id', $userrow['pubkeyid']);
|
||||
$csql->where('safecase', $merchantrow['safecase']);
|
||||
$pubkeyrow = $db->getone($csql);
|
||||
$ret['pubkey'] = $pubkeyrow['pubkey'];
|
||||
}
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_dopay() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
//if (nopower($db, $rsuser['id'], 'p d'))
|
||||
// return errjson('您未被授权操作');
|
||||
$csql = new \ciy\sql('hf_merchantuser');
|
||||
$csql->where('id', $rsuser['id']);
|
||||
$userrow = $db->getone($csql);
|
||||
if (empty($userrow['password']))
|
||||
return errjson('请先设置初始登录密码');
|
||||
$csql = new \ciy\sql('hf_merchantalipaycharge');
|
||||
$csql->where('merchantid', $userrow['merchantid']);
|
||||
$csql->where('addtimes<', time() - 60);
|
||||
$csql->where('orderstatus<100');
|
||||
if (toint($db->get1($csql)) > 0)//检查商户余额,结合本次下单金额与手续费欠费金额,是否低于,低于提示。
|
||||
return errjson('有未结算的手续费,请稍后下单,请稍后下单或检查账户余额');
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $userrow['merchantid']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
if (!is_array($merchantrow))
|
||||
return errjson('商户不存在');
|
||||
$tp = date('H') * 3600 + date('i') * 60 + date('s') + 1;
|
||||
if ($merchantrow['stpt'] < $merchantrow['endpt']) {
|
||||
if ($tp < $merchantrow['stpt'] || $tp > $merchantrow['endpt'])
|
||||
return errjson('当前时间不在服务时间范围内');
|
||||
} else {
|
||||
if ($tp < $merchantrow['stpt'] && $tp > $merchantrow['endpt'])
|
||||
return errjson('当前时间不在服务时间范围内');
|
||||
}
|
||||
if ($merchantrow['saasstatus'] != 10)
|
||||
return errjson('商户已被暂停服务');
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $merchantrow['providerid']);
|
||||
$providerrow = $db->getone($csql);
|
||||
if (!is_array($providerrow))
|
||||
return errjson('服务商不存在');
|
||||
if ($providerrow['providerstatus'] != 10)
|
||||
return errjson('转账服务暂停,请联系服务商!');
|
||||
if ($providerrow['depositmoney'] <= 0)
|
||||
return errjson('转账服务暂停,请联系服务商');
|
||||
$signs = $post->get('sign');
|
||||
if ($merchantrow['safecase'] == 10) {
|
||||
if (empty($userrow['password2']))
|
||||
return errjson('请先在右上角下拉菜单中,设置安全密码');
|
||||
$authtime = $post->getint('auth');
|
||||
if (abs($authtime / 1000 - tostamp()) > 300) {
|
||||
return errjson('您的本地时间与服务器时间相差超过5分钟,请调整本机时间。<br/>服务器时间: ' . date('Y-m-d H:i:s') . '<br/>您本机时间: ' . date('Y-m-d H:i:s', $authtime / 1000));
|
||||
}
|
||||
if ($post->get('pass') != sha512($userrow['password2'] . $authtime)) {
|
||||
sleep(2);
|
||||
return errjson('安全密码错误');
|
||||
}
|
||||
sleep(1);
|
||||
} else {
|
||||
$csql = new \ciy\sql('hf_merchantpubkey');
|
||||
$csql->where('id', $userrow['pubkeyid']);
|
||||
$pubkeyrow = $db->getone($csql);
|
||||
if (!is_array($pubkeyrow))
|
||||
return errjson('未找到数字证书');
|
||||
if ($merchantrow['safecase'] == 20) {
|
||||
$retsign = verifysign_web3($pubkeyrow['pubkey'], $signs);
|
||||
if (is_string($retsign))
|
||||
return errjson($retsign);
|
||||
}
|
||||
if ($merchantrow['safecase'] == 30) {
|
||||
$retsign = verifysign_vn($pubkeyrow['pubkey'], $signs);
|
||||
if (is_string($retsign))
|
||||
return errjson($retsign);
|
||||
}
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($signs as $sign) {
|
||||
$updata = array();
|
||||
$updata['orderstatus'] = 20;
|
||||
$updata['apiuser'] = $rsuser['id'];
|
||||
if ($merchantrow['safecase'] > 10) {
|
||||
$updata['signtimes'] = tostamp();
|
||||
$updata['signature'] = $sign['sign'];
|
||||
$updata['pubkeyid'] = $userrow['pubkeyid'];
|
||||
}
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$csql->where('id', $sign['id']);
|
||||
$csql->where('orderstatus', 10);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('转账失败:' . $db->error);
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
|
||||
|
||||
public static function json_importxls_in() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p i'))
|
||||
// return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$file = PATH_WEB . '/ud' . $post->get('file');
|
||||
if (!file_exists($file))
|
||||
return errjson('文件不存在');
|
||||
require_once PATH_ROOT . '../libs/phpoffice/autoload.php';
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$datas = $sheet->toArray('', true, true, false);
|
||||
$datacnt = count($datas);
|
||||
if ($datacnt < 2)
|
||||
return errjson('数据为空');
|
||||
$html = '';
|
||||
$headsn = array();
|
||||
$headsn[] = '行码.id';
|
||||
$headsn[] = '账号类型.accounttype';
|
||||
$headsn[] = '金额.amount';
|
||||
$headsn[] = '账号.tranaccount';
|
||||
$headsn[] = '姓名.tranname';
|
||||
$headsn[] = '身份证号.tranidid';
|
||||
$headsn[] = '备注.memo';
|
||||
$xlsidx = 1;
|
||||
if (empty($datas[0][count($headsn) - 1]))
|
||||
$xlsidx = 2;
|
||||
$heads = array();
|
||||
foreach ($headsn as $_head) {
|
||||
$hd = explode('.', $_head);
|
||||
if (count($hd) < 2)
|
||||
continue;
|
||||
$heads[] = array(
|
||||
'idx' => array_search($hd[0], $datas[$xlsidx - 1]),
|
||||
'fld' => $hd[1],
|
||||
'name' => $hd[0]
|
||||
);
|
||||
}
|
||||
$code_accounttype = getcatas($db, 'accounttype');
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
$html .= '<div class="table" style="width: 100%;height: calc(100% - 2.2em);overflow: auto;">';
|
||||
$html .= '<table><tbody><tr>';
|
||||
$html .= '<th>#</th>';
|
||||
foreach ($heads as $arr) {
|
||||
$html .= '<th>' . $arr['name'] . '</th>';
|
||||
}
|
||||
$html .= '</tr>';
|
||||
$cnt = 0;
|
||||
$uniques = array();
|
||||
$id = 0;
|
||||
for ($rowidx = $xlsidx; $rowidx < $datacnt; $rowidx++) {
|
||||
$bfull = false;
|
||||
foreach ($datas[$rowidx] as $dat) {
|
||||
if (empty($dat))
|
||||
continue;
|
||||
$bfull = true;
|
||||
break;
|
||||
}
|
||||
if (!$bfull)
|
||||
continue;
|
||||
$lineidx = $rowidx - $xlsidx + 1;
|
||||
$hrhtml = '';
|
||||
$firsthtml = '<td><div>' . $lineidx . '</div></td>';
|
||||
$bempty = true;
|
||||
$unqs = array();
|
||||
$csql = new \ciy\sql('ap_transfer');
|
||||
$data = array();
|
||||
foreach ($heads as $arr) {
|
||||
$name = $arr['name'];
|
||||
$errmsg = ''; //数据有误,显示红色说明
|
||||
$showdat = ''; //显示在表格中的数据
|
||||
if ($arr['idx'] > -1)
|
||||
$showdat = trim($datas[$rowidx][$arr['idx']]);
|
||||
if ($showdat == '--')
|
||||
$showdat = '';
|
||||
$value = $showdat; //在表单中的数据(转换后)
|
||||
$ext = ''; //扩展表单
|
||||
if ($name == '行码') {
|
||||
if (empty($showdat)) {
|
||||
$value = 0;
|
||||
$showdat = '<kbd>新增</kbd>';
|
||||
} else {
|
||||
$id = deid($showdat);
|
||||
if ($id == 0)
|
||||
$errmsg = $name . '解析错误';
|
||||
else {
|
||||
$csqlchk = new \ciy\sql('ap_transfer');
|
||||
$csqlchk->where('id', $id);
|
||||
$chkrow = $db->getone($csqlchk);
|
||||
if (!is_array($chkrow))
|
||||
$errmsg = $name . '在数据库中不存在';
|
||||
if ($chkrow['orderstatus'] != 10)
|
||||
$errmsg = $name . '状态错误';
|
||||
$value = $id;
|
||||
}
|
||||
}
|
||||
} else if ($name == '账号类型') {
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '为必填项';
|
||||
} else {
|
||||
$value = dcode($code_accounttype, $showdat);
|
||||
$data['accounttype'] = $data;
|
||||
if ($value == -1)
|
||||
$errmsg = $name . '文字与系统数据不匹配';
|
||||
}
|
||||
} else if ($name == '金额') {
|
||||
$showdat = str_replace(',', '', $showdat);
|
||||
if (!is_numeric($showdat))
|
||||
$errmsg = $name . '不是数字';
|
||||
else
|
||||
$value = toint((float)$showdat * 100);
|
||||
$data['amount'] = $value;
|
||||
if ($value < 0.1)
|
||||
$errmsg = $name . '不能小于0.1元';
|
||||
} else if ($name == '账号') {
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '必填';
|
||||
}
|
||||
$data['tranaccount'] = $showdat;
|
||||
} else if ($name == '姓名') {
|
||||
if (empty($showdat)) {
|
||||
$errmsg = $name . '必填';
|
||||
}
|
||||
$data['tranname'] = $showdat;
|
||||
} else if ($name == '身份证号') {
|
||||
if (empty($showdat)) {
|
||||
$value = '';
|
||||
}
|
||||
$data['tranidid'] = $showdat;
|
||||
} else if ($name == '备注') {
|
||||
if (empty($showdat)) {
|
||||
$value = '';
|
||||
}
|
||||
$data['memo'] = $showdat;
|
||||
}
|
||||
if (!empty($showdat))
|
||||
$bempty = false;
|
||||
|
||||
if (empty($errmsg))
|
||||
$hrhtml .= '<td><div>' . $showdat . '<input type="hidden" name="' . $arr['fld'] . '_' . $lineidx . '" value="' . $value . '"/>' . $ext . '</div></td>';
|
||||
else
|
||||
$hrhtml .= '<td style="background:#ffe8c5;" title="#' . $lineidx . ':' . $errmsg . '"><div>' . $showdat . '</div></td>';
|
||||
}
|
||||
if ($bempty)
|
||||
continue;
|
||||
|
||||
$retchk = check_transtr($data['amount'], $data['accounttype'], $data['tranaccount'], $data['tranname'], $data['tranidid'], $data['memo'], $merchantrow['safecase']);
|
||||
if (is_string($retchk))
|
||||
$firsthtml = '<td style="background:#ffe8c5;" title="#' . $lineidx . ':' . $retchk . '"><div class="lang">重复</div></td>';
|
||||
else if (count($unqs) > 0) {
|
||||
$unq = implode('|', $unqs);
|
||||
if (in_array($unq, $uniques))
|
||||
$firsthtml = '<td style="background:#ffe8c5;" title="#' . $lineidx . ':该行与待导入数据有重复"><div class="lang">重复</div></td>';
|
||||
else {
|
||||
$uniques[] = $unq;
|
||||
$csql->column('id');
|
||||
$chkid = toint($db->get1($csql));
|
||||
if ($chkid > 0 && (($id > 0 && $chkid != $id) || $id == 0))
|
||||
$firsthtml = '<td style="background:#ffe8c5;" title="#' . $lineidx . ':该行与数据库数据有重复"><div class="lang">重复</div></td>';
|
||||
}
|
||||
}
|
||||
$html .= '<tr>' . $firsthtml . $hrhtml . '</tr>';
|
||||
$cnt++;
|
||||
}
|
||||
$html .= '</tbody></table></div>';
|
||||
$html .= '<input type="hidden" name="total" value="' . $cnt . '"/>';
|
||||
$html .= '<code>共' . $cnt . '条数据</code>';
|
||||
return succjson(array('html' => $html, 'count' => $cnt));
|
||||
}
|
||||
|
||||
public static function json_importxls_data() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p i'))
|
||||
// return errjson('您未被授权操作');
|
||||
$csql = new \ciy\sql('hf_merchantbase');
|
||||
$csql->where('id', $rsuser['s_b']);
|
||||
$merchantrow = $db->getone($csql);
|
||||
$post = new \ciy\post();
|
||||
$total = $post->getint('total');
|
||||
try {
|
||||
$db->begin();
|
||||
for ($i = 1; $i <= $total; $i++) {
|
||||
$id = $post->getint('id_' . $i);
|
||||
$data = array();
|
||||
$data['accounttype'] = $post->get('accounttype_' . $i);
|
||||
$data['amount'] = $post->get('amount_' . $i);
|
||||
$data['tranaccount'] = $post->get('tranaccount_' . $i);
|
||||
$data['tranname'] = $post->get('tranname_' . $i);
|
||||
$data['tranidid'] = $post->get('tranidid_' . $i);
|
||||
$data['memo'] = $post->get('memo_' . $i);
|
||||
self::updatedata($db, $rsuser, $id, $data, $merchantrow);
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,244 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-24 col-sm-12 col-md-8 px2 py2">
|
||||
<fieldset class="tips">
|
||||
<legend>服务图片设置</legend>
|
||||
<div>
|
||||
<form>
|
||||
<div class="char6 row">
|
||||
<div class="ciy-form col-24 col-sm-24 top">
|
||||
<label class="lang">服务商客服码</label>
|
||||
<div>
|
||||
<ciy-upload com="serviceimg" num="1" type="jpg,png" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<div class="txt-center">
|
||||
<button type="button" class="btn lg" onclick="editserv(this)">更新</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-24 col-sm-12 col-md-8 px2 py2">
|
||||
<fieldset class="tips">
|
||||
<legend>收款账号设置</legend>
|
||||
<div>
|
||||
<form>
|
||||
<div class="char6 row">
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">收款账号类型</label>
|
||||
<div>
|
||||
<ciy-radio com="recvtype" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">收款账号</label>
|
||||
<div>
|
||||
<input type="text" name="recvaccount" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">收款账号名</label>
|
||||
<div>
|
||||
<input type="text" name="recvname" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<div class="txt-center">
|
||||
<button type="button" class="btn lg" onclick="editrecv(this)">设置</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col-24 col-sm-12 col-md-8 px2 py2">
|
||||
<fieldset class="tips">
|
||||
<legend>API接入设置</legend>
|
||||
<div>
|
||||
<form>
|
||||
<div class="char6 row">
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">appid</label>
|
||||
<div>
|
||||
<input type="text" name="ali_appid" style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">PubKey</label>
|
||||
<div>
|
||||
<input type="file" id="pubkey" />
|
||||
<br />appCertPublicKey_[num].crt
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">RootCert</label>
|
||||
<div>
|
||||
<input type="file" id="rootkey" />
|
||||
<br />alipayRootCert.crt
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">PubRSA2</label>
|
||||
<div>
|
||||
<input type="file" id="apppub" />
|
||||
<br />alipayCertPublicKey_RSA2.crt
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label class="lang">PriKey</label>
|
||||
<div>
|
||||
<input type="file" id="apppri" />
|
||||
<br />应用私钥RSA2048*.txt
|
||||
</div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<div class="txt-center">
|
||||
<button type="button" class="btn lg" onclick="editapp(this)">设置</button>
|
||||
<button type="button" class="btn sm warn abs b0 r0" onclick="testapp()">签约测试</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ciy-hr my4"></div>
|
||||
<div id="id_status"></div>
|
||||
</div>
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp2.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
var Glob = {};
|
||||
ciyfn.pageload(function () {
|
||||
//Glob.urlp = ciyfn.urlparam();
|
||||
Glob.certfile = {};
|
||||
ciyfn.callfunc('init', {}, function (json) {
|
||||
var path = ciyfn.makeuploadpath('providerbase', ciyfn.getstorage(ciy_vars.tokenfield));
|
||||
ciycmp({ dom: $5('[com=recvtype]'), value: json.data.recvtype, range: 'accounttype' });
|
||||
ciycmp({ dom: $5('[com=feerate]'), value: json.data.feerate });
|
||||
ciycmp({ dom: $5('[com=feelow]'), value: json.data.feelow });
|
||||
$5('[name=recvaccount]').val(json.data.recvaccount);
|
||||
$5('[name=recvname]').val(json.data.recvname);
|
||||
ciycmp({ dom: $5('[com=serviceimg]'), value: json.data.serviceimg, path: path });
|
||||
ciycmp({ dom: $5('[com=pubkey]') });
|
||||
$5('[name=ali_appid]').val(json.key.ali_appid);
|
||||
|
||||
var html = '';
|
||||
if (json.data.providerstatus == 10) {
|
||||
html += '<button class="btn dag" onclick="prov_stop()">暂停业务</button>';
|
||||
html += ' 暂停后,所有商户无法下达新转账操作、不能提现,已下达的转账操作不影响。';
|
||||
}
|
||||
if (json.data.providerstatus == 20) {
|
||||
html += '<button class="btn succ" onclick="prov_start()">恢复业务</button>';
|
||||
}
|
||||
if (json.data.providerstatus == 30) {
|
||||
html += '服务商已被冻结,请联系平台';
|
||||
}
|
||||
$5('#id_status').html(html);
|
||||
});
|
||||
});
|
||||
$5('[type=file]').on('change', function (ev) {
|
||||
var id = ev.target.id;
|
||||
var name = ev.target.value;
|
||||
const file = ev.target.files[0];
|
||||
if (!file)
|
||||
return;
|
||||
const reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
const content = e.target.result;
|
||||
Glob.certfile[id] = { name: name, content: content };
|
||||
};
|
||||
reader.readAsText(file);
|
||||
});
|
||||
function editserv(dom) {
|
||||
var postparam = ciyfn.getform(dom);
|
||||
if (ciyfn.throttle(dom)) return;
|
||||
ciyfn.callfunc("editserv", postparam, function (json) {
|
||||
ciyfn.toast('提交成功');
|
||||
});
|
||||
}
|
||||
function editrecv(dom) {
|
||||
var postparam = ciyfn.getform(dom);
|
||||
if (ciyfn.throttle(dom)) return;
|
||||
ciyfn.callfunc("editrecv", postparam, function (json) {
|
||||
ciyfn.toast('提交成功');
|
||||
});
|
||||
}
|
||||
function editapp(dom) {
|
||||
var postparam = ciyfn.getform(dom);
|
||||
if (!Glob.certfile.pubkey)
|
||||
return ciyfn.toast('请上传PubKey');
|
||||
if (!Glob.certfile.rootkey)
|
||||
return ciyfn.toast('请上传RootCert');
|
||||
if (!Glob.certfile.apppub)
|
||||
return ciyfn.toast('请上传PubRSA2');
|
||||
if (!Glob.certfile.apppri)
|
||||
return ciyfn.toast('请上传私钥');
|
||||
//Glob.certfile.apppri.name "C:\\fakepath\\应用私钥RSA2048-敏感数据,请妥善保管.txt"
|
||||
postparam.pubkey = Glob.certfile.pubkey.content;
|
||||
postparam.rootkey = Glob.certfile.rootkey.content;
|
||||
postparam.apppub = Glob.certfile.apppub.content;
|
||||
postparam.apppri = Glob.certfile.apppri.content;
|
||||
if (ciyfn.throttle(dom)) return;
|
||||
ciyfn.callfunc("editapp", postparam, function (json) {
|
||||
ciyfn.toast('设置成功');
|
||||
});
|
||||
}
|
||||
function testapp() {
|
||||
ciyfn.callfunc("testapp", {}, function (json) {
|
||||
window.open(json.url);
|
||||
ciyfn.alert({
|
||||
content: '是否出现二维码?'
|
||||
, btns: ["*关闭"]
|
||||
});
|
||||
});
|
||||
}
|
||||
function prov_stop() {
|
||||
ciyfn.alert({
|
||||
content: '确定要暂停服务?'
|
||||
, btns: ["暂停", '*关闭']
|
||||
, cb: function (opn) {
|
||||
if (opn.btn == '关闭')
|
||||
return opn.close();
|
||||
ciyfn.callfunc("prov_stop", {}, function (json) {
|
||||
opn.close();
|
||||
ciyfn.toast('已暂停服务');
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
function prov_start() {
|
||||
ciyfn.callfunc("prov_start", {}, function (json) {
|
||||
ciyfn.toast('已开启服务');
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class setpage {
|
||||
public static function json_init() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
$ret['data'] = $db->getone($csql);
|
||||
$csql = new \ciy\sql('hf_providerkey');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
$csql->column('ali_appid');
|
||||
$ret['key'] = $db->getone($csql);
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_editserv() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p u'))
|
||||
// return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$serviceimg = $post->get('serviceimg');
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['serviceimg'] = $serviceimg;
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
public static function json_editrecv() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p u'))
|
||||
// return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$recvtype = $post->getint('recvtype');
|
||||
$recvaccount = $post->get('recvaccount');
|
||||
$recvname = $post->get('recvname');
|
||||
if ($recvtype == 0)
|
||||
return errjson('请选择账号类型');
|
||||
if (empty($recvaccount))
|
||||
return errjson('请输入收款账号');
|
||||
if (empty($recvname))
|
||||
return errjson('请输入收款人姓名');
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['recvtype'] = $recvtype;
|
||||
$updata['recvaccount'] = $recvaccount;
|
||||
$updata['recvname'] = $recvname;
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
static function hex2dec($hex) {
|
||||
$dec = 0;
|
||||
$len = strlen($hex);
|
||||
for ($i = 1; $i <= $len; $i++) {
|
||||
$dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
|
||||
}
|
||||
return $dec;
|
||||
}
|
||||
static function array2string($array) {
|
||||
$string = [];
|
||||
if ($array && is_array($array)) {
|
||||
foreach ($array as $key => $value) {
|
||||
$string[] = $key . '=' . $value;
|
||||
}
|
||||
}
|
||||
return implode(',', $string);
|
||||
}
|
||||
public static function json_editapp() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
//if (nopower($db, $rsuser['id'], 'p u'))
|
||||
// return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$ali_appid = $post->get('ali_appid');
|
||||
$pubkey = $post->get('pubkey'); //appCertPublicKey_2021005173683965.crt
|
||||
$rootkey = $post->get('rootkey'); //alipayRootCert.crt
|
||||
$apppub = $post->get('apppub'); //alipayCertPublicKey_RSA2.crt
|
||||
$apppri = $post->get('apppri'); //应用私钥RSA2048-敏感数据,请妥善保管
|
||||
if (empty($ali_appid))
|
||||
return errjson('请输入APPID');
|
||||
if (empty($pubkey))
|
||||
return errjson('请输入公钥');
|
||||
if (empty($rootkey))
|
||||
return errjson('请输入root证书');
|
||||
if (empty($apppub))
|
||||
return errjson('请输入APP公钥');
|
||||
if (empty($apppri))
|
||||
return errjson('请输入APP私钥');
|
||||
$ssl = openssl_x509_parse($pubkey);
|
||||
if ($ssl === false)
|
||||
return errjson('公钥格式错误');
|
||||
$ali_app_cert_sn = '';
|
||||
if (is_array($ssl['issuer']))
|
||||
$ali_app_cert_sn = md5(self::array2string(array_reverse($ssl['issuer'])) . $ssl['serialNumber']);
|
||||
if (empty($ali_app_cert_sn))
|
||||
return errjson('app证书格式错误');
|
||||
|
||||
$array = explode("-----END CERTIFICATE-----", $rootkey);
|
||||
$ali_root_cert_sn = null;
|
||||
for ($i = 0; $i < count($array) - 1; $i++) {
|
||||
$ssl[$i] = openssl_x509_parse($array[$i] . "-----END CERTIFICATE-----");
|
||||
if (strpos($ssl[$i]['serialNumber'], '0x') === 0) {
|
||||
$ssl[$i]['serialNumber'] = self::hex2dec($ssl[$i]['serialNumberHex']);
|
||||
}
|
||||
if ($ssl[$i]['signatureTypeLN'] == "sha1WithRSAEncryption" || $ssl[$i]['signatureTypeLN'] == "sha256WithRSAEncryption") {
|
||||
if ($ali_root_cert_sn == null) {
|
||||
$ali_root_cert_sn = md5(self::array2string(array_reverse($ssl[$i]['issuer'])) . $ssl[$i]['serialNumber']);
|
||||
} else {
|
||||
$ali_root_cert_sn = $ali_root_cert_sn . "_" . md5(self::array2string(array_reverse($ssl[$i]['issuer'])) . $ssl[$i]['serialNumber']);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (empty($ali_root_cert_sn))
|
||||
return errjson('root证书格式错误');
|
||||
if (strpos($apppri, '-----BEGIN RSA PRIVATE KEY-----') === false) {
|
||||
$apppri = "-----BEGIN RSA PRIVATE KEY-----\n" . chunk_split($apppri, 64, "\n") . "-----END RSA PRIVATE KEY-----";
|
||||
}
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['ali_appid'] = $ali_appid;
|
||||
$updata['ali_app_cert_sn'] = $ali_app_cert_sn;
|
||||
$updata['ali_root_cert_sn'] = $ali_root_cert_sn;
|
||||
$updata['ali_publickey'] = $apppub;
|
||||
$updata['ali_privatekey'] = $apppri;
|
||||
$csql = new \ciy\sql('hf_providerkey');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
public static function json_testapp() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$csql = new \ciy\sql('hf_providerkey');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
$keyrow = $db->getone($csql);
|
||||
$model = array();
|
||||
$model['personal_product_code'] = 'FUND_SAFT_SIGN_WITHHOLDING_P';
|
||||
$model['product_code'] = 'FUND_SAFT_SIGN_WITHHOLDING';
|
||||
$model['external_agreement_no'] = 'AX' . rand(10000, 99999); //bizno
|
||||
$model['sign_scene'] = 'INDUSTRY|SATF_ACC';
|
||||
$model['third_party_type'] = 'PARTNER';
|
||||
$accessParams = array();
|
||||
$accessParams['channel'] = 'QRCODE'; // 1. ALIPAYAPP (钱包h5页面签约) 2. QRCODE(扫码签约) 3. QRCODEORSMS(扫码签约或者短信签约)
|
||||
$model['access_params'] = $accessParams;
|
||||
return succjson();
|
||||
}
|
||||
public static function json_prov_stop() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['providerstatus'] = 20;
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
public static function json_prov_start() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
$providerrow = $db->getone($csql);
|
||||
if ($providerrow['recvtype'] == 0 || empty($providerrow['recvaccount']) || empty($providerrow['recvname']))
|
||||
return errjson('请配置收款账号');
|
||||
if ($providerrow['depositmoney'] < 1)
|
||||
return errjson('您的保证金不足');
|
||||
$csql = new \ciy\sql('hf_providerkey');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
$keyrow = $db->getone($csql);
|
||||
if (!is_array($keyrow)) {
|
||||
$updata = array();
|
||||
$updata['ali_appid'] = '';
|
||||
$updata['ali_app_cert_sn'] = '';
|
||||
$updata['ali_root_cert_sn'] = '';
|
||||
$updata['ali_publickey'] = '';
|
||||
$updata['ali_privatekey'] = '';
|
||||
$csql = new \ciy\sql('hf_providerkey');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->insert($csql, $updata) === false)
|
||||
return errjson('添加key失败:' . $db->error);
|
||||
$keyrow = array();
|
||||
}
|
||||
if (empty($keyrow['ali_appid']))
|
||||
return errjson('请配置APPID');
|
||||
if (empty($keyrow['ali_app_cert_sn']))
|
||||
return errjson('请配置APP证书SN');
|
||||
if (empty($keyrow['ali_root_cert_sn']))
|
||||
return errjson('请配置根证书SN');
|
||||
if (empty($keyrow['ali_publickey']))
|
||||
return errjson('请配置APP公钥');
|
||||
if (empty($keyrow['ali_privatekey']))
|
||||
return errjson('请配置APP私钥');
|
||||
try {
|
||||
$db->begin();
|
||||
$updata = array();
|
||||
$updata['providerstatus'] = 10;
|
||||
$csql = new \ciy\sql('hf_providerbase');
|
||||
$csql->where('id', $rsuser['s_a']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
return succjson();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="row" style="background:#eeeeee;">
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<label>回调LOG</label>
|
||||
<div><ciy-textarea com="a" /></div>
|
||||
</div>
|
||||
<div class="ciy-form col-24 col-sm-24">
|
||||
<div style="flex:none;padding-right:1em;">
|
||||
<button type="button" class="btn lg" onclick="formsubmit(this);">分析</button>
|
||||
</div>
|
||||
<div>
|
||||
<ciy-radio com="b" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="id_result"></div>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||
<script type="text/javascript" src="/ud/dict/ciy_arearpc.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
ciyfn.pageload(function () {
|
||||
ciycmp({ dom: '[com=a]' });
|
||||
ciycmp({ dom: '[com=b]', range: [{ id: '10', name: '原始' }, { id: '20', name: '重点' }], value: '20' });
|
||||
});
|
||||
function formsubmit(dom) {
|
||||
var params = ciyfn.getform(dom);
|
||||
var lines = params.a.split('\n');
|
||||
var html = '';
|
||||
//line 2025-07-15 16:14:58\t GET:func=ambhf/alipay.aqf& POST:charset=UTF-8¬ify_time=2025-07-15+16%3A14%3A57&unsign_time=2025-07-15+16%3A14%3A57&sign=FScISZZPIUX0SOJbT7dXOeoaAbdbmFvZmX7csF1%2FOxnGDST30SFuE%2FhWLL%2FrMOl7t7gOYgYuixdwz5uvWuVK2BD1bcWLXcrsa0btRsvQxCIQk8w4nOXkb2T7e5pzR5lZrMCL4aGUYZ%2FVTCzkKYWhjWP2HjYRhmGyJjbCUFMYBNr%2BM%2B96knUwQqo4zava%2BwvW9oCzOC1WTVqOunjQQqeMKFaI2uhwbxHmJtaR4NaJUGbL0Fq3c41ZD%2F83EYBCt7lydd%2B91OVKBJcy%2Fmzab1%2Fy6WSGW6HT6MNJcvSx7u%2F4eUsSJkBpzgXdQUoSY6caWefe9A5pDnR3oZ8MdfGQz6RJ2Q%3D%3D&merchant_app_id=2021005173683965&external_agreement_no=1I1&version=1.0¬ify_id=2025071501222161457021501405959732¬ify_type=dut_user_unsign&agreement_no=20255515198814819334&alipay_open_id=0349EGGiMJAohwXMGO-pS-2YRJXprFEj_08A5a7PDkwXzA4&auth_app_id=2021005173683965&personal_product_code=FUND_SAFT_SIGN_WITHHOLDING_P&app_id=2021005173683965&sign_type=RSA2&alipay_logon_id=hr***%40ciy.cn&status=UNSIGN&sign_scene=INDUSTRY%7CSATF_ACC
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
var line = lines[i];
|
||||
var ind = line.indexOf('POST:');
|
||||
if (ind > -1)
|
||||
line = line.substring(ind + 5);
|
||||
line = decodeURIComponent(line);
|
||||
var arrs = line.split('&');
|
||||
var arrobj = {};
|
||||
for (var j = 0; j < arrs.length; j++) {
|
||||
var arr = arrs[j].split('=');
|
||||
if (arr.length == 2) {
|
||||
arrobj[arr[0]] = arr[1];
|
||||
}
|
||||
}
|
||||
if (params.b == '10') {
|
||||
html += '<div style="line-height:1.5em;margin: 1em;">';
|
||||
for (var j in arrobj) {
|
||||
if (j == 'biz_content') {
|
||||
var biz = JSON.parse(arrobj[j]);
|
||||
html += '<div><pre>' + JSON.stringify(biz, null, 2) + '</pre></div>';
|
||||
} else {
|
||||
html += '<div><kbd>' + j + '</kbd><span>' + arrobj[j] + '</span></div>';
|
||||
}
|
||||
}
|
||||
html += '</div><hr/>';
|
||||
}
|
||||
if (params.b == '20') {
|
||||
var subhtml = '';
|
||||
if (arrobj['notify_type'] == 'dut_user_sign') {
|
||||
subhtml = '<div><span style="color:green;">用户签约: ' + arrobj['external_agreement_no'] + '</span></div>';
|
||||
}
|
||||
else if (arrobj['notify_type'] == 'dut_user_unsign')
|
||||
subhtml = '<div><span style="color:darkred;">用户解约: ' + arrobj['external_agreement_no'] + '</span></div>';
|
||||
else if (arrobj['msg_method'] == 'alipay.fund.trans.order.changed') {
|
||||
var biz = JSON.parse(arrobj['biz_content']);
|
||||
if (biz['status'] != 'SUCCESS'
|
||||
&& biz['status'] != 'DEALING'
|
||||
&& biz['status'] != 'CLOSED'
|
||||
&& biz['status'] != 'WAIT_PAY')
|
||||
subhtml = 'more';
|
||||
if(biz['fail_reason'])
|
||||
subhtml = '<div><span>转账失败原因: ' + biz['fail_reason'] + '</span></div>';
|
||||
//subhtml = '<div><span style="color:blue;">转账: ' + biz['out_biz_no'] + ',' + biz['status'] + ',' + biz['trans_amount'] + '</span></div>';
|
||||
}
|
||||
if (subhtml == 'more') {
|
||||
subhtml = '';
|
||||
for (var j in arrobj) {
|
||||
if (j == 'biz_content') {
|
||||
var biz = JSON.parse(arrobj[j]);
|
||||
subhtml += '<div><pre>' + JSON.stringify(biz, null, 2) + '</pre></div>';
|
||||
} else {
|
||||
subhtml += '<div><kbd>' + j + '</kbd><span>' + arrobj[j] + '</span></div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (subhtml) {
|
||||
html += '<div style="line-height:1.5em;margin: 1em;">';
|
||||
html += subhtml;
|
||||
html += '</div><hr/>';
|
||||
}
|
||||
}
|
||||
}
|
||||
$5('#id_result').html(html);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<form class="search" onsubmit="table.search(this,'btn');return false;">
|
||||
<div>
|
||||
<div class="sinps"></div>
|
||||
<div class="sbtns">
|
||||
<button class="lang btn" type="submit">查询</button>
|
||||
<a class="lang btn" onclick="edit(0)">添加</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="table">
|
||||
<div class="loading col-24">Loading...</div>
|
||||
<ul class="list row"></ul>
|
||||
<div>
|
||||
<div class="btmbtn">
|
||||
<a class="lang btn def" onclick="ciyfn.select_all(table)">全选</a>
|
||||
<a class="lang btn def" onclick="ciyfn.select_diff(table)">反选</a>
|
||||
|
|
||||
<a class="lang btn dag" onclick="ciyfn.select_callfunc(table, this,'del','已选{n}条,是否批量删除?',{},function(json){table.delline(json)})">批量删除</a>
|
||||
</div>
|
||||
<div class="page"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||
<script type="text/javascript" src="../common.js"></script>
|
||||
<script type="text/javascript">
|
||||
'use strict';
|
||||
var table;
|
||||
var Glob = {};
|
||||
ciyfn.pageload(function () {
|
||||
table = new ciyclass.cardtable({
|
||||
dom: '.table'
|
||||
, url: 'init'
|
||||
, pagecount: window.innerWidth > 992 ? 9 : 6
|
||||
, fn_beforedata: function (json) {
|
||||
ciyfn.fillsearch({
|
||||
dom: '.search'
|
||||
, data: json
|
||||
});
|
||||
return json;
|
||||
}
|
||||
, fn_lihtml: function (ldat) {
|
||||
var ds = ldat['power'].split('.');
|
||||
var p1 = 0;
|
||||
var p2 = 0;
|
||||
for (var d in ds) {
|
||||
if (ds[d] == '')
|
||||
continue;
|
||||
if (isNaN(parseInt(ds[d].charAt(ds[d].length - 1))))
|
||||
p2++;
|
||||
else
|
||||
p1++;
|
||||
}
|
||||
var powerhtml = '';
|
||||
if (p1 > 0)
|
||||
powerhtml += '<code>' + ciyfn.lang('主权限') + p1 + ciyfn.lang('项') + '</code>';
|
||||
if (p2 > 0)
|
||||
powerhtml += '<code>' + ciyfn.lang('子权限') + p2 + ciyfn.lang('项') + '</code>';
|
||||
if (powerhtml == '')
|
||||
powerhtml = '<kbd class="lang">无</kbd>';
|
||||
return `<li data-id="${ldat.id}" class="col-24 col-sm-12 col-md-8">
|
||||
<div class="ciy-list" style="height:9em;">
|
||||
<div class="l1">${ldat.name}</div>
|
||||
<div class="rt">${powerhtml}</div>
|
||||
<div class="l2">${ldat.memo}</div>
|
||||
<div class="lb txt-smm"> 更新: ${ciyfn.todatetime(ldat.uptimes)}</div>
|
||||
<div class="rb"><a class="lang btn" onclick="edit(${ldat.id})">修改</a></div>
|
||||
</div>
|
||||
</li>`;//测试es6真实普及率
|
||||
}
|
||||
});
|
||||
table.callpage(1);
|
||||
|
||||
});
|
||||
function edit(id) {
|
||||
ciyfn.alert({
|
||||
title: id == 0 ? '添加' : '修改'
|
||||
, width: 'pc'
|
||||
, height: 'pc'
|
||||
, frame: 'rigger/role_u.html?id=' + id
|
||||
, cb: function (opn) {
|
||||
opn.close();
|
||||
table.updateline(opn.inputs);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
namespace web\admin\demo;
|
||||
|
||||
class ultable {
|
||||
static function setwhere($db, $post) {
|
||||
$query = $post->get('query');
|
||||
$csql = new \ciy\sql('zc_role');
|
||||
$csql->where('name like', objstr($query, 'name'));
|
||||
$csql->where('memo like', objstr($query, 'memo'));
|
||||
$order = objstr($query, 'order', 'id desc');
|
||||
$csql->order($order);
|
||||
$query['order'] = $order;
|
||||
return [$query, $csql];
|
||||
}
|
||||
public static function json_init() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
$post = new \ciy\post();
|
||||
list($where, $csql) = self::setwhere($db, $post);
|
||||
$pageno = $post->getint('pageno', 1);
|
||||
$pagecount = $post->getint('pagecount', 10);
|
||||
$csql->limit($pageno, $pagecount);
|
||||
$mainrowcount = $post->getint('count');
|
||||
$rows = $db->get($csql, $mainrowcount);
|
||||
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
|
||||
if ($post->getbool('field')) {
|
||||
$field = array();
|
||||
$fshow = $db->getfield($field, 'zc_role');
|
||||
foreach ($field as $fr => $v) {
|
||||
if ($post->is('_' . $fr))
|
||||
$field[$fr]['c'] = ',' . $field[$fr]['c'];
|
||||
}
|
||||
$fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
|
||||
$field['memo']['thwidth'] = '25em';
|
||||
$ret['field'] = $field;
|
||||
$ret['fshow'] = $fshow;
|
||||
}
|
||||
|
||||
if ($post->getbool('once')) {
|
||||
$ret['once'] = array();
|
||||
$input = array();
|
||||
$input[] = array(
|
||||
'type' => 'input', 'form' => 'name', 'name' => '角色名称', 'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$input[] = array(
|
||||
'type' => 'input', 'form' => 'memo', 'name' => '角色说明', 'prop' => ' style="width:8em;"'
|
||||
);
|
||||
$ret['once']['input'] = $input;
|
||||
}
|
||||
return succjson($ret);
|
||||
}
|
||||
public static function json_del() {
|
||||
global $db;
|
||||
$rsuser = verifyfast();
|
||||
if (nopower($db, $rsuser['id'], 'p502d'))
|
||||
return errjson('您未被授权操作');
|
||||
$post = new \ciy\post();
|
||||
$ids = $post->get('ids');
|
||||
if (empty($ids))
|
||||
return errjson('请选择至少一条');
|
||||
$csql = new \ciy\sql('zc_role');
|
||||
$csql->where('id in', $ids);
|
||||
$rows = $db->get($csql);
|
||||
$vids = array();
|
||||
try {
|
||||
$db->begin();
|
||||
foreach ($rows as $row) {
|
||||
$delid = $row['id'];
|
||||
delcheck($db, $delid, 'zc_admin', 'roleid', '用户');
|
||||
delme($db, $delid, 'zc_role');
|
||||
savelogdb($db, $rsuser['id'], 'zc_role', $row, null);
|
||||
$vids[] = $delid;
|
||||
}
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
savelogfile('err_db', $ex->getMessage());
|
||||
return errjson($ex->getMessage());
|
||||
}
|
||||
$ret['ids'] = $vids;
|
||||
return succjson($ret);
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ func Index_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
//menu,url: 普通链接~原型图 4378,key 普通链接~原型图 共存
|
||||
//menu,pow: d=删除|e=修改 p[id]e 默认p[id]v 显示权限 角色权限menu url<>'' 可选择授权
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -51,12 +51,12 @@ func Index_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
"name": "控制台",
|
||||
}
|
||||
ret["title"] = "Ciyon SaaS总控台"
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Index_favadd(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -79,11 +79,11 @@ func Index_favadd(w http.ResponseWriter, r *http.Request) bool {
|
|||
return c.ErrJSON(w, "添加fav失败", err)
|
||||
}
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
func Index_favdel(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -94,12 +94,12 @@ func Index_favdel(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "删除fav失败", err)
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
||||
func Index_setssh(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -111,7 +111,7 @@ func Index_setssh(w http.ResponseWriter, r *http.Request) bool {
|
|||
//开启后,需定时关闭防火墙
|
||||
fmt.Println("开启SSH远程访问")
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
||||
// if strings.HasPrefix(r.Header.Get("Content-Type"), "multipart/form-data") {
|
||||
|
|
|
|||
|
|
@ -661,22 +661,15 @@
|
|||
var tabsuldom = $5('#id_headertabs_ul');
|
||||
$5(document).on('click', '[data-href]', function (e) {
|
||||
var adom = $5(e.currentTarget);
|
||||
var hrefstr = adom.attr('data-href');
|
||||
hrefstr = hrefstr.replace('{domain}', location.origin);
|
||||
if (!hrefstr)
|
||||
return;
|
||||
var href = adom.attr('data-href');
|
||||
var txt = adom.attr('data-title') || adom.text();
|
||||
var hrefs = hrefstr.split('~');
|
||||
var href = hrefs[0];
|
||||
if (href == '') {
|
||||
if (hrefs.length > 1) {
|
||||
if (hrefs[1][0] == ':')
|
||||
ciyfn.alert(hrefs[1].substring(1).replace(/\|/g, '<br/>'));
|
||||
else
|
||||
thos.page_ifropen(getdemourl(hrefs[1]), txt);
|
||||
}
|
||||
} else if (href.substring(0, 4) == 'http') {
|
||||
window.open(href);
|
||||
} else if (href.substring(0, 4) == '!MSG') {
|
||||
ciyfn.alert(href.substring(4).replace(/\|/g, '<br/>'));
|
||||
} else if (href.substring(0, 4) == '!WIN') {
|
||||
window.open(href.substring(4));
|
||||
} else if (href.substring(0, 4) == '!PRD') {
|
||||
thos.page_ifropen(getdemourl(href.substring(4)), txt);
|
||||
} else if (href.substring(0, 4) == '!DAO') {
|
||||
ciyfn.callfunc("godao", { url: href.substring(4) }, function (json) {
|
||||
thos.page_ifropen(json.url, txt);
|
||||
|
|
@ -684,8 +677,6 @@
|
|||
thos.page_shrink();
|
||||
});
|
||||
} else {
|
||||
if (href.substring(0, 5) == '$http')
|
||||
href = href.substring(1);
|
||||
thos.page_ifropen(href, txt);
|
||||
if (window.innerWidth < 992)
|
||||
thos.page_shrink();
|
||||
|
|
@ -743,25 +734,18 @@
|
|||
var bodydom = $5('#id_body');
|
||||
navdom.on("contextmenu", "li", function (ev) {
|
||||
var curra = $5(ev.currentTarget);
|
||||
var hrefstr = curra.attr('data-href');
|
||||
var href = curra.attr('data-href');
|
||||
var menuid = curra.attr('data-id') || curra.attr('fav');
|
||||
if (hrefstr == undefined)
|
||||
if (href == undefined)
|
||||
return false;
|
||||
var pops = [];
|
||||
var hrefs = hrefstr.split('~');
|
||||
var txt = curra.attr('data-title') || curra.text();
|
||||
txt = ciyfn.lang(txt);
|
||||
if (hrefs[0]) {
|
||||
if (href) {
|
||||
if (curra.hasattr('fav'))
|
||||
pops.push({ act: 'delfav', id: menuid, title: ciyfn.lang('移除该菜单'), name: txt, url: hrefs[0] });
|
||||
pops.push({ act: 'delfav', id: menuid, title: ciyfn.lang('移除该菜单'), name: txt, url: href });
|
||||
else
|
||||
pops.push({ act: 'addfav', id: menuid, title: ciyfn.lang('加到常用菜单'), name: txt, url: hrefs[0] });
|
||||
}
|
||||
if (hrefs[1]) {
|
||||
if (hrefs[1][0] == ':')
|
||||
pops.push({ act: 'msg', title: ciyfn.lang('原型描述'), url: hrefs[1].substring(1) });
|
||||
else
|
||||
pops.push({ act: 'ifropen', title: ciyfn.lang('打开原型图'), name: txt + '-' + ciyfn.lang('原型图'), url: getdemourl(hrefs[1]) });
|
||||
pops.push({ act: 'addfav', id: menuid, title: ciyfn.lang('加到常用菜单'), name: txt, url: href });
|
||||
}
|
||||
var popdom = ciyfn.popmenu(ev, pops);
|
||||
popdom.on("click", "li", function (ev) {
|
||||
|
|
|
|||
|
|
@ -39,14 +39,14 @@ func Login_login(w http.ResponseWriter, r *http.Request) bool {
|
|||
if math.Abs(c.Tofloat(authtime/1000-c.Tostamp())) > 300 {
|
||||
return c.ErrJSON(w, "您的本地时间与服务器时间相差超过5分钟,请调整本机时间.<br/>服务器时间: "+c.Todate(-1, "Y-m-d H:i:s")+"<br/>您本机时间: "+c.Todate(authtime/1000, "Y-m-d H:i:s"))
|
||||
}
|
||||
if post.Get("pass") != c.MD5(c.Tostr(userrow["password"])+fmt.Sprintf("%d", authtime)) {
|
||||
if post.Get("pass") != c.Sha256(c.Tostr(userrow["password"])+fmt.Sprintf("%d", authtime)) {
|
||||
updata := map[string]any{}
|
||||
updata["trytime"] = []string{"trytime+1"}
|
||||
updata["logintimes"] = c.Tostamp()
|
||||
csql = c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", userrow["id"])
|
||||
c.CiyDB.Update(csql, updata)
|
||||
SaveLog(c.CiyDB, "LOGINERR", "用户["+user+"]登录密码错误 "+Gdefpass+" ["+c.MD5(Gdefpass+Gtokensalt)+"]")
|
||||
SaveLog(c.CiyDB, "LOGINERR", "用户["+user+"]登录密码错误 "+Gdefpass+" ["+c.Sha256(Gdefpass+Gtokensalt)+"]")
|
||||
return c.ErrJSON(w, "用户["+user+"]登录密码错误")
|
||||
}
|
||||
syncdict, err := getsync(userrow)
|
||||
|
|
@ -57,7 +57,7 @@ func Login_login(w http.ResponseWriter, r *http.Request) bool {
|
|||
userid := c.Toint(userrow["id"])
|
||||
c.CiyDB.Execute("delete from zc_online where exptimes<? and user=?", c.Tostamp(), userid)
|
||||
sid := c.Randstr(10)
|
||||
exptimes := c.Tostamp() + 86400
|
||||
exptimes := c.Tostamp() + Gtokenswapsec
|
||||
updata := map[string]any{}
|
||||
updata["user"] = userid
|
||||
updata["targettype"] = targettype
|
||||
|
|
@ -86,14 +86,15 @@ func Login_login(w http.ResponseWriter, r *http.Request) bool {
|
|||
authstr := c.JSON_Str(auth)
|
||||
|
||||
newauth := c.Encrypt(authstr, "E", Gtokensalt)
|
||||
post.W.Header().Set(Gtokenfield, newauth)
|
||||
syncdict["_ciyauth"] = newauth
|
||||
//post.W.Header().Set(Gtokenfield, newauth)
|
||||
SaveLog(c.CiyDB, "LOGIN", "登录成功")
|
||||
return c.SuccJSON(w, syncdict)
|
||||
return c.SuccJSON(w, r, syncdict)
|
||||
}
|
||||
|
||||
func Login_restorage(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, _ := Verifyfast(c.CiyDB, post)
|
||||
rsuser, _ := Verifyfast(r, c.CiyDB, post)
|
||||
csql := c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", rsuser["id"])
|
||||
userrow, err := c.CiyDB.Getone(csql)
|
||||
|
|
@ -105,7 +106,7 @@ func Login_restorage(w http.ResponseWriter, r *http.Request) bool {
|
|||
return c.ErrJSON(w, "遇到同步错误", err)
|
||||
}
|
||||
c.CiyDB.Execute("update zc_online set usrchg=0 where id=?", rsuser["_o"])
|
||||
return c.SuccJSON(w, syncdict)
|
||||
return c.SuccJSON(w, r, syncdict)
|
||||
}
|
||||
func getsync(userrow map[string]any) (map[string]any, error) {
|
||||
var err error
|
||||
|
|
@ -139,11 +140,8 @@ func getsync(userrow map[string]any) (map[string]any, error) {
|
|||
me["depart"] = departname
|
||||
me["addtimes"] = userrow["addtimes"]
|
||||
power := userrow["power"]
|
||||
if c.Toint(userrow["id"]) == 10 {
|
||||
power = ".*."
|
||||
}
|
||||
me["power"] = power
|
||||
me["needpass"] = (userrow["password"] == c.MD5(Gdefpass+Gtokensalt))
|
||||
me["needpass"] = (userrow["password"] == c.Sha256(Gdefpass+Gtokensalt))
|
||||
syncdict := map[string]any{}
|
||||
syncdict["storage"] = storage
|
||||
syncdict["me"] = me
|
||||
|
|
@ -152,12 +150,12 @@ func getsync(userrow map[string]any) (map[string]any, error) {
|
|||
|
||||
func Login_logout(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, err := Verifyuser(c.CiyDB, post)
|
||||
rsuser, err := Verifyuser(r, c.CiyDB, post)
|
||||
if err == nil {
|
||||
csql := c.NewCiySQL("zc_online")
|
||||
csql.Where("id", rsuser["_o"])
|
||||
c.CiyDB.Delete(csql)
|
||||
}
|
||||
SaveLog(c.CiyDB, "LOGIN", "退出登录")
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,9 +89,7 @@ class login {
|
|||
$authstr = json_encode($auth, JSON_PARTIAL_OUTPUT_ON_ERROR);
|
||||
$enauth = encrypt($authstr, 'E', $_token['salt']);
|
||||
if ($_token['type'] == 'cookie') {
|
||||
$headercookie = 'Set-Cookie: ' . $_token['field'] . '=' . $enauth . '; expires=' . gmdate('D, d-M-Y H:i:s T', time() + $_token['swapsec'] + $_token['expsec']) . '; path=/; httponly';
|
||||
if(ishttps())
|
||||
$headercookie.= '; SameSite=None; Secure';
|
||||
$headercookie = 'Set-Cookie: ' . $_token['field'] . '=' . $enauth . '; expires=' . gmdate('D, d-M-Y H:i:s T', time() + $_token['swapsec'] + $_token['expsec']) . '; path=/; httponly; SameSite=None; Secure';
|
||||
header($headercookie);
|
||||
} else {
|
||||
$ret['_ciyauth'] = $enauth;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ func admin_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Admin_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -96,12 +96,12 @@ func Admin_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["zc_role"], _, _ = c.CiyDB.Get(csql)
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Admin_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -212,12 +212,12 @@ func Admin_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Admin_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -257,12 +257,12 @@ func Admin_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
c.CiyDB.Execute("update zc_online set usrchg=2")
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Admin_repass(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -273,7 +273,7 @@ func Admin_repass(w http.ResponseWriter, r *http.Request) bool {
|
|||
err := c.CiyDB.Tran(func() error {
|
||||
updata := map[string]any{}
|
||||
updata["trytime"] = 0
|
||||
updata["password"] = c.MD5(admin.Gdefpass + admin.Gtokensalt)
|
||||
updata["password"] = c.Sha256(admin.Gdefpass + admin.Gtokensalt)
|
||||
csql := c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", id)
|
||||
_, err := c.CiyDB.Update(csql, updata)
|
||||
|
|
@ -288,11 +288,11 @@ func Admin_repass(w http.ResponseWriter, r *http.Request) bool {
|
|||
c.CiyDB.Execute("delete from zc_online where user=?", id)
|
||||
ret := map[string]any{}
|
||||
ret["msg"] = "默认密码: " + admin.Gdefpass
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Admin_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -385,11 +385,11 @@ func Admin_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["url"] = filename
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Admin_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -574,14 +574,14 @@ func Admin_importxls_in(w http.ResponseWriter, r *http.Request) bool {
|
|||
html += "</div>\n"
|
||||
html += "<input type=\"hidden\" name=\"total\" value=\"" + c.Tostr(cnt) + "\"/>\n"
|
||||
html += "<code>共" + c.Tostr(cnt) + "条数据</code>\n"
|
||||
return c.SuccJSON(w, map[string]any{
|
||||
return c.SuccJSON(w, r, map[string]any{
|
||||
"html": html,
|
||||
"count": cnt,
|
||||
})
|
||||
}
|
||||
func Admin_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -630,5 +630,5 @@ func Admin_importxls_data(w http.ResponseWriter, r *http.Request) bool {
|
|||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
c.CiyDB.Execute("update zc_online set usrchg=2")
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ func autotask_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Autotask_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -74,11 +74,11 @@ func Autotask_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Autotask_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -148,11 +148,11 @@ func Autotask_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Autotask_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -184,12 +184,12 @@ func Autotask_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Autotask_status(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -222,5 +222,5 @@ func Autotask_status(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ func autotskrun_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Autotskrun_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -79,11 +79,11 @@ func Autotskrun_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["zc_autotask"], _, _ = c.CiyDB.Get(csql)
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Autotskrun_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -116,12 +116,12 @@ func Autotskrun_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Autotskrun_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -199,11 +199,11 @@ func Autotskrun_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["url"] = filename
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Autotskrun_viewlog(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -218,5 +218,5 @@ func Autotskrun_viewlog(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["logs"] = rows
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
func Cata_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -107,11 +107,11 @@ func Cata_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["code"] = code
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Cata_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -179,11 +179,11 @@ func Cata_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
c.CiyDB.Execute("update zc_online set usrchg=2")
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Cata_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -240,5 +240,5 @@ func Cata_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
c.CiyDB.Execute("update zc_online set usrchg=2")
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
func Cataindex_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -62,11 +62,11 @@ func Cataindex_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Cataindex_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -131,11 +131,11 @@ func Cataindex_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Cataindex_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -173,5 +173,5 @@ func Cataindex_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import (
|
|||
|
||||
func Chgpass_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -22,12 +22,6 @@ func Chgpass_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if newpass == "" {
|
||||
return c.ErrJSON(w, "请输入新密码")
|
||||
}
|
||||
if newpass == admin.Gdefpass {
|
||||
return c.ErrJSON(w, "新密码不要与默认密码相同")
|
||||
}
|
||||
if len(newpass) < 6 {
|
||||
return c.ErrJSON(w, "密码应至少6位")
|
||||
}
|
||||
|
||||
csql := c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", userid)
|
||||
|
|
@ -35,24 +29,24 @@ func Chgpass_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if userrow == nil {
|
||||
return c.ErrJSON(w, "遇到读取错误", err)
|
||||
}
|
||||
if c.Tostr(userrow["password"]) != c.MD5(oldpass+admin.Gtokensalt) {
|
||||
if c.Tostr(userrow["password"]) != oldpass {
|
||||
return c.ErrJSON(w, "原密码错误")
|
||||
}
|
||||
|
||||
err = c.CiyDB.Tran(func() error {
|
||||
updata := map[string]any{}
|
||||
updata["password"] = c.MD5(newpass + admin.Gtokensalt)
|
||||
updata["password"] = newpass
|
||||
csql = c.NewCiySQL("zc_admin")
|
||||
csql.Where("id", userid)
|
||||
_, err = c.CiyDB.Update(csql, updata)
|
||||
if err != nil {
|
||||
return fmt.Errorf("更新失败:%v", err)
|
||||
}
|
||||
admin.SaveLog(c.CiyDB, "PASSWORD", "修改密码:"+c.Tostr(updata["password"]))
|
||||
admin.SaveLog(c.CiyDB, "PASSWORD", "已修改密码")
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class chgpass {
|
|||
$csql->where('id', $rsuser['id']);
|
||||
if ($db->update($csql, $updata) === false)
|
||||
throw new \Exception('更新失败:' . $db->error);
|
||||
savelog($db, $rsuser['id'], 'PASSWORD', '修改密码');
|
||||
savelog($db, $rsuser['id'], 'PASSWORD', '已修改密码');
|
||||
$db->commit();
|
||||
} catch (\Exception $ex) {
|
||||
$db->rollback();
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ func config_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Config_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -72,11 +72,11 @@ func Config_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Config_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -130,11 +130,11 @@ func Config_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Config_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -166,5 +166,5 @@ func Config_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ func debug_user_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Debug_user_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -84,11 +84,11 @@ func Debug_user_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Debug_user_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -158,12 +158,12 @@ func Debug_user_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Debug_user_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -195,12 +195,12 @@ func Debug_user_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Debug_user_getlocal(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -221,5 +221,5 @@ func Debug_user_getlocal(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["list"] = rows
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
func Depart_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -42,11 +42,11 @@ func Depart_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Depart_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -85,11 +85,11 @@ func Depart_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
func Depart_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -123,11 +123,11 @@ func Depart_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Depart_modifyupid(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -158,11 +158,11 @@ func Depart_modifyupid(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
func Depart_multiadd(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -199,5 +199,5 @@ func Depart_multiadd(w http.ResponseWriter, r *http.Request) bool {
|
|||
if cnt == 0 {
|
||||
return c.ErrJSON(w, "没有任何新增")
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ func funcslow_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Funcslow_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -77,11 +77,11 @@ func Funcslow_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Funcslow_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -113,12 +113,12 @@ func Funcslow_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Funcslow_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -186,5 +186,5 @@ func Funcslow_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["url"] = filename
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ func logdb_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Logdb_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -92,11 +92,11 @@ func Logdb_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Logdb_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -127,12 +127,12 @@ func Logdb_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Logdb_multiread(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -167,5 +167,5 @@ func Logdb_multiread(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import (
|
|||
|
||||
func Logfile_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ func Logfile_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["logfiles"] = logfiles
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Logfile_viewlog(w http.ResponseWriter, r *http.Request) bool {
|
||||
|
|
@ -32,7 +32,7 @@ func Logfile_viewlog(w http.ResponseWriter, r *http.Request) bool {
|
|||
return false
|
||||
}
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, err := admin.Verifyuser(c.CiyDB, post)
|
||||
_, err := admin.Verifyuser(r, c.CiyDB, post)
|
||||
if err != nil {
|
||||
c.SSESend_event(w, "请重新登录")
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
func Menu_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
rsuser, _ := admin.Verifyfast(c.CiyDB, post)
|
||||
rsuser, _ := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if rsuser == nil {
|
||||
return false
|
||||
}
|
||||
|
|
@ -64,11 +64,11 @@ func Menu_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Menu_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -132,11 +132,11 @@ func Menu_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
ret["url"] = url
|
||||
ret["demo"] = demo
|
||||
ret["pow"] = pow
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Menu_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -171,11 +171,11 @@ func Menu_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Menu_modifyupid(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -217,11 +217,11 @@ func Menu_modifyupid(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
func Menu_multiadd(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -279,12 +279,12 @@ func Menu_multiadd(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "更新upid失败:"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
||||
func Menu_seticon(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -304,7 +304,7 @@ func Menu_seticon(w http.ResponseWriter, r *http.Request) bool {
|
|||
return c.ErrJSON(w, "数据不存在", err)
|
||||
}
|
||||
if datarow == nil && svg == "" {
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
err = c.CiyDB.Tran(func() error {
|
||||
msg := ""
|
||||
|
|
@ -337,5 +337,5 @@ func Menu_seticon(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ func mock_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Mock_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -82,11 +82,11 @@ func Mock_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Mock_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -159,11 +159,11 @@ func Mock_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Mock_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -194,5 +194,5 @@ func Mock_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ func online_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Online_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -68,11 +68,11 @@ func Online_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Online_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -104,12 +104,12 @@ func Online_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Online_logout(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -132,5 +132,5 @@ func Online_logout(w http.ResponseWriter, r *http.Request) bool {
|
|||
updata["sid"] = ""
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ func power_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Power_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -86,11 +86,11 @@ func Power_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Power_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -160,11 +160,11 @@ func Power_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["data"] = updata
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Power_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -196,5 +196,5 @@ func Power_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ func role_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Role_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -62,11 +62,11 @@ func Role_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Role_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -99,5 +99,5 @@ func Role_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
func Role_u_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -36,11 +36,11 @@ func Role_u_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "读取power失败:"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Role_u_update(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -116,5 +116,5 @@ func Role_u_update(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, "事务"+err.Error())
|
||||
}
|
||||
return c.SuccJSON(w)
|
||||
return c.SuccJSON(w, r)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import (
|
|||
|
||||
func Statsdb_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -293,5 +293,5 @@ func Statsdb_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
ret["tps"] = tps
|
||||
}
|
||||
ret["stats"] = stats
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ func statsfunc_setwhere(post *c.CiyPost) (map[string]any, *c.CiySQL) {
|
|||
}
|
||||
func Statsfunc_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -81,11 +81,11 @@ func Statsfunc_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
once["input"] = input
|
||||
ret["once"] = once
|
||||
}
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
func Statsfunc_del(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -117,12 +117,12 @@ func Statsfunc_del(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["ids"] = vids
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func Statsfunc_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -211,5 +211,5 @@ func Statsfunc_exportxls(w http.ResponseWriter, r *http.Request) bool {
|
|||
}
|
||||
ret := map[string]any{}
|
||||
ret["url"] = filename
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import (
|
|||
|
||||
func Statssrv_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -34,5 +34,5 @@ func Statssrv_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
|
||||
ret := map[string]any{}
|
||||
ret["stats"] = stats
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ func Upload_upload(w http.ResponseWriter, r *http.Request) bool {
|
|||
extselect := "exts"
|
||||
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -43,12 +43,12 @@ func Upload_upload(w http.ResponseWriter, r *http.Request) bool {
|
|||
if err != nil {
|
||||
return c.ErrJSON(w, err.Error())
|
||||
}
|
||||
return c.SuccJSON(w, json)
|
||||
return c.SuccJSON(w, r, json)
|
||||
}
|
||||
|
||||
func Upload_s3(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ func Upload_s3(w http.ResponseWriter, r *http.Request) bool {
|
|||
headers["x-amz-content-sha256"] = vsha256
|
||||
headers["x-amz-date"] = zdate
|
||||
ret["headers"] = headers
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
||||
func sign(key []byte, msg string) []byte {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import (
|
|||
|
||||
func Welcome_init(w http.ResponseWriter, r *http.Request) bool {
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := Verifyfast(c.CiyDB, post)
|
||||
_, userid := Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
return false
|
||||
}
|
||||
|
|
@ -24,5 +24,5 @@ func Welcome_init(w http.ResponseWriter, r *http.Request) bool {
|
|||
// })
|
||||
// }
|
||||
ret["works"] = works
|
||||
return c.SuccJSON(w, ret)
|
||||
return c.SuccJSON(w, r, ret)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ func Wsdemo(w http.ResponseWriter, r *http.Request) bool {
|
|||
return false
|
||||
}
|
||||
post := c.NewCiyPost(w, r)
|
||||
_, userid := admin.Verifyfast(c.CiyDB, post)
|
||||
_, userid := admin.Verifyfast(r, c.CiyDB, post)
|
||||
if userid == 0 {
|
||||
ws.SendFail(0, "请重新登录")
|
||||
ws.Close()
|
||||
|
|
|
|||
|
|
@ -58,10 +58,10 @@
|
|||
var wsurl = $5('[name=ws]').val();
|
||||
if(wsurl.indexOf("ws") !== 0){
|
||||
console.log(location);
|
||||
wsurl = "ws://" + location.host + wsurl;
|
||||
wsurl = "wss://" + location.host + wsurl;
|
||||
}
|
||||
var url = wsurl;
|
||||
url += '&_' + ciy_vars.tokenfield + '=' + ciyfn.getstorage('_' + ciy_vars.tokenfield);
|
||||
url += '&_ciyauth=' + ciyfn.getstorage('_' + ciy_vars.tokenfield);
|
||||
ws = new ciyclass.websocket(url);
|
||||
ws.onopen = function (event) {
|
||||
$5('#id_log').append('<div>connected:'+wsurl+'</div>');
|
||||
|
|
|
|||
|
|
@ -1042,7 +1042,7 @@ ciyfn.callfunc = function (funcname, post, successfunc, opn) { //opn showload,m
|
|||
if (typeof (window['ciy_vars']) === 'undefined')
|
||||
window.ciy_vars = {};
|
||||
if (ciy_vars.tokenfield)
|
||||
opn.header[ciy_vars.tokenfield] = ciyfn.getstorage('_' + ciy_vars.tokenfield);
|
||||
opn.header['ciyauth'] = ciyfn.getstorage('_' + ciy_vars.tokenfield);
|
||||
if (document.location.search)
|
||||
funcname += '&' + document.location.search.substring(1);
|
||||
if (opn.showload === undefined)
|
||||
|
|
@ -1086,16 +1086,15 @@ ciyfn.callfunc = function (funcname, post, successfunc, opn) { //opn showload,m
|
|||
if (opn._load)
|
||||
opn._load.close('succ');
|
||||
if (ciy_vars.tokenfield) {
|
||||
var re = xhr.getResponseHeader(ciy_vars.tokenfield + 're');
|
||||
var re = xhr.getResponseHeader('_re');
|
||||
if (re && funcname.indexOf('restorage') == -1
|
||||
&& document.location.pathname.indexOf('/rigger/cata.html') == -1
|
||||
&& document.location.pathname.indexOf('/rigger/admin.html') == -1
|
||||
) {
|
||||
ciyfn.sendsignal(window.top, 'restorage', { show: false });
|
||||
}
|
||||
var newauth = xhr.getResponseHeader(ciy_vars.tokenfield);
|
||||
if (newauth)
|
||||
ciyfn.setstorage('_' + ciy_vars.tokenfield, newauth);
|
||||
if (json['_ciyauth'])
|
||||
ciyfn.setstorage('_' + ciy_vars.tokenfield, json['_ciyauth']);
|
||||
}
|
||||
if (typeof (successfunc) == 'function')
|
||||
successfunc(json, xhr);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
* Author: 众产® https://ciy.cn/code
|
||||
* Version: 0.1.1
|
||||
*/
|
||||
'use strict';
|
||||
ciyclass.websocket = function (addr, header) {
|
||||
var thos = this;
|
||||
this.buffer = new Array(); //发送数据缓冲区
|
||||
this.reOpenData = [2, 5, 3, 5, 5, 3, 5, 8, 10, 20, 30, 30]; //断线重连,每次间隔时间/秒
|
||||
this.reOpen = 0; //断线重连次数
|
||||
this.wsidx = 0;
|
||||
this.keepAliveTimer = setInterval(function () {
|
||||
try {
|
||||
if (thos.wsock && thos.wsock.readyState !== 1) {
|
||||
thos.reOpenSec--;
|
||||
if (thos.reOpenSec <= 0) {
|
||||
thos.reOpen++;
|
||||
thos.reOpenSec = 10;
|
||||
thos.open();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (thos.buffer.length > 0) {
|
||||
var data = thos.buffer.pop();
|
||||
thos.send(data);
|
||||
} else {
|
||||
if (new Date().getTime() - thos.last_health_time >= 15000 && thos.wsock.readyState === 1) {
|
||||
console.log('ping');
|
||||
thos.wsock.send('h');//.ping();
|
||||
thos.last_health_time = new Date().getTime();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}, 1000);
|
||||
this.setOpenSec = function () {
|
||||
(thos.reOpen < thos.reOpenData.length) ? thos.reOpenSec = thos.reOpenData[thos.reOpen] : thos.reOpenSec = 90; //断线重试太多后的间隔时间
|
||||
}
|
||||
this.open = function () {
|
||||
try {
|
||||
if (thos.wsock && thos.wsock.trueClose)
|
||||
return;
|
||||
thos.setOpenSec();
|
||||
if (thos.wsock) {
|
||||
if (thos.wsock.readyState == 1)
|
||||
return;
|
||||
thos.wsock.close();
|
||||
}
|
||||
thos.wsock = new WebSocket(addr);
|
||||
thos.wsock.onopen = function (event) {
|
||||
try {
|
||||
//获取header,刷新reauth
|
||||
thos.reOpen = 0;
|
||||
thos.last_health_time = new Date().getTime();
|
||||
if (typeof (thos.onopen) == "function")
|
||||
thos.onopen(event);
|
||||
} catch (err) {
|
||||
console.log('ws.onopen', err);
|
||||
}
|
||||
};
|
||||
thos.wsock.onmessage = function (e) {
|
||||
try {
|
||||
thos.last_health_time = new Date().getTime();
|
||||
if (typeof (thos.onmessage) == "function")
|
||||
thos.onmessage(e);
|
||||
} catch (err) {
|
||||
console.log('ws.onmessage', err);
|
||||
}
|
||||
};
|
||||
thos.wsock.onclose = function (e) {
|
||||
try {
|
||||
if (this.trueClose) {
|
||||
clearInterval(thos.keepAliveTimer);
|
||||
return;
|
||||
}
|
||||
thos.setOpenSec();
|
||||
if (typeof (thos.onclose) == "function")
|
||||
thos.onclose(e);
|
||||
} catch (err) {
|
||||
console.log('ws.onclose', err);
|
||||
}
|
||||
};
|
||||
thos.wsock.onerror = function (e) {
|
||||
try {
|
||||
thos.setOpenSec();
|
||||
if (typeof (thos.onerror) == "function")
|
||||
thos.onerror(e);
|
||||
} catch (err) {
|
||||
console.log('ws.onerror', err);
|
||||
}
|
||||
};
|
||||
} catch (err) {
|
||||
console.log('ws.open', err);
|
||||
}
|
||||
}
|
||||
this.send = function (msg) {
|
||||
console.log('op send', msg);
|
||||
try {
|
||||
if (this.wsock === undefined || this.wsock.trueClose)
|
||||
return false;
|
||||
if (this.wsock.readyState !== 1 || this.wsock.bufferedAmount > 0)
|
||||
this.buffer.push(msg);
|
||||
else {
|
||||
this.wsock.send(msg);
|
||||
this.last_health_time = new Date().getTime();
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.log('ws.send', err);
|
||||
}
|
||||
}
|
||||
this.sendjson = function (json) {
|
||||
console.log('op sendjson', json);
|
||||
json._wsidx = this.wsidx++;
|
||||
try {
|
||||
if (this.wsock === undefined || this.wsock.trueClose)
|
||||
return false;
|
||||
if (this.wsock.readyState !== 1 || this.wsock.bufferedAmount > 0)
|
||||
this.buffer.push(JSON.stringify(json));
|
||||
else {
|
||||
this.wsock.send(JSON.stringify(json));
|
||||
this.last_health_time = new Date().getTime();
|
||||
}
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.log('ws.sendjson', err);
|
||||
}
|
||||
}
|
||||
this.close = function (send) {
|
||||
this.wsock.trueClose = true;
|
||||
this.wsock.close();
|
||||
}
|
||||
this.open();
|
||||
}
|
||||
ciyfn.bin2hex = function (str) {
|
||||
var ret = '';
|
||||
for (var i = 0, l = str.length; i < l; i++) {
|
||||
var c = str.charCodeAt(i).toString(16);
|
||||
if (c.length == 1)
|
||||
c = '0' + c;
|
||||
ret += c;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
ciyfn.hex2bin = function (str) {
|
||||
var ret = '';
|
||||
for (var i = 0; i < str.length - 1; i += 2) {
|
||||
ret += String.fromCharCode(parseInt(str.substr(i, 2), 16));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -113,7 +113,7 @@ ciyfn.file_uploads = function (maxcount, files, opn, fn) {
|
|||
postdata.append('file', gfile, gfile.name);
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", opn.action + ".upload&pathfile=" + pathfile, true);
|
||||
xhr.setRequestHeader(ciy_vars.tokenfield, ciyfn.getstorage('_' + ciy_vars.tokenfield));
|
||||
xhr.setRequestHeader('ciyauth', ciyfn.getstorage('_' + ciy_vars.tokenfield));
|
||||
xhr.setRequestHeader("X-Custom-Header", "CustomValue");
|
||||
xhr.onload = function () {
|
||||
var data = xhr.responseText;
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
10
zciyon/c.go
10
zciyon/c.go
|
|
@ -87,6 +87,7 @@ import (
|
|||
"crypto/hmac"
|
||||
"crypto/md5"
|
||||
"crypto/sha256"
|
||||
"crypto/sha512"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
|
|
@ -879,7 +880,14 @@ func MD5Byte(src ...[]byte) []byte {
|
|||
}
|
||||
return h.Sum(nil)
|
||||
}
|
||||
|
||||
func Sha256(src string) string {
|
||||
hash := sha256.Sum256([]byte(src))
|
||||
return hex.EncodeToString(hash[:])
|
||||
}
|
||||
func Sha512(src string) string {
|
||||
hash := sha512.Sum512([]byte(src))
|
||||
return hex.EncodeToString(hash[:])
|
||||
}
|
||||
func Uniqid(length int) string {
|
||||
numbers := make([]byte, length)
|
||||
for i := range numbers {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user