该文旨在解决一下问题,若有更好办法请指出
1、编辑状态弹框问题:在options中加 events:{click:OpenSelectWBSQC}
2、选择框联动问题之onChange事件
3、数据项是否重复验证问题
4、编辑状态下的文本框禁用问题
@{
ViewBag.Title = "MaterialSetting";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div id="SearchPanel" class="easyui-accordion SearchPanel" style="width:100%;" title="Click here to collapsible query conditions">
<div class="Condition" title=" Query Condition" data-options="iconCls:'icon-search'">
<form id="queryForm" method="get" class="form-horizontal">
<div class="form-group">
<label class="col-md-1 control-label form-title-4">CT:</label>
<div class="col-md-2 form-input-4">
@Html.MulDropDownList("CT", SelectOptions.CT, new { @id = "ddlCT" })
</div>
<label class="col-md-1 control-label form-title-4">BG:</label>
<div class="col-md-2 form-input-4">
@Html.MulDropDownList("BGCode", SelectOptions.BG, new { @id = "ddlBG" })
</div>
<label class="col-md-1 control-label form-title-4">GIC SU:</label>
<div class="col-md-2 form-input-4">
@Html.MulDropDownList("ddlBU", "SBU", "../ShareData/getSBU", "Value", "Text")
</div>
<label class="col-md-1 control-label form-title-4"></label>
<div class="col-md-2 form-input-4">
<button id="btnQuery" type="button" class="btn btn-primary" onclick="initTable();">
<i class="glyphicon glyphicon-search"></i> Search
</button>
</div>
</div>
</form>
</div>
</div>
<div id="GridPanel" class="GridPanel" style="padding:0px;">
<table id="tabQCSVO" class="easyui-datagrid" style="width:98%;"
data-options="
iconCls: 'icon-edit',
striped:true,
fitConlumns:false,
singleSelect: true,
toolbar: '#ToolPanel',
onClickCell: onClickCell,
onEndEdit: onEndEdit,
rownumbers:true,
collapsible:true,
pagination:true,
idField:'RowsID',
nowrap:false,
emptyMsg:'Data is empty!'
">
<thead>
<tr>
<th data-options="field:'QCSvOID',checkbox:true"></th>
<th data-options="field:'WBSCareQC',hidden:'true',editor:{type:'textbox'}"></th>
<th data-options="field:'ProjectID',hidden:'true',editor:{type:'textbox'}"></th>
<th data-options="field:'WBSCareQCName',width:250,align:'center',
editor:{
type:'textbox',
options:{
required:true,
events:{click:OpenSelectWBSQC},
onChange:function(data){
var row = $('#tabQCSVO').datagrid('getSelected');
var rowIndex = $('#tabQCSVO').datagrid('getRowIndex', row);//获取行号
var targetWBSQCId = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'WBSCareQC' }).target;
var value=targetWBSQCId.textbox('getValue');
var targetGIC = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'GICName' }).target;
targetGIC.combobox('clear'); //清除原来的数据
var url = 'GetGICById?type=1&Id=' + value + '&rdm=' + Math.random();
targetGIC.combobox('reload', url);//联动下拉列表重载
var targetBG = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'BGName'}).target;
targetBG.textbox('setValue','');
targetBG.textbox('disable');
var targetSBU = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'SBUName'}).target;
targetSBU.textbox('setValue','');
targetSBU.textbox('disable');
var targetGICETC = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GICETC'}).target;
targetGICETC.textbox('setValue','');
targetGICETC.textbox('disable');
var targetWBSETC = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GICWBS'}).target;
targetWBSETC.textbox('setValue','');
targetWBSETC.textbox('disable');
}
}
}">WBS/QC</th>
<th data-options="field:'GIC',hidden:'true',editor:{type:'textbox'}"></th>
<th data-options="field:'GICName',width:250,align:'center',
editor:{type:'combobox',
options:{
valueField:'Value',
textField:'Text',
method:'get',
required:true,
onChange:function(data){
var row = $('#tabQCSVO').datagrid('getSelected');
var rowIndex = $('#tabQCSVO').datagrid('getRowIndex',row);//获取行号
var thisTarget = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GICName'}).target;
var value = thisTarget.combobox('getValue');
var text=thisTarget.combobox('getText');
if(value!=text){
var targetGIC = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GIC'}).target;
targetGIC.textbox('setValue',value);
$.ajax({
type: 'post',
async: false,
url: loadToken('../BaseData/GetGICById'),
data: {'type':2, 'Id': value},
success: function (result) {
if (result.state == 1) {
var targetBG = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'BGName'}).target;
targetBG.textbox('setValue',result.BG);
targetBG.textbox('disable');
var targetSBU = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'SBUName'}).target;
targetSBU.textbox('setValue',result.SBU);
targetSBU.textbox('disable');
var targetGICETC = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GICETC'}).target;
targetGICETC.textbox('setValue',result.GICETC);
targetGICETC.textbox('disable');
var targetWBSETC = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'GICWBS'}).target;
targetWBSETC.textbox('setValue',result.GICWBS);
targetWBSETC.textbox('disable');
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
}
}
}
}">GIC</th>
<th data-options="field:'BGName',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">BG</th>
<th data-options="field:'SBUName',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">GIC SU</th>
<th data-options="field:'ProjectName',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">CT</th>
<th data-options="field:'WBSLegal',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">WBS Legal</th>
<th data-options="field:'GICETC',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">ETC By GIC</th>
<th data-options="field:'GICWBS',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">ETC By WBS</th>
<th data-options="field:'InternalERM',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">Internal (ERM)</th>
<th data-options="field:'PO',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">PO</th>
<th data-options="field:'HuanuoGDC',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">Huanuo & GDC</th>
<th data-options="field:'CommissioningSpace',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">Commissioning Spare</th>
<th data-options="field:'CrossUsage',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">Cross usage</th>
<th data-options="field:'CN82JV',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">CN82 JV</th>
<th data-options="field:'HWSSVO',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">HWS SVO</th>
<th data-options="field:'CostAccrual',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">Cost Accrual</th>
<th data-options="field:'CDS',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">CDS</th>
<th data-options="field:'NCC',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">NCC</th>
<th data-options="field:'RC',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">RC</th>
<th data-options="field:'GCC',width:250,align:'center',editor:{type:'textbox',options:{required:true}}">GCC</th>
<th data-options="field:'Status',hidden:'true',editor:{type:'textbox'}"></th>
<th data-options="field:'StatusName',width:100,align:'center',
editor:{
type:'combobox',
options:{
valueField:'Value',
textField:'Text',
method:'get',
url:'GetStatus',
required:true,
onChange:function(data){
var row = $('#tabQCSVO').datagrid('getSelected');
var rowIndex = $('#tabQCSVO').datagrid('getRowIndex',row);//获取行号
var targetStatusName = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'StatusName'}).target;
var value=targetStatusName.combobox('getValue');
var text=targetStatusName.combobox('getText');
if(value!=text){
var targetStatus = $('#tabQCSVO').datagrid('getEditor', {'index':rowIndex,'field':'Status'}).target;
targetStatus.textbox('setValue',value);
}
}
}}">Status</th>
</tr>
</thead>
</table>
<div id="ToolPanel" style="height:auto">
<button id="btnAdd" class="btn btn-primary" onclick="append();">
<i class="glyphicon glyphicon-plus"></i> Add New
</button>
<button id="btnRemove" class="btn btn-primary" onclick="removeit();">
<i class="glyphicon glyphicon-remove"></i> Remove
</button>
<button id="btnSave" class="btn btn-primary" onclick="accept();">
<i class="glyphicon glyphicon-floppy-disk"></i> Save Data
</button>
<button id="btnReject" class="btn btn-primary" onclick="reject();">
<i class="glyphicon glyphicon-refresh"></i> Reset
</button>
<button id="btnDel" class="btn btn-primary" onclick="del();">
<i class="glyphicon glyphicon-remove-circle"></i> Delete Selected
</button>
<button id="btnUpload" class="btn btn-primary" onclick="ShowUpLoadFileWindow();">
<i class="glyphicon glyphicon-upload"></i> Upload
</button>
<button id="btnDownLoad" class="btn btn-primary" onclick="DownLoadTemplete();">
<i class="glyphicon glyphicon-download"></i> DownLoad
</button>
</div>
</div>
<div id="editSelectWBSQCWindow" class="easyui-window" title="window" data-options="modal:true,closed:true,iconCls:'icon-save',cls:'c8'" style="width:350px;height:600px;">
<div id="SearchPanelSelectQC" class="easyui-accordion SearchPanel" style="width:100%;" title="Click here to collapsible query conditions">
<div class="Condition" title=" Query Condition" data-options="iconCls:'icon-search'">
<form id="queryWBSQCForm" method="get" class="form-horizontal">
<div class="form-group">
<label class="col-md-1 control-label form-title-3">WBS/CareQC:</label>
<div class="col-md-2 form-input-3-m3">
<input type="text" name="WBSCareQC" class="form-control" />
</div>
<label class="col-md-1 control-label form-title-3"></label>
<div class="col-md-2 form-input-3">
<button id="btnQuery" type="button" class="btn btn-primary" onclick="initSelectWBSQC();">
<i class="glyphicon glyphicon-search"></i> Search
</button>
</div>
</div>
</form>
</div>
</div>
<div class="GridPanel">
<table id="tabSelectWBSQC" style="width:98%;min-height:100px;"
data-options="
striped:true,
fitConlumns:false,
checkOnSelect:false,
singleSelect:true,
selectOnCheck:false,
rownumbers:true,
fitColumn:false,
collapsible:true,
pagination:true,
nowrap:false,
emptyMsg:'Data is empty!',
method:'get'">
<thead data-options="frozen:true">
<tr>
<th data-options="field:'ok',align:'center',formatter:selectTaskLineFormatter" width="100">Oper</th>
<th data-options="field:'WBSCareQC',align:'center'" width="160">WBS/CareQC</th>
<th data-options="field:'ProjectName',align:'center'" width="150">CT</th>
<th data-options="field:'WBSLegal',align:'center'" width="100">WBS Legal</th>
</tr>
</thead>
</table>
</div>
</div>
<div id="UpLoadFileWindow" class="easyui-window" title="Modal Window" data-options="modal:true,maximizable:false,collapsible:false,resizable:false,closed:true,minimizable:false,iconCls:'icon-save',cls:'c8'" style="width:600px;height:180px;">
<form id="editForm" method="post" class="form-horizontal">
@Html.AntiForgeryToken()
<div class="form-group" style="margin:30px 0 10px 0">
<label class="col-md-1 control-label form-title-3"><font color="red">* </font>File:</label>
<div class="col-md-5">
<input id="upFile" name="upFile" class="form-control" style="height:100%;" type="file" />
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label"></label>
<div class="col-md-6">
<button type="button" class="btn btn-primary" onclick="SaveUploadFile();">
<i class="glyphicon glyphicon-ok-sign"></i> Upload File
</button>
</div>
</div>
</form>
</div>
<div id="errorWindow" class="easyui-window" title="Modal Window" data-options="modal:true,maximizable:false,collapsible:false,resizable:false,closed:true,minimizable:false,iconCls:'icon-save',cls:'c8'" style="width:750px;height:500px;">
<!--工具区域-->
<div id="ToolPanelErr" class="ToolPanel">
<button id="btnExport" class="btn btn-primary" onclick="exportErrExcel();">
<i class="glyphicon glyphicon-log-out"></i> Export to XLS
</button>
</div>
<table id="cusTableError" class="easyui-datagrid" style="width:100%;"
data-options="
striped:true,
fitConlumns:false,
checkOnSelect:false,
singleSelect:true,
selectOnCheck:false,
fitColumn:false,
collapsible:true,
nowrap:false,
emptyMsg:'Data is empty!',
method:'get'">
<thead>
<tr>
<th data-options="field:'Index',align:'center'" width="100">Line </th>
<th data-options="field:'WBSCareQC',align:'center'" width="200">WBSCareQC </th>
<th data-options="field:'GIC',align:'center'" width="150">GIC </th>
<th data-options="field:'ErrorDescription',align:'center'" width="300">ErrorDescription</th>
</tr>
</thead>
</table>
</div>
<script type="text/javascript" src="~/Scripts/jquery.form.js"></script>
<script>
var editIndex = undefined;
var $table = $('#tabQCSVO');
function onKeyDown() {
var ev = window.event;
if (ev.keyCode == 13) {
initTable();
}
}
$(function () {
initTable();
});
//数据初始化
function initTable() {
resizeTable();
$table.datagrid({
url: siteUrl + "/BaseData/SelectQCSVO?rdm=" + Math.random() + "&" + $("#queryForm").serialize()
});
}
function resizeTable() {
$table.datagrid('resize', { height: $(window).height() - $("#SearchPanel").height() - $("#ToolPanel").height() - 10 });
}
//初始化wbsqc的数据
function initSelectWBSQC() {
$("#tabSelectWBSQC").datagrid({
url: siteUrl + "/BaseData/GetWbSQC?rdm=" + Math.random() + "&" + $("#queryWBSQCForm").serialize()
});
}
//弹出选择WBSQC的框
function OpenSelectWBSQC(e) {
$('#editSelectWBSQCWindow').window({
title: 'Select',
refresh: true,
cache: false,
left: $(window).width() * 0.05,
width: $(window).width() * 0.6,
top: $(window).height() * 0.05,
height: $(window).height() * 0.9,
closed: false
});
initSelectWBSQC();
}
//wbsqc选中操作
function selectTaskLineFormatter(value, row, index) {
return "<button type='button' title='Modify information' class='btn btn-primary GridButton' onclick='selectWBSQCLine(" + JSON.stringify(row) + ");'> Select </button>";
}
//选中结果的数据
function selectWBSQCLine(row) {
var rowS = $('#tabQCSVO').datagrid('getSelected');
var rowIndex = $('#tabQCSVO').datagrid('getRowIndex', rowS);//获取行号
var targetWBSQC = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'WBSCareQC' }).target;
targetWBSQC.textbox('setValue', row.WBSID);
var targetWBSQCName = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'WBSCareQCName' }).target;
targetWBSQCName.textbox('setValue', row.WBSCareQC);
var targetCT = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'ProjectName' }).target;
targetCT.textbox('setValue', row.ProjectName);
targetCT.textbox('disable');
var targetCTID = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'ProjectID' }).target;
targetCTID.textbox('setValue', row.ProjectID);
targetCTID.textbox('disable');
var targetLegal = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'WBSLegal' }).target;
targetLegal.textbox('setValue', row.WBSLegal);
targetLegal.textbox('disable');
$('#editSelectWBSQCWindow').window('close');
}
//根据WBSQC获取对应的GIC
//新增一行数据
function append() {
if (endEditing()) {
$table.datagrid('appendRow', {});
editIndex = $table.datagrid('getRows').length - 1;
$table.datagrid('selectRow', editIndex)
.datagrid('beginEdit', editIndex);
}
}
//移除未保存的数据
function removeit() {
if (editIndex == undefined) { return }
$table.datagrid('cancelEdit', editIndex)
.datagrid('deleteRow', editIndex);
editIndex = undefined;
}
//保存数据
function accept() {
if (endEditing()) {
var rows = $table.datagrid('getChanges');
if (rows.length == 0) {
alertInfo("No data modification!");
return;
}
$.ajax({
type: "post",
url: loadToken("../BaseData/SaveQCSVO"),
data: { "rows": JSON.stringify(rows) },
success: function (result) {
initTable();
$table.datagrid('clearChecked');//清除所有选中行 by zgw 2019年5月16日14:49:41
// parent.SetPageClientState(false);
alertInfo(result.message);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alertError("Error[" + XMLHttpRequest.status + "]," + errorThrown + "。");
}
});
}
}
//删除数据
function del() {
if (endEditing()) {
var ids = getIdSelections();
if (ids == "") {
alertInfo("Please select Record!");
}
else {
if (confirm("Are you sure you want to delete?")) {
$.ajax({
type: "post",
url: loadToken("../BaseData/DelQCSVO?rdm=" + Math.random()),
data: { ids: ids },
success: function (result) {
if (result.state == 1) {
$table.datagrid("clearChecked");
$table.datagrid("clearSelections");
initTable();
alertInfo(result.message);
}
else {
alertWarning(result.message);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alertError("Error[" + XMLHttpRequest.status + "]," + errorThrown + "。");
}
});
}
}
} else {
alertInfo("please edit End");
}
}
//编辑结束
function endEditing() {
if (editIndex == undefined) { return true }
if ($table.datagrid('validateRow', editIndex)) {
//再次验证是否有重复的
var isRepeat = validRepeat();
if (!isRepeat) {
$table.datagrid('endEdit', editIndex);
editIndex = undefined;
return true;
}
else {
return false;
}
} else {
return false;
}
}
//编辑单元格
function onClickCell(index, field) {
if (editIndex != index) {
if (endEditing()) {
$table.datagrid('selectRow', index)
.datagrid('beginEdit', index);
var ed = $table.datagrid('getEditor', { index: index, field: field });
if (ed) {
($(ed.target).data('textbox') ? $(ed.target).textbox('textbox') : $(ed.target)).focus();
}
//设置以下单元格不能编辑
var targetBG = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'BGName' }).target;
targetBG.textbox('disable');
var targetSBU = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'SBUName' }).target;
targetSBU.textbox('disable');
var targetGICETC = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'GICETC' }).target;
targetGICETC.textbox('disable');
var targetWBSETC = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'GICWBS' }).target;
targetWBSETC.textbox('disable');
var targetCT = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'ProjectName' }).target;
targetCT.textbox('disable');
var targetLegal = $('#tabQCSVO').datagrid('getEditor', { 'index': index, 'field': 'WBSLegal' }).target;
targetLegal.textbox('disable');
//ChangeGICByWBS();
editIndex = index;
} else {
setTimeout(function () {
$table.datagrid('selectRow', editIndex);
}, 0);
}
}
}
function onEndEdit(index, row) {
}
//验证数据是否重复
function validRepeat() {
var isRepeat = false;
if (editIndex == undefined) { return true }
var rowSelect = $table.datagrid('getSelected');
var rowIndex = $('#tabQCSVO').datagrid('getRowIndex', rowSelect);//获取行号
var rowsId = "";
if (rowSelect != undefined) {
rowsId = rowSelect.QCSvOID;
}
var ed = $table.datagrid('getEditor', {
index: rowIndex,
field: 'StatusName'
});
var status = $(ed.target).combobox('getValue');
if (status == "") {
alertInfo("Status请选择一项");
return true;
}
var edQC = $table.datagrid('getEditor', {
index: rowIndex,
field: 'WBSCareQC'
});
var QCVal = $(edQC.target).textbox('getValue');
var targetGIC = $('#tabQCSVO').datagrid('getEditor', { 'index': rowIndex, 'field': 'GIC' }).target;
var GICVal = targetGIC.textbox('getValue');
$.ajax({
type: "post",
async: false,
url: loadToken("../BaseData/IsExistQCSVO"),
data: { "wbsQc": QCVal, "gic": GICVal, "rowId": rowsId },
success: function (result) {
if (result.state == 1) {
alertInfo(result.message);
$table.datagrid('selectRow', editIndex)
.datagrid('beginEdit', editIndex);
isRepeat = true;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alertError("Error[" + XMLHttpRequest.status + "]," + errorThrown + "。");
}
});
return isRepeat;
}
//获取选中id
function getIdSelections() {
var selRows = $table.datagrid('getChecked');
var ids = "";
$.each(selRows, function (n, row) {
ids += row.QCSvOID + ",";
});
return ids;
}
//编辑的数据初始化掉
function reject() {
$table.datagrid('rejectChanges');
$table.datagrid("clearChecked");
$table.datagrid("clearSelections");
editIndex = undefined;
}
//下载数据
function DownLoadTemplete() {
var fromT = "&fromType=QCSVO_Temple";
var ids = getIdSelections();
if (ids != "")
fromT += "&ids=" + ids;
if ($('#exportexcel').length <= 0)
$('body').append("<iframe id=\"exportexcel\" style=\"display:none\"></iframe>");
var url = siteUrl + "/BaseData/DownLoadTempleteQCSVO?rdm=" + Math.random() + fromT + "&" + $("#queryForm").serialize();
$('#exportexcel').attr('src', url);
}
function ShowUpLoadFileWindow() {
$("#upFile").val("");
$("#UpLoadFileWindow").window("open");
}
function SaveUploadFile() {
var fileName = $("#upFile").val();
if (fileName == "") {
return;
}
if (fileName.indexOf(".xls") == -1 || fileName.indexOf(".xlsx") == -1) {
alertInfo("Please upload data files in xls format!");
return;
}
$("#editForm").ajaxSubmit({
url: siteUrl + "/BaseData/ImportQCSVO?action_CallOfType=QCSVO_Temple",
type: "post",
success: function (result) {
if (result.state == 1) {
$("#upFile").val("");
initTable();
$table.datagrid("clearChecked");
$table.datagrid("clearSelections");
$('#UpLoadFileWindow').dialog('close');
alertInfo(result.message);
} else if (result.state == 2) {
$("#upFile").val("");
$('#UpLoadFileWindow').dialog('close');
$('#errorWindow').dialog('open');
$('#cusTableError').datagrid('resize', { height: 380 });
var msg = $.parseJSON(result.rows);
$('#cusTableError').datagrid("loadData", { rows: msg });
}
else {
alertWarning(result.message);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alertError("错误[" + XMLHttpRequest.status + "]," + errorThrown + "。");
}
});
}
</script>