Files
tianrunCRM/Assets/trCRM/upgradeRes4Dev/priority/lua/ui/panel/TRPNewOrder.lua

594 lines
19 KiB
Lua
Raw Normal View History

2020-07-10 13:22:24 +08:00
---@type IDBasePanel
local TRBasePanel = require("ui.panel.TRBasePanel")
---@class TRPNewOrder:TRBasePanel 邮件列表
local TRPNewOrder = class("TRPNewOrder", TRBasePanel)
local uiobjs = {}
local stars = {}
-- 初始化,只会调用一次
function TRPNewOrder:init(csObj)
TRPNewOrder.super.init(self, csObj)
self:initFiledsAttr()
self:setEventDelegate()
MyUtl.setContentView(getChild(self.transform, "PanelContent"), 132, 0)
---@type UIScrollView
uiobjs.scrollView = getCC(self.transform, "PanelContent", "UIScrollView")
---@type UITable
uiobjs.Table = getCC(uiobjs.scrollView.transform, "Table", "UITable")
---@type CLUIFormRoot
uiobjs.DetailFromRoot = getCC(uiobjs.Table.transform, "DetailRoot", "CLUIFormRoot")
uiobjs.DetailRoot = getCC(uiobjs.Table.transform, "DetailRoot", "CLCellLua")
---@type UITable
uiobjs.DetailRootTabel = uiobjs.DetailRoot:GetComponent("UITable")
uiobjs.ExtendRoot = getCC(uiobjs.Table.transform, "ExtendRoot", "CLCellLua")
---@type CLUIFormRoot
uiobjs.ExtendFormRoot = uiobjs.ExtendRoot:GetComponent("CLUIFormRoot")
2020-07-14 22:04:03 +08:00
---@type UITable
uiobjs.StepRoot = getCC(uiobjs.Table.transform, "StepRoot", "UITable")
---@type CLUIFormRoot
uiobjs.StepFormRoot = uiobjs.StepRoot:GetComponent("CLUIFormRoot")
---@type UIPopupList
uiobjs.InputNextLogino = getCC(uiobjs.StepRoot.transform, "InputNextLogino", "UIPopupList")
uiobjs.gridProjects = getCC(uiobjs.Table.transform, "InputSelectProduct/Products", "UIGrid")
uiobjs.gridProjectsPrefab = getChild(uiobjs.gridProjects.transform, "00000").gameObject
2020-07-10 13:22:24 +08:00
-- uiobjs.elements = uiobjs.DetailRoot.gameObject:GetComponentsInChildren(typeof(CLUIElement), true)
uiobjs.ButtonSave = getChild(self.transform, "Top/ButtonSave")
end
function TRPNewOrder:initFiledsAttr()
---@type _ParamFieldAttr
local attr
self.baseFiledsAttr = {}
attr = {}
attr.attrName = "工单模板"
2020-07-14 22:04:03 +08:00
attr.id = "templetId"
2020-07-10 13:22:24 +08:00
attr.attrType = DBCust.FieldType.popuplist
attr.ifMust = 1
attr.donotJoinKey = true
2020-07-14 22:04:03 +08:00
local popInfor = DBOrder.getPopupList(DBOrder.PopListGroup.templateList)
attr.popOptions = popInfor.options
attr.popValues = popInfor.values
2020-07-10 13:22:24 +08:00
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "工单名称"
2020-07-14 22:04:03 +08:00
attr.id = "title"
2020-07-10 13:22:24 +08:00
attr.attrType = DBCust.FieldType.text
attr.ifMust = 1
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "紧急程序"
2020-07-14 22:04:03 +08:00
attr.id = "urgency"
2020-07-10 13:22:24 +08:00
attr.attrType = DBCust.FieldType.popuplist
attr.ifMust = 0
attr.donotJoinKey = true
2020-07-14 22:04:03 +08:00
local popInfor = DBOrder.getPopupList(DBOrder.PopListGroup.urgencyLevels) or {}
attr.popOptions = popInfor.options
attr.popValues = popInfor.values
2020-07-10 13:22:24 +08:00
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "客户号码"
2020-07-15 20:53:37 +08:00
attr.id = "_phoneNo"
2020-07-10 13:22:24 +08:00
attr.attrType = DBCust.FieldType.text
attr.ifMust = 1
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "所属任务"
attr.id = "taskId"
attr.attrType = DBCust.FieldType.popuplist
attr.ifMust = 0
attr.donotJoinKey = true
local popInfor = DBCust.getFilter4Popup(DBCust.FilterGroup.taskList)
attr.popOptions = popInfor.options
attr.popValues = popInfor.values
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "客户名称"
attr.id = "custName"
attr.attrType = DBCust.FieldType.text
attr.ifMust = 0
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "公司名称"
attr.id = "companyName"
attr.attrType = DBCust.FieldType.text
attr.ifMust = 0
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "联系地址"
attr.id = "address"
attr.attrType = DBCust.FieldType.text
attr.ifMust = 0
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
attr = {}
attr.attrName = "订单内容"
2020-07-14 22:04:03 +08:00
attr.id = "content"
2020-07-10 13:22:24 +08:00
attr.attrType = DBCust.FieldType.multext
attr.ifMust = 0
attr.donotJoinKey = true
table.insert(self.baseFiledsAttr, attr)
end
-- 设置数据
---@param paras _ParamTRPNewOrder
function TRPNewOrder:setData(paras)
if paras and paras.orderId and paras.orderId > 0 then
self.isNewOrder = false
self.mdata = paras
2020-07-15 20:53:37 +08:00
self.mdata._phoneNo = MyUtl.hidePhone(self.mdata.phoneNo)
2020-07-11 20:53:21 +08:00
2020-07-14 22:04:03 +08:00
if type(self.mdata.attrJson) == "string" then
self.mdata.attrJson = json.decode(self.mdata.attrJson)
2020-07-11 20:53:21 +08:00
end
2020-07-14 22:04:03 +08:00
self.mdata.attrJson = self.mdata.attrJson or {}
---@type _DBCust
2020-07-11 20:53:21 +08:00
self.cust = nil
2020-07-10 13:22:24 +08:00
else
--//TODO:初始值
self.isNewOrder = true
2020-07-14 22:04:03 +08:00
---@type _DBCust
2020-07-11 20:53:21 +08:00
self.cust = paras
self.mdata = {}
2020-07-14 22:04:03 +08:00
local popInfor = DBOrder.getPopupList(DBOrder.PopListGroup.templateList)
self.mdata.templetId = popInfor.values[0]
popInfor = DBOrder.getPopupList(DBOrder.PopListGroup.urgencyLevels)
self.mdata.urgency = popInfor.values[0]
local templateInfor = DBOrder.getTemplateInfor(self.mdata.templetId)
self.mdata.content = templateInfor.content
self.selectedProducts = {}
2020-07-10 13:22:24 +08:00
end
end
---public 当有通用背板显示时的回调
---@param cs Coolape.CLPanelLua
function TRPNewOrder:onShowFrame(cs)
if cs.frameObj then
---@type _BGFrame1Param
local d = {}
if self.isNewOrder then
d.title = "新建订单"
else
d.title = "修改订单"
end
d.panel = cs
cs.frameObj:init(d)
end
end
-- 显示在c#中。show为调用refreshshow和refresh的区别在于当页面已经显示了的情况当页面再次出现在最上层时只会调用refresh
function TRPNewOrder:show()
self:refreshContent()
SetActive(uiobjs.ButtonSave.gameObject, self.isNewOrder)
uiobjs.scrollView:ResetPosition()
end
function TRPNewOrder:refreshContent()
self:showBaseFields()
2020-07-14 22:04:03 +08:00
self:showProducts()
local templetId = self.mdata and self.mdata.templetId or nil
self:showExtentFiles(templetId)
2020-07-10 13:22:24 +08:00
self.csSelf:invoke4Lua(self:wrapFunc(self.reposition), 0.1)
end
2020-07-14 22:04:03 +08:00
function TRPNewOrder:showProducts()
local products
if self.isNewOrder then
products = self.selectedProducts
else
products = json.decode(self.mdata.prodJson)
end
CLUIUtl.resetList4Lua(uiobjs.gridProjects, uiobjs.gridProjectsPrefab, products, self:wrapFunc(self.initProductCell))
self:reposition()
end
function TRPNewOrder:initProductCell(cell, data)
cell:init(data, nil)
cell.luaTable.onDeleteProduct = self:wrapFunc(self.onDeleteProduct)
end
function TRPNewOrder:onDeleteProduct(data)
for i, v in ipairs(self.selectedProducts) do
if v.id == data.id then
table.remove(self.selectedProducts, i)
break
end
end
self:showProducts()
end
2020-07-10 13:22:24 +08:00
function TRPNewOrder:showBaseFields()
---@type _ParamCellExtendFiledRoot
local param = {}
param.data = self.mdata or {}
2020-07-11 20:53:21 +08:00
param.onFinish = function(go)
if self.cust then
uiobjs.DetailFromRoot:setValue(self.cust, true)
end
self:setExtendFieldsMode(go)
end
2020-07-10 13:22:24 +08:00
param.fields = {}
---@type _ParamCellExtendFiled
local filedInfor
for i, v in ipairs(self.baseFiledsAttr) do
-- 工单模板
filedInfor = {}
filedInfor.attr = v
filedInfor.isEditMode = true
if filedInfor.attr.attrType == DBCust.FieldType.multext then
filedInfor.onMultTextInputChg = self:wrapFunc(self.reposition)
end
2020-07-14 22:04:03 +08:00
filedInfor.onSelect = self:wrapFunc(self.onPopupFieldValChg)
2020-07-10 13:22:24 +08:00
if not self.isNewOrder then
2020-07-10 22:33:30 +08:00
filedInfor.onClick = self:wrapFunc(self.onClickInputField)
2020-07-10 13:22:24 +08:00
end
table.insert(param.fields, filedInfor)
end
uiobjs.DetailRoot:init(param, nil)
end
---public 显示扩展字段
2020-07-14 22:04:03 +08:00
function TRPNewOrder:showExtentFiles(templetId)
local cfgInfor = DBOrder.getTemplateInfor(templetId)
local fields = DBOrder.getFields(templetId) or {}
if #fields > 0 then
---@type _ParamCellExtendFiledRoot
local param = {}
param.data = self.mdata and self.mdata.attrJson or {}
-- param.isEditMode = true
param.onFinish = self:wrapFunc(self.setExtendFieldsMode)
param.fields = {}
---@type _ParamCellExtendFiled
local filedInfor
for i, v in ipairs(fields) do
filedInfor = {}
filedInfor.attr = v
filedInfor.isEditMode = true
if filedInfor.attr.attrType == DBCust.FieldType.multext then
filedInfor.onMultTextInputChg = self:wrapFunc(self.reposition)
end
if not self.isNewOrder then
filedInfor.onClick = self:wrapFunc(self.onClickInputField4Extend)
filedInfor.onSelect = self:wrapFunc(self.onPopupFieldValChg4Extend)
end
table.insert(param.fields, filedInfor)
2020-07-10 13:22:24 +08:00
end
2020-07-14 22:04:03 +08:00
SetActive(uiobjs.ExtendRoot.gameObject, true)
uiobjs.ExtendRoot:init(param, nil)
else
SetActive(uiobjs.ExtendRoot.gameObject, false)
end
-- next Step
local nextStep = DBOrder.getNextHandler(templetId)
if nextStep and tonumber(cfgInfor.ifToLoginNo) == 1 then
SetActive(uiobjs.StepFormRoot.gameObject, true)
uiobjs.InputNextLogino:refreshItems(nextStep.options, nextStep.values)
uiobjs.StepFormRoot:setValue(self.mdata)
else
SetActive(uiobjs.StepFormRoot.gameObject, false)
2020-07-10 13:22:24 +08:00
end
2020-07-14 22:04:03 +08:00
-- product
if tonumber(cfgInfor.ifProduct) == 1 then
SetActive(uiobjs.gridProjects.transform.parent.gameObject, true)
self.selectedProducts = {}
self:showProducts()
else
SetActive(uiobjs.gridProjects.transform.parent.gameObject, false)
end
-- refresh content
local d = uiobjs.DetailFromRoot:getValue(true)
d.content = cfgInfor.content
uiobjs.DetailFromRoot:setValue(d)
-------
uiobjs.StepRoot:Reposition()
2020-07-10 13:22:24 +08:00
end
function TRPNewOrder:reposition()
uiobjs.DetailRootTabel.repositionNow = true
uiobjs.Table.repositionNow = true
end
2020-07-10 22:33:30 +08:00
function TRPNewOrder:setExtendFieldsMode(root)
local elements = root:GetComponentsInChildren(typeof(CLUIElement), true)
2020-07-10 13:22:24 +08:00
for i = 0, elements.Length - 1 do
self:setElementMode(elements[i])
end
self:reposition()
end
function TRPNewOrder:setElementMode(el)
local isPopList = el:GetComponent("UIPopupList")
local isPopCheckbox = el:GetComponent("CLUICheckbox")
---@type UIInput
local input = el:GetComponent("UIInput")
local inputOnGUI = el:GetComponent("UIInputOnGUI")
local boxcollider = el:GetComponent("BoxCollider")
local ButtonReset = getCC(el.transform, "ButtonReset", "MyInputReset")
2020-07-15 20:53:37 +08:00
if ButtonReset then
ButtonReset.disabled = (not self.isNewOrder)
end
2020-07-15 23:35:13 +08:00
if el.jsonKey == "taskId" or el.jsonKey == "_phoneNo" then
2020-07-10 13:22:24 +08:00
boxcollider.enabled = false
2020-07-15 20:53:37 +08:00
if ButtonReset then
ButtonReset.disabled = true
end
2020-07-10 13:22:24 +08:00
else
boxcollider.enabled = true
end
if input then
if isPopList or isPopCheckbox then
input.enabled = false
if inputOnGUI then
inputOnGUI.enabled = false
end
else
if self.isNewOrder then
input.enabled = true
if inputOnGUI then
inputOnGUI.enabled = true
end
else
input.enabled = false
if inputOnGUI then
inputOnGUI.enabled = false
end
end
end
end
end
-- 刷新
function TRPNewOrder:refresh()
end
-- 关闭页面
function TRPNewOrder:hide()
2020-07-10 22:33:30 +08:00
if uiobjs.DetailRoot.luaTable then
uiobjs.DetailRoot.luaTable.release()
end
2020-07-10 13:22:24 +08:00
if uiobjs.ExtendRoot.luaTable then
uiobjs.ExtendRoot.luaTable.release()
end
end
-- 网络请求的回调cmd指命succ成功失败msg消息paras服务器下行数据
function TRPNewOrder:procNetwork(cmd, succ, msg, paras)
if (succ == NetSuccess) then
if cmd == NetProto.cmds.update_customer then
self:refreshContent()
end
end
end
function TRPNewOrder:onPopupFieldValChg(go)
---@type CLUIElement
local el = go:GetComponent("CLUIElement")
2020-07-14 22:04:03 +08:00
if self.isNewOrder then
if el and el.jsonKey == "templetId" then
self:showExtentFiles(el.value)
end
else
if el then
local err = el:checkValid()
if tostring(el.value) ~= tostring(self.mdata[el.jsonKey]) then
if isNilOrEmpty(err) then
self:sendModifymsg(el.jsonKey, el.value, false)
else
MyUtl.toastW(err)
end
2020-07-10 13:22:24 +08:00
end
end
end
end
function TRPNewOrder:onClickInputField(go)
if self.isNewOrder then
return
end
---@type CLUIElement
local el = go:GetComponent("CLUIElement")
if el then
getPanelAsy(
"PanelModifyFiled",
onLoadedPanelTT,
{
label = el.labeName.text,
key = el.jsonKey,
value = el.value,
canNull = el.canNull,
callback = self:wrapFunc(self.onFinishSetField)
}
)
end
end
function TRPNewOrder:onFinishSetField(key, val)
if tostring(val) ~= tostring(self.mdata[key]) then
self:sendModifymsg(key, val, false)
end
end
function TRPNewOrder:sendModifymsg(key, val, isExtend)
local content = {}
content.id = self.mdata.custId
if isExtend then
content.jsonStr = {[key] = val}
else
content[key] = val
end
showHotWheel()
NetProto.send.update_customer(
content,
function(result, orgs)
hideHotWheel()
if result.success then
-- 更新本地数据
if isExtend then
self.mdata.jsonStr[key] = val
else
self.mdata[key] = val
end
MyUtl.toastS("修改成功")
end
end
)
end
function TRPNewOrder:onPopupFieldValChg4Extend(go)
if self.isNewOrder then
return
end
---@type CLUIElement
local el = go:GetComponent("CLUIElement")
if el then
local err = el:checkValid()
if (not isNilOrEmpty(el.value)) and tostring(el.value) ~= tostring(self.mdata.jsonStr[el.jsonKey]) then
if isNilOrEmpty(err) then
-- 有修改,发送数据
self:sendModifymsg(el.jsonKey, el.value, true)
else
MyUtl.toastW(err)
end
end
end
end
function TRPNewOrder:onClickInputField4Extend(go)
if self.isNewOrder then
return
end
---@type CLUIElement
local el = go:GetComponent("CLUIElement")
if el then
getPanelAsy(
"PanelModifyFiled",
onLoadedPanelTT,
{
label = el.labeName.text,
key = el.jsonKey,
value = el.value,
canNull = el.canNull,
callback = self:wrapFunc(self.onFinishSetField4Extend)
}
)
end
end
function TRPNewOrder:onFinishSetField4Extend(key, val)
if tostring(val) ~= tostring(self.mdata.jsonStr[key]) then
self:sendModifymsg(key, val, true)
end
end
function TRPNewOrder:setEventDelegate()
self.EventDelegate = {
ButtonSave = function()
2020-07-14 22:04:03 +08:00
local err = uiobjs.DetailFromRoot:checkValid()
2020-07-10 13:22:24 +08:00
err = joinStr(err, uiobjs.ExtendFormRoot:checkValid())
if not isNilOrEmpty(err) then
MyUtl.toastW(err)
return
end
2020-07-14 22:04:03 +08:00
local order = uiobjs.DetailFromRoot:getValue(true)
2020-07-15 20:53:37 +08:00
if self.cust then
order.phoneNo = self.cust.phoneNo
end
2020-07-14 22:04:03 +08:00
order.custId = self.cust.custId
2020-07-15 20:53:37 +08:00
if uiobjs.ExtendFormRoot.gameObject.activeInHierarchy then
local attrJson = uiobjs.ExtendFormRoot:getValue(true)
order.attrJson = attrJson
end
2020-07-14 22:04:03 +08:00
if uiobjs.StepFormRoot.gameObject.activeInHierarchy then
order = uiobjs.StepFormRoot:getValue(order, true)
end
local templateInfor = DBOrder.getTemplateInfor(order.templetId)
order.ifToLoginNo = templateInfor.ifToLoginNo
order.ifMail = templateInfor.ifMail
order.ifProduct = templateInfor.ifProduct
if uiobjs.gridProjects.gameObject.activeInHierarchy then
if self.selectedProducts == nil or #(self.selectedProducts) <= 0 then
MyUtl.toastW("请添加产品")
return
end
order.prodJson = self.selectedProducts
-- 计算价格
for i, v in ipairs(order.prodJson) do
v.totalPrice = tonumber(v.productNum) * tonumber(v.price)
v.salePrice = tonumber(v.productNum) * tonumber(v.productPrice)
end
end
order.wfType = "0" -- 0正常工单1退货工单
2020-07-10 13:22:24 +08:00
showHotWheel()
2020-07-14 22:04:03 +08:00
NetProto.send.createWfInfo(
order,
2020-07-10 13:22:24 +08:00
function(content)
if content.success then
2020-07-14 22:04:03 +08:00
MyUtl.toastS("订单创建成功")
hideTopPanel(self.csSelf)
2020-07-10 13:22:24 +08:00
end
hideHotWheel()
end
)
end,
2020-07-14 22:04:03 +08:00
InputSeachKey = function()
local queryKey = uiobjs.InputSeachKey.value
NetProto.send.selectProductInfo(queryKey, 1)
end,
2020-07-11 22:55:23 +08:00
InputSelectProduct = function()
2020-07-14 22:04:03 +08:00
-- 选择商品
getPanelAsy(
"PanelSelectProduct",
onLoadedPanelTT,
{selectedProducts = self.selectedProducts, callback = self:wrapFunc(self.onGetSelectedProducts)}
)
end,
InputAttachment = function()
-- 添加附件
2020-07-10 13:22:24 +08:00
end
}
end
2020-07-14 22:04:03 +08:00
function TRPNewOrder:onGetSelectedProducts(list)
self.selectedProducts = list
self:showProducts()
end
2020-07-10 13:22:24 +08:00
-- 处理ui上的事件例如点击等
function TRPNewOrder:uiEventDelegate(go)
local func = self.EventDelegate[go.name]
if func then
func()
end
end
-- 当顶层页面发生变化时回调
function TRPNewOrder:onTopPanelChange(topPanel)
end
--------------------------------------------
return TRPNewOrder