系列目录

提交一个表单后

我们需要一个管理的列表。我的申请,我的申请包含了提交内容的列表状态

状态分:过期,未审核,审核通过,驳回,废弃

列表对应代码

@using App.Admin;
@using App.Common;
@using App.Models.Sys;
@{
ViewBag.Title = "主页";
Layout = "~/Views/Shared/_Index_Layout.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
}
<div class="mvctool" style="line-height:30px;">
我的申请:,过期:,未审核:,审核通过:,审核不通过:,审核中:
</div>
<table id="List"></table> <div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
@Html.Partial("~/Views/Shared/_Partial_AutoGrid.cshtml")
<script type="text/javascript">
$(function () {
$('#List').datagrid({
url: '@Url.Action("GetListByUserId")',
width:SetGridWidthSub(),
methord: 'post',
height: SetGridHeightSub(),
fitColumns: true,
sortName: 'CreateTime',
sortOrder: 'desc',
idField: 'Id',
pageSize: ,
pageList: [, , , , ],
pagination: true,
striped: true, //奇偶行是否区分
singleSelect: true,//单选模式
rownumbers: true,//行号
columns: [[
{ field: 'Id', title: 'ID', width: ,hidden:true },
{ field: 'Title', title: '标题', width: ,sortable:true },
{ field: 'UserId', title: '发起用户', width: , sortable: true, hidden: true },
{ field: 'FormId', title: '对应表单', width: , sortable: true, hidden: true },
{ field: 'FormLevel', title: '公文级别', width: ,sortable:true, hidden: true },
{ field: 'CreateTime', title: '创建时间', width: ,sortable:true },
{ field: 'TimeOut', title: '截至时间', width: , sortable: true, formatter: function (value) { return SubStrYMD(value) } },
{ field: 'CurrentStep', title: '当前环节', width: , sortable: true, align: 'center' },
{ field: 'CurrentState', title: '当前状态', width: , sortable: true, align: 'center' },
{ field: 'Action', title: '管理', width: , sortable: true, align: 'center' }
]]
});
});
//ifram 返回
function frameReturnByClose() {
$("#modalwindow").window('close');
}
function frameReturnByReload(flag) {
if (flag)
$("#List").datagrid('load');
else
$("#List").datagrid('reload');
}
function frameReturnByMes(mes) {
$.messageBox5s('提示', mes);
}
function LookFlow(formId)
{
$("#modalwindow").html("<iframe width='100%' height='98%' scrolling='auto' frameborder='0' src='@Url.Action("Details")?id=" + formId + "&Ieguid=" + GetGuid() + "'></iframe>");
$("#modalwindow").window({ title: '图例', width: , height: , iconCls: 'icon-details' }).window('open');
}
function ManageFlow(formId,id)
{
$("#modalwindow").html("<iframe width='100%' height='98%' scrolling='auto' frameborder='0' src='@Url.Action("Edit")?formId=" + formId + "&id=" + id + "&Ieguid=" + GetGuid() + "'></iframe>");
$("#modalwindow").window({ title: '详细', width: , height: , iconCls: 'icon-details' }).window('open');
}
</script>

Index.cshtml

@model App.Models.Flow.Flow_FormModel
@using App.Common;
@using App.Models.Flow;
@using App.Admin;
@using App.Models.Sys;
@{
ViewBag.Title = "创建";
Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
}
<style> .tbdetail { width: %; border-collapse: collapse; }
.tbdetail .alignRight { width: 150px; text-align: right; }
.tbdetail td { border-bottom: 1px solid #F4F4F4; height: 30px; word-wrap:break-word; word-break:break-all; }
.tbcalendar, .tbcalendar td, .tbcalendar th { border: 1px solid #cccccc; border-collapse: collapse; padding: 5px; text-align: center; }
.tbcalendar th{ background: #f4f4f4; }
</style>
<div class="tc" style="padding:10px;"> @Model.Name</div> <table class="tbdetail"> @{
int i = ;
foreach (var item in Model.stepList)
{
i++;
<tr>
<td align="center">
<table class="tbdetail">
<tr>
<td class="alignRight">

@i
步:
</td>
<td>
@item.Name
</td>
</tr>
<tr>
<td class="alignRight">
流转规则:
</td>
<td>
按@(item.FlowRule)
</td>
</tr>
@{
int j = ;
foreach (var judge in item.stepRuleList)
{
j++;
<tr>
<td class="alignRight">
分支
@j:
</td>
<td>
@String.Format("如果 [{0} {1} {2}] → [{3}]", judge.AttrName, judge.Operator, judge.Result, judge.NextStep == "" ? "流程结束" : judge.NextStepName)
</td>
</tr>
}
}
</table>
</td>
</tr>
<tr>
<td align="center">

</td>
</tr>
}
}
<tr>
<td align="center">
流程结束
</td>
</tr>
</table>

Details.cshtml

@model App.Models.Flow.Flow_FormContentModel
@using App.Common;
@using App.Models.Flow;
@using App.Admin;
@using App.Models.Sys;
@{
ViewBag.Title = "创建";
Layout = "~/Views/Shared/_Index_Layout.cshtml";
List<permModel> perm = (List<permModel>)ViewBag.Perm;
if (perm == null)
{
perm = new List<permModel>();
}
} <script>
$(function () {
$("*[name='AttrA']").val("@Model.AttrA");
$("*[name='AttrB']").val("@Model.AttrB");
$("*[name='AttrC']").val("@Model.AttrC");
$("*[name='AttrD']").val("@Model.AttrD");
$("*[name='AttrE']").val("@Model.AttrE");
$("*[name='AttrF']").val("@Model.AttrF");
$("*[name='AttrG']").val("@Model.AttrG");
$("*[name='AttrH']").val("@Model.AttrH");
$("*[name='AttrI']").val("@Model.AttrI");
$("*[name='AttrJ']").val("@Model.AttrJ");
$("*[name='AttrK']").val("@Model.AttrK");
$("*[name='AttrL']").val("@Model.AttrL");
$("*[name='AttrM']").val("@Model.AttrM");
$("*[name='AttrN']").val("@Model.AttrN");
$("*[name='AttrO']").val("@Model.AttrO");
$("*[name='AttrP']").val("@Model.AttrP");
$("*[name='AttrQ']").val("@Model.AttrQ");
$("*[name='AttrR']").val("@Model.AttrR");
$("*[name='AttrS']").val("@Model.AttrS");
$("*[name='AttrT']").val("@Model.AttrT");
$("*[name='AttrU']").val("@Model.AttrU");
$("*[name='AttrV']").val("@Model.AttrV");
$("*[name='AttrW']").val("@Model.AttrW");
$("*[name='AttrX']").val("@Model.AttrX");
$("*[name='AttrY']").val("@Model.AttrY");
$("*[name='AttrZ']").val("@Model.AttrZ"); });
</script>
<div class="mvctool ">
@Html.ToolButton("btnReturn", "icon-return", "返回",false)
</div>
<table class="fromEditTable setTextWidth300">
<tbody>
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.FormId)
@Html.HiddenFor(model => model.UserId)
<input id="CreateTime" type="hidden" name="CreateTime" value="2000-1-1" />
<tr>
<td style="width:100px; text-align:right;">
@Html.LabelFor(model => model.Title):
</td>
<td style="width:310px">
@Html.EditorFor(model => model.Title)
</td> </tr>
@Html.Raw(ViewBag.Html)
<tr>
<td style="width:100px; text-align:right;">
@Html.LabelFor(model => model.TimeOut):
</td>
<td style="width:310px">
@Html.EditorFor(model => model.TimeOut)
</td>
</tr>
<tr><td style='width:100px; text-align:right;'>紧急程度 :</td><td><select name="FormLevel" id="FormLevel"><option value="普通">普通</option><option value="重要">重要</option><option value="紧急">紧急</option></select></td></tr>
</tbody>
</table>
<hr />
@Html.Raw(ViewBag.StepCheckMes)

Edit.cshtml

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using App.Common;
using App.IBLL;
using App.Models.Sys;
using Microsoft.Practices.Unity;
using App.Flow.IBLL;
using App.Models.Flow;
using System.Text;
using App.Flow.BLL;
using System; namespace App.Admin.Areas.Flow.Controllers
{
public class ApplyController : BaseController
{
[Dependency]
public ISysUserBLL userBLL { get; set; }
[Dependency]
public IFlow_TypeBLL m_BLL { get; set; }
[Dependency]
public IFlow_FormBLL formBLL { get; set; }
[Dependency]
public IFlow_FormAttrBLL formAttrBLL { get; set; }
[Dependency]
public IFlow_FormContentBLL formContentBLL { get; set; }
[Dependency]
public IFlow_StepBLL stepBLL { get; set; }
[Dependency]
public IFlow_StepRuleBLL stepRuleBLL { get; set; }
[Dependency]
public IFlow_FormContentStepCheckBLL stepCheckBLL { get; set; }
[Dependency]
public IFlow_FormContentStepCheckStateBLL stepCheckStateBLL { get; set; } ValidationErrors errors = new ValidationErrors(); [SupportFilter]
public ActionResult Index()
{
ViewBag.Perm = GetPermission();
return View();
}
[HttpPost]
public JsonResult GetListByUserId(GridPager pager, string queryStr)
{
List<Flow_FormContentModel> list = formContentBLL.GetListByUserId(ref pager, queryStr, GetUserId());
var json = new
{
total = pager.totalRows,
rows = (from r in list
select new Flow_FormContentModel()
{ Id = r.Id,
Title = r.Title,
UserId = r.UserId,
FormId = r.FormId,
FormLevel = r.FormLevel,
CreateTime = r.CreateTime,
TimeOut = r.TimeOut,
CurrentStep = GetCurrentStep(r),
CurrentState = GetCurrentState(r),
Action = "<a href='#' title='管理' onclick='ManageFlow(\"" + r.FormId + "\",\""+r.Id+"\")'>管理</a> | <a href='#' title='图例' onclick='LookFlow(\"" + r.FormId + "\")'>图例</a>" }).ToArray() };
return Json(json);
}
public string GetCurrentStep(Flow_FormContentModel model)
{
string str = "结束";
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(model.FormId,model.Id);
for (int i = stepCheckModelList.Count()-;i>=;i--)
{
if (stepCheckModelList[i].State == )
{
str = stepBLL.GetById(stepCheckModelList[i].StepId).Name;
}
}
return str;
}
public string GetCurrentState(Flow_FormContentModel model)
{
if (model.TimeOut < ResultHelper.NowTime)
{
return "<span style='color:#0094ff'>过期</span>";
}
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(model.FormId,model.Id); var v = from r in stepCheckModelList where r.State == select r;
if (v.Count() == stepCheckModelList.Count())
{
return "<span style='color:#6fce2f'>通过</span>";
}
var vv = from r in stepCheckModelList where r.State == select r;
if (vv.Count() > )
{
return "<span style='color:#ff6a00'>驳回</span>";
}
return "<span style='color:#ff6600'>待审核</span>";
} #region 详细
[SupportFilter(ActionName = "Details")]
public ActionResult Details(string id)
{
ViewBag.Perm = GetPermission();
Flow_FormModel flowFormModel = formBLL.GetById(id);
//获取现有的步骤
GridPager pager = new GridPager()
{
rows = ,
page = ,
sort = "Id",
order = "asc"
};
flowFormModel.stepList = new List<Flow_StepModel>();
flowFormModel.stepList = stepBLL.GetList(ref pager, flowFormModel.Id);
for (int i = ; i < flowFormModel.stepList.Count; i++)//获取步骤下面的步骤规则
{
flowFormModel.stepList[i].stepRuleList = new List<Flow_StepRuleModel>();
flowFormModel.stepList[i].stepRuleList = GetStepRuleListByStepId(flowFormModel.stepList[i].Id);
} return View(flowFormModel);
}
//获取步骤下面的规则
private List<Flow_StepRuleModel> GetStepRuleListByStepId(string stepId)
{
List<Flow_StepRuleModel> list = stepRuleBLL.GetList(stepId);
return list;
}
#endregion [SupportFilter(ActionName = "Details")]
public ActionResult Edit(string formId,string id)
{ ViewBag.Perm = GetPermission();
ViewBag.Html = ExceHtmlJs(formId);
ViewBag.StepCheckMes = GetCurrentStepCheckMes(formId, id);
Flow_FormContentModel model = formContentBLL.GetById(id);
return View(model);
} //根据设定公文,生成表单及控制条件
private string ExceHtmlJs(string id)
{
//定义一个sb为生成HTML表单
StringBuilder sbHtml = new StringBuilder();
StringBuilder sbJS = new StringBuilder();
sbJS.Append("<script type='text/javascript'>function CheckForm(){");
Flow_FormModel model = formBLL.GetById(id);
#region 判断流程是否有字段,有就生成HTML表单
Type formType = model.GetType();
//查找名称为"A-Z"的属性
string[] arrStr = { "AttrA", "AttrB", "AttrC", "AttrD", "AttrE", "AttrF", "AttrG", "AttrH", "AttrI", "AttrJ", "AttrK"
, "AttrL", "AttrM", "AttrN", "AttrO", "AttrP", "AttrQ", "AttrR", "AttrS", "AttrT", "AttrU"
, "AttrV", "AttrW", "AttrX", "AttrY", "AttrZ"};
foreach (string str in arrStr)
{
object o = formType.GetProperty(str).GetValue(model, null);
if (o != null)
{
//查找model类的Class对象的"str"属性的值
sbHtml.Append(GetHtml(o.ToString(), str.Replace("Attr", ""), ref sbJS));
}
} #endregion
sbJS.Append("return true}</script>");
ViewBag.HtmlJS = sbJS.ToString();
return sbHtml.ToString();
} //对比
private bool JudgeVal(string attrId, string rVal, string cVal, string lVal)
{
string attrType = formAttrBLL.GetById(attrId).AttrType;
return new FlowHelper().Judge(attrType, rVal, cVal, lVal);
} //获取指定名称的HTML表单
private string GetHtml(string id, string no, ref StringBuilder sbJS)
{
StringBuilder sb = new StringBuilder();
Flow_FormAttrModel attrModel = formAttrBLL.GetById(id);
sb.AppendFormat("<tr><td style='width:100px; text-align:right;'>{0} :</td>", attrModel.Title);
//获取指定类型的HTML表单
sb.AppendFormat("<td>{0}</td></tr>", new FlowHelper().GetInput(attrModel.AttrType, attrModel.Name, no));
sbJS.Append(attrModel.CheckJS);
return sb.ToString();
} //获取环节所有信息
public string GetCurrentStepCheckMes(string fromId, string contentId)
{
string stepCheckMes = "";
string stepCheckId = GetCurrentStepCheckId(fromId, contentId); List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(fromId, contentId);
for (int i = ; i < stepCheckModelList.Count; i++)
{
Flow_FormContentStepCheckStateModel stepCheckStateModel = stepCheckStateBLL.GetByStepCheckId(stepCheckModelList[i].Id);
stepCheckMes = stepCheckMes + "第" + (i + ) + "步:审核人:" + stepCheckStateModel.UserId + " 审核意见:" + stepCheckStateModel.Reamrk + " 审核意见:" + (stepCheckStateModel.CheckFlag == ? "通过" : stepCheckStateModel.CheckFlag == ? "不通过" : "审核中") + "</br>";
}
return stepCheckMes;
}
//获取当前环节的审核条
public string GetCurrentStepCheckId(string fromId, string contentId)
{
List<Flow_FormContentStepCheckModel> stepCheckModelList = stepCheckBLL.GetListByFormId(fromId, contentId);
return new FlowHelper().GetCurrentStepCheckIdByStepCheckModelList(stepCheckModelList); }
}
}

ApplyController

 List<Flow_FormContentModel> GetListByUserId(ref GridPager pager, string queryStr,string userId);

IFlow_FormContentBLL

 [Dependency]
public IFlow_FormContentRepository m_Rep { get; set; }
public List<Flow_FormContentModel> GetListByUserId(ref GridPager pager, string queryStr, string userId)
{
IQueryable<Flow_FormContent> queryData = null;
if (!string.IsNullOrWhiteSpace(queryStr))
{
queryData = m_Rep.GetList(db).Where(a => a.Title.Contains(queryStr) && a.UserId==userId);
}
else
{
queryData = m_Rep.GetList(db).Where(a=>a.UserId == userId);
}
pager.totalRows = queryData.Count();
queryData = LinqHelper.SortingAndPaging(queryData, pager.sort, pager.order, pager.page, pager.rows);
return CreateModelList(ref queryData);
}
private List<Flow_FormContentModel> CreateModelList(ref IQueryable<Flow_FormContent> queryData)
{ List<Flow_FormContentModel> modelList = (from r in queryData
select new Flow_FormContentModel
{
Id = r.Id,
Title = r.Title,
UserId = r.UserId,
FormId = r.FormId,
FormLevel = r.FormLevel,
CreateTime = r.CreateTime,
AttrA = r.AttrA,
AttrB = r.AttrB,
AttrC = r.AttrC,
AttrD = r.AttrD,
AttrE = r.AttrE,
AttrF = r.AttrF,
AttrG = r.AttrG,
AttrH = r.AttrH,
AttrI = r.AttrI,
AttrJ = r.AttrJ,
AttrK = r.AttrK,
AttrL = r.AttrL,
AttrM = r.AttrM,
AttrN = r.AttrN,
AttrO = r.AttrO,
AttrP = r.AttrP,
AttrQ = r.AttrQ,
AttrR = r.AttrR,
AttrS = r.AttrS,
AttrT = r.AttrT,
AttrU = r.AttrU,
AttrV = r.AttrV,
AttrW = r.AttrW,
AttrX = r.AttrX,
AttrY = r.AttrY,
AttrZ = r.AttrZ,
CustomMember = r.CustomMember,
TimeOut = r.TimeOut
}).ToList();
return modelList;
}

Flow_FormContentBLL

 IQueryable<Flow_FormContent> GetList(DBContainer db);

IFlow_FormContentRepository

 public IQueryable<Flow_FormContent> GetList(DBContainer db)
{
IQueryable<Flow_FormContent> list = db.Flow_FormContent.AsQueryable();
return list;
}

Flow_FormContentRepository

运行效果。

图例效果

虽然显示效果不是很好,但是体现了流程的分支情况。

驳回废弃做完审批再回头来处理这个页面。这样来看代码比较清楚

直接看代码分析流程。目前没有特别模糊的逻辑

ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

随机推荐

  1. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  2. 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密

    0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...

  3. Android Ormlite 学习笔记1 -- 基础

    Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  5. 开发者接入 基本配置 服务器配置 out.aspx

    页面代码: 前段为默认的,什么都不用写,后台如下: 即可 来自为知笔记(Wiz)

  6. 【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)

    初识马尔可夫和马尔可夫链 作者:白宁超 2016年7月10日20:34:20 摘要:最早接触马尔可夫模型的定义源于吴军先生<数学之美>一书,起初觉得深奥难懂且无什么用场.直到学习自然语言处 ...

  7. css样式之border

    border用法详解: 1.border-width 属性设置边框的宽度 可能的值:像素 2.border-style 属性设置边框的样式 可能的值:solid(直线),dashed(虚线),dott ...

  8. Configure a bridged network interface for KVM using RHEL 5.4 or later?

    environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual ...

  9. Performance Tuning

    本文译自Wikipedia的Performance tuning词条,原词条中的不少链接和扩展内容非常值得一读,翻译过程中暴露了个人工程学思想和英语水平的不足,翻译后的内容也失去很多准确性和丰富性,需 ...

  10. linux-centos在VM中的网络配置

    1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...