').insertBefore(tradeVue.$el).get(0));
_tradeVues.splice(arrIndex, 0, vue);
}
//新增策略
function addTrades(trades) {
var datas = _.map(trades, trade => {
trade = _.transform(trade, (result, val, key) => {
key in result && (result[key] = val);
}, _.cloneDeep(pageVue.Trade));
if (trade.UnderlyingInstrumentType !== 'Stock' && trade.UnderlyingInstrumentType !== 'StockIndex') {
trade.StockEqvNotionalReal = pricingFormat.StockEqvNotional(trade.Notional * trade.SpotPrice);
trade.StockEqvNotional = trade.StockEqvNotionalReal;
}
else {
trade.StockEqvNotionalReal = trade.StockEqvNotional;
}
trade.SpotPrice = trade.UnderlyingPrice;
trade.NoRiskRate = null;
trade.DividendRate = 0;
trade.ParticipationRate = 1;
trade.AnnualizeFactor = 1;
if (pageVue.NumOfSmoothingDaysCfg === 'ONE' && pageVue.IsTradeVol) {
trade.NumOfSmoothingDays = 1;
}
tradeUtils.normalizeTrade(trade);
let viewState = _.cloneDeep(tradeFieldMgr.defaultData.viewState);
viewState.initFlag = 'import2';
return { trade: trade, viewState: viewState };
});
_index += 1;
var vue = createVue(_index, { datas: datas, structureType: pageVue.getStructureType() });
_tradeVues.unshift(vue);
}
//自由组合
function combine() {
var comVues = _.filter(_tradeVues, x => x.isSelected);
if (comVues.length < 2) {
return main.alert('请选择至少两项进行组合!');
}
var firstVue = comVues[0];
var datas = _.flatMap(comVues.map(x => x.datas));
if (pageVue.ClientUsedForCalc) {
var clientId = parseInt(datas[0].trade.ClientId);
if (!_.every(datas, x => parseInt(x.trade.ClientId) === clientId)) {
return main.alert('所选项客户必须一致!');
}
}
var vue = createVue(firstVue.index, { combining: true, datas: datas, fromLocal: true });
vue.$mount($('
').insertBefore(firstVue.$el).get(0));
var index = _.indexOf(_tradeVues, firstVue);
_tradeVues[index] = vue;
_.pullAll(_tradeVues, comVues);
comVues.forEach(x => x.remove());
}
//取消组合
function uncouple(tradeVue) {
if (!tradeVue || tradeVue.floating) {
throw '系统错误';
}
var arrIndex = _.indexOf(_tradeVues, tradeVue);
if (arrIndex < 0) {
throw '系统错误';
}
var index = _index += tradeVue.datas.length;
var map = _.map(tradeVue.datas, data => {
var vue = createVue(index--, { combining: true, datas: [data], fromLocal: true });
vue.$mount($('
').insertBefore(tradeVue.$el).get(0));
return vue;
});
var args = [arrIndex, 1].concat(map);
Array.prototype.splice.apply(_tradeVues, args);
tradeVue.remove();
}
//波动率类型变更
function changeVolType() {
_tradeVues.forEach(x => x.getVol());
}
//获取所有交易数据
function getTrades() {
return _.flatMap(_tradeVues.map(x => x.datas)).map(x => x.trade);
}
//录入交易
function saveTrades() {
tradeSaver.saveTrades(_tradeVues.filter(x => x.isSelected));
}
//录入组合交易
function saveGroupTrades() {
tradeSaver.saveGroupTrades(_tradeVues.filter(x => x.isSelected));
}
//定价计算
function calcPrice(tradeVues) {
!tradeVues && (tradeVues = _tradeVues);
if (!tradeVues.length) {
return main.alert("请至少录入一个交易");
}
var trades = _.flatMap(tradeVues, x => x.datas).map(x => x.trade);
//检查并转换数据
trades = tradeUtils.prepareTrades(trades, pageVue.getVolType(), false);
if (trades) {
let data = {
version: pageVue.CalcVersion,
trades: trades, calcMargin: topVue.calcMargin,
calcAutocallGreeks: topVue.calcAutocallGreeks
};
main.post("/pricing/ajaxCalcPrices", data).done(function (resp) {
//tradeVues转换为calcId为key的字典
var map = tradeVues.reduce((result, cur) => {
_.each(cur.datas, x => {
result[x.trade.CalcId] = cur;
});
return result;
}, {});
//设置计算结果
_.each(resp.obj, item => {
map[item.CalcId].setCalcResult(item);
});
});
}
}
//显示组合到期收益曲线图形
function showPayoffLineChart(tradeVues) {
var selectVues = _.filter(_tradeVues, x => x.isSelected);
!tradeVues && (tradeVues = selectVues);
if (!tradeVues.length) {
return main.alert("请至少录入一个交易");
}
var trades = _.flatMap(tradeVues, x => x.datas).map(x => x.trade);
//检查并转换数据
trades = tradeUtils.prepareTrades(trades, pageVue.getVolType(), false);
window.sessionStorage.removeItem("pricing_payoff_line");
if (trades) {
main.post("/pricing/GetTradesPayoffLine", { trades: trades }).done(function (resp) {
//resp.obj
window.sessionStorage.setItem("pricing_payoff_line", JSON.stringify(resp));
window.open("/Statics/html/PayoffChart.html");
});
}
}
//显示组合Pv曲线
function showPvChart(tradeVues) {
var selectVues = _.filter(_tradeVues, x => x.isSelected);
!tradeVues && (tradeVues = selectVues);
if (!tradeVues.length) {
return main.alert("请至少录入一个交易");
}
var trades = _.flatMap(tradeVues, x => x.datas).map(x => x.trade);
//检查并转换数据
trades = tradeUtils.prepareTrades(trades, pageVue.getVolType(), false);
window.sessionStorage.removeItem("pricing_pv_line");
if (trades) {
main.post("/pricing/GetTradesPvLine", { trades: trades }).done(function (resp) {
//resp.obj
window.sessionStorage.setItem("pricing_pv_line", JSON.stringify(resp));
window.open("/Statics/html/PvChart.html");
});
}
}
function showLifeLineChart(tradeVues) {
var selectVues = _.filter(_tradeVues, x => x.isSelected);
!tradeVues && (tradeVues = selectVues);
if (!tradeVues.length) {
return main.alert("请至少选择一笔交易");
}
var trades = _.flatMap(tradeVues, x => x.datas).map(x => x.trade);
//检查并转换数据
trades = tradeUtils.prepareTrades(trades, pageVue.getVolType(), false);
window.sessionStorage.removeItem("pricing_life_lines");
if (trades) {
main.post("/pricing/GetTradesLifePvLine", { trades: trades }).done(function (resp) {
//resp.obj
window.sessionStorage.setItem("pricing_life_lines", JSON.stringify(resp));
window.open("/Statics/html/PvLifeChart.html");
});
}
}
//显示Greeks变化曲线
function showGreeksChart(tradeVues) {
var selectVues = _.filter(_tradeVues, x => x.isSelected);
!tradeVues && (tradeVues = selectVues);
if (!tradeVues.length) {
return main.alert("请至少选择一笔交易");
}
var trades = _.flatMap(tradeVues, x => x.datas).map(x => x.trade);
//检查并转换数据
trades = tradeUtils.prepareTrades(trades, pageVue.getVolType(), false);
window.sessionStorage.removeItem("pricing_greeks_line");
if (trades) {
main.post("/pricing/GetTradesGreeksForLifetime", { trades: trades }).done(function (resp) {
//resp.obj
window.sessionStorage.setItem("pricing_greeks_line", JSON.stringify(resp));
window.open("/Statics/html/GreeksChart.html");
});
}
}
//打开历史回测页面
function openHistoricalBacktest(tradeVues) {
layer.open({
type: 2, title: "报价管理-历史回测工具", shadeClose: false, shade: 0.4,
area: ['1200px', '560px'], content: "/pricing/HistoricalBacktest?isLayer=true"
});
}
//设置观察数据
function setObservation(observationNum, observationUnit, observationHolidayType, observationDates, alignEnd, calcId, couponDayInterval) {
if (!calcId) return;
let _data = null, calcId2 = calcId.replace(/#.*$/, "");
_.each(_tradeVues, vue => {
return !(_data = _.find(vue.datas, data => data.trade.CalcId === calcId2));
});
_data && consVueTrade.methods.setObservation.apply(_data, arguments);
}
//对冲下单
function hedgingOrder() {
var comVues = _.filter(_tradeVues, x => x.isSelected);
if (comVues.length < 1) {
return main.alert('请至少选择一项!');
}
var datas = _.flatMap(comVues.map(x => x.datas));
var instType = datas[0].trade.UnderlyingInstrumentType;
if (!_.every(datas, x => x.trade.UnderlyingInstrumentType === instType)) {
return main.alert('所选项标的类型必须一致!');
}
var rd = _.reduce(datas, (acc, cur) => {
var code = cur.trade.UnderlyingCode;
var delta = acc[code];
acc[code] = (delta || 0) + (parseFloat(cur.calcResult.Delta) || 0);
return acc;
}, {});
var items = _.reduce(rd, (acc, value, key) => {
var index = acc.length / 2;
acc.push('');
acc.push('');
return acc;
}, []);
items.push('');
$('#orderForm').html(items.join("")).submit();
}
//浏览器本地数据缓存
const localData = (new function () {
if (pageVue.IsImport) {
this.save = $.noop;
this.load = $.noop;
return;
}
this.save = function () {
var vueDatas = _tradeVues.map(x => new Object({
index: x.index,
structureType: x.structureType,
datas: x.datas.map(data => new Object({ trade: data.trade, viewState: data.viewState }))
}));
var data = {
index: _index,
VolType: pageVue.getVolType(),
SysDate: pageVue.SysDate,
vueDatas: vueDatas,
time: new Date().getTime()
};
var json = JSON.stringify(data);
localStorage.setItem("pricing-structure-" + pageVue.UserId, json);
};
this.load = function () {
//设置默认值
var saveKey = "pricing-structure-" + pageVue.UserId;
var storage = localStorage.getItem(saveKey);
if (!storage) return;
var data = JSON.parse(storage);
if (pageVue.SysDate !== data.SysDate ||
new Date().getHours > 18 && new Date(data.time).getHours() < 18) {
//需要清空缓存
localStorage.removeItem(saveKey);
}
else {
_index = data.index;
pageVue.setVolType(data.VolType);
_.each(data.vueDatas, function (x) {
x.fromLocal = true;
var vue = createVue(x.index, x);
_tradeVues.push(vue);
});
}
};
}());
//持久化定价数据
$(window).on('beforeunload', localData.save);
$(localData.load);
return {
clear: clear,
remove: remove,
addTrade: addTrade,
copyItem: copyItem,
combine: combine,
changeVolType: changeVolType,
saveTrades: saveTrades,
saveGroupTrades: saveGroupTrades,
calcPrice: calcPrice,
showPayoffLineChart: showPayoffLineChart,
showPvChart: showPvChart,
showGreeksChart: showGreeksChart,
showLifeLineChart: showLifeLineChart,
openHistoricalBacktest: openHistoricalBacktest,
getTradeVues(onlySelected) {
return onlySelected ? _tradeVues.filter(x => x.isSelected) : _tradeVues;
},
getTradeVue(index) { return _tradeVues[index || 0]; },
saveLocalData: localData.save,
setOption: addTrades, //用于和老版兼容
setObservation: setObservation,
uncouple: uncouple,
hedgingOrder: hedgingOrder,
onMountd(vue) {
_tradeVues.length && $('#pricing-items').parent().floatingScroll();
},
swap(oldIndex, newIndex) {
if (oldIndex === newIndex) return;
let vue = _tradeVues[oldIndex];
_tradeVues.splice(oldIndex, 1);
_tradeVues.splice(newIndex, 0, vue);
},
//新增模板
addTemplate(tplItems) {
tplItems.forEach(x => {
x.datas.forEach(d => {
d.viewState = _.cloneDeep(tradeFieldMgr.defaultData.viewState);
d.viewState.initFlag = 'template';
});
_index += 1;
var vue = createVue(_index, x);
_tradeVues.unshift(vue);
});
}
};
}());
//浮窗定价组件
const floatVue = (function () {
var _tradeVue;
//关闭浮窗
function hide() {
if (_tradeVue) {
_tradeVue.remove();
_tradeVue = null;
}
$('#floatModal').modal('hide');
$(document.body).removeClass('has-float');
if (pageVue.IsImport) {
layer.closeMe();
}
}
//显示浮窗index, trade, viewState
function show(baseVue, forScreenshot) {
_tradeVue && _tradeVue.remove();
_tradeVue = createVue(baseVue.index, baseVue, true);
$(document.body).toggleClass('has-float', !forScreenshot);
$('#floatModal').modal('show');
}
function screenshot() {
screenshoter.execute(_tradeVue);
}
return {
show: show,
hide: hide,
calcPrice() {
_tradeVue && pricingVue.calcPrice([_tradeVue]);
},
saveTrade() {
_tradeVue && _tradeVue.saveTrade();
},
screenshot: screenshot,
getVue() { return _tradeVue; }
};
}());
//dom ready function
$(function () {
tradeSaver.init();
groupVue.init();
//解决上层popover不能编辑的问题
$('#floatModal').on('shown.bs.modal', function () {
$(document).off('focusin.modal');
});
$(".search-label").addClass("formlabel");
$(".formlabel").addClass("search-label");
var sortable = Sortable.create(document.getElementById('pricing-items'), {
handle: '.pricing-index-drag',
onEnd: function (evt) {
pricingVue.swap(evt.oldIndex, evt.newIndex);
},
});
if (pageVue.IsImport) {
let trade = _.cloneDeep(pageVue.Trade);
pricingVue.addTrade(trade);
setTimeout(function () {//交易详情页-定价增强价格不显示问题
if (trade.TradeType == "亚式期权" && trade.StrikeType != "Floating" && trade.PayoffType == 'EnhancedArithmeticAverage') {
$("#EnhancedPriceTitle").show();
}
}, 500);
}
//#OTC-2651
$('#floatModal>.modal-dialog>.modal-content>.modal-body').on('scroll',
_.debounce(function () { $(this).find('input.hasDatepicker').blur().datepicker('hide'); }, 500, { 'leading': true, 'trailing': false }));
});
//用于和老版兼容
window.vue = pricingVue;
//兼容定价计算页面观察日设置
var getObservationDatesSetting = pricingVue.setObservation;
//连离类型:障碍(Discrete),二元(MonitorType,美式)
//补偿类型:障碍(RebateType),二元(RebateType,美式)
//定价模板
var templateVue = (function () {
if (pageVue.IsImport) return;
var debounceSearch;
return new Vue({
el: '#modalTemplate',
data: {
saveMode: true,
saveData: {
name: '',
id: 0,
_override: true,
_CommonTemplate: false
},
listData: [],
searchText: ''
},
mounted() {
this.refreshList();
debounceSearch = _.debounce(this.searchInner, 500);
},
methods: {
showSave() {
let selVues = pricingVue.getTradeVues(true);
if (!selVues.length) {
return main.alert('请勾选要保存的定价数据');
}
this.saveMode = true;
this.saveData.name = '';
this.saveData.json = '';
$('#modalTemplate').modal('show');
},
showList() {
this.saveMode = false;
$('#modalTemplate').modal('show');
},
saveTemplate() {
let selVues = pricingVue.getTradeVues(true);
if (!selVues.length) {
return main.alert('没有可保存的定价数据');
}
let name = (this.saveData.name).trim();
if (!name) {
return main.alert('请填写模板名称');
}
let self = this;
let vueDatas = selVues.map(x => new Object({
structureType: x.structureType,
datas: x.datas.map(data => new Object({ trade: data.trade }))
}));
let dataJson = JSON.stringify(vueDatas);
main.post('/pricing/AjaxSaveTemplate/v2', { name, dataJson, _override: this.saveData._override, _CommonTemplate: this.saveData._CommonTemplate }).done(function () {
$('#modalTemplate').modal('hide');
self.refreshList();
self.searchInner();
});
},
removeTemplate(sysUserConfigId) {
let $item = $(event.target).closest('.yt-template-item');
if (!$item) {
return main.alert('系统错误,没有找到所选项');
}
let self = this;
let index = $item.prevAll().length;
let names = [$item.children('a').text()];
main.confirmPost('确认要删除所选项"' + names[0] + '"吗?', '/pricing/AjaxRemoveTemplate', { sysUserConfigId }).done(function () {
self.listData.splice(index, 1);
});
},
loadTemplate() {
let name = $(event.target).text();
let TemplateType = $(event.target).next().text();
function __do() {
pricingVue.clear(true);
main.post('/pricing/ajaxGetTemplate/v2', { name, TemplateType }).done(function (resp) {
let items = JSON.parse(resp.obj);
pricingVue.addTemplate(items);
$('#modalTemplate').modal('hide');
});
}
if (pricingVue.getTradeVues().length) {
main.confirm("加载自定义模板将清空页面现有交易,是否继续?", __do);
} else {
__do();
}
},
refreshList() {
let self = this;
this.searchText = '';
main.post('/pricing/AjaxGetTemplateList').done(function (resp) {
self.listData = resp.obj.map(x => new Object({ id: x.id, name: x.ConfigName, show: true, UserId: x.UserId, ConfigType: x.ConfigType }));
});
},
searchInner() {
console.log('searchInner');
let text = this.searchText ? this.searchText.toLowerCase() : '';
this.listData.forEach(x => {
x.show = !text || x.name.toLowerCase().indexOf(text) >= 0;
});
},
searchList(action) {
if (action === 'reset') {
debounceSearch.cancel();
this.searchText = '';
this.searchInner();
} else {
debounceSearch();
}
}
}
});
}());
const customNumberFormat = { precision: 6, negative: true, };
const customNumberPercentFormat = { precision: 6, negative: true, append: '%' };
var groupVue = new Vue({
el: '#modalGroupTradeSave',
data: {
viewState: pageVue.viewState,
...consVueTrade.data(),
trade: ylotc.trade,
options: ylotc.options,
structureTypes: pageObj.structureTypes,
PropertyMap: pageObj.PropertyMap,
},
computed: { ...consVueTrade.computed },
methods: {
...consVueTrade.methods,
closeModal: function () {
$('#modalGroupTradeSave').modal('hide');
$(".tag-context .tag-item").remove();
},
saveGroupTrade: function () {
if (!_trades) return;
_trades.forEach(x => {
x.AssetId = this.trade.AssetId;
x.AssetBookName = this.trade.AssetBookName;
x.TraderId = this.trade.TraderId;
x.TraderName = this.trade.TraderName;
x.TradeNumber = this.trade.TradeNumber;
x.SalesCommission = this.trade.salesCommission;
x.ClientId = this.trade.ClientId;
x.ClientName = this.trade.ClientName;
if (x.TradePremium) {
x.MetaDic["交易溢价"] = x.TradePremium;
}
x.MetaDic["交易场所"] = this.trade.TradingPlace;
x.MetaDic["清算机构"] = this.trade.ClearingAgency;
x.MetaDic["主协议编号"] = this.trade.MainProtocolCode;
x.MetaDic["补充协议编号"] = this.trade.SupProtocolCode;
x.MetaDic["中央对手方清算"] = $("#selIsCentralClearing").val();
x.MetaDic["中央清算平台"] = $("#selCentralClearingPaltform").val();
x.MetaDic["ExchangeRate"] = $("#selExchangeRate").val();
x.MetaDic["交易平台"] = $("#selTradingPaltform").val();
x.TradeType === '现金流交易' && tradeUtils.resetCashFlow(x);
});
this.trade.Tags = getSelectTags();
if (this.trade.StructureType == "气囊结构") {
this.trade.trade_airbag.KIParticipationRate = 1;
}
this.setExtendInfo();
main.post("/pricing/AjaxSaveGroupTrade", { trade: this.trade, subTrades: _trades }).done(function (resp) {
if (pageVue.IsImport) {
let url = "#/trade/tradeview?abstract=1&enid=" + resp.obj[0].EncryptId;
layer.closeMe(url);//必须以#开头
} else {
floatVue.hide();
$('#modalTradeSave').modal('hide');
_.each(_tradeVues, x => x.remove(true));
}
$(".tag-context .tag-item").remove();
});
},
addNewProperty: function () {
this.PropertyMap[this.trade.StructureType].push({ isNew: true, ColumnName: "", ColumnDefaultValue: "", ColumnType: 0 });//0:文本
},
deleteProperty: function (index) {
this.PropertyMap[this.trade.StructureType].splice(index, 1);
},
setExtendInfo: function () {
var propertyList = [];
this.PropertyMap[this.trade.StructureType].forEach((item, index) => {
var note = { name: item.name || item.ColumnName, value: PercentColumnText.displayText(item) };
if (note.name) {
propertyList.push(note);
}
});
this.trade.ExtendInfo = this.trade.StructureType == "气囊结构" ? null : JSON.stringify(propertyList);
return this.trade.ExtendInfo;
},
changeStrucTureType: function () {
if (groupVue.trade.TradeType == "气囊结构") {
groupVue.trade.trade_airbag.KIParticipationRate = 1;
}
else {
groupVue.trade.OptionType = null;
groupVue.trade.Strike = null;
}
},
changeBuySell: function () {
groupVue.trade.TradePrice *= -1;
groupVue.trade.TradeSinglePrice *= -1;
groupVue.trade.PremiumRate *= -1;
},
changeIsUsePremiumRate: function () {
if (groupVue.trade.IsUsePremiumRate) {
groupVue.changeStockEqvNotional();
}
else {
groupVue.changeTradeAmount();
}
},
changeStockEqvNotional: function () {
var notional = Math.abs(groupVue.trade.StockEqvNotional / groupVue.trade.SpotPrice);
groupVue.trade.Notional = pricingFormat.notional(notional);
groupVue.trade.TradeAmount = pricingFormat.notional(notional / groupVue.viewState.variety.CountRatio);
groupVue.trade.TradeSinglePrice = pricingFormat.tradeSinglePrice(groupVue.trade.TradePrice / groupVue.trade.Notional);
groupVue.trade.PremiumRate = pricingFormat.premiumRate(groupVue.trade.TradePrice / groupVue.trade.StockEqvNotional);
},
changeTradeAmount: function () {
var notional = groupVue.trade.TradeAmount * groupVue.viewState.variety.CountRatio;
groupVue.trade.Notional = pricingFormat.notional(notional);
groupVue.trade.StockEqvNotional = pricingFormat.stockEqvNotional(Math.abs(notional * groupVue.trade.SpotPrice));
groupVue.trade.TradeSinglePrice = pricingFormat.tradeSinglePrice(groupVue.trade.TradePrice / groupVue.trade.Notional);
groupVue.trade.PremiumRate = pricingFormat.premiumRate(groupVue.trade.TradePrice / groupVue.trade.StockEqvNotional);
},
init: function () {
_setAutocomplete('GroupAssetId', ylotc.assetunits, null, function (data) {
groupVue.trade.AssetId = data.id;
groupVue.trade.AssetBookName = data.Name;
});
var traders = $.grep(ylotc.traders, function (e) { return e.Name == pageVue.Trade.TraderName; });
let trader = pageVue.Trade.TraderId > 0 ? ylotc.traders.find(x => x.id === pageVue.Trade.TraderId) : null;
if (!trader) {
trader = { Name: "", id: 0 }
}
_setAutocomplete('GroupTraderId', ylotc.traders, { Name: trader.Name, id: trader.id }, function (data) {
groupVue.trade.TraderId = data.id;
groupVue.trade.TraderName = data.Name;
});
var groupClientInitData = null;
if (this.trade.ClientId > 0) {
groupClientInitData = { id: this.trade.ClientId, Name: "" };
var client = ylotc.clients.find(y => y.id === this.trade.ClientId);
groupClientInitData.Name = client.Name;
$("#selIsCentralClearing").val(client.IsCentralClearing);
$("#selCentralClearingPaltform").val(client.CentralClearingPaltform);
$("#selTradingPaltform").val(client.TradingPaltform);
}
_setAutocomplete('GroupClientId', ylotc.clients, groupClientInitData, function (data) {
pageVue.SecuritiesEnvironment ? _getMainProtocolCode : null;
groupVue.trade.ClientId = data.id;
groupVue.trade.ClientName = data.Name;
});
},
changeOption: function () {
this.PropertyMap[this.trade.StructureType].forEach(d => {
if (d.ColumnName != undefined) {
d.name = d.ColumnName;
}
if (d.ColumnDefaultValue != undefined) {
d.value = d.ColumnDefaultValue;
}
});
}
},
components: {
'vue-niceselect': FastVue.vueNiceSelect(),
'vue-client': vueClient(),
'vue-variety': vueVariety(),
'vue-margintemplatename': vueMarginTemplateName(),
'vue-tradetype': vueTradeType(),
'vue-underlying': vueUnderlying(),
'vue-datepicker': FastVue.vueDatePicker(),
'vue-number-input': FastVue.vueNumberInput(),
'vue-daycount': vueDayCount(),
},
});
var extendVue = new Vue({
el: "#tradeSave_ExtendInfo",
data: {
ExtendMap: pageObj.ExtendMap,
ExtendInfos: "",
},
methods: {
addNewProperty: function () {
var map = this.ExtendMap[this.ExtendInfos];
map.push({ isNew: true, ColumnName: "", ColumnDefaultValue: "", ColumnType: 0 });//0:文本
},
deleteProperty: function (index) {
var map = this.ExtendMap[this.ExtendInfos];
map.splice(index, 1);
},
changeOption: function (index) {
var map = this.ExtendMap[this.ExtendInfos];
map.forEach(d => {
if (d.ColumnName != undefined) {
d.name = d.ColumnName;
}
if (d.ColumnDefaultValue != undefined) {
d.value = d.ColumnDefaultValue;
}
});
},
setExtendInfo: function (trade) {
var propertyList = [];
var key = this.ExtendInfos;
if (key) {
var map = this.ExtendMap;
if (map[key]) {
map[key].forEach((item, index) => {
var note = { name: item.name || item.ColumnName, value: PercentColumnText.displayText(item) };
if (note.name) {
propertyList.push(note);
}
});
}
}
trade.ExtendInfo = propertyList.length === 0 ? null : JSON.stringify(propertyList);
if (trade.ExtendInfo) {
trade.MetaDic["自定义要素模板"] = key;
} else {
trade.MetaDic["自定义要素模板"] = "";
}
return trade.ExtendInfo;
},
},
components: {
'vue-datepicker': FastVue.vueDatePicker(),
'vue-number-input': FastVue.vueNumberInput(),
}
});
var extendVue2 = new Vue({
el: "#tradeSave_ExtendInfo2",
data: {
ExtendMap: pageObj.ExtendMap,
ExtendInfos: "",
},
methods: {
addNewProperty: function () {
var map = this.ExtendMap[this.ExtendInfos];
map.push({ isNew: true, ColumnName: "", ColumnDefaultValue: "", ColumnType: 0 });//0:文本
},
deleteProperty: function (index) {
var map = this.ExtendMap[this.ExtendInfos];
map.splice(index, 1);
},
changeOption: function (index) {
var map = this.ExtendMap[this.ExtendInfos];
map.forEach(d => {
if (d.ColumnName != undefined) {
d.name = d.ColumnName;
}
if (d.ColumnDefaultValue != undefined) {
d.value = d.ColumnDefaultValue;
}
});
},
setExtendInfo: function (trade) {
var propertyList = [];
var key = this.ExtendInfos;
if (key) {
var map = this.ExtendMap;
if (map[key]) {
map[key].forEach((item, index) => {
var note = { name: item.name || item.ColumnName, value: PercentColumnText.displayText(item) };
if (note.name) {
propertyList.push(note);
}
});
}
}
trade.ExtendInfo = propertyList.length === 0 ? null : JSON.stringify(propertyList);
if (trade.ExtendInfo) {
trade.MetaDic["自定义要素模板"] = key;
} else {
trade.MetaDic["自定义要素模板"] = "";
}
return trade.ExtendInfo;
},
},
components: {
'vue-datepicker': FastVue.vueDatePicker(),
'vue-number-input': FastVue.vueNumberInput(),
}
});