Commit ee4ea046 by chenxianqi

update

parent ee74ac5c
......@@ -30,6 +30,16 @@ func (c *MessageController) Finish() {}
// List get messages
func (c *MessageController) List() {
messageList(c, false)
}
// HistoryList get History messages
func (c *MessageController) HistoryList() {
messageList(c, true)
}
// messageList get messages
func messageList(c *MessageController, isHistory bool) {
messagePaginationDto := models.MessagePaginationDto{}
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &messagePaginationDto); err != nil {
......@@ -57,7 +67,13 @@ func (c *MessageController) List() {
}
// query messages
returnMessagePaginationDto, err := c.MessageRepository.GetAdminMessages(messagePaginationDto)
var returnMessagePaginationDto *models.MessagePaginationDto
var err error
if !isHistory {
returnMessagePaginationDto, err = c.MessageRepository.GetAdminMessages(messagePaginationDto)
} else {
returnMessagePaginationDto, err = c.MessageRepository.GetAdminHistoryMessages(messagePaginationDto)
}
if err != nil {
c.JSON(configs.ResponseFail, "fail", err.Error())
}
......
......@@ -6,7 +6,7 @@ type Contact struct {
FromAccount int64 `orm:"type(bigint);column(from_account)" json:"from_account"` // 接收者Account
ToAccount int64 `orm:"type(bigint);column(to_account)" json:"to_account"` // 发送者Account
LastAccount int64 `orm:"type(bigint);column(last_account)" json:"last_account"` // 最后一条消息者Account
IsSessionEnd int `orm:"default(0),column(is_session_end)" json:"is_session_end"` // 1 已结束对话 0 未结束对话
IsSessionEnd int `orm:"default(0);column(is_session_end)" json:"is_session_end"` // 1 已结束对话 0 未结束对话
LastMessage string `orm:"null;type(text);column(last_message)" json:"last_message"` // 最后一条消息内容
Delete int `orm:"default(0);column(delete)" json:"delete"` // 1 已删除 0 未删除
LastMessageType string `orm:"null;type(text);column(last_message_type)" json:"last_message_type"` // 最后一条消息类型
......
......@@ -7,7 +7,7 @@ type KnowledgeBase struct {
Title string `orm:"unique;type(char);column(title)" json:"title"` // 标题
SubTitle string `orm:"null;type(content);column(sub_title)" json:"sub_title"` // 子标题
Content string `orm:"null;type(text);column(content)" json:"content"` // 内容
Platform int64 `orm:"default(1),type(bigint);column(platform)" json:"platform"` // 0是匹配所有,其它
Platform int64 `orm:"default(1);type(bigint);column(platform)" json:"platform"` // 0是匹配所有,其它
UpdateAt int64 `orm:"type(bigint);column(update_at)" json:"update_at"` // 更新时间
CreateAt int64 `orm:"type(bigint);column(create_at)" json:"create_at"` // 创建时间
}
......@@ -2,19 +2,19 @@ package models
// WorkOrder model
type WorkOrder struct {
ID int64 `orm:"auto;pk;type(bigint);column(id)" json:"id"` // ID
UID int64 `orm:"type(bigint);column(uid)" json:"uid"` // 用户ID
TID int64 `orm:"type(bigint);column(tid))" json:"tid"` // 工单类型ID
Title string `orm:"column(title)" json:"title"` // 工单标题
Content string `orm:"type(text);column(content)" json:"content"` // 内容
Phone string `orm:"type(char);null;column(phone)" json:"phone"` // 用户联系电话
Email string `orm:"type(varchar);null;column(email)" json:"email"` // 邮箱(可用于客服回复后发提醒邮件给客户)
Status int `orm:"default(0);column(status)" json:"status"` // 当前状态 ( 0=待处理 | 1=客服已回复 | 2=客户已回复 | 3=已结单 )
LastReply int64 `orm:"type(bigint);column(last_reply))" json:"last_reply"` // 最后回复的客服ID
CID int64 `orm:"type(bigint);column(cid))" json:"cid"` // 结单客服ID
CloseAt int64 `orm:"type(bigint);column(close_at)" json:"close_at"` // 结单时间
Remark string `orm:"column(remark)" json:"remark"` // 结单原因
UpdateAt int64 `orm:"type(bigint);column(update_at)" json:"update_at"` // 更新时间
Delete int `orm:"default(0);column(delete)" json:"delete"` // 是否已删除 0 未删除, 1已删除 (未结单状态不能删除)
CreateAt int64 `orm:"type(bigint);column(create_at)" json:"create_at"` // 提交时间
ID int64 `orm:"auto;pk;type(bigint);column(id)" json:"id"` // ID
UID int64 `orm:"type(bigint);column(uid)" json:"uid"` // 用户ID
TID int64 `orm:"type(bigint);column(tid)" json:"tid"` // 工单类型ID
Title string `orm:"column(title)" json:"title"` // 工单标题
Content string `orm:"type(text);column(content)" json:"content"` // 内容
Phone string `orm:"type(char);null;column(phone)" json:"phone"` // 用户联系电话
Email string `orm:"type(varchar);null;column(email)" json:"email"` // 邮箱(可用于客服回复后发提醒邮件给客户)
Status int `orm:"default(0);column(status)" json:"status"` // 当前状态 ( 0=待处理 | 1=客服已回复 | 2=客户已回复 | 3=已结单 )
LastReply int64 `orm:"type(bigint);column(last_reply)" json:"last_reply"` // 最后回复的客服ID
CID int64 `orm:"type(bigint);column(cid)" json:"cid"` // 结单客服ID
CloseAt int64 `orm:"type(bigint);column(close_at)" json:"close_at"` // 结单时间
Remark string `orm:"column(remark)" json:"remark"` // 结单原因
UpdateAt int64 `orm:"type(bigint);column(update_at)" json:"update_at"` // 更新时间
Delete int `orm:"default(0);column(delete)" json:"delete"` // 是否已删除 0 未删除, 1已删除 (未结单状态不能删除)
CreateAt int64 `orm:"type(bigint);column(create_at)" json:"create_at"` // 提交时间
}
......@@ -3,8 +3,8 @@ package models
// WorkOrderComment model
type WorkOrderComment struct {
ID int64 `orm:"auto;pk;type(bigint);column(id)" json:"id"` // ID
UID int64 `orm:"type(bigint);column(uid))" json:"uid"` // 用户ID
AID int64 `orm:"type(bigint);column(aid))" json:"aid"` // 客服ID
UID int64 `orm:"type(bigint);column(uid)" json:"uid"` // 用户ID
AID int64 `orm:"type(bigint);column(aid)" json:"aid"` // 客服ID
WID int64 `orm:"type(bigint);column(wid)" json:"wid"` // 关联(WorkOrder ID)
Content string `orm:"type(text);null;column(content)" json:"content"` // 内容
CreateAt int64 `orm:"type(bigint);column(create_at)" json:"create_at"` // 提交时间
......
......@@ -75,6 +75,7 @@ func routers(prefix string) *beego.Namespace {
beego.NSNamespace("/message",
beego.NSBefore(filters.FilterToken),
beego.NSRouter("/list", &controllers.MessageController{}, "post:List"),
beego.NSRouter("/history", &controllers.MessageController{}, "post:HistoryList"),
beego.NSRouter("/remove", &controllers.MessageController{}, "post:Remove"),
),
......
......@@ -12,6 +12,7 @@ import (
// MessageRepositoryInterface interface
type MessageRepositoryInterface interface {
GetAdminMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error)
GetAdminHistoryMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error)
GetUserMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error)
Delete(removeRequestDto models.RemoveMessageRequestDto) (int64, error)
Add(message *models.Message) (int64, error)
......@@ -153,9 +154,8 @@ func (r *MessageRepository) GetUserMessages(messagePaginationDto models.MessageP
return &messagePaginationDto, nil
}
// GetAdminMessages get admin messages
func (r *MessageRepository) GetAdminMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error) {
// getAdminMessages
func getAdminMessages(r *MessageRepository, table string, messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error) {
var err error
var msgCount int64
var messages []*models.Message
......@@ -174,21 +174,25 @@ func (r *MessageRepository) GetAdminMessages(messagePaginationDto models.Message
accounts = append(accounts, robot.ID)
inExp = inExp + ",?"
}
msgCount, err = r.q.Filter("timestamp__lt", messagePaginationDto.Timestamp).Filter("to_account__in", accounts).Filter("from_account__in", accounts).Count()
type MessageCount struct {
Count int64
}
var messageCount MessageCount
err = r.o.Raw("SELECT COUNT(*) AS `count` FROM `"+table+"` WHERE `timestamp` < ? AND to_account IN("+inExp+") AND from_account IN("+inExp+")", messagePaginationDto.Timestamp, accounts, accounts).QueryRow(&messageCount)
if err != nil {
logs.Warn("GetMessages get one service message list1------------", err)
}
msgCount = messageCount.Count
// Paging
end := msgCount
start := int(msgCount) - messagePaginationDto.PageSize
start := int(messageCount.Count) - messagePaginationDto.PageSize
if start <= 0 {
start = 0
}
if msgCount > 0 {
_, err = r.o.Raw("SELECT * FROM `message` WHERE to_account IN ("+inExp+") AND from_account IN ("+inExp+") AND `timestamp` < ? ORDER BY `sequence` ASC LIMIT ?,?", accounts, accounts, messagePaginationDto.Timestamp, start, end).QueryRows(&messages)
_, err = r.o.Raw("SELECT * FROM `"+table+"` WHERE to_account IN ("+inExp+") AND from_account IN ("+inExp+") AND `timestamp` < ? ORDER BY `sequence` ASC LIMIT ?,?", accounts, accounts, messagePaginationDto.Timestamp, start, end).QueryRows(&messages)
if err != nil {
logs.Warn("GetMessages get one service message list2------------", err)
return nil, err
......@@ -198,12 +202,23 @@ func (r *MessageRepository) GetAdminMessages(messagePaginationDto models.Message
logs.Warn("GetMessages get one service message list3------------", err)
return nil, err
}
total, _ := r.q.Filter("to_account__in", accounts).Filter("from_account__in", accounts).Count()
var messageCount1 MessageCount
r.o.Raw("SELECT COUNT(*) AS `count` FROM `"+table+"` WHERE to_account IN("+inExp+") AND from_account IN("+inExp+")", accounts, accounts).QueryRow(&messageCount1)
messagePaginationDto.List = messages
messagePaginationDto.Total = total
messagePaginationDto.Total = messageCount1.Count
} else {
messagePaginationDto.List = []models.Message{}
messagePaginationDto.Total = 0
}
return &messagePaginationDto, nil
}
// GetAdminHistoryMessages get admin messages history
func (r *MessageRepository) GetAdminHistoryMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error) {
return getAdminMessages(r, "message_history", messagePaginationDto)
}
// GetAdminMessages get admin messages
func (r *MessageRepository) GetAdminMessages(messagePaginationDto models.MessagePaginationDto) (*models.MessagePaginationDto, error) {
return getAdminMessages(r, "message", messagePaginationDto)
}
......@@ -28,7 +28,7 @@ func GetWorkOrderCommentRepositoryInstance() *WorkOrderCommentRepository {
// GetWorkOrderComments get WorkOrderComments
func (r *WorkOrderCommentRepository) GetWorkOrderComments(wid int64) ([]models.WorkOrderCommentDto, error) {
var workOrderComments []models.WorkOrderCommentDto
_, err := r.o.Raw("SELECT * FROM (SELECT w.*,w.id AS i_d,w.a_i_d AS `aid`,w.wid AS `w_i_d`,u.nickname AS u_nickname,a.nickname AS a_nickname,a.avatar AS a_avatar,u.avatar AS u_avatar FROM work_order_comment w LEFT JOIN (SELECT * FROM admin) a ON w.a_i_d = a.id LEFT JOIN (SELECT * FROM `user`) u ON w.u_i_d = u.id AND w.wid = ? ORDER BY w.id ASC) b WHERE wid = ?", wid, wid).QueryRows(&workOrderComments)
_, err := r.o.Raw("SELECT * FROM (SELECT w.*,w.id AS i_d,u.nickname AS u_nickname,a.nickname AS a_nickname,a.avatar AS a_avatar,u.avatar AS u_avatar FROM work_order_comment w LEFT JOIN (SELECT * FROM admin) a ON w.aid = a.id LEFT JOIN (SELECT * FROM `user`) u ON w.uid = u.id AND w.wid = ? ORDER BY w.id ASC) b WHERE wid = ?", wid, wid).QueryRows(&workOrderComments)
if err != nil {
logs.Warn("GetWorkOrderComments get WorkOrderComments-----------", err)
}
......
......@@ -78,7 +78,7 @@ func (r *WorkOrderRepository) GetUserWorkOrders(uid int64) ([]models.WorkOrder,
// GetCounts get WorkOrder counts
func (r *WorkOrderRepository) GetCounts() (models.WorkOrderCountDto, error) {
var workOrderCouns models.WorkOrderCountDto
err := r.o.Raw("SELECT * FROM ((SELECT count(*) AS status0 FROM work_order WHERE `status` = 0) w1,(SELECT count(*) AS status2 FROM work_order WHERE `status` = 2) w2,(SELECT count(*) AS status3 FROM work_order WHERE `status` = 3) w3,(SELECT count(*) AS delete_count FROM work_order WHERE `delete` = 1) w4)").QueryRow(&workOrderCouns)
err := r.o.Raw("SELECT * FROM ((SELECT count(*) AS status0 FROM work_order WHERE `status` = 0 AND `delete` = 0) w1,(SELECT count(*) AS status2 FROM work_order WHERE `status` = 2 AND `delete` = 0) w2,(SELECT count(*) AS status3 FROM work_order WHERE `status` = 3 AND `delete` = 0) w3,(SELECT count(*) AS delete_count FROM work_order WHERE `delete` = 1) w4)").QueryRow(&workOrderCouns)
if err != nil {
logs.Warn(" GetCounts get WorkOrder count", err)
}
......@@ -88,7 +88,7 @@ func (r *WorkOrderRepository) GetCounts() (models.WorkOrderCountDto, error) {
// GetWorkOrder get WorkOrder
func (r *WorkOrderRepository) GetWorkOrder(id int64) (models.WorkOrderDto, error) {
var workOrder models.WorkOrderDto
err := r.o.Raw("SELECT * FROM (SELECT w.*,w.id AS i_d, w.uid AS u_i_d,u.nickname AS u_nickname FROM work_order w LEFT JOIN (SELECT * FROM `user`) u ON w.uid = u.id) w WHERE w.id = ?", id).QueryRow(&workOrder)
err := r.o.Raw("SELECT * FROM (SELECT w.*,w.id AS i_d, w.uid AS u_i_d, w.tid AS t_i_d, w.cid AS c_i_d,u.nickname AS u_nickname FROM work_order w LEFT JOIN (SELECT * FROM `user`) u ON w.uid = u.id) w WHERE w.id = ?", id).QueryRow(&workOrder)
if err != nil {
logs.Warn("GetWorkOrder get WorkOrder------------", err)
}
......@@ -103,7 +103,7 @@ func (r *WorkOrderRepository) GetWorkOrders(request models.WorkOrderPaginationDt
}
tidSQL := ""
if request.Tid != 0 && request.Tid != -1 && request.Tid != -2 {
tidSQL = " AND `t_i_d` = " + strconv.FormatInt(request.Tid, 10) + " "
tidSQL = " AND `tid` = " + strconv.FormatInt(request.Tid, 10) + " "
}
if request.PageSize == 0 {
request.PageSize = 10
......@@ -113,8 +113,8 @@ func (r *WorkOrderRepository) GetWorkOrders(request models.WorkOrderPaginationDt
}
del := strconv.Itoa(request.Del)
var workOrders []models.WorkOrderDto
SQLSUB := "SELECT w.*,u.nickname AS u_nickname,a.nickname AS a_nickname,w.id AS i_d,w.uid AS u_i_d FROM work_order w LEFT JOIN (SELECT id, nickname FROM `user`) u ON w.uid = u.id LEFT JOIN (SELECT id, nickname FROM `admin`) a ON w.last_reply = a.id"
SQL := "SELECT *,t_i_d AS tid,c_i_d AS cid FROM (" + SQLSUB + ") w WHERE `delete` = " + del + statusSQL + tidSQL + " ORDER BY status ASC, create_at DESC"
SQLSUB := "SELECT w.*,u.nickname AS u_nickname,a.nickname AS a_nickname,w.id AS i_d,w.uid AS u_i_d,w.tid AS t_i_d,w.cid AS c_i_d FROM work_order w LEFT JOIN (SELECT id, nickname FROM `user`) u ON w.uid = u.id LEFT JOIN (SELECT id, nickname FROM `admin`) a ON w.last_reply = a.id"
SQL := "SELECT * FROM (" + SQLSUB + ") w WHERE `delete` = " + del + statusSQL + tidSQL + " ORDER BY status ASC, create_at DESC"
_, err := r.o.Raw(SQL+" LIMIT ? OFFSET ?", request.PageSize, (request.PageOn-1)*request.PageSize).QueryRows(&workOrders)
if err != nil {
logs.Warn("GetWorkOrders get WorkOrders------------", err)
......
......@@ -87,7 +87,7 @@ func (r *WorkOrderTypeRepository) GetWorkOrderTypes() []models.WorkOrderType {
// GetWorkOrderTypesAndCountWorkorder get all
func (r *WorkOrderTypeRepository) GetWorkOrderTypesAndCountWorkorder() []models.WorkOrderTypeDto {
var workOrderTypes []models.WorkOrderTypeDto
_, err := r.o.Raw("SELECT t.*,IFNULL(w.count,0) as `count` FROM work_order_type t LEFT JOIN (SELECT t_i_d,COUNT(*) AS `count` FROM `work_order` WHERE `delete` = 0 AND status != 3 GROUP BY `t_i_d`) w ON t.id = w.t_i_d").QueryRows(&workOrderTypes)
_, err := r.o.Raw("SELECT t.*,IFNULL(w.count,0) as `count` FROM work_order_type t LEFT JOIN (SELECT tid,COUNT(*) AS `count` FROM `work_order` WHERE `delete` = 0 AND status != 3 GROUP BY `tid`) w ON t.id = w.tid").QueryRows(&workOrderTypes)
if err != nil {
logs.Warn("GetWorkOrderTypes get all------------", err)
return []models.WorkOrderTypeDto{}
......
......@@ -187,7 +187,8 @@ export default {
dialogFormVisible: false,
messageRecord: {
list: []
}
},
isFirstRequestMessageEnd: false,
};
......@@ -275,6 +276,7 @@ export default {
openModal(scope){
this.selectUser = scope.row
this.isMessageEnd = false
this.isFirstRequestMessageEnd = false
this.dialogFormVisible = true
this.messageRecord = {
list: []
......@@ -295,14 +297,18 @@ export default {
})
.then(response => {
this.getMessageRecordLoading = false
if(response.data.data.list.length < this.getMessageRecordPageSize){
this.isMessageEnd = true
let messages = response.data.data.list
for(var i=0; i<messages.length; i++){
messages[i].payload = window.Base64.decode(messages[i].payload)
}
if(this.messageRecord.list.length == 0 || timestamp == 0){
if(messages.length < this.getMessageRecordPageSize){
this.isFirstRequestMessageEnd = true
}
if(messages.length == 0 || timestamp == 0){
this.messageRecord = response.data.data
this.scrollIntoBottom()
}else{
response.data.data.list = response.data.data.list.concat(this.messageRecord.list)
response.data.data.list = messages.concat(this.messageRecord.list)
this.messageRecord = response.data.data
}
setTimeout(()=>this.$previewRefresh(), 500)
......@@ -312,14 +318,44 @@ export default {
this.getMessageRecordLoading = false
});
},
// 获取聊天记录
getHistoryMessageRecord(timestamp){
this.getMessageRecordLoading = true
if(timestamp == undefined || timestamp == 0){
this.isMessageEnd = true
return
}
axios.post('/message/history', {
"timestamp": timestamp,
"page_size": this.getMessageRecordPageSize,
"service": parseInt(this.selectCustomerId),
"account": parseInt(this.selectUser.user_account)
})
.then(response => {
let messages = response.data.data.list
for(var i=0; i<messages.length; i++){
messages[i].payload = window.Base64.decode(messages[i].payload)
}
this.getMessageRecordLoading = false
if(messages.length < this.getMessageRecordPageSize){
this.isMessageEnd = true
}
response.data.data.list = messages.concat(this.messageRecord.list)
this.messageRecord = response.data.data
setTimeout(()=>this.$previewRefresh(), 1000)
})
.catch(() => {
this.getMessageRecordLoading = false
});
},
// 加载更多数据
onLoadMor(){
if(this.getMessageRecordLoading) return
if(this.messageRecord.list.length >= this.messageRecord.total || this.messageRecord.total <= this.getMessageRecordPageSize){
this.isMessageEnd = true
return
if(this.isFirstRequestMessageEnd){
this.getHistoryMessageRecord(this.messageRecord.list[0].timestamp)
}else{
this.getMessageRecord(this.messageRecord.list[0].timestamp)
}
this.getMessageRecord(this.messageRecord.list[0].timestamp)
setTimeout(()=>{
var chatBody = document.getElementById("chatBody")
chatBody.scrollTop = 500
......
......@@ -241,7 +241,8 @@ export default {
inputPongIngString: "对方正在输入...",
isPush: false, // 是否可以推送消息
isMessageEnd: false,
mousemoveTimerout: null
mousemoveTimerout: null,
isFirstRequestMessageEnd: false,
}
},
computed: {
......@@ -745,6 +746,7 @@ export default {
href = href.substr(0, index != -1 ? index : href.length)
history.replaceState(null, null, href + '#/workbench?uid=' + user.from_account)
this.isMessageEnd = false
this.isFirstRequestMessageEnd = false
if(this.seviceCurrentUser.from_account != user.from_account){
this.messageRecord.list = []
this.$store.commit("onChangeSeviceCurrentUser", user)
......@@ -775,7 +777,7 @@ export default {
}
this.getMessageRecordLoading = false
if(messages.length < this.getMessageRecordPageSize){
this.isMessageEnd = true
this.isFirstRequestMessageEnd = true
}
if(this.messageRecord.list.length == 0 || timestamp == 0){
this.$store.commit("onChangeMessageRecord", response.data.data)
......@@ -791,19 +793,50 @@ export default {
this.getMessageRecordLoading = false
});
},
// 获取聊天记录
getHistoryMessageRecord(timestamp){
this.getMessageRecordLoading = true
if(timestamp == undefined || timestamp == 0){
this.isMessageEnd = true
return
}
var account = parseInt(this.seviceCurrentUser.from_account)
if(!account) return
axios.post('/message/history', {
"timestamp": timestamp,
"page_size": this.getMessageRecordPageSize,
"account": account
})
.then(response => {
let messages = response.data.data.list
for(var i=0; i<messages.length; i++){
messages[i].payload = window.Base64.decode(messages[i].payload)
}
this.getMessageRecordLoading = false
if(messages.length < this.getMessageRecordPageSize){
this.isMessageEnd = true
}
response.data.data.list = messages.concat(this.messageRecord.list)
this.$store.commit("onChangeMessageRecord", response.data.data)
setTimeout(()=>this.$previewRefresh(), 1000)
this.$store.dispatch('ON_GET_CONTACTS')
})
.catch(() => {
this.getMessageRecordLoading = false
});
},
//获取更多消息
onLoadMorMessage(){
if(this.getMessageRecordLoading) return
if(this.messageRecord.list.length >= this.messageRecord.total || this.messageRecord.total <= this.getMessageRecordPageSize){
this.isMessageEnd = true
return
if(this.isFirstRequestMessageEnd){
this.getHistoryMessageRecord(this.messageRecord.list[0].timestamp)
}else{
this.getMessageRecord(this.messageRecord.list[0].timestamp)
}
this.getMessageRecord(this.messageRecord.list[0].timestamp)
setTimeout(()=>{
var chatBody = document.getElementById("chatBody")
chatBody.scrollTop = 500
}, 50)
},
// 显示正在输入
inputPongIng(){
......
......@@ -6,7 +6,9 @@
<i class="el-icon-tickets"></i>
<span slot="title">工单管理</span>
<span style="font-size:15px;margin-left: 30px;color:#e7a646">
当前有:
<template v-if="workOrderCounts.status0 > 0 || workOrderCounts.status2">
当前有:
</template>
<template v-if="workOrderCounts.status0 > 0">
<strong style="color: #f56c6c">{{workOrderCounts.status0}}</strong>条待处理 ,
</template>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment