You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

539 lines
19 KiB

4 years ago
define(function (require, exports, module) {
let BaseBiz = require('apps/rht/base/rhtBiz');
let rhtComm = require('apps/rht/comm/rhtComm');
let service = require('./cls130101service');
let ClsDivide = require('./ClsDivide');
/**
* 控制按钮的可用
* @param opCode 按钮编码
* @return [description]
*/
function Biz(vm) {
//继承第一步,构造继承
BaseBiz.call(this, vm);
}
//继承第二步,方法继承
inherits(Biz, BaseBiz);
let orgType = rhtComm.GetOrgType(Store.logOn.orgCode);
Biz.prototype.initCompleted = function () {
this.super('initCompleted');
this.initTree();
this.selTreeNode = null;
this.isAddLast = false; // 是否在添加末级品类
this.isUsed = false; // 品类是否已经被使用(编辑时用)
// this.isDivide// 是否在将末级品类转化为非末级
// this.divideClsCode;// 被转为非末级的品类编号
this.addClsCodeLen = 0; // 添加时限制品类编码长度,由特殊选项计算得出
this.dsMaster.state = {
preclscode: ''
}
this.dsMaster.setServerBiz('cn.qdhezheng.rht.app.cls.cls130101.SavePlugin');
}
// 树组件
Biz.prototype.getTreeTitle = function () {
return '';
};
Biz.prototype.initTree = function() {
// 获取品类树
let clsTreeInfo = service.GetClsTree();
if (clsTreeInfo.result != 1) {
Store.messager.err(clsTreeInfo.message);
} else {
let treedata = [];
treedata.push({
id: '*',
pId: '',
clscode: '', // 品类编码
clsname: '', // 品类类型
name: '全部', // 节点显示信息
islast: '0', // 是否末级
isexplucode: '0', // 是否进行特征码管理
explutype: '00', // 特征码组成模式
isbz: '0', // 管理保质期
iscurrday: '0', // 日配商品
isseason: '0', // 季节性商品
cxprecision: '0', // 促销优惠精度
cxcalcutype: '0', // 促销价格计算方法
open: true // 是否展开
});
for (let i = 0; i < clsTreeInfo.data.length; i++) {
let row = clsTreeInfo.data[i];
if(row['pid'] == '-1') {
continue;
}
treedata.push({
id: row['id'],
pId: row['pid'],
clscode: row['clscode'], // 品类编码
clsname: row['clsname'], // 品类类型
name: row['clscode'] + '-' + row['clsname'], // 节点显示信息
islast: row['islast'], // 是否末级
isexplucode: row['isexplucode'], // 是否进行特征码管理
explutype: row['explutype'], // 特征码组成模式
isbz: row['isbz'], // 管理保质期
iscurrday: row['iscurrday'], // 日配商品
isseason: row['isseason'], // 季节性商品
cxprecision: row['cxprecision'], // 促销优惠精度
cxcalcutype: row['cxcalcutype'], // 促销价格计算方法
open: false // 是否展开
});
}
this.callView('setTreeData', treedata);
}
}
Biz.prototype.treeSelected = function(selectValue, selectColName, treeNode) {
this.dsMaster.state = {
preclscode: treeNode ? treeNode.clscode : ''
}
this.dsMaster.search();
this.selTreeNode = treeNode;
}
//控制主界面按钮状态
Biz.prototype.getOpEnabled = function (opCode) {
let isOk = this.super('getOpEnabled', opCode);
if (!isOk) return false;
let curRow = this.dsMaster.currentRow;
if (opCode == 'add') {
if(orgType != '1001')
return false;
}
if (opCode == 'edit') {
if(orgType != '1001')
return false;
if (!curRow)
return false;
}
if (opCode == 'delete') {
if(orgType != '1001')
return false;
if (!curRow)
return false;
}
if (opCode == 'tolast') {
if(orgType != '1001')
return false;
if(this.getState() == 'add' || this.getState() == 'edit')
return false;
if (!curRow)
return false;
if(TypeUtil.toString(curRow['IsLast']) == '1')
return false;
}
if (opCode == 'nolast') {
if(orgType != '1001')
return false;
if(this.getState() == 'add' || this.getState() == 'edit')
return false;
if (!curRow)
return false;
if(TypeUtil.toString(curRow['IsLast']) == '0')
return false;
}
return true;
};
//字段变化触发事件
Biz.prototype.fieldChanged = function (dataSrc, dr, dc) {
if (dataSrc.uiObjCode === this.dsMaster.uiObjCode) {
switch (dc.fieldName) {
case 'IsExPluCode':
this.fieldChangedIsExPluCode(dataSrc, dr, dc);
break;
case 'ClsType':
this.fieldChangedClsType(dataSrc, dr, dc);
break;
case 'SaleSeason':
this.fieldChangedSaleSeason(dataSrc, dr, dc);
break;
}
}
this.super('fieldChanged');
};
//主表字段变化执行事件
Biz.prototype.fieldChangedIsExPluCode = function (dataSrc, dr, dc) {
let isExPluCode = TypeUtil.toString(dr['IsExPluCode']);
if(isExPluCode == '0') {
dr.setColumnValue('ExPluType', '00');
}
return true;
};
Biz.prototype.fieldChangedClsType = function (dataSrc, dr, dc) {
let clsType = TypeUtil.toString(dr['ClsType']);
if(clsType == '02') {
dr.setColumnValue('IsSeason', '1');
dr.setColumnValue('SaleSeason', '1111');
}
return true;
};
Biz.prototype.fieldChangedSaleSeason = function (dataSrc, dr, dc) {
let saleSeason = TypeUtil.toString(dr['SaleSeason']);
let clsType = TypeUtil.toString(dr['ClsType']);
if(saleSeason == '' && clsType == '02') {
dr.setColumnError('SaleSeason', '季节性品类销售季节不能为空!');
}
return true;
};
//增加前执行
Biz.prototype.beforeAdd = function () {
if(!this.selTreeNode) {
Store.messager.err('请选择父节点');
return false;
}
if(this.selTreeNode.islast == '1') {
Store.messager.err('品类级别已是最末级,不允许增加!');
return false;
}
// 根据特殊选项判断是否末级
let nodeLevel = 0;
if (this.selTreeNode !== null){
nodeLevel = this.selTreeNode.level;
}
let ret = service.GetLevelCodeTotalLen(nodeLevel+1, '1');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data < 0) {
Store.messager.err('品类级别已是最末级,不允许增加!');
return false;
}
this.addClsCodeLen = ret.data;
return this.super('beforeAdd');
};
//增加后执行
Biz.prototype.afterAdd = function () {
let masterAdapter = this.view.vm['ep_dsMaster'];
// 根据特殊选项判断增加的是否是末级
let nodeLevel = 0;
if (this.selTreeNode !== null){
nodeLevel = this.selTreeNode.level;
}
let ret = service.GetLevelCodeTotalLen(nodeLevel+2, '1');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data < 0) {
this.dsMaster.currentRow.setColumnValue('IsLast', '1');
masterAdapter.setEditorEditable('IsLast', false);
masterAdapter.setEditorEditable('PluCount', true);
this.isAddLast = true;
}else {
masterAdapter.setEditorEditable('PluCount', true);
this.isAddLast = false;
}
this.dsMaster.currentRow.setColumnValue('ClsCode', this.selTreeNode.clscode);
this.dsMaster.currentRow.setColumnValue('IsExPluCode', this.selTreeNode.isexplucode);
this.dsMaster.currentRow.setColumnValue('ExPluType', this.selTreeNode.explutype);
this.dsMaster.currentRow.setColumnValue('IsBz', this.selTreeNode.isbz);
this.dsMaster.currentRow.setColumnValue('IsCurrDay', this.selTreeNode.iscurrday);
this.dsMaster.currentRow.setColumnValue('IsSeason', this.selTreeNode.isseason);
this.dsMaster.currentRow.setColumnValue('CxPrecision', this.selTreeNode.cxprecision);
this.dsMaster.currentRow.setColumnValue('CxCalcuType', this.selTreeNode.cxcalcutype);
return this.super('afterAdd');
};
//编辑前执行
Biz.prototype.beforeEdit = function () {
// 获取当前品类级别的编码长度
let nodeLevel = 0;
if (this.selTreeNode !== null){
nodeLevel = this.selTreeNode.level;
}
let ret = service.GetLevelCodeTotalLen(nodeLevel+1, '1');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data < 0) {
Store.messager.err('获取品类编码规则失败,请检查设置!');
return false;
}
this.addClsCodeLen = ret.data;
return this.super('beforeEdit');
};
//编辑后执行
Biz.prototype.afterEdit = function () {
let currentRow = this.dsMaster.currentRow;
let clsId = TypeUtil.toString(currentRow['ClsID']);
let clsCode = TypeUtil.toString(currentRow['ClsCode']);
let ret = service.ClsIsUsed(clsId, clsCode);
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
// 有下级品类或已经被商品使用,品类编码不可编辑
if(ret.data == 1) {
this.isUsed = true;
}else {
this.isUsed = false;
}
let masterAdapter = this.view.vm['ep_dsMaster'];
masterAdapter.setEditorEditable('ClsCode', !this.isUsed);
masterAdapter.setEditorEditable('IsLast', !this.isUsed);
// 根据特殊选项判断编辑的是否是末级
let nodeLevel = 0;
if (this.selTreeNode !== null){
nodeLevel = this.selTreeNode.level;
}
ret = service.GetLevelCodeTotalLen(nodeLevel+2, '1');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data < 0) {
this.dsMaster.currentRow.setColumnValue('IsLast', '1');
masterAdapter.setEditorEditable('PluCount', true);
this.isAddLast = true;
}else {
masterAdapter.setEditorEditable('PluCount', !this.isUsed);
this.isAddLast = false;
}
return this.super('afterEdit');
};
//保存前执行
Biz.prototype.beforeSave = function () {
let currentRow = this.dsMaster.currentRow;
let clsCode = TypeUtil.toString(currentRow['ClsCode']);
let clsName = TypeUtil.toString(currentRow['ClsName']);
let minMlRate = TypeUtil.toFloat(currentRow['MinMlRate']);
let maxMlRate = TypeUtil.toFloat(currentRow['MaxMlRate']);
let isLast = TypeUtil.toString(currentRow['IsLast']);
let self = this;
// 品类编号需要满足特殊选项设置的长度,前缀为父级品类的编号
let selClsCode = '';
if (this.selTreeNode !== null){
selClsCode = this.selTreeNode.clscode;
}
let pattern=eval('/^' + selClsCode + '[0-9a-zA-Z]{' + (this.addClsCodeLen-selClsCode.length) + '}$/');
if (!pattern.test(clsCode)) {
Store.messager.err('品类编号必须为数字或英文字母的组合,长度为' + this.addClsCodeLen + (selClsCode == '' ? '' : ',前缀为' + selClsCode));
return false;
}
pattern = /[+ -''*|=,{};]/;
if(pattern.test(clsName)) {
Store.messager.err('品类编号不能包含+ -\'\'*|=,{};等非法字符!');
return false;
}
if(minMlRate < 0 || minMlRate > 100) {
Store.messager.err('最小毛利率应在0到100之间');
return false;
}
if(maxMlRate < 0 || maxMlRate > 100) {
Store.messager.err('最大毛利率应在0到100之间');
return false;
}
if(minMlRate > maxMlRate) {
Store.messager.err('最大毛利率应大于等于最小毛利率!');
return false;
}
if(self.getState() == 'add') {
let retCls = service.ClsExists(clsCode, '');
if (retCls.result != 1) {
Store.messager.err(retCls.message);
return false;
}
if (retCls.data == 1) {
Store.messager.err('品类编号已存在!');
return false;
}
}
let ret = service.ClsExists('', clsName);
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if (ret.data == 1) {
if (!Store.confirm("品类名称已存在,要继续吗?")) {
return false;
}
}
if(self.getState() == 'add' && !this.isAddLast && isLast == '0') {
this.dsMaster.currentRow.setColumnValue('PluCount', 0);
}
let clsID = rhtComm.GetNextId("13001","1",Store.logOn.orgCode);
this.dsMaster.currentRow.setColumnValue('ClsID', clsID);
return this.super('beforeSave');
};
Biz.prototype.beforeDelete = function() {
let self = this;
let currentRow = self.dsMaster.currentRow;
let clsId = TypeUtil.toString(currentRow['ClsID']);
let clsCode = TypeUtil.toString(currentRow['ClsCode']);
let clsName = TypeUtil.toString(currentRow['ClsName']);
let ret = service.ClsIsUsed(clsId, '');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
// 有下级品类或已经被商品使用,不可删除
if(ret.data == 1) {
Store.messager.err(clsCode + '-' + clsName + ' 已经被商品使用,不能删除!');
return false;
}
if (!Store.confirm('将删除 ' + clsCode + '-' + clsName + ' 及其下属品类,确定吗?')) {
return false;
}
ret = service.DeleteCls(clsCode);
if (ret.result != 1) {
Store.messager.err('删除失败:' + ret.message);
return false;
}
this.initTree();
this.dsMaster.search();
//前面已经做处理返回false不真正删除数据
return false;
}
//按钮事件控制
Biz.prototype.doOp = function (opCode) {
let self = this;
if (opCode == 'tolast') {
let ds = self.dsMaster;
this.onTolast(self, ds);
}
if (opCode == 'nolast') {
let ds = self.dsMaster;
this.onNolast(self, ds);
}
};
Biz.prototype.onTolast = function (biz, ds) {
let currentRow=ds.currentRow;
let clsId = TypeUtil.toString(currentRow['ClsID']);
let clsCode = TypeUtil.toString(currentRow['ClsCode']);
let clsName = TypeUtil.toString(currentRow['ClsName']);
let ret = service.ClsIsUsed(clsId, '');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data == 0) {
Store.messager.err(clsCode + '-' + clsName + ' 未被使用,请直接进行品类信息修改。');
return false;
}
if (!Store.confirm('将当前品类转为末级将删除其所有下属品类,同时更新下属末级品类对应的商品品类信息。\n您确定要将 ' + clsCode + '-' + clsName + ' 转为末级吗?')) {
return false;
}
ret = service.ClsToLast(clsId);
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
this.initTree();
this.dsMaster.search();
}
Biz.prototype.onNolast = function (biz, ds) {
let self = this;
let currentRow=ds.currentRow;
let clsId = TypeUtil.toString(currentRow['ClsID']);
let clsCode = TypeUtil.toString(currentRow['ClsCode']);
let clsName = TypeUtil.toString(currentRow['ClsName']);
let ret = service.ClsIsUsed(clsId, '');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data == 0) {
Store.messager.err(clsCode + '-' + clsName + ' 未被使用,请直接进行品类信息修改。');
return false;
}
// 获取当前品类下一级的编码长度
let nodeLevel = 0;
if (this.selTreeNode !== null){
nodeLevel = this.selTreeNode.level;
}
ret = service.GetLevelCodeTotalLen(nodeLevel+2, '1');
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
if(ret.data < 0) {
Store.messager.err(clsCode + '-' + clsName + ' 已是最末级,不能转为非末级!');
return false;
}
let newClsCodeLen = ret.data;
if (!Store.confirm('将当前品类转为非末级需要细化其下属品类,同时更新当前品类对应的商品品类信息为细化的品类。\n您确定要将 ' + clsCode + '-' + clsName + ' 转为非末级吗?')) {
return false;
}
let clsDivide = new ClsDivide(this.dsMaster, newClsCodeLen, clsCode);
clsDivide.callback = function (clsData, clsInfo) {
ret = service.ClsDivide(clsId, clsData, clsInfo);
if (ret.result != 1) {
Store.messager.err(ret.message);
return false;
}
self.initTree();
self.dsMaster.search();
}
clsDivide.open();
}
Biz.prototype.stateChanged = function(newState, oldState) {
let self = this;
if (newState === 'browser' && oldState === 'add') {
self.initTree();
}
}
return Biz;
});