首页 > 其他分享 >PasteForm最佳CRUD实践,实际案例PasteTemplate详解之管理前端的代码(二)

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之管理前端的代码(二)

时间:2024-09-26 21:35:58浏览次数:8  
标签:CRUD PasteTemplate properties html value template PasteForm placeholder class

之前的文章说了,使用反射和ABPvNext的Dto实现用后端控制前端以实现最佳CRUD实践!
相信看过一的已经了解了这个PasteForm是如何实现的了,本文来看下具体如何实现的

表格页面的实现

打开pasteform/index.html页面之后,先会向API请求当前的path的数据模板

    _apiget(`/api/app/${_classPath}/readListModel`, true, (c, o) => {
        if (c == 200) {
            if (o.title) {
                $(".ppbody .st").find(".sn").html(o.title);
                this.document.title = o.title;
            }
            if (o.desc) {
                $(".ppbody .st").find(".idesc").html(o.desc);
            }
            //表头的模板内容
            var _template_head_html = null;

            _globadataProperties = o.properties;
            //模型处理,如何显示外表 比如cate.name 
            HandlerModelColumn(o.properties);
            //class模型的属性列表
            if (o.attributes) {
                _globadataAttributes = o.attributes;
                o.attributes.forEach(_attribute => {
                    if (_attribute.name == 'disable') {
                        if (_attribute.args1) {
                            _config.disable_add = true;
                            $(".btnadd").hide();
                        }
                        if (_attribute.args2) {
                            _config.disable_edit = true;
                        }
                        if (_attribute.args3) {
                            _config.disable_del = true;
                        }
                    }
                    if (_attribute.name == "template") {
                        if (_attribute.args1) {
                            _template_head_html = $(`#${_attribute.args1}`).html();
                        }
                        if (_attribute.args2) {
                            _template_body_html = $(`#${_attribute.args2}`).html();
                        }
                    }
                });
            }

            if (_template_head_html == null) {
                _template_head_html = $("#template_header").html();
            }
            var _modelhtml = template(_template_head_html, { list: o.properties, config: _config });
            //一级模型 转化成 二级模型
            if (_template_body_html == null) {
                var _template_body = $("#template_body").html();
                var _bodyhtml = template(_template_body, { list: o.properties, config: _config });
                _template_body_html = _bodyhtml.replace(/{{/g, '<%').replace(/}}/g, '%>');
            }
            $(".table").find("thead").html(_modelhtml);
            //处理查询项
            if (o.queryProperties) {
                _globdataQueryProperties = o.queryProperties;
                HandlerQueryItem(o.queryProperties);
            } else {
                _readpagedata(1);
            }
            //读取数据
        }
    });

看如上代码,就是先向后端获得这个页面的搜索区域的数据模型属性和下方表格的数据模型
然后

_readpagedata(1);

才是获取表格的数据,也就是说第二页之后的数据是只要请求一次的,只要首次打开才要获取数据模型的属性,如果你使用本地缓也是可以省略第一次的模型属性的数据的!
UI中再基于JS获取到的模型进行渲染

        <!-- 查询的信息模板 -->
        <script type="text/html" id="template_search">
            <% list.forEach(item=>{ %>
                <% if(item.dataType=="String" || item.dataType == 'Guid'){ %>
                    <label class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <input type="text" name="<%:=item.name%>" class="inputword" placeholder="<%:=item.placeholder || ''%>">
                        <span class="spanclean" onclick="handlerClean(this)">x</span>
                    </label>
                <% } %>
                <% if(item.dataType=="Int32" || item.dataType=='Int64'){ %>
                    <label class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <input type="number" name="<%:=item.name%>" class="inputword" placeholder="<%:=item.placeholder || ''%>">
                        <span class="spanclean" onclick="handlerClean(this)">x</span>
                    </label>
                <% } %>
                <% if(item.dataType=='outer'){ %>
                    <div class="outer sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <% if(item.dataFrom=='Int32' || item.dataFrom=='Int64'){ %>
                            <input type="number" class="outerid" style="display:none;" value="<%:=item.value%>" name="<%:=item.name%>">
                        <%}else{%>
                            <input type="text" class="outerid" style="display:none;"  value="<%:=item.value%>" name="<%:=item.name%>">
                        <%}%>
                        <input type="text" class="outerdisplay" dataname="<%:=item.name%>" value="<%:=item.display%>" onclick="handler_outer_value(this)" readonly placeholder="<%:=item.placeholder%>" >
                        <span class="spanclean" onclick="handlerCleanOuterInput(this)">x</span>
                    </div>
                <% } %>
                <% if(item.dataType=="select"){ %>
                    <label  class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <select name="<%:=item.name%>">
                            <% if(item.selects){ %>
                                <% item.selects.forEach(_select=>{ %>
                                    <option value="<%:=_select.value%>" <% if(_select.selected){ %>selected<% } %>><%:=_select.name%></option>
                                <% }) %>
                            <%}%>
                        </select>
                    </label>
                <% } %>
                <% if(item.dataType=="DateTime"){ %>
                    <label class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <input type="text" name="<%:=item.name%>" value="<%:=item.value || ''%>" class="inputword" onClick="WdatePicker({el:this,dateFmt:'<%:=item.format%>'})" placeholder="<%:=item.placeholder || ''%>">
                        <span class="spanclean" onclick="handlerClean(this)">x</span>
                    </label>
                <% } %>
                <% if(item.dataType=="datalist"){ %>
                    <label class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                        <input type="text" name="<%:=item.name%>" class="inputword" list="<%:=item.name%>" placeholder="<%:=item.placeholder || ''%>">
                            <% if(item.selects){ %>
                                <datalist id="<%:=item.datalistid%>">
                                    <% item.selects.forEach(_select=>{ %>
                                        <option value="<%:=_select.value%>" ><%:=_select.name%>(<%:=_select.value%>)</option>
                                    <% }) %>
                                </datalist>
                            <%}%>
                        <span class="spanclean" onclick="handlerClean(this)">x</span>
                    </label>
                <% } %>
                <% if(item.dataType=='daterange'){%>
                    <label class="sitem" <%if(item.hidden){%>style="display:none;"<%}%>>
                        <span><%:=item.title%>:</span>
                            <input type="text" class="inputword" name="<%:=item.name%>" readonly datas="" datae="" value="<%:=item.value || ''%>" id="<%:=item.name%>">
                    </label>
                <% } %>
            <% }) %>
        </script>

        <!-- 头部的信息模板 -->
        <script type="text/html" id="template_header">
                <tr>
                    <% list.forEach(item=>{ %>
                        <% if(!item.hidden){ %>
                            <td>
                            <%:=item.title%>
                              <% if(item.attributes!=null){ %>
                                <% item.attributes.forEach(_attribute=>{ %>
                                    <% if(_attribute.name=='orderby'){ %>
                                        <span class="orderby">
                                            <i class="Hui-iconfont ordersell icon-top" dataval="<%:=_attribute.args1%>"></i>
                                            <i class="Hui-iconfont ordersell icon-bottom" dataval="<%:=_attribute.args2%>"></i>
                                        </span>
                                    <% } %>
                                <% }) %>
                            <% } %>
                            </td>
                        <% } %>
                    <% }) %>
                    <td>操作</td>
                </tr>
        </script>

        <!-- 表格的信息模板 -->
        <script type="text/html" id="template_body">
            <!-- 注意花括号百分比的是当前的模板 2个花括号的是占位,下一个的模板代码 -->
            {{ list.forEach(item=>{ }}
                <tr>
                    <% list.forEach(item=>{ %>
                        <% if(!item.hidden){ %>
                            <td <%if(item.class){%>class="<%:=item.class%>"<%}%>>
                            <% if(item.dataType=='image' ){ %>
                                <img class="image" src="{{:=item.<%:=item.name%>}}">
                            <% }else if(item.dataType=='head' ){ %>
                                <img class="head" src="{{:=item.<%:=item.name%>}}">
                            <% }else if(item.dataType=='switch' ){ %>
                                <input type="checkbox" class="input-checkbox mui-switch mui-switch-anim" onchange="handlerSwitchChange(this)" dataid="{{:=item.id}}" dataname="<%:=item.name%>" {{ if(item.<%:=item.name%>){ }}checked{{ } }} >
                            <% }else{ %>                                
                                <%if(item.html){%>
                                    <%:=item.html%>
                                <%}else{%>
                                <span class="itd">
                                    {{:=item?.<%:=item.name%>}}
                                </span>
                                <%}%>
                            <% } %>
                            </td>
                        <% } %>
                    <% }) %>
                    <td class="fleft">
                        <!-- 这里填写编辑或者其他 -->
                        {{ if(config.model=='view'){ }}
                            <% if(config.menubox){%>
                                <a href="javascript:;" onclick="open_menu_box(this);" onm ouseover="open_menu_box(this);" ><i class="Hui-iconfont Hui-iconfont-more"></i></a>
                                <div class="menubox" style="z-index: 100;" onm ouseleave="$(this).fadeOut();">
                                    <% list.forEach(item=>{%>
                                        <% if(item.dataType=='menubox'){ %>
                                            <% if(item.attributes){ %>
                                                <% item.attributes.forEach(_attribute=>{ %>
                                                    <% if(_attribute.name=='menu'){ %>
                                                        <a onclick="<%:=_attribute.args2%>"><% if(_attribute.args3){%><i class="Hui-iconfont <%:=_attribute.args3%>"></i><%}%> <%:=_attribute.args1%></a>
                                                    <% } %>
                                                <% }) %>
                                            <% } %>
                                        <% } %>
                                        <% if(item.dataType=='ifmenubox'){ %>
                                            {{ if(<%:=item.ifmenu.expression%>){ }}
                                                <%:=item.ifmenu.value%>
                                            {{ } }}
                                        <% } %>
                                    <% }) %>
                                </div>
                            <% } %>

                            <% if(!config.disable_edit){ %>
                                <a href="javascript:;" onclick="tap_view_item(this)" dataid="{{:=item.id}}"><i class="Hui-iconfont Hui-iconfont-shuru"></i>编辑</a>
                            <% } %>

                            <!-- 处理自定义的类型,由于是表的性质,穿透到数据的className -->
                            <% list.forEach(item=>{%>
                                <% if(item.dataType=='menu'){ %>
                                    <% if(item.attributes){ %>
                                        <% item.attributes.forEach(_attribute=>{ %>
                                            <% if(_attribute.name=='menu'){ %>
                                                <a onclick="<%:=_attribute.args2%>"><% if(_attribute.args3){%><i class="Hui-iconfont <%:=_attribute.args3%>"></i><%}%> <%:=_attribute.args1%></a>
                                            <% } %>
                                        <% }) %>
                                    <% } %>
                                <% } %>
                                <% if(item.dataType=='ifmenu'){ %>
                                    {{ if(<%:=item.ifmenu.expression%>){ }}
                                        <%:=item.ifmenu.value%>
                                    {{ } }}
                                <% } %>
                            <% }) %>

                            <% if(!config.disable_del){ %>
                                <a href="javascript:;" onclick="handler_tap_del(this)" class="a-del" dataid="{{:=item.id}}"><i class="Hui-iconfont Hui-iconfont-del3"></i>删除</a>
                            <% } %>

                        <!-- 自定义处理操作列菜单完成 -->
                        {{ } }}

                        {{ if(config.model=='select'){ }}
                        <a href="javascript:;" class="mselect" onclick="tap_select_item(this)"
                            dataid="{{:=item.id}}"><i class="Hui-iconfont Hui-iconfont-fabu"></i>选择</a>
                        {{ } }}
                    </td>
                </tr>
            {{ }) }}
        </script>

注意表格中的模板进行了二次转化,也就是获取模型后先转化成数据模型获得模板,然后再结合实际的页数据再一次进行UI渲染

表单页面的实现

表单页面打开后会判断是否是编辑,其实整个思路是一样的,只是请求的接口不一样,一个是XXXAddDto一个是UpdateDto

/**
 * 读取模型和默认值,值等
 */
function FuncFilexModel() {
    // console.log(_id);
    if (_id && _id != '0' && _id != 0) {
        _apiget(`/api/app/${_classPath}/${_id}/readUpdateModel`, true, (c, o) => {
            if (c == 200) {
                loadHeader(o);
                if (o.properties) {
                    LoadModelProperity(o.properties);
                }
                if (o.title) {
                    this.document.title = "更新" + o.title;
                }
            }
        });
    } else {
        _apiget(`/api/app/${_classPath}/readAddModel`, true, (c, o) => {
            if (c == 200) {
                loadHeader(o);
                if (o.properties) {
                    LoadModelProperity(o.properties);
                }
                if (o.title) {
                    this.document.title = "新增" + o.title;
                }
            }
        });
    }
}

其实2个请求到最后都是到LoadModelProperity的函数中

/**
 * 读取数据的模型 处理数据的模型
 * @param {*} properties 
 */
function LoadModelProperity(properties) {
    _modelProperties = properties;
    handlerExchangeDataTypeToUIType(properties);

    var _template = $("#templatemodel").html();
    var _ahtml = template(_template, { list: properties, config: _config });
    $(".paste-form-body").html(_ahtml);
    setTimeout(function () {
        FormLoaded(properties);
        funcAppendInputLength();

        //计算高度,返回
        var _height = $(".newform").height() + 140;
        if (_has_outer) {
            //如果计算的高度小于600,表单中有outer则至少保证高度为600
            if (_height < 600) {
                _height = 600;
            }
        }
        var _index = parent.layer.getFrameIndex(window.name); //获取窗口索引
        if (window.parent.set_dialog_height) {
            window.parent.set_dialog_height(_height, _index);
        } else {
            console.log('没有在父级找到函数set_dialog_height');
        }

        $(".ulselects").on('click', 'li', function () {
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
            } else {
                $(this).addClass('selected');
            }
        });


    }, 100);
}

然后是前端HTML中,基于JS获取的数据进行UI渲染

        <script type="text/html" id="templatemodel">
            <% list.forEach(item=>{%>
                <div class="row cl <% if(item.singlerow){ %>singlerow<% } %>" <%if(item.hidden){%> style="display:none;" <%}%>>
                    <div class="itemrow">
                        <label class="form-label"><%:=item.title%><%if(item.mark){%><span class="tapmark" onclick="global_tap_mark('<%:=item.mark.model%>','<%:=item.mark.value%>')">?</span><%}%><%if(item.required){%><span class="form-required">*</span><%}%></label>
                        <div class="formControls">
                        <% if(item.dataType=="text" || item.dataType =='Guid'){ %>
                            <input name="<%:=item.name%>" class="input-text" <%if(item.required){%>required<%}%> type="text" value="<%:=item.value || ''%>" maxlength="<%:=item.maxlength%>" placeholder="<%:=item.placeholder%>" />
                            <span class="spanclean" onclick="handlerClean(this)">x</span>
                        <%}%>
                        <% if(item.dataType=="number"){ %>
                            <input name="<%:=item.name%>" class="input-number" placeholder-class="p-form-placeholder" type="number" value="<%:=item.value || ''%>" placeholder="<%:=item.placeholder%>" />
                            <%if(item.unit){%>
                                <span class="unit"><%:=item.unit%></span>
                            <%}%>
                        <%}%>
                        <% if(item.dataType=="fentoyuan"){ %>
                            <input name="<%:=item.name%>" class="input-number" step="0.01" min="0" max="99999999" placeholder-class="p-form-placeholder" type="number" value="<%:=item.value || ''%>" placeholder="<%:=item.placeholder%>" />
                            <span>元</span>
                        <%}%>
                        <% if(item.dataType=="Double" || item.dataType=='Decimal'){ %>
                            <input name="<%:=item.name%>" class="input-number" step="<%:=item.step%>" placeholder-class="p-form-placeholder" type="number" value="<%:=item.value || ''%>" placeholder="<%:=item.placeholder%>" />
                            <%if(item.unit){%>
                                <span class="unit"><%:=item.unit%></span>
                            <%}%>
                        <%}%>
                        <% if(item.dataType=="textarea"){ %>
                            <textarea name="<%:=item.name%>" class="input-textarea" <%if(item.style){%>style="<%:=item.style%>"<%}%> <%if(item.required){%>required<%}%> <%if(item.maxlength>0){%>maxlength="<%:=item.maxlength%>"<%}%> placeholder="<%:=item.placeholder%>" ><%:=item.value || ''%></textarea>
                            <span class="spanclean" onclick="handlerClean(this)">x</span>
                        <%}%>
                        <% if (item.dataType=="switch"){ %>
                            <input type="checkbox" class="input-checkbox mui-switch mui-switch-anim" <%if(item.value){%>checked<%}%> name="<%:=item.name%>">
                            <span class="placeholder"><%:=item?.placeholder || ''%></span>
                        <%}%>
                         <% if(item.dataType=="datetime"){ %>
                            <input type="text" value="<%:=item.value || ''%>" name="<%:=item.name%>" <%if(item.required){%>required<%}%> maxlength="20" placeholder="<%:=item.placeholder%>" onClick="WdatePicker({el:this,dateFmt:'<%:=item.format%>'})"
                            autocomplete="off" class="input-text input-form-date">
                        <%}%>
                        <% if(item.dataType=="daterange"){ %>
                            <input type="text" value="<%:=item.value || ''%>" id="<%:=item.name%>" name="<%:=item.name%>" datas="" datae="" <%if(item.required){%>required<%}%> placeholder="<%:=item.placeholder%>" 
                            autocomplete="off" class="input-text input-form-date">
                        <%}%>
                        <% if(item.dataType == "richtext"){ %>
                            <div class="editoryarea">
                                <div class="editor_toolbar" id="<%:=item.name%>editorbar"></div>
                                <div class="editor_body" id="<%:=item.name%>editor"></div>
                            </div>
                        <%}%>
                        <% if(item.dataType == "file"){ %>
                            <input type="file" id="<%:=item.name%>" datanum="<%:=item.num%>" onchange="handlerUploadOnlyFile(this)" <%if(item.url){%>dataurl=<%:=item.url%><%}%> datatype="<%:=item.type%>" datasize="<%:=item.size%>" style="display:none" />
                            <input type="text" name="<%:=item.name%>" value="<%:=item.value%>" placeholder="<%:=item.placeholder%>" onclick="$('[id=<%:=item.name%>]').trigger('click');">
                            <span class="spanclean" onclick="handlerClean(this)">x</span>
                        <%}%>

                        <% if(item.dataType == "image" || item.dataType=="images"){ %>
                            <input type="text" style="display:none" name="<%:=item.name%>" value="<%:=item.value%>">
                            <input type="file" multiple id="<%:=item.name%>" datanum="<%:=item.num%>" onchange="handlerUploadFile(this)" datatype="<%:=item.type%>" datasize="<%:=item.size%>" style="display:none;" />
                            <% if(item.num ==1){%>
                                <label for="<%:=item.name%>">
                                    <img class="form-image-head" <%if(item.value){%>src="<%:=item.value%>"<%}%> >
                                    <%if(!item.value){%>
                                        <span class="iconadd icon-add">
                                            <i class="Hui-iconfont Hui-iconfont-add2 icon"></i>
                                        </span>
                                    <%}%>
                                </label>
                                <span class="placeholder"><%:=item?.placeholder || ''%></span>
                            <% }else{ %>
                                <span class="placeholder"><%:=item?.placeholder || ''%></span>
                                <ul class="imageul">
                                    <li><label for="<%:=item.name%>"><span class="icon-add">
                                        <i class="icon Hui-iconfont Hui-iconfont-add2"></i>
                                    </span></label></li>
                                    <%if(item.images){%>
                                        <%item.images.forEach(_img=>{%>
                                            <li><img src="<%:=_img%>"><i class="Hui-iconfont Hui-iconfont-close2 icon-close"  onclick="handlerRemoveImageItem(this)"></i></li>
                                        <%})%>
                                    <%}%>
                                    <!-- <li>
                                        <img>
                                        <i class="iconfont icon-close" onclick="handlerRemoveImageItem(this)"></i>
                                    </li> -->
                                </ul>
                            <% } %>
                        <%}%>

                        <% if(item.dataType=='outer'){ %>
                            <div class="outer">
                                <% if(item.dataFrom=='Int32' || item.dataFrom=='Int64'){ %>
                                    <input type="number" class="outerid" style="display:none;" value="<%:=item.value%>" name="<%:=item.name%>">
                                <%}else{%>
                                    <input type="text" class="outerid" style="display:none;"  value="<%:=item.value%>" name="<%:=item.name%>">
                                <%}%>
                                <input type="text" class="outerdisplay" dataname="<%:=item.name%>" value="<%:=item.display%>" onclick="handler_outer_value(this)" readonly placeholder="<%:=item.placeholder%>" >
                                <span class="spanclean" onclick="handlerClean(this)">x</span>
                            </div>
                        <% } %>

                        <% if(item.dataType=='outers'){ %>
                            <div class="outers">
                                <input type="button" value="添加" class="btn btnaddouter" dataname="<%:=item.name%>" onclick="handler_outer_value(this)">
                                <ul class="ulouter outers<%:=item.name%>">
                                    <% if(item.display){%>
                                        <% item.display.forEach(_display=>{ %>
                                            <li dataid="<%:=_display[item.display_id]%>">
                                                <%:=_display[item.display_name]%>
                                                <span class="outer_close"  onclick="$(this).parents('li').remove();">x</span>
                                            </li>
                                        <% }) %>
                                    <% } %>
                                </ul>
                            </div>
                        <% } %>

                        <% if(item.dataType=="select"){ %>
                                <select name="<%:=item.name%>">
                                    <% if(item.selects){ %>
                                        <% item.selects.forEach(_select=>{ %>
                                            <option value="<%:=_select.value%>" <%if(_select.value==item.value){%>selected<%}%>><%:=_select.name%></option>
                                        <% }) %>
                                    <%}%>
                                </select>
                        <% } %>

                        <%if(item.dataType=="button"){%>
                            <input type="button" class="btn btnlink" value="<%:=item.value%>" onclick="global_form_button_click(this,`<%:=config.className%>`,`<%:=item.name%>`);">
                            <span class="placeholder"><%:=item?.placeholder || ''%></span>
                        <%}%>

                        <% if(item.dataType=="selects"){ %>
                            <ul class="ulselects" name="<%:=item.name%>">
                                <% if(item.selects){ %>
                                    <% item.selects.forEach(_select=>{ %>
                                        <li class="selectli <%if(_select.selected){%>selected<%}%>" value="<%:=_select.value%>"><%:=_select.name%></li>
                                    <% }) %>
                                <%}%>
                            </ul>
                        <% } %>

                        <% if(item.dataType=="datalist"){ %>
                                <input type="text" name="<%:=item.name%>" class="inputword" value="<%:=item.value%>" list="<%:=item.name%>" placeholder="<%:=item.placeholder || ''%>">
                                    <% if(item.selects){ %>
                                        <datalist id="<%:=item.datalistid%>">
                                            <% item.selects.forEach(_select=>{ %>
                                                <option value="<%:=_select.value%>" ><%:=_select.name%>(<%:=_select.value%>)</option>
                                            <% }) %>
                                        </datalist>
                                    <%}%>
                                <span class="spanclean" onclick="handlerClean(this)">x</span>
                        <% } %>
                        </div>
                    </div>
                </div>
            <%})%>
        </script>

所以说,针对不同项目的不同需求,或者说你们的个人习惯,可以对上面的代码进行修改以便适应自己的项目,比如我的项目一般不会用到date,一般用到的是datetime,所以我就没考虑date的情况了!

下一次将介绍在实际中遇到的问题,和PasteForm是如何处理问题的

标签:CRUD,PasteTemplate,properties,html,value,template,PasteForm,placeholder,class
From: https://www.cnblogs.com/pastespider/p/18434452

相关文章

  • 【Elasticsearch系列七】索引 crud
    ......
  • PasteForm最佳CRUD实践,实际案例PasteTemplate详解(一)
    本文将介绍soft.pastecode.cn出品的PasteForm,PasteForm是贴代码使用Dto思想实现的CRUD的一个组件,或者说输出一个思想!为啥我觉得是最佳的CRUD呢?先结合你的实际项目解答下以下问题:1.如果有一个系统,有100个表,你的管理端需要多少页面?别和我说100个表很多,需求复杂点的随随便便上100个......
  • DeAdmin 1分钟无代码快速完成 CRUD
    简介真正做到了前后端的分离,前端页面的显示无需后端去配置,全部由可视化的操作展示。后端只需要专注于数据的提供,实现业务逻辑代码。创建模型模型即数据库表,创建后会生成controller和model文件1.新建模型2.配置字段3.提交后生成数据表创建菜单菜单是权限也是路......
  • 使用回调机制Callback和函数式编程码出优雅结构化代码!拒绝一直写CRUD!!!
    整体回调机制流程如下图所示:1.2回调的结构1.3回调的作用2.回调的实现方式2.1通过接口实现回调java可以通过定义一个回调接口,包含需要回调的方法,然后在业务逻辑中通过传递接口的实现类,触发回调。示例如下://1.定义回调接口interfaceCallback{voidonComplete(Stringres......
  • 使用回调机制Callback和函数式编程码出优雅结构化代码!拒绝一直写CRUD!!!
    整体回调机制流程如下图所示:1.2回调的结构1.3回调的作用2.回调的实现方式2.1通过接口实现回调java可以通过定义一个回调接口,包含需要回调的方法,然后在业务逻辑中通过传递接口的实现类,触发回调。示例如下://1.定义回调接口interfaceCallback{voidonComplete(Stringres......
  • WEB-API+.NET+CRUD+SSMS(VS2022)
    1.使用VS2022创建一个web-api项目,根目录如下:其中TestCode.cs写model实体类,Controller编写控制器2.实体类Item,编写对应的属性点击查看代码publicclassItem{[Required]publicintId{get;set;}[Required]publicintFieldID{get;set;}......
  • java程序员入行科目一之CRUD轻松入门教程(一)
    之前在操作MySQL的时候,都是采用Navicat,或者cmd黑窗口。无论使用什么方式和MySQL交互,大致步骤是这样的建立连接,需要输入用户名和密码编写SQL语句,和数据库进行交互这个连接方式不会变,但是现在需要基于Java语言去和MySQL进行一波在实际开发中,当用户要对数据进行一些......
  • DeAdmin 不仅仅是可以一键完成crud操作的后台管理系统
    在后台管理系统中,crud是常见的需求,即使每次都是cv操作都是一个不小的工作量。在DeAdmin中内置了一键操作的功能,完成后修改部分模型属性,再调整下列表及表单的展示信息即可快速完成。功能介绍后端1.首先会创建文章和分类的模型记录,包含了文字模块的常用字段信息2.分别创建......
  • CRUD最佳实践PasteForm及项目模板的制作视频,让重复的CRUD更加简单直接[附带源码和视频
    关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这个模板创建,这样就不要copy一个旧的项目,然后删删删,改改改,重命名等操作了强迫症,一......
  • 创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
    背景本博文主要是创建了一个新的SpringBoot项目,实现基本的增删改查,分页查询,带条件的分页查询功能。是方便初学者学习后端项目的一个比较清晰明了的实践代码,读者可根据博文,从自己动手创建一个新的SpringBoot项目,到使用PostMan测试基本请求,完完全全实践一遍,写出自己的代码,或者实现......