From 54c3653197ae1aed5709bf78d3f8e2b744042e8d Mon Sep 17 00:00:00 2001 From: zchengo <1933757688@qq.com> Date: Fri, 3 Feb 2023 19:55:45 +0800 Subject: [PATCH] perf: filter by condition --- server/dao/contract.go | 33 +++--- server/dao/customer.go | 8 +- server/models/contract.go | 1 + server/models/customer.go | 13 ++- web/src/views/Contract.vue | 99 ++++++++++++---- web/src/views/Customer.vue | 225 ++++++++++++++++++++++++++++--------- web/src/views/Product.vue | 63 +++++++---- 7 files changed, 321 insertions(+), 121 deletions(-) diff --git a/server/dao/contract.go b/server/dao/contract.go index b7caf30..aa7b96d 100644 --- a/server/dao/contract.go +++ b/server/dao/contract.go @@ -52,23 +52,30 @@ func (c *ContractDao) Delete(param *models.ContractDeleteParam) error { func (c *ContractDao) GetList(param *models.ContractQueryParam) ([]*models.ContractList, int64, error) { contractList := make([]*models.ContractList, 0) - s := "contract.id, contract.name, contract.amount, contract.begin_time, contract.over_time, customer.name as cname, contract.remarks, contract.status, contract.created, contract.updated" - j := "inner join customer on contract.cid = customer.id and contract.creator = ?" + field := "contract.id, contract.name, contract.amount, contract.begin_time, contract.over_time, customer.name as cname, contract.remarks, contract.status, contract.created, contract.updated" + where := "inner join customer on contract.cid = customer.id and contract.creator = ?" + raw := "select count(*) from contract where creator = ?" // 分页查询 offset := (param.Page.PageNum - 1) * param.Page.PageSize - mdb := global.Db.Offset(offset).Limit(param.Page.PageSize).Table(CONTRACT).Select(s) - var err error - if param.Id != 0 { - err = mdb.Joins(j+" and contract.id = ?", param.Creator, param.Id).Scan(&contractList).Error - } else { - err = mdb.Joins(j, param.Creator).Scan(&contractList).Error - } - if err != nil { - return nil, 0, err - } + db := global.Db.Offset(offset).Limit(param.Page.PageSize).Table(CONTRACT).Select(field) + var rows int64 - global.Db.Raw("select count(*) from contract where creator = ?", param.Creator).Scan(&rows) + if param.Id != NumberNull { + db.Joins(where+" and contract.id = ?", param.Creator, param.Id) + global.Db.Raw(raw + " and contract.id = ?", param.Creator, param.Creator).Scan(&rows) + } else { + if param.Status != NumberNull { + db.Joins(where+" and contract.status = ?", param.Creator, param.Status) + global.Db.Raw(raw + " and contract.status = ?", param.Creator, param.Status).Scan(&rows) + } else { + db.Joins(where, param.Creator) + global.Db.Raw(raw, param.Creator).Scan(&rows) + } + } + if err := db.Scan(&contractList).Error; err != nil { + return nil, NumberNull, nil + } return contractList, rows, nil } diff --git a/server/dao/customer.go b/server/dao/customer.go index 9c914a3..69975e4 100644 --- a/server/dao/customer.go +++ b/server/dao/customer.go @@ -62,8 +62,12 @@ func (c *CustomerDao) IsExists(name string, uid int64) bool { func (c *CustomerDao) GetList(param *models.CustomerQueryParam) ([]*models.CustomerList, int64, error) { customer := models.Customer{ - Name: param.Name, - Creator: param.Creator, + Name: param.Name, + Source: param.Source, + Industry: param.Industry, + Level: param.Level, + Status: param.Status, + Creator: param.Creator, } customerList := make([]*models.CustomerList, 0) rows, err := restPage(param.Page, CUSTOMER, customer, &customerList, &[]*models.CustomerList{}) diff --git a/server/models/contract.go b/server/models/contract.go index 0c596b8..222a803 100644 --- a/server/models/contract.go +++ b/server/models/contract.go @@ -52,6 +52,7 @@ type ContractQueryParam struct { Id int64 `form:"id" binding:"omitempty,gt=0"` Pids []int64 `form:"pids" json:"pids" binding:"-"` Name string `form:"name" binding:"-"` + Status int `form:"status" binding:"omitempty,oneof=1 2"` Creator int64 `form:"creator,omitempty" binding:"-"` Page Page } diff --git a/server/models/customer.go b/server/models/customer.go index e715402..f585e09 100644 --- a/server/models/customer.go +++ b/server/models/customer.go @@ -58,11 +58,14 @@ type CustomerDeleteParam struct { } type CustomerQueryParam struct { - Id int64 `form:"id" binding:"omitempty,gt=0"` - Name string `form:"name" binding:"-"` - Phone string `form:"phone" binding:"omitempty,len=11"` - Creator int64 `form:"creator,omitempty" binding:"-"` - Page Page + Id int64 `form:"id" binding:"omitempty,gt=0"` + Name string `form:"name" binding:"omitempty,gt=0"` + Source string `form:"source" binding:"omitempty,gt=0"` + Industry string `form:"industry" binding:"omitempty,gt=0"` + Level string `form:"level" binding:"omitempty,gt=0"` + Status int `form:"status" binding:"omitempty,oneof=1 2"` + Creator int64 `form:"creator,omitempty" binding:"-"` + Page Page } type CustomerList struct { diff --git a/web/src/views/Contract.vue b/web/src/views/Contract.vue index fec193b..5e5e957 100644 --- a/web/src/views/Contract.vue +++ b/web/src/views/Contract.vue @@ -2,20 +2,24 @@
- + - 全部合同 + 全部合同 + 已签约合同 + 未签约合同 删除 - 新建
- - 导出 + + 新建 + + 导出 +
{ + contractList() +} + +// 点击全部合同 +const onContractList = () => { + query.id = undefined + query.status = undefined + pagination.current = 1 + setButtonType() + contractList() +} + +// 点击已签约或未签约合同 +const onContractStatus = (status) => { + query.status = status + pagination.current = 1 + setButtonType(status) + contractList() +} + +// 按钮默认类型 +const buttonType = reactive({ + bt1: 'primary', + bt2: 'default', + bt3: 'default', +}) + +// 设置按钮类型 +const setButtonType = (status) => { + switch (status) { + case 1: + buttonType.bt1 = 'default' + buttonType.bt2 = 'primary' + buttonType.bt3 = 'default' + break; + case 2: + buttonType.bt1 = 'default' + buttonType.bt2 = 'default' + buttonType.bt3 = 'primary' + break; + default: + buttonType.bt1 = 'primary' + buttonType.bt2 = 'default' + buttonType.bt3 = 'default' + break; + } +} + // 合同表格字段 const columns = [{ title: '合同编号', @@ -358,15 +418,11 @@ let pagination = reactive({ total: undefined, }) -// 点击搜索 -const onSearch = () => { getContractList() }; - const title = ref(''); const visible = ref(false); const disabled = ref(true) const operation = ref(0); const contractFormRef = ref(); -const keyWord = ref('') const productListVisible = ref(false); // 点击新建合同 @@ -419,7 +475,7 @@ const onSave = () => { if (res.data.code == 0) { message.success('保存成功') data.defaultSelectedIds = [] - getContractList() + contractList() } }) } @@ -439,7 +495,7 @@ const onSave = () => { if (res.data.code == 0) { message.success('保存成功') data.defaultSelectedIds = [] - getContractList() + contractList() } }) } @@ -462,7 +518,7 @@ const onDelete = () => { onOk() { deleteContract(param).then((res) => { if (res.data.code == 0) { - getContractList() + contractList() disabled.value = true message.success('删除成功') } @@ -475,22 +531,17 @@ const onDelete = () => { } // 初始化数据 -onMounted(() => { getContractList() }) - -// 点击全部合同 -const onContracts = () => { - keyWord.value = '' - getContractList() -} +onMounted(() => { contractList() }) // 分页查询合同列表 const onPagination = (page) => { pagination.current = page - getContractList() + contractList(query.status) } -const getContractList = () => { +const contractList = () => { let param = { - id: parseInt(keyWord.value == '' ? '0' : keyWord.value), + id: parseInt(query.id == undefined || query.id == '' ? '0' : query.id), + status: query.status, pageNum: pagination.current, pageSize: pagination.pageSize } diff --git a/web/src/views/Customer.vue b/web/src/views/Customer.vue index 502a539..b93ea45 100644 --- a/web/src/views/Customer.vue +++ b/web/src/views/Customer.vue @@ -2,21 +2,48 @@
- + - 全部客户 + 全部客户 + + 高级筛选 删除 - 新建
- - 导出 + + 新建 + + 导出 +
+ + + + + + + + + + + + + + + +
- - 促销 - 搜索引擎 - 广告 - 转介绍 - 线上注册 - 电话咨询 - 邮件咨询 - + @@ -85,32 +104,21 @@ - - 互联网 - 金融业 - 政府 - 房地产 - 文化传媒 - 生产 - 物流运输 - + - - 重点客户 - 普通客户 - 非优先客户 - + - + @@ -177,7 +185,7 @@