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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
});