320 lines
11 KiB
JavaScript
320 lines
11 KiB
JavaScript
//otcformat禁止千分位分组
|
|
window.otcformat.options.disableGrouping = true;
|
|
|
|
const consView = { ContractSize: 1 };
|
|
|
|
const consTraders = page.traderList;
|
|
const consAssetUnits = page.CanSelectTrader ? ylotc.assetunits : ylotc.assetunits.filter(x => x.TraderIds.includes(page.Trade.TraderId));
|
|
const consCommissionType = Object.freeze({ 不收取: 0, 系统计算: 1, 手动录入: 2 });
|
|
const consInstrumentTypes = tradeHelper.InstrumentTypes;
|
|
const amountNum = 0.01;
|
|
const lotAmountNum = 100;
|
|
var instTypes = [];
|
|
//标的信息管理
|
|
const leftPaneMgr = (new function () {
|
|
|
|
var _init = true, _autoVariety, _autoUnderlying, _autoExchangeOption;
|
|
|
|
const consUnFlag = tradeHelper.UnderlyingSelectFlag;
|
|
|
|
const consSelectFlag = consUnFlag.UseForTrading | consUnFlag.UsePinYinFilter | consUnFlag.IncludeMatured | consUnFlag.CheckLaunch;
|
|
|
|
//变更交易类型
|
|
function changeTradeType() {
|
|
|
|
instTypes = [];
|
|
let selectFlag = 0;
|
|
|
|
let tradeType = $('#TradeType').val();
|
|
|
|
switch (tradeType) {
|
|
case "商品期货":
|
|
instTypes = ['CommodityFutures', 'StockIF'];
|
|
selectFlag = consUnFlag.CommodityFutures | consUnFlag.StockIF;
|
|
break;
|
|
case "商品现货":
|
|
instTypes = ['CommoditySpot'];
|
|
selectFlag = consUnFlag.CommoditySpot;
|
|
break;
|
|
case "股票":
|
|
instTypes = ['Stock', 'StockIndex'];
|
|
selectFlag = consUnFlag.Stock | consUnFlag.StockIndex;
|
|
break;
|
|
case "信用债":
|
|
instTypes = ['CreditBonds'];
|
|
selectFlag = consUnFlag.CreditBonds;
|
|
break;
|
|
case "利率债":
|
|
instTypes = ['Bonds', 'TBonds'];
|
|
selectFlag = consUnFlag.Bonds | consUnFlag.TBonds;
|
|
break;
|
|
case "其它债券":
|
|
instTypes = ['OtherBonds'];
|
|
selectFlag = consUnFlag.OtherBonds;
|
|
break;
|
|
case "场内期权":
|
|
instTypes = ['CommodityFutures', 'CommoditySpot', 'Stock', 'StockIF', 'StockIndex'];
|
|
break;
|
|
}
|
|
|
|
//和场内期权相关的输入控件显示
|
|
$('.ExchangeOption').toggle(tradeType === '场内期权');
|
|
|
|
//重置标的过滤选项
|
|
_autoUnderlying.setFlag(consSelectFlag | selectFlag);
|
|
|
|
//重置品种过滤选项
|
|
let oldInstType = $('#InstrumentType').val();
|
|
let filters = consInstrumentTypes.filter(x => instTypes.includes(x.value));
|
|
let html = filters.map(x => '<option value="' + x.value + '">' + x.text + '</option>').join('');
|
|
$('#InstrumentType').html(html);
|
|
|
|
//非初始化时变更标的资产类型
|
|
if (!_init && instTypes[0] !== oldInstType) {
|
|
$('#InstrumentType').val(instTypes[0]);
|
|
changeInstrumentType();
|
|
}
|
|
}
|
|
|
|
//变更标的资产类型
|
|
function changeInstrumentType() {
|
|
let instType = $('#InstrumentType').val();
|
|
$('#form1').toggleClass("not-futures", instType !== 'CommodityFutures' && instType !== 'StockIF');
|
|
_autoUnderlying.clearCache();
|
|
_autoUnderlying.selectFirst({ InstrumentTypes: instTypes });
|
|
}
|
|
|
|
//变更标的品种
|
|
function changeVariety(yldata, flag) {
|
|
let data = yldata || {};
|
|
$('#TradeUnit').val(data.TradeUnit || '');
|
|
$('#QuoteUnit').val(data.QuoteUnit || '');
|
|
$('#QuoteUnit2').text(data.QuoteUnit || '');
|
|
_autoUnderlying.setVarietyId(data.id);
|
|
if (flag === 'select') {
|
|
_autoUnderlying.selectFirst({ VarietyId: data.id });
|
|
}
|
|
}
|
|
|
|
//初始化
|
|
this.init = function () {
|
|
|
|
//标的品种
|
|
_autoVariety = FastVue.autocomplete(document.getElementById('VarietyId'), {
|
|
nameField: 'Name', valueField: 'id', searchField: ['Name', 'Code', 'PinYin'],
|
|
lookup: ylotc.varieties,
|
|
onSelect: function (data) { changeVariety(data, 'select'); }
|
|
});
|
|
|
|
//场内期权
|
|
_autoExchangeOption = new tradeHelper.ExchangeOptionAutoComplete('OptionCode');
|
|
_autoExchangeOption.onSelect(function (data) {
|
|
consView.ContractSize = (data.ContractSize || 1) / (data.CountRatio || 1);
|
|
let tradeAmount = parseFloat($('#TradeAmount').val()) || 0;
|
|
if (!_init) {
|
|
$('#TradeLots').val((tradeAmount * lotAmountNum / consView.ContractSize).toFixed(2));
|
|
}
|
|
$('#MaturityDate').val(data.MaturityDate || '');
|
|
});
|
|
|
|
//标的资产
|
|
_autoUnderlying = tradeHelper.UnderlyingAutoComplete('UnderlyingCode');
|
|
_autoUnderlying.onSelect(function (data) {
|
|
consView.ContractSize = _init && page.ContractSize ? page.ContractSize : (data.ContractSize || 1) / (data.CountRatio || 1);
|
|
let tradeAmount = parseFloat($('#TradeAmount').val()) || 0;
|
|
if (!_init) {
|
|
$('#TradeLots').val((tradeAmount * lotAmountNum / consView.ContractSize).toFixed(2));
|
|
}
|
|
|
|
$('#MaturityDate').val(data.MaturityDate || '');
|
|
if ($('#TradeType').val() === '场内期权') {
|
|
_autoExchangeOption.setSelect(data.Code, true);
|
|
// (page.IsNew || !_init)
|
|
} else if (page.IsNew || !_init) {
|
|
$('#TradeSinglePrice').val(data.Price);
|
|
}
|
|
$('#InstrumentType').val(data.InstrumentType);
|
|
let va = data.VarietyId ? ylotc.varieties.find(x => x.id === data.VarietyId) : null;
|
|
_autoVariety.setData(va);
|
|
changeVariety(va, 'underlying');
|
|
|
|
_init = false;
|
|
});
|
|
|
|
//交易类型
|
|
$("#TradeType").val(page.Trade.TradeType);
|
|
$('#TradeType').on('change', changeTradeType);
|
|
changeTradeType();
|
|
|
|
//资产类型
|
|
$("#InstrumentType").val(page.Trade.InstrumentType);
|
|
$('#InstrumentType').on('change', changeInstrumentType);
|
|
|
|
//控件数据初始化
|
|
if (page.IsNew) {
|
|
_autoUnderlying.selectFirst({ InstrumentTypes: instTypes });
|
|
}
|
|
else {
|
|
_autoUnderlying.selectByCode(page.Trade.UnderlyingCode);
|
|
}
|
|
};
|
|
|
|
}());
|
|
|
|
//右边下拉选择项管理
|
|
const rightPaneMgr = (new function () {
|
|
|
|
var autoTrader, autoAssetUnit;
|
|
|
|
this.init = function () {
|
|
|
|
//交易员
|
|
if (page.CanSelectTrader) {
|
|
autoTrader = FastVue.autocomplete(document.getElementById('TraderId'), {
|
|
nameField: 'Name', valueField: 'id', searchField: ['Name', 'PinYin'], lookup: consTraders
|
|
});
|
|
let traderId = page.Trade.TraderId;
|
|
let trader = traderId ? consTraders.find(x => x.id === traderId) : null;
|
|
autoTrader.setData(trader);
|
|
}
|
|
|
|
//簿记账户
|
|
autoAssetUnit = FastVue.autocomplete(document.getElementById('AssetBookId'), {
|
|
nameField: 'Name', valueField: 'id', searchField: ['Name', 'PinYin'], lookup: consAssetUnits
|
|
});
|
|
let asset = page.IsNew ? consAssetUnits[0] : consAssetUnits.find(x => x.id === page.Trade.AssetBookId);
|
|
autoAssetUnit.setData(asset);
|
|
|
|
//交易方向+有效性
|
|
$("#TradeSide").val(page.Trade.TradeSide);
|
|
$("#IsValid").val(page.Trade.IsValid ? 'true' : 'false');
|
|
$("#ExchangeAccountId").val(page.Trade.ExchangeAccountId);
|
|
main.setTradeDatePicker("", "#TradeDate", null, null, false);
|
|
|
|
//成交手数
|
|
let lotsInput = FastVue.numberInput(document.getElementById('TradeLots'));
|
|
$('#TradeLots').on('change', function () {
|
|
let lots = lotsInput.getValue();
|
|
$('#TradeAmount').val((lots * amountNum * consView.ContractSize).toFixed(2));
|
|
});
|
|
|
|
//成交数量
|
|
let tradeAmountInput = FastVue.numberInput(document.getElementById('TradeAmount'));
|
|
$('#TradeAmount').on('change', function () {
|
|
let tradeAmount = tradeAmountInput.getValue();
|
|
$('#TradeLots').val((tradeAmount * lotAmountNum / consView.ContractSize).toFixed(2));
|
|
});
|
|
|
|
//成交价格
|
|
let priceInput = FastVue.numberInput(document.getElementById('TradeSinglePrice'), { precision: 6 });
|
|
|
|
//佣金计算
|
|
function changeCommissionType() {
|
|
let checked = $(this).prop('checked');
|
|
$('#Commission').toggle(checked);
|
|
$('#CommissionAuto').toggle(!checked);
|
|
$('#CommissionType').val(checked ? consCommissionType.手动录入 : consCommissionType.系统计算);
|
|
}
|
|
$('#CommissionTypeCheck').on('change', changeCommissionType);
|
|
changeCommissionType.call(document.getElementById('CommissionTypeCheck'));
|
|
let commissionInput = FastVue.numberInput(document.getElementById('Commission'));
|
|
};
|
|
|
|
//刷新成交价格
|
|
this.refreshPrice = function () {
|
|
if ($('#TradeType').val() === '场内期权') {
|
|
main.post("/pricing/AjaxGetExchangeOptionPrice", { optionCode: $('#OptionCode').val() }).done(function (resp) {
|
|
$("#TradeSinglePrice").val(resp.obj);
|
|
});
|
|
} else {
|
|
main.post("/pricing/AjaxGetUnderlyingPrice", { underlyingCode: $('#UnderlyingCode').val() }).done(function (resp) {
|
|
$("#TradeSinglePrice").val(resp.obj.price * lotAmountNum);
|
|
});
|
|
}
|
|
};
|
|
|
|
}());
|
|
|
|
//表单提交处理
|
|
const submitHandler = (new function () {
|
|
|
|
function checkDate(value) {
|
|
let date = new Date(value);
|
|
return date.valueOf();
|
|
}
|
|
|
|
function checkSubmitData(data) {
|
|
|
|
if (!data.UnderlyingCode) {
|
|
return "请设置标的信息";
|
|
}
|
|
|
|
if (!data.AssetBookId) {
|
|
return "请设置簿记账户";
|
|
}
|
|
|
|
if (!data.TradeDate) {
|
|
return '交易日期 必须填写';
|
|
}
|
|
|
|
if (!checkDate(data.TradeDate)) {
|
|
return '交易日期 填写错误';
|
|
}
|
|
|
|
//if (data.TradeDate > page.ValueDate) {
|
|
// return "交易日期不能是未来日期";
|
|
//}
|
|
|
|
if (!data.TradeSide) {
|
|
return '交易方向 必须填写';
|
|
}
|
|
|
|
let lots = parseFloat(data.TradeLots) || 0;
|
|
if (lots < 1e-5) {
|
|
return '交易手数 必须大于0';
|
|
}
|
|
|
|
let amount = parseFloat(data.TradeAmount) || 0;
|
|
if (amount < 1e-5) {
|
|
return '交易数量 必须大于0';
|
|
}
|
|
}
|
|
|
|
function savetrade() {
|
|
|
|
let data = Object.assign({}, page.Trade, $('#form1').serializeObject());
|
|
|
|
let error = checkSubmitData(data);
|
|
if (error) {
|
|
main.message(error);
|
|
return false;
|
|
}
|
|
|
|
$("#btn_save").prop('disabled', true);
|
|
|
|
main.post("/ExchangeTrade/AjaxSaveTradeEdit", data).done(function (resp) {
|
|
history.replaceState(null, '交易查看', '/ExchangeTrade/tradeView?reload=1&&enid=' + resp.obj.EncryptId);
|
|
window.location.reload();
|
|
}).always(function () {
|
|
$("#btn_save").prop('disabled', false);
|
|
});
|
|
};
|
|
|
|
this.init = function () {
|
|
$("#btn_save").on('click', savetrade);
|
|
};
|
|
|
|
}());
|
|
|
|
$(function () {
|
|
leftPaneMgr.init();
|
|
rightPaneMgr.init();
|
|
submitHandler.init();
|
|
});
|
|
|
|
//ESC
|
|
$(document).keyup(function (event) {
|
|
if (event.keyCode === 27) {
|
|
window.parent.layer.closeAll();
|
|
}
|
|
}); |