Commit b6d58c8a sunke

1 更新时暂停出库

2 解除单个工单绑定
3 解决分配相同库位的问题(排除掉已完成列表中的库位)
1 个父辈 6ee0aba6
...@@ -164,6 +164,11 @@ public class Settings extends BaseMongoBean { ...@@ -164,6 +164,11 @@ public class Settings extends BaseMongoBean {
*/ */
private String orderFileDir; private String orderFileDir;
/**
* 准备进行更新,不允许需求单出库
*/
private boolean stopOut = false;
public Date getLastPcbCheckDate() { public Date getLastPcbCheckDate() {
return lastPcbCheckDate; return lastPcbCheckDate;
} }
...@@ -387,5 +392,13 @@ public class Settings extends BaseMongoBean { ...@@ -387,5 +392,13 @@ public class Settings extends BaseMongoBean {
public void setInactionDay(int inactionDay) { public void setInactionDay(int inactionDay) {
this.inactionDay = inactionDay; this.inactionDay = inactionDay;
} }
public boolean isStopOut() {
return stopOut;
}
public void setStopOut(boolean stopOut) {
this.stopOut = stopOut;
}
} }
...@@ -77,7 +77,7 @@ public interface IStoragePosDao extends IMongoDao { ...@@ -77,7 +77,7 @@ public interface IStoragePosDao extends IMongoDao {
List<StoragePos> findBindByPn(String soseq, String pn); List<StoragePos> findBindByPn(String soseq, String pn);
List<StoragePos> allBindPos(); List<StoragePos> allBindPos(String so);
StoragePos findByBarcode(String barcode); StoragePos findByBarcode(String barcode);
......
...@@ -422,8 +422,8 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa ...@@ -422,8 +422,8 @@ public class StoragePosDaoImpl extends AbstractMongoDao implements IStoragePosDa
* 获取工单的所有绑定料盘 * 获取工单的所有绑定料盘
*/ */
@Override @Override
public List<StoragePos> allBindPos() { public List<StoragePos> allBindPos(String so) {
Criteria c = Criteria.where("barcode.appendInfo.so").ne(null); Criteria c = Criteria.where("barcode.appendInfo.so").is(so);
Query q = new Query(c); Query q = new Query(c);
return findByQuery(q); return findByQuery(q);
} }
......
...@@ -7,6 +7,7 @@ import com.myproject.dao.mongo.ILiteOrderDao; ...@@ -7,6 +7,7 @@ import com.myproject.dao.mongo.ILiteOrderDao;
import com.myproject.dao.mongo.qisda.IOutInfoDao; import com.myproject.dao.mongo.qisda.IOutInfoDao;
import com.myproject.dao.mongo.qisda.IOutItemDao; import com.myproject.dao.mongo.qisda.IOutItemDao;
import com.myproject.webapp.controller.storage.BaseSearchController; import com.myproject.webapp.controller.storage.BaseSearchController;
import com.myproject.webapp.controller.webService.DataCache;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.displaytag.properties.SortOrderEnum; import org.displaytag.properties.SortOrderEnum;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -35,9 +36,15 @@ public class OutInfoSearchController extends BaseSearchController { ...@@ -35,9 +36,15 @@ public class OutInfoSearchController extends BaseSearchController {
@Autowired @Autowired
protected IOutItemDao outItemDao; protected IOutItemDao outItemDao;
@Autowired
private DataCache dataCache;
@RequestMapping("/outInfoSearch*") @RequestMapping("/outInfoSearch*")
public String onSubmit(@ModelAttribute("searchCriteria") BaseSearchCriteria searchCriteria, HttpServletRequest request) { public String onSubmit(@ModelAttribute("searchCriteria") BaseSearchCriteria searchCriteria, HttpServletRequest request) {
boolean stopOut = dataCache.getSettings().isStopOut();
request.setAttribute("stopOut",stopOut);
Query query = new Query(); Query query = new Query();
Criteria criteria = new Criteria(); Criteria criteria = new Criteria();
......
...@@ -86,9 +86,9 @@ public class QisdaController extends BaseController { ...@@ -86,9 +86,9 @@ public class QisdaController extends BaseController {
*/ */
@RequestMapping("/qisda/dnIn") @RequestMapping("/qisda/dnIn")
public String dnIn(HttpServletRequest request){ public String dnIn(HttpServletRequest request){
if(currentDnInfo != null){ //if(currentDnInfo != null){
//if(currentDnInfo.isDNIn()) //if(currentDnInfo.isDNIn())
} //}
return "qisda/dnIn"; return "qisda/dnIn";
} }
...@@ -177,13 +177,21 @@ public class QisdaController extends BaseController { ...@@ -177,13 +177,21 @@ public class QisdaController extends BaseController {
@RequestMapping("/service/store/qisda/clearAllBind") @RequestMapping("/service/store/qisda/clearAllBind")
@ResponseBody @ResponseBody
public String unBindAllReel(HttpServletRequest request){ public String unBindAllReel(HttpServletRequest request){
log.info("开始解绑所有绑定工单的料盘"); String so = request.getParameter("so");
List<StoragePos> bindPosList = storagePosDao.allBindPos(); if(Strings.isNullOrEmpty(so)){
return "无工单号参数so,无法解绑";
}
log.info("开始解绑绑定工单["+so+"]的料盘");
int count = 0;
List<StoragePos> bindPosList = storagePosDao.allBindPos(so);
for (StoragePos storagePos : bindPosList) { for (StoragePos storagePos : bindPosList) {
storagePosDao.unbindReel(storagePos); storagePosDao.unbindReel(storagePos);
log.info("解除["+storagePos.getBarcode().getBarcode()+"]的工单["+so+"]绑定");
count = count + 1;
} }
log.info("清理绑定完成"); String msg = "工单["+so+"]解除绑定完成,共解绑["+count+"]盘";
return "OK"; log.info(msg);
return msg;
} }
/** /**
......
...@@ -84,6 +84,7 @@ public class SettingsController extends BaseUpdateController { ...@@ -84,6 +84,7 @@ public class SettingsController extends BaseUpdateController {
oldSettings.setOrderFileDir(settings.getOrderFileDir()); oldSettings.setOrderFileDir(settings.getOrderFileDir());
oldSettings.setInactionDay(settings.getInactionDay()); oldSettings.setInactionDay(settings.getInactionDay());
oldSettings.setStopOut(settings.isStopOut());
dataCache.updateSettings(oldSettings); dataCache.updateSettings(oldSettings);
saveMessage(request, getText("storage.saveSuccess", request.getLocale())); saveMessage(request, getText("storage.saveSuccess", request.getLocale()));
......
...@@ -122,6 +122,9 @@ public class QisdaApiController extends BaseController { ...@@ -122,6 +122,9 @@ public class QisdaApiController extends BaseController {
@RequestMapping("/executeOut") @RequestMapping("/executeOut")
@ResponseBody @ResponseBody
public String executeOut(HttpServletRequest request){ public String executeOut(HttpServletRequest request){
if(dataCache.getSettings().isStopOut()){
return "系统更新中,暂停出库,请稍后再试";
}
String hSerial = request.getParameter("hSerial"); String hSerial = request.getParameter("hSerial");
String maxReelStr = request.getParameter("max"); String maxReelStr = request.getParameter("max");
int maxReelNum = -1; int maxReelNum = -1;
...@@ -212,8 +215,8 @@ public class QisdaApiController extends BaseController { ...@@ -212,8 +215,8 @@ public class QisdaApiController extends BaseController {
//未真实绑定过,可以出库,绑定 //未真实绑定过,可以出库,绑定
appendInfo.sethSerial(outItem.gethSerial()); appendInfo.sethSerial(outItem.gethSerial());
appendInfo.setRefno(outItem.getRefno()); appendInfo.setRefno(outItem.getRefno());
appendInfo.setSo("HSerial:" + outItem.gethSerial()); appendInfo.setSo("HSerial-" + outItem.gethSerial());
appendInfo.setSoseq("HSerial:" + outItem.getSoseq()); appendInfo.setSoseq("HSerial-" + outItem.getSoseq());
appendInfo.setSlotStr(outItem.getSlotStr()); appendInfo.setSlotStr(outItem.getSlotStr());
appendInfo.setBindSlot("1"); appendInfo.setBindSlot("1");
......
...@@ -553,7 +553,7 @@ public class TaskService implements ITaskService { ...@@ -553,7 +553,7 @@ public class TaskService implements ITaskService {
countMap.put(storage.getId(), 0); countMap.put(storage.getId(), 0);
} }
Set<String> hasOutTaskStorageIds = new HashSet<>(); //Set<String> hasOutTaskStorageIds = new HashSet<>();
for (DataLog task : allTasks) { for (DataLog task : allTasks) {
String storageId = task.getStorageId(); String storageId = task.getStorageId();
if(!Strings.isNullOrEmpty(storageId)){ if(!Strings.isNullOrEmpty(storageId)){
...@@ -562,9 +562,9 @@ public class TaskService implements ITaskService { ...@@ -562,9 +562,9 @@ public class TaskService implements ITaskService {
taskCount = taskCount + 1; taskCount = taskCount + 1;
countMap.put(storageId, taskCount); countMap.put(storageId, taskCount);
} }
if(task.isCheckOutTask()){ // if(task.isCheckOutTask()){
hasOutTaskStorageIds.add(storageId); // hasOutTaskStorageIds.add(storageId);
} // }
} }
} }
...@@ -576,10 +576,10 @@ public class TaskService implements ITaskService { ...@@ -576,10 +576,10 @@ public class TaskService implements ITaskService {
if(status.timeOut()){ if(status.timeOut()){
continue; continue;
} }
if(hasOutTaskStorageIds.contains(storage.getId())){ // if(hasOutTaskStorageIds.contains(storage.getId())){
//流水线有出库任务的,不分配入库任务(出库优先) // //流水线有出库任务的,不分配入库任务(出库优先)
continue; // continue;
} // }
if(storage.canPutIn(barcode.getPlateSize(),barcode.getHeight())){ if(storage.canPutIn(barcode.getPlateSize(),barcode.getHeight())){
availbleStorageList.add(storage); availbleStorageList.add(storage);
} }
...@@ -606,7 +606,7 @@ public class TaskService implements ITaskService { ...@@ -606,7 +606,7 @@ public class TaskService implements ITaskService {
log.info("可用料仓太少,不按任务数分配,重新查找..."); log.info("可用料仓太少,不按任务数分配,重新查找...");
for (Storage storage : availbleStorageList) { for (Storage storage : availbleStorageList) {
try{ try{
log.info("尝试从"+storage.getName()+"["+storage.getCid()+"]查找空位,当前料仓任务数"); log.info("不按任务数分配,尝试从"+storage.getName()+"["+storage.getCid()+"]查找空位");
return findLineEmptyPosForPutIn(storage,barcode); return findLineEmptyPosForPutIn(storage,barcode);
}catch(Exception e){ }catch(Exception e){
log.info("从"+storage.getName()+"["+storage.getCid()+"]查找空位失败:" + e.getMessage()); log.info("从"+storage.getName()+"["+storage.getCid()+"]查找空位失败:" + e.getMessage());
...@@ -860,8 +860,16 @@ public class TaskService implements ITaskService { ...@@ -860,8 +860,16 @@ public class TaskService implements ITaskService {
@Override @Override
public Collection<String> excludePosIds(){ public Collection<String> excludePosIds(){
//排除掉正在执行的仓位 //排除掉正在执行的仓位
Collection<DataLog> allTasks = taskMap.values(); Collection<DataLog> allTasks = new ArrayList<>(taskMap.values());
allTasks.addAll(finishedTaskMap.values()); try{
for (DataLog finishTask : finishedTaskMap.values()) {
allTasks.add(finishTask);
}
}catch (Exception e){
log.error("获取排除库位出错",e);
}
Collection<String> operatingPosIds = new HashSet<>(); Collection<String> operatingPosIds = new HashSet<>();
for(DataLog task : allTasks){ for(DataLog task : allTasks){
String posId = task.getPosId(); String posId = task.getPosId();
......
...@@ -205,10 +205,6 @@ ...@@ -205,10 +205,6 @@
</div> </div>
<!-- END PAGE CONTENT--> <!-- END PAGE CONTENT-->
<form method="get" action="${ctx}/service/store/checkout.html" id="checkoutForm"> <form method="get" action="${ctx}/service/store/checkout.html" id="checkoutForm">
<input type="hidden" name="pid" id="pid"/> <input type="hidden" name="pid" id="pid"/>
......
...@@ -16,98 +16,105 @@ ...@@ -16,98 +16,105 @@
} }
</style> </style>
<!-- BEGIN PAGE HEADER-->
<h3 class="page-title">
<fmt:message key="需求单"/>
</h3>
<!-- BEGIN PAGE CONTENT--> <c:if test="${stopOut}">
<div class="row"> 系统更新中,暂停出库,请稍后再试
<div class="col-md-12"> </c:if>
<c:if test="${!stopOut}">
<!-- BEGIN EXAMPLE TABLE PORTLET--> <!-- BEGIN PAGE HEADER-->
<div class="portlet box blue"> <h3 class="page-title">
<div class="portlet-title"> <fmt:message key="需求单"/>
<div class="caption"> </h3>
<i class="fa fa-list-alt"></i>
<!-- BEGIN PAGE CONTENT-->
<div class="row">
<div class="col-md-12">
<!-- BEGIN EXAMPLE TABLE PORTLET-->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-list-alt"></i>
</div>
</div> </div>
</div> <div class="portlet-body">
<div class="portlet-body"> <form id="searchCriteria" class="form-horizontal form-bordered" action="${ctx}/qisda/outInfoSearch.html" method="post">
<form id="searchCriteria" class="form-horizontal form-bordered" action="${ctx}/qisda/outInfoSearch.html" method="post"> <div class="form-group">
<div class="form-group">
<label class="control-label col-md-1"><fmt:message key="需求单号"/></label> <label class="control-label col-md-1"><fmt:message key="需求单号"/></label>
<div class="col-md-2"> <div class="col-md-2">
<div style="text-align:left" class="input-group"> <div style="text-align:left" class="input-group">
<input type="text" name="hSerial" class="form-control" value="${hSerial}"/> <input type="text" name="hSerial" class="form-control" value="${hSerial}"/>
</div>
</div> </div>
</div>
<label class="control-label col-md-1"><fmt:message key="工单号"/></label> <label class="control-label col-md-1"><fmt:message key="工单号"/></label>
<div class="col-md-2"> <div class="col-md-2">
<div style="text-align:left" class="input-group"> <div style="text-align:left" class="input-group">
<input type="text" name="so" class="form-control" value="${so}"/> <input type="text" name="so" class="form-control" value="${so}"/>
</div>
</div> </div>
</div>
<label class="control-label col-md-1"><fmt:message key="ReelId"/></label> <label class="control-label col-md-1"><fmt:message key="ReelId"/></label>
<div class="col-md-2"> <div class="col-md-2">
<div style="text-align:left" class="input-group"> <div style="text-align:left" class="input-group">
<input type="text" name="reelId" class="form-control" value="${reelId}"/> <input type="text" name="reelId" class="form-control" value="${reelId}"/>
</div>
</div> </div>
</div>
<div class="col-md-2"> <div class="col-md-2">
<button class="btn purple" type="submit"><i class="fa fa-search"></i> <button class="btn purple" type="submit"><i class="fa fa-search"></i>
<fmt:message key="button.search"/> <fmt:message key="button.search"/>
</button> </button>
</div> </div>
</div> </div>
</form> </form>
<display:table name="searchCriteria.pageList" requestURI="" <display:table name="searchCriteria.pageList" requestURI=""
sort="external" sort="external"
defaultsort="1" class="table table-striped table-bordered table-hover" export="false" id="outInfo"> defaultsort="1" class="table table-striped table-bordered table-hover" export="false" id="outInfo">
<display:column titleKey="需求单号" sortable="true" sortProperty="hSerial"> <display:column titleKey="需求单号" sortable="true" sortProperty="hSerial">
<a href="#" onclick="showDetail('${outInfo.hSerial}')">${outInfo.hSerial}</a> <a href="#" onclick="showDetail('${outInfo.hSerial}')">${outInfo.hSerial}</a>
</display:column> </display:column>
<display:column titleKey="动作" property="action" sortable="true" sortProperty="action"/> <display:column titleKey="动作" property="action" sortable="true" sortProperty="action"/>
<display:column titleKey="工单" property="so" sortable="true" sortProperty="so"/> <display:column titleKey="工单" property="so" sortable="true" sortProperty="so"/>
<display:column titleKey="备料单号" property="refno" sortable="true" sortProperty="refno"/> <display:column titleKey="备料单号" property="refno" sortable="true" sortProperty="refno"/>
<display:column titleKey="建议出仓时间" sortable="true" sortProperty="sdate"> <display:column titleKey="建议出仓时间" sortable="true" sortProperty="sdate">
<fmt:formatDate value="${outInfo.sdate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${outInfo.sdate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column> </display:column>
<display:column titleKey="必须出仓日期" sortable="true" sortProperty="mdate"> <display:column titleKey="必须出仓日期" sortable="true" sortProperty="mdate">
<fmt:formatDate value="${outInfo.mdate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${outInfo.mdate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column> </display:column>
<display:column titleKey="任务" sortable="true" sortProperty="mdate"> <display:column titleKey="任务" sortable="true" sortProperty="mdate">
${outInfo.taskFinishNum}/${outInfo.taskNum} ${outInfo.taskFinishNum}/${outInfo.taskNum}
</display:column> </display:column>
<display:column titleKey="创建时间" sortable="true" sortProperty="createDate"> <display:column titleKey="创建时间" sortable="true" sortProperty="createDate">
<fmt:formatDate value="${outInfo.createDate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${outInfo.createDate}" pattern="yyyy-MM-dd HH:mm"/>
</display:column> </display:column>
<display:column titleKey="checkOut.operate" media="html" sortProperty="sendStatus" sortable="true"> <display:column titleKey="checkOut.operate" media="html" sortProperty="sendStatus" sortable="true">
<span class="hide">${outInfo.sendStatus}</span> <span class="hide">${outInfo.sendStatus}</span>
<c:if test="${outInfo.sendStatus != 2 && outInfo.taskNum == 0}"> <c:if test="${outInfo.sendStatus != 2 && outInfo.taskNum == 0}">
<button class="btn yellow" id="btn${outInfo.hSerial}" <button class="btn yellow" id="btn${outInfo.hSerial}"
onclick="executeOut('${outInfo.hSerial}')"> onclick="executeOut('${outInfo.hSerial}')">
<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button> <i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/></button>
</c:if> </c:if>
</display:column> </display:column>
</display:table> </display:table>
</div>
</div> </div>
<!-- END EXAMPLE TABLE PORTLET-->
</div> </div>
<!-- END EXAMPLE TABLE PORTLET-->
</div> </div>
</div> </c:if>
<div id="detail" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false"> <div id="detail" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;"> <div class="modal-dialog" style="margin-top: 10%;width:80%;margin-left:10%;">
......
...@@ -73,99 +73,23 @@ ...@@ -73,99 +73,23 @@
</div> </div>
</div> </div>
<%--<div class="portlet-title">--%>
<%--<div class="caption">--%>
<%--<i class="icon-speedometer font-green-haze"></i>--%>
<%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="menu.system.maintenance"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="portlet-body" style="padding-left: 30px;">--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.maintenanceDays"/>:</span>--%>
<%--<form:input path="maintenanceDays" cssClass="form-control input-small"/>--%>
<%--<span class="input-group-addon"><fmt:message key="time.days"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="settings.pcbEmail.adress"/>:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="maintenanceEmail" cssClass="form-control input-xlarge"/>--%>
<%--<button type="button" class="btn yellow" onclick="testEmail('');"><fmt:message key="btn.test"/></button>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="portlet-title"> <div class="portlet-title">
<div class="caption"> <div class="caption">
<i class="icon-bell font-green-haze"></i> <i class="icon-bell font-green-haze"></i>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="提醒设置"/></span> <span class="caption-subject bold uppercase font-green-haze"><fmt:message key="更新设置"/></span>
</div> </div>
</div> </div>
<div class="portlet-body" style="padding-left: 30px;"> <div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline"> <%--<div class="col-md-6">--%>
<div class="input-group margin-top-10"> <div class="input-group">
<form:input path="inactionDay" cssClass="form-control input-small"/> <label class="control-label"><fmt:message key="系统更新,暂停出库"/> </label>
<span class="input-group-addon"><fmt:message key="天前呆滞物料提醒"/></span> <form:checkbox path="stopOut"/>
</div>
</div> </div>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="settings.pcbEmail.adress"/>:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="pcbExpireEmail" cssClass="form-control input-xlarge"/>--%>
<%--<button type="button" class="btn yellow" onclick="testEmail('');"><fmt:message key="btn.test"/></button>--%>
<%--</div>--%>
<%--</div>--%> <%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.pcbEmail.everyday"/></span>--%>
<%--<form:select path="pcbExpireTime" cssClass="form-control input-small">--%>
<%--<c:forEach begin="0" end="23" var="hour">--%>
<%--<form:option value="${hour}"/>--%>
<%--</c:forEach>--%>
<%--</form:select>--%>
<%--<span class="input-group-addon"><fmt:message key="settings.pcbEmail.reminder"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.pcbEmail.expire"/></span>--%>
<%--<form:input path="pcbExpireDay" cssClass="form-control input-small"/>--%>
<%--<span class="input-group-addon"><fmt:message key="settings.pcbEmail.reminderDay"/></span>--%>
<%--</div>--%>
<%--<button type="button" class="btn yellow" onclick="testEmail('true');"><fmt:message key="btn.test"/></button>--%>
<%--</div>--%>
</div> </div>
<%--<div class="portlet-title">--%>
<%--<div class="caption">--%>
<%--<i class="icon-speedometer font-green-haze"></i>--%>
<%--<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="button.backup"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="portlet-body" style="padding-left: 30px;">--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10">--%>
<%--<span class="input-group-addon"><fmt:message key="settings.backupHours"/>:</span>--%>
<%--<form:input path="backupHours" cssClass="form-control input-small"/>--%>
<%--<span class="input-group-addon"><fmt:message key="time.hours"/></span>--%>
<%--</div>--%>
<%--</div>--%>
<%--<div class="form-group form-inline">--%>
<%--<div class="input-group margin-top-10"><fmt:message key="settings.backupPath"/>:</div>--%>
<%--<div class="input-group margin-top-10">--%>
<%--<form:input path="backupPath" cssClass="form-control input-xlarge"/>--%>
<%--<button type="button" class="btn blue" id="backup"><fmt:message key="button.backup"/></button>--%>
<%--<button type="button" class="btn yellow" id="restore"><fmt:message key="button.restore"/></button>--%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="portlet-title"> <div class="portlet-title">
<div class="caption"> <div class="caption">
<i class="icon-link font-green-haze"></i> <i class="icon-link font-green-haze"></i>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!