HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/hz.xxlht.com1/application/admin/template/weapp/index.htm
{include file="public/layout" /}
<body class="bodystyle" style="cursor: default; -moz-user-select: inherit;">
<div id="append_parent"></div>
<div id="ajaxwaitid"></div>
<div class="page">
    <div class="fixed-bar">
        <div class="item-title">
            <div class="subject">
                <h3>插件应用</h3>
                <h5></h5>
            </div>
            <ul class="tab-base nc-row">
                {eq name="$Think.const.CONTROLLER_NAME.'@index'|is_check_access" value="1"}
                <li><a href="{:url("Weapp/index")}" class="tab {eq name="$Request.action" value="index"}current{/eq}"><span>插件列表</span></a></li>
                {/eq}
            </ul>
        </div>
    </div>
    <div class="flexigrid">
        <div class="mDiv">
            <div class="ftitle">
                <h3>插件列表</h3>
                <h5>(共{$pager->totalRows}条数据)</h5>
            </div>
            <div title="刷新数据" class="pReload"><i class="fa fa-refresh"></i></div>
            <form class="navbar-form form-inline" action="{:url('Weapp/index')}" method="get" onsubmit="layer_loading('正在处理');">
                {$searchform.hidden|default=''}
                <div class="sDiv">
                    <div class="sDiv2 fl" style="margin-right: 6px;">
                        <input type="text" size="30" name="keywords" class="qsbox" placeholder="搜索相关数据...">
                        <input type="submit" class="btn" value="搜索">
                    </div>
                    <!-- <div class="sDiv2">
                        <input type="button" class="btn" value="重置" onClick="window.location.href='{:url('Weapp/index')}';">
                    </div> -->
                    <div class="sDiv2 addartbtn fl" style="margin-right: 6px;">
                        <input type="button" class="btn current" value="插件开发者" onclick="window.location.href='{:url("Weapp/create")}';">
                    </div>
                </div>
            </form>
        </div>
        <div class="hDiv">
            <div class="hDivBox">
                <table cellspacing="0" cellpadding="0" style="width: 100%">
                    <thead>
                    <tr>
                        <th abbr="article_title" axis="col3" class="w150">
                            <div class="tc" style="text-align: left; padding-left: 10px;">名称</div>
                        </th>
                        <th abbr="ac_id" axis="col4">
                            <div class="" style="padding-left: 10px;">描述</div>
                        </th>
                        <th abbr="article_title" axis="col3" class="w150">
                            <div class="tc">标识</div>
                        </th>
                        <th abbr="article_show" axis="col5" class="w120">
                            <div class="tc">作者</div>
                        </th>
                        <th abbr="article_show" axis="col5" class="w60">
                            <div class="tc">版本</div>
                        </th>
                        <th abbr="article_time" axis="col6" class="w50">
                            <div class="tc">启用</div>
                        </th>
                        <th axis="col1" class="w130">
                            <div class="tc">操作</div>
                        </th>
                        <th abbr="article_time" axis="col6" class="w60">
                            <div class="tc">排序</div>
                        </th>
                    </tr>
                    </thead>
                </table>
            </div>
        </div>
        <div class="bDiv" style="height: auto;">
            <div id="flexigrid" cellpadding="0" cellspacing="0" border="0">
                <table style="width: 100%">
                    <tbody>
                    {empty name="list"}
                        <tr>
                            <td class="no-data" align="center" axis="col0" colspan="50">
                                <i class="fa fa-exclamation-circle"></i>没有符合条件的记录
                            </td>
                        </tr>
                    {else/}
                        {foreach name="list" item="vo" key="k" }
                        <tr>
                            <td class="">
                                <div class="w150 tl" style="padding-left: 10px;">
                                    {$vo.name}
                                    {assign name="weapp_upgrade_info" value="$weapp_upgrade[$vo['code']]" /}
                                    {eq name="$weapp_upgrade_info['code']" value='2'}
                                    <p class="testing_upgrade">
                                        <textarea id="{$vo.code}_upgrade" class="none">{$weapp_upgrade_info['msg']['upgrade']|default=''}</textarea> 
                                        <textarea id="{$vo.code}_intro" class="none">{$weapp_upgrade_info['msg']['intro']|default=''}</textarea>
                                        <textarea id="{$vo.code}_notice" class="none">{$weapp_upgrade_info['msg']['notice']|default=''}</textarea>
                                        <a href="javascript:void(0);" class="a_upgrade" data-version="{$vo.version}" data-code="{$vo.code}" data-status="{$vo.status|default='0'}" data-name="{$vo.name}" onclick="weapp_upgrade(this);" style="color:#F00;">{$weapp_upgrade_info['msg']['tips']|default='[新版本更新]'}</a>
                                    </p>
                                    {/eq}
                                </div>
                            </td>
                            <td style="width: 100%">
                                <div style="">
                                    {$vo.config.description}
                                </div>
                            </td>
                            <td class="">
                                <div class="w150 tc">
                                    {$vo.code}
                                </div>
                            </td>
                            <td class="">
                                <div class="w120 tc">
                                    {$vo.config.author|default='匿名'}
                                </div>
                            </td>
                            <td class="">
                                <div class="w60 tc">
                                    {$vo.config.version}
                                </div>
                            </td>
                            <td>
                                <div class="tc w50">
                                    {if condition="$vo['status'] eq 1"}
                                        <span class="yes" {eq name="'Weapp@disable'|is_check_access" value="1"}onClick="changeTableVal('weapp','id','{$vo.id}','status',this);"{/eq} data-value="-1"><i class="fa fa-check-circle"></i>是</span>
                                    {else /}
                                        <span class="no" {eq name="'Weapp@disable'|is_check_access" value="1"}onClick="changeTableVal('weapp','id','{$vo.id}','status',this);"{/eq} data-value="1"><i class="fa fa-ban"></i>否</span>
                                    {/if}
                                </div>
                            </td>
                            <td>
                                <div class="w130 tc">
                                {empty name="$vo.status"}
                                    {eq name="'Weapp@install'|is_check_access" value="1"}
                                    <a href="javascript:void(0);" onclick="install(this);" data-id="{$vo['id']}" class="btn blue"><i class="fa fa-check"></i>一键安装</a>
                                    {/eq}
                                    {eq name="'Weapp@del'|is_check_access" value="1"}
                                    <a class="btn red"  href="javascript:void(0);" data-url="{:url('Weapp/del')}" data-id="{$vo.id}" data-name="{$vo.name}" onClick="delfun(this);"><i class="fa fa-trash-o"></i>删除</a>
                                    {/eq}
                                {else /}
                                    {eq name="'Weapp@execute'|is_check_access" value="1"}
                                        {if condition="!isset($vo['config']['management_index']) || empty($vo['config']['management_index'])"}
                                        <a href="{:url('Weapp/execute',array('sm'=>$vo['code'],'sc'=>$vo['code'],'sa'=>'index'))}" class="btn blue"><i class="fa fa-pencil-square-o"></i>管理</a>
                                        {/if}
                                    {/eq}
                                    {eq name="'Weapp@uninstall'|is_check_access" value="1"}
                                        {eq name='$isFounder' value='1'}
                                        <a href="javascript:void(0);" onclick="uninstall(this);" data-id="{$vo['id']}" data-name="{$vo.name}" class="btn red"><i class="fa fa-trash-o"></i>卸载</a>
                                        {else /}
                                        <a href="javascript:void(0);" onclick="layer.alert('请登录创始人账号进行操作!', {icon:4, title: false});" class="btn red"><i class="fa fa-trash-o"></i>卸载</a>
                                        {/eq}
                                    {/eq}
                                {/empty}
                                </div>
                            </td>
                            <td class="sort">
                                <div class="w60 tc">
                                    {eq name="'Weapp@edit'|is_check_access" value="1"}
                                    <input type="text" onchange="changeTableVal('weapp','id','{$vo.id}','sort_order',this);"  size="4"  value="{$vo.sort_order}" />
                                    {else /}
                                    {$vo.sort_order}
                                    {/eq}
                                </div>
                            </td>
                        </tr>
                        {/foreach}
                    {/empty}
                    </tbody>
                </table>
            </div>
            <div class="iDiv" style="display: none;"></div>
        </div>
        <div class="tDiv">
            <div class="tDiv2">
                {eq name="'Weapp@upload'|is_check_access" value="1"}
                <div class="fbutton">
                    {eq name='$isFounder' value='1'}
                    <form class="navbar-form form-inline" action="{:url('Weapp/upload')}" name="change_System" id="change_System" method="post" enctype="multipart/form-data">
                        <a id="a_weappfile" href="javascript:void(0);" class="a-upload"><input type="file" name="weappfile" id="weappfile" title="请选择…" accept="application/x-zip-compressed"><i class="fa fa-upload"></i>上传安装插件</a>
                    </form>
                    <input type="hidden" id="is_weapp_installanswer" value="{$is_weapp_installanswer|default='0'}" />
                    {else /}
                        <a onclick="layer.alert('请登录创始人账号进行操作!', {icon:4, title: false});" href="javascript:void(0);" class="a-upload"><i class="fa fa-upload"></i>上传安装插件</a>
                    {/eq}
                </div>
                {/eq}
            </div>
            <div style="clear:both"></div>
        </div>
        <!--分页位置-->
        {$page}
    </div>
</div>
<form name="form2" id="form2" method="post" action="">
    <input type="hidden" name="id" value="" />
    <input type="hidden" name="thorough" value="1" />
</form>
<script>
    $(document).ready(function(){

        // 表格行点击选中切换
        $('#flexigrid > table>tbody >tr').click(function(){
            $(this).toggleClass('trSelected');
        });

        // 点击刷新数据
        $('.fa-refresh').click(function(){
            location.href = location.href;
        });

        {empty name="$is_set_weapp_answer"}
        get_setting();
        {/empty}

        $('#weappfile').change(function(){
            {empty name="$weapp_install_answer"}
            get_setting();
            return false;
            {/empty}

            var weappfile = $("#weappfile")[0].files[0];  //获取文件路径名
            var is_weapp_installanswer = $('#is_weapp_installanswer').val();
            if (0 == is_weapp_installanswer) {
                layer.prompt({
                        title: false,
                        closeBtn: 0,
                        id: 'input_installanswer',
                        success: function(layero, index){
                            $("#input_installanswer").prepend('<div style="margin-bottom: 15px;font-size: 14px;color: red;font-weight: bold;">{$weapp_install_asktitle}</div>');
                            $("#input_installanswer").find('input').attr('placeholder', '请录入问题的答案内容!');
                            $("#input_installanswer").find('input').bind('keydown', function(event){
                                if(event.keyCode ==13){
                                    upload($(this).val(), weappfile);
                                }
                            });
                        },
                        btn2: function(index, layero){
                            layer.close(index);
                            window.location.reload();
                            return false;
                        }
                    },
                    function(answer, index){
                        upload(answer, weappfile);
                    }
                );
            } else {
                upload(false, weappfile);
            }
        });

        function get_setting()
        {
            //iframe窗
            var iframes = layer.open({
                type: 2,
                title: '设置问题答案',
                fixed: true, //不固定
                shadeClose: false,
                shade: 0.3,
                area: ['500px', '350px'],
                content: "{:url('Weapp/setting')}",
                end: function(){
                    $.ajax({
                        type : 'get',
                        url : "{:url('Weapp/setting_close')}",
                        data : {_ajax:1},
                        dataType : 'json',
                        success : function(res){

                        }
                    })
                }
            });
        }

        function upload(answer, weappfile)
        {
            // var weappfile = document.getElementById('weappfile').files[0]; //获取文件路径名
            // var weappfile = $("#weappfile")[0].files[0];  //获取文件路径名

            var weappfileName = weappfile.name;
            var ext = weappfileName.substr(weappfileName.lastIndexOf('.')).toLowerCase();
            if ($.trim(weappfileName) == '' || ext != '.zip') {
                $('#weappfile').val('');
                showErrorMsg('请上传zip压缩包!');
                return false;
            }
     
            var formData = new FormData();
            formData.append('_ajax', 1);
            formData.append('weappfile', weappfile);
            if (false !== answer) {
                formData.append('answer', answer);
            }
          
            var loading = layer.msg('正在处理...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请勿刷新页面', 
            {
                icon: 1,
                time: 3600000, //1小时后后自动关闭
                shade: [0.2] //0.1透明度的白色背景
            });
            //loading层
            var loading_1 = layer.load(3, {
                shade: [0.1,'#fff'] //0.1透明度的白色背景
            });

            $.ajax({
                url: "{:url('Weapp/upload')}",  //同目录下的php文件
                type: "POST",
                data: formData,
                dataType: "json", //声明成功使用json数据类型回调
                //如果传递的是FormData数据类型,那么下来的三个参数是必须的,否则会报错
                cache: false,  //默认是true,但是一般不做缓存
                processData: false, //用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型
                contentType: false,  //一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为false
                success: function(res){  //请求成功后的回调函数
                    if (1 == res.code) {
                        layer.closeAll();
                        layer.msg(res.msg, {icon:1, time:1000}, function(){
                            window.location.reload();
                        });
                    } else {
                        $('#weappfile').val('');
                        layer.close(loading);
                        layer.close(loading_1);
                        layer.msg(res.msg, {icon:2, time:1500});
                    }
                },
                error: function(XMLHttpRequest, textStatus, errorThrown)
                {
                    layer.close(loading);
                    layer.close(loading_1);
                    layer.msg('安装失败', {icon:2, time:1500});
                }
            });
        }
    });

    function weapp_upgrade(obj)
    {
        var name = $(obj).attr('data-name');
        var status = $(obj).attr('data-status');
        if (0 == status) {
            layer.alert('请先安装该插件!', {
                title:false,//name,
                icon: 0
            });
            return false;
        }

        var code = $(obj).attr('data-code');
        var v = $("#"+code+"_upgrade").val();    
        var intro = $("#"+code+"_intro").val();   
        intro += '<style type="text/css">.layui-layer-content{height:270px!important}</style>';
        var notice = $("#"+code+"_notice").val(); 
        // v = v.replace(/\n/g,"<br/>");
        v = notice + intro + '<br/>' + v;
        //询问框
        layer.confirm(v, {
            title: false,//'检测插件更新',
            area: ['580px','400px'],
            btn: ['升级','取消'] //按钮
            
        }, function(){
            layer.closeAll();
            setTimeout(function(){
                upgrade(code); // 请求后台
            },200);
            
        }, function(){  
            layer.msg('不升级可能有安全隐患', {
                btnAlign: 'c',
                time: 20000, //20s后自动关闭
                btn: ['明白了']
            });
            return false;
        });    
    }

    function upgrade(code){
        layer_loading('升级中');
        $.ajax({
            type : "GET",
            url  : "{:url('Weapp/OneKeyUpgrade')}",
            timeout : 360000, //超时时间设置,单位毫秒 设置了 1小时
            data : {code:code, _ajax:1},
            error: function(request) {
                layer.closeAll();
                layer.alert("升级失败,请第一时间联系技术协助!", {icon: 2, closeBtn: false, title:false}, function(){
                    window.location.reload();
                });
            },
            success: function(res) {
                layer.closeAll();
                if(1 == res.code){
                    layer.alert('已升级最新版本!', {icon: 1, closeBtn: false, title:false}, function(){
                        window.location.reload();
                    });
                }
                else{
                    layer.alert(res.msg, {icon: 2, closeBtn: false, title:false}, function(){
                        window.location.reload();
                    });
                }
            }
        });                 
    }

    function install(obj)
    {
        var id = $(obj).attr('data-id');
        var form2 = $('#form2');
        form2.find('input[name=id]').val(id);
        var url = "{:url('Weapp/install')}";
        form2.attr('action', url);
        layer_loading('正在处理');
        form2.submit();
    }

    function uninstall(obj)
    {
        var id = $(obj).attr('data-id');
        var url = "{:url('Weapp/uninstall', ['_ajax'=>1])}";

        //询问框
        var confirm = layer.confirm('<font color="red">此操作数据不可恢复</font>,是否卸载移除?', {
                title: false,
                btn: ['确定', '取消'] //按钮

            }, function(){
                layer.close(confirm);
                var is_weapp_installanswer = $('#is_weapp_installanswer').val();
                if (false && 0 == is_weapp_installanswer) {
                    layer.prompt({
                            title: false,
                            closeBtn: 0,
                            id: 'input_installanswer',
                            success: function(layero, index){
                                $("#input_installanswer").prepend('<div style="margin-bottom: 15px;font-size: 14px;color: red;font-weight: bold;">{$weapp_install_asktitle}</div>');
                                $("#input_installanswer").find('input').attr('placeholder', '请录入问题的答案内容!');
                                $("#input_installanswer").find('input').bind('keydown', function(event){
                                    if(event.keyCode ==13){
                                        uninstall_true($(this).val(), obj);
                                    }
                                });
                            },
                            btn2: function(index, layero){
                                layer.close(index);
                                window.location.reload();
                                return false;
                            }
                        },
                        function(answer, index){
                            uninstall_true(answer, obj);
                        }
                    );
                } else {
                    uninstall_true('', obj);
                }
            }, function(){
                layer.close(confirm);
            }
        );
        
        return false;
    }

    function uninstall_true(answer, obj)
    {
        var id = $(obj).attr('data-id');

        layer_loading('正在处理');
        // 确定
        $.ajax({
            type : 'post',
            url : "{:url('Weapp/uninstall', ['_ajax'=>1])}",
            data : {id:id, thorough:0, answer:answer},
            dataType : 'json',
            success : function(res){
                layer.closeAll();
                if(res.code == 1){
                    layer.msg(res.msg, {icon: 1, time: 1500}, function(){
                        window.location.reload();
                    });
                }else{
                    layer.alert(res.msg, {icon: 2, title:false});
                }
            },
            error: function(e) {
                layer.closeAll();
                // 处理插件行为app_end影响到的卸载问题
                if (e.responseText.indexOf("\\behavior\\admin\\") >= 0 && e.responseText.indexOf("not found") >= 0) {
                    layer.msg('卸载成功', {icon: 1, time: 1500}, function(){
                        window.location.reload();
                    });
                } else {
                    layer.alert(e.responseText, {icon: 2, title:false});
                }
            }
        });
    }

    function delfun(obj){
        var name = $(obj).attr('data-name');
        layer.confirm('<font color="#ff0000">将移除该插件相关文件</font>,确认移除?', {
            title: false,//name,
            btn: ['确定','取消'] //按钮
        }, function(){
            layer_loading('正在处理');
            // 确定
            $.ajax({
                type : 'post',
                url : $(obj).attr('data-url'),
                data : {del_id:$(obj).attr('data-id'), _ajax:1},
                dataType : 'json',
                success : function(data){
                    layer.closeAll();
                    if(data.code == 1){
                        layer.msg(data.msg, {icon: 1});
                        window.location.reload();
                    }else{
                        layer.alert(data.msg, {icon: 2, title:false});  //alert(data);
                    }
                }
            })
        }, function(index){
            layer.close(index);
        });
        return false;
    }  
</script>

{include file="public/footer" /}