Skip to content

tqsq2005/Yii2adv

Repository files navigation

Yii 2 项目阶段性小结

git日常操作

  1. $git add .
  2. $git commit -m '2016XXXX修改了什么'
  3. $git push origin master
  4. $git status -s 可以查看状态 $git log 查看历史
  5. $git branch 可以查看分支,一般是只有 master 这个分支
  6. $git remote 可以查看 远端仓库 $git remote -v 可以查看 远端仓库 详细地址

2016.6.14小结: 修复 datatable 中导出 PDF 中文不支持的问题

解决步骤记录如下

1.下载 中文字体 vfs_fonts.js

2.修改 DataTableAsset.php 文件,将 vfs_fonts.js 文件加入 js 包中

    public $js = [
        'datatables.min.js',
        'pdfmake-0.1.18/build/vfs_fonts.js'//加入中文ttf
    ];

3.js开头文件注册 该中文字体

    window.pdfMake.fonts  = {
        msyh: {
            normal: 'msyh.ttf',
            bold: 'msyh.ttf',
            italics: 'msyh.ttf',
            bolditalics: 'msyh.ttf',
        }
    };

4.datatablebuttonspdf 的代码改为:

    {
        extend: 'pdf',
        text: '全部导出PDF',
        pageSize: 'A3',//default:LEGAL
        exportOptions: {
            columns: ':visible'//掩藏列不导出
        },
        customize: function ( doc ) {
            doc.defaultStyle = {
                font: 'msyh'
            };
        }
    },

参考资料

6.15小结:

1、修改了datatable插件editor的样式,修改弹出层宽度及每行改为两列,修改代码

    $css = <<<CSS
    div.modal-dialog {
        width: 800px;
    }
    
    div.DTE_Body div.DTE_Body_Content div.DTE_Field {
        float: left;
        width: 50%;
        padding: 5px 10px;
        clear: none;
        box-sizing: border-box;
    }
    
    div.DTE_Body div.DTE_Form_Content:after {
        content: ' ';
        display: block;
        clear: both;
    }
    CSS;
    $this->registerCss($css);

参考资料

2、ajax加载数据的时候通过在beforeSend中加入layer.load()增加页面加载gif,在ajax中添加如下代码:

    beforeSend: function () {
        layer.load();
    },
    complete: function () {
        layer.closeAll('loading');
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        layer.alert('数据加载出错:' + textStatus + ' ' + errorThrown, {icon: 5});
    }

3、重新加载jstree: $('#unit-tree').jstree('refresh')

    //点击更新单位列表
    $(document).on('click', '#unit-refresh', function() {
        var shiftNum = [0, 1, 2, 3, 4, 5, 6];
        layer.confirm('<span class="text-info">即将刷新单位列表,确定吗?</span>', {
            title: '系统信息',
            shift: shiftNum[Math.floor(Math.random()*shiftNum.length)],
            icon: 6,
            scrollbar: false
        }, function(index) {
            $('#unit-tree').jstree('refresh');
            layer.close(index);
        }, function(index) {
            layer.close(index);
        });
    });

参考资料

6.16小结

1、部分表新增如下四个字段,配合yii\behaviors\TimestampBehavioryii\behaviors\BlameableBehavior方便log记录

    ALTER TABLE personal 
        ADD `created_by` int(11) NOT NULL,
    	ADD `updated_by` int(11) NOT NULL,
        ADD `created_at` int(11) NOT NULL,
        ADD `updated_at` int(11) NOT NULL;

2、新增函数getChildList,给定unitcode获取所有下属单位(包含自身)信息,并结合函数FIND_IN_SET()进行调用

    DELIMITER $$  
      
    DROP FUNCTION IF EXISTS `populac_adv`.``$$  
      
    CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(s_unitcode varchar(30)) /*创建一个函数 getChildList(s_unitcode varchar(30)) 参数为int型*/
    RETURNS varchar(1000) CHARSET utf8  /*定义返回值类型  varchar(1000), CHARSET: utf-8*/
    BEGIN  
           DECLARE sTemp VARCHAR(1000);  
           DECLARE sTempChd VARCHAR(1000);  
          
           SET sTemp 		= '$';  
           SET sTempChd =s_unitcode;  
          
           WHILE sTempChd is not null DO  /*循环体*/
             SET sTemp = concat(sTemp,',',sTempChd);  /*拼接sTemp*/
             SELECT group_concat(unitcode) INTO sTempChd FROM unit where upunitcode<>unitcode and FIND_IN_SET(upunitcode,sTempChd) > 0;  /*根据父节点,查询出该父节点下的所有子节点的id,支持多级查询*/
           END WHILE;  
           RETURN sTemp;  
         END$$  
      
    DELIMITER ;

SQL调用语句:select * from unit where FIND_IN_SET(unitcode, getChildList('0000230400'));结果包含000023040001

3、新增函数getParentList,给定unitcode获取所有主管单位(不包含自身)信息,并结合函数FIND_IN_SET()进行调用

    DELIMITER $$  
      
    DROP FUNCTION IF EXISTS `populac_adv`.`getParentList`$$  
      
    CREATE DEFINER=`root`@`localhost` FUNCTION `getParentList`(s_unitcode varchar(50)) RETURNS varchar(1000) CHARSET utf8  
    BEGIN  
           DECLARE sTemp VARCHAR(1000);  
           DECLARE sTempPar VARCHAR(1000);  
          
           SET sTemp = '$';  
           SET sTempPar =s_unitcode;  
          
           WHILE sTempPar is not null DO
             IF (sTempPar <> s_unitcode) THEN /*不包含自身*/
                SET sTemp = concat(sTemp,',',sTempPar); 
             END IF;
           SELECT group_concat(upunitcode) INTO sTempPar FROM unit where upunitcode<>unitcode and FIND_IN_SET(unitcode,sTempPar) > 0;  
           END WHILE;  
           RETURN sTemp;  
         END$$  
      
    DELIMITER ; 

SQL调用语句:select * from unit where FIND_IN_SET(unitcode, getParentList('000023040001')); 结果不包含000023040001