微软高级php工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  12 随笔 :: 0 文章 :: 363 评论 :: 70907 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

摘要: 前言 在前一篇文章中我已经做过开篇,接下来的随笔会详细讲一下我们的开发框架是如何实现的,专业的事由专业的人来讲,以后就由我们的高级码农小李英文名查尔斯和他的师父厂长(因为姓陈,酷爱摄影,我们的文艺片都是从他那里来的,所以叫厂长) 技术选型 “查尔斯,这个敏捷开发框架我们要开始做了,给你分点任务,你要 阅读全文
posted @ 2016-06-12 09:31 微软高级php工程师 阅读(1497) 评论(2) 推荐(1) 编辑

摘要: 公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个敏捷开发框架。 我们主要的业务是做OA、CRM、ERP一类的管理系统,一个通用的后台搭出来,再配合一些快速开发的组件开发效率能提高很多。 另外老板一再强调要支持APP开发,一次开发能部署到安卓和IOS上。 作为开篇之作,先介绍一下 阅读全文
posted @ 2016-06-01 17:14 微软高级php工程师 阅读(2755) 评论(7) 推荐(2) 编辑

摘要: 软件的用户体验很重要,要抓住用户的心,这篇博文分享一下最近一个项目的UI设计。我做UI设计是从用户的角度出发的,要去揣摩用户的习惯。大部分用户都是使用windows操作系统,所以我这套软件的风格也是做成windows式的。 地址:http://121.40.148.178:8080/、 用户名:gu... 阅读全文
posted @ 2015-02-03 16:45 微软高级php工程师 阅读(7251) 评论(5) 推荐(3) 编辑

摘要: 一、女神也爱玩撸码 “在么,亲。” “在!在!有,有事么”(我真睡醒了么!垂涎了好久的女神呀!高中同学,高一向她表白,"我想找个170以上的",高二等我长到170了“我想找个175的”,高三下血本买了双内增高“我喜欢178以上的,有安全感”) 三分钟后.... "没事也可找我的."擦,我TM怎么这么 阅读全文
posted @ 2013-11-27 11:15 微软高级php工程师 阅读(3912) 评论(18) 推荐(56) 编辑

摘要: 一、大摆庆功宴 上一篇博文《大湿教我写程序(1)之菜单导航篇》中讲到了我撸码到晚上两点多,整出了一个还算是高端大气上档次的demo。半夜回到家里打算着可以好好睡上一个懒觉,到时候直接到客户那边跟老板汇合一起去演示。 早上7点 “谁呀,大晚上的搞什么灰鸡,还让不让人睡了”刚在梦中与女神相会,关键时刻h 阅读全文
posted @ 2013-11-24 18:44 微软高级php工程师 阅读(6380) 评论(49) 推荐(78) 编辑

摘要: 一、坑爹的老板 “我X!这个项目是要商业应用的,你还想用easyUI,500美刀的授权费用。一个项目才赚多少钱!赶紧给我换了,明天去客户那边要做demo的,今天晚上必须给我赶出来!不懂的去问大雄”黄总对我又是一通大吼。 我容易嘛我,以前做CS架构系统的,现在突然让我转BS,前端开发实在太费力了。更要 阅读全文
posted @ 2013-11-20 11:33 微软高级php工程师 阅读(16282) 评论(143) 推荐(153) 编辑

摘要: 一、前言 从进行到软件开发这个行业现在已经有几年了,在整理出这个套开发框架之前自己做了不少重复造轮子的事。每次有新的项目总是要耗费不少时间在UI、权限和系统通用模块上面,自己累得要死,老板还骂没效率。为了能提高开发效率,同时也多拿拿奖金、多存点私房钱,我就着手做了一套以权限管理为主的快速开发框架。不 阅读全文
posted @ 2013-11-15 19:43 微软高级php工程师 阅读(20890) 评论(120) 推荐(245) 编辑

2016年6月21日

 

“厂长,上一次我们讲过了工作流的整体规划,今天我要动手做啦!我想先把工作流的自定义表单做出来。”

 

“好的,以前我做这方面的东西,我给你设计了一份表结构,你先拿去看看。”

 


“厂长,是不是没发完,怎么就一个表?”

“我就知道你会这么问,我现在给你解释一下重点字段的含义。”

数据表:将表单上的内容保存到哪个表。

关联表的主键:要保存表单数据那张表的主键。

是否需要建表:是否需要把表单中的数据存入到表中,这里的意思是,是将表单上面的栏位与数据表的字段一一对应还是直接将整个表单的内容打包存一块。这里呢就看用户的需要啦,如果需要作统计汇总之类的数据分析,就按字段保存好了,如果不是就可以不用为表单上面每一个栏位都对应到数据字段,这样操作起来也简单。

表单内容:注意啦!就是这里,其实我是想把表单上所有的内容以json形式全部保存到一个字段里。这样后台不用再单独去建一张表来保存这些东西。前台统一去解析就好了。

“明白了,这样做确实好,可以少用好多表。”

“好的,闲话少说,我给你看第一个界面,我们在做界面布局的时候要考虑用户操作便捷性,所以可以做成向导式的。”


 

“演示地址就是下面这个,你可以去看看”

http://www.learun.cn:8090 、 用户名:System,密码:0000

 

“厂长,这里点下一步就是跳到一个新的页面吗?”

“当然不是,其实是多个DIV之间的切换。来我给你看看代码。”

“别个这个页面看起来很复杂的样子,其实就是几个div+js实现的。先看html”

 

<div class="widget-body">
    <div id="wizard" class="wizard" data-target="#wizard-steps" >
        <ul class="steps">
            <li data-target="#step-1" class="active"><span class="step">1</span>基本配置<span class="chevron"></span></li>
            <li data-target="#step-2"><span class="step">2</span>表单设计<span class="chevron"></span></li>
            <li data-target="#step-4"><span class="step">3</span>创建完成<span class="chevron"></span></li>
        </ul>
    </div>
    <div class="step-content wizard-step-content" id="wizard-steps">
        <div class="step-pane wizard-step-pane active" id="step-1">
        </div>
        <div class="step-pane flowapp" id="step-2">
            <div id="frmdesign"></div>
        </div>
        <div class="step-pane" id="step-4">
            <div class="drag-tip">
                <i class="fa fa-check-circle"></i>
                <p >设计完成,请点击保存</p>
            </div>
        </div>
    </div>
    <div class="form-button" id="wizard-actions">
        <a id="btn_last" disabled class="btn btn-default btn-prev">上一步</a>
        <a id="btn_next" class="btn btn-default btn-next">下一步</a>
        <a id="btn_caogao" class="btn btn-info">保存草稿</a>
        <a id="btn_finish" disabled class="btn btn-success" onclick="finishbtn();">保存</a>
    </div>
</div>

再来看一下JS

 

        //加载导向
        $('#wizard').wizard().on('change', function (e, data) {
            var $finish = $("#btn_finish");
            var $next = $("#btn_next");
            if (data.direction == "next") {
                switch (data.step) {
                    case 1:
                        return bindingBase();
                        break;
                    case 2://绑定表单
                        if (!bindingFrm()) {
                            return false;
                        }
                        $finish.removeAttr('disabled');
                        $next.attr('disabled', 'disabled');
                        $('#btn_caogao').attr('disabled', 'disabled');
                        break;
                    default:
                        break;
                }
            } else {
                $finish.attr('disabled', 'disabled');
                $next.removeAttr('disabled');
                $('#btn_caogao').removeAttr('disabled');
            }
        });

 

“哇,真的呢,这种效果好,果然是可以跳来跳去的。那你现在讲一下这个拖拽的表单是怎么实现的吧。”

“恩,你看看,这个东西的原理其实就是拼接html,左边放工具栏,工具栏上选择不同的工具其实就是不同类型的控件,右侧设置控件的属性。中间显示效果。”

 

 function setFrmInfo(data)
    {
        var _height = $(window).height() - 87 < 410 ? 410 : $(window).height() - 87;
        postData.FrmContent = data.FrmContent;
        if (data.isSystemTable == "0") {
            frmapp = $('#frmdesign').frmDesign({
                Height: _height,
                frmContent: postData.FrmContent
            });
        }
        else {
            var _frmdatabase = [];
            for (var i in frmdatabase)
            {
                if (frmdatabase[i].column != postData.FrmTableId)
                {
                    _frmdatabase.push(frmdatabase[i]);
                }
            }
            frmapp = $('#frmdesign').frmDesign({
                Height: _height,
                tablefiledJsonData: _frmdatabase,
                isSystemTable: postData.isSystemTable,
                frmContent: postData.FrmContent
            });
        }
    }
    function bindingFrm() {
        var frmcotentls = frmapp.getData();
        if (!frmcotentls) {
            return false;
        }
        postData.FrmContent = JSON.stringify(frmcotentls);
        return true;
    }
    /*=========表单选择(end)====================================================================*/

    /*=========创建完成(begin)==================================================================*/
    function finishbtn() {
        postData["EnabledMark"] = 1;
        $.SaveForm({
            url: "../../FlowManage/FormDesign/SaveForm?keyValue=" + keyValue,
            param: postData,
            loading: "正在保存数据...",
            success: function () {
                $.currentIframe().$("#gridTable").trigger("reloadGrid");
            }
        })
    }


后台代码:

 


 

        /// <summary>
        /// 保存用户表单(新增、修改)
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <param name="userEntity">用户实体</param>
        /// <returns></returns>
        [HttpPost]
        [ValidateAntiForgeryToken]
        [AjaxOnly]
        public ActionResult SaveForm(string keyValue, WFFrmMainEntity userEntity)
        {
            wfFrmMainBLL.SaveForm(keyValue, userEntity);
            return Success("操作成功。");
        }

 

        /// <summary>
        /// 保存表单
        /// </summary>
        /// <param name="entity">表单模板实体类</param>
        /// <param name="keyValue">主键</param>
        /// <returns></returns>
        public int SaveForm(string keyValue,WFFrmMainEntity entity)
        {
            try
            {
                if (string.IsNullOrEmpty(keyValue))
                {
                    entity.Create();
                    this.BaseRepository().Insert(entity);
                }
                else
                {
                    entity.Modify(keyValue);
                    this.BaseRepository().Update(entity);
                }
                return 1;
            }
            catch(Exception)
            {
                throw;
            }
        }

就这么简单,一个功能就完了。

 


posted @ 2016-06-21 13:57 微软高级php工程师 阅读(2726) 评论(2) 推荐(3) 编辑

2016年6月20日

摘要: 前言 “厂长,APP的那几个功能都差不多了,接下来要做工作流,工作流这东西我完全没概念啊。” “查尔斯,一般来说工作流就是指将指定的数据、文件、任务按照预定的规则进行传递流转。比如说你要请假,拿个请假条先让我审核,审核完了再让人事审核,人事审完流程就算走完了。” “那我们需要做些什么东西呢?” “还 阅读全文
posted @ 2016-06-20 14:51 微软高级php工程师 阅读(2194) 评论(3) 推荐(1) 编辑

2015年4月17日

摘要: 客户永远是对的!客户的需求永远是多变的!需求说明文档写得再详细,说改还得改,程序猿永远这么苦逼。为了应对客户多变的需求,今天先说说表单的扩展属性。目的是在不修改代码,不重新发布程序的情况下完成表单的扩展。先下下图:从这个界面上可以定义如何对表单上进行扩展,在表单上增加一个什么控件,大小、内容、验证都... 阅读全文
posted @ 2015-04-17 09:09 微软高级php工程师 阅读(1194) 评论(0) 推荐(0) 编辑

2015年3月19日

摘要: 一个大型系统难免会跟其它系统有数据交换,这里就要提供数据接口给外部系统。曾经在一家智能终端设备的公司上班。那段时间的主要工作就是写接口。接口须要与手机、手持设备、系统管理软件等进行数据交换。总结了一下大部分时间都在做重复的工作。于是我想到可不可以做出一个接口模型来,具体的数据交换怎么实现由用户来定义... 阅读全文
posted @ 2015-03-19 09:34 微软高级php工程师 阅读(2240) 评论(0) 推荐(0) 编辑

2013年12月9日

摘要: 一、屌丝也有春天 "亲爱的,在不?" "妹子,你电脑又感觉慢了么?您以后装软件的时候注意点行不,能不能不要装上7-8个浏览器,3-4个杀毒软件,啥配置的机子你都感觉卡。以后别到处瞎找动作类电影看,网上一般都挂马骗你们这些小白的,实在想看找我要种子不就行了。" "没有啦,人家电脑好着呢,您不是做软件的 阅读全文
posted @ 2013-12-09 10:19 微软高级php工程师 阅读(3586) 评论(9) 推荐(68) 编辑

点击右上角即可分享
微信分享提示