| | |
| | | <template> |
| | | <view class="pages-task-item"> |
| | | <view class="btn-no " :class="taskIsRun?'active':'' "> |
| | | {{taskData.taskButton}} |
| | | </view> |
| | | <view class="content" @click="clickTask"> |
| | | <view class="line"> |
| | | <view class="title"> {{taskData.taskGroupName}}</view> |
| | | <view class="item-content"> |
| | | <view class="btn-no " :class="taskIsRun?'active':'' " @click="clickButton"> |
| | | {{taskData.taskButton}} |
| | | </view> |
| | | <view class="line"> |
| | | {{taskListDesc}} |
| | | <view class="content" @click="clickTask"> |
| | | <view class="line"> |
| | | <view class="title"> {{taskData.taskGroupName}}</view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="desc"> |
| | | {{taskListDesc}} |
| | | </view> |
| | | <view class="cycle"> |
| | | {{taskCycleTime}} |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="action-button" v-if="taskIsRun"> |
| | | <!-- <button type="primary" v-show="false" :plain="true" class="button" @click.stop="clickRepeatTask"> |
| | | <view class="action-button" v-if="taskIsRun"> |
| | | <!-- <button type="primary" v-show="false" :plain="true" class="button" @click.stop="clickRepeatTask"> |
| | | <text class="ico repeat" /> |
| | | </button> --> |
| | | <button type="primary" :plain="true" class="button" @click.stop="clickSkipTask"> |
| | | <text class="ico skip-next-rounded" /> |
| | | </button> |
| | | <button type="primary" :plain="true" class="button" @click.stop="clickStopTask"> |
| | | <text class="ico stop" /> |
| | | </button> |
| | | <!-- <button type="primary" v-show="false" :plain="true" class="button" @click.stop="clickPauseTask"> |
| | | <button type="primary" :plain="true" class="button" @click.stop="clickSkipTask"> |
| | | <text class="ico skip-next-rounded" /> |
| | | </button> |
| | | <button type="primary" :plain="true" class="button" @click.stop="clickStopTask"> |
| | | <text class="ico stop" /> |
| | | </button> |
| | | <!-- <button type="primary" v-show="false" :plain="true" class="button" @click.stop="clickPauseTask"> |
| | | <text class="ico pause-rounded" /> |
| | | </button> |
| | | <button type="primary" v-show="false" :plain="true" class="button" @click.stop="clickPlayTask"> |
| | | <text class="ico play-filled" /> |
| | | </button> --> |
| | | </view> |
| | | <view class="action-button" v-else> |
| | | <button :type=" !taskCanRun ? 'default':'primary'" :plain="true" class="button" :disabled=" !taskCanRun" |
| | | @click.stop="clickPlayTask"> |
| | | <text class="ico play-filled " :class="taskCanRun ? '':'disabled'" /> |
| | | </button> |
| | | </view> |
| | | </view> |
| | | <view class="action-button" v-else> |
| | | <button :type=" !taskCanRun ? 'default':'primary'" :plain="true" class="button" :disabled=" !taskCanRun" |
| | | @click.stop="clickPlayTask"> |
| | | <text class="ico play-filled " :class="taskCanRun ? '':'disabled'" /> |
| | | </button> |
| | | <view class="item-sub" v-if="showTaskRunning && taskIsRun"> |
| | | <view class="sub-item" v-for="(item,index) in taskStatusList" :key="item.taskID"> |
| | | <text class="text">{{getStatusText(item.status)}}</text> |
| | | <text class="text">{{"目标点"+(index+ 1)}}</text> |
| | | <text class="text">{{getDestText(item)}}</text> |
| | | <text class="text">{{getActionText(item)}}</text> |
| | | </view> |
| | | </view> |
| | | <!-- <view class="btn-del" :style="{ transform: `translateX(${deleteX || 0}px)` }" @click="clickDelete"> |
| | | 删除</view> --> |
| | | |
| | | </view> |
| | | |
| | | </template> |
| | |
| | | return 0; |
| | | } |
| | | }, |
| | | showTaskRunning: { |
| | | type: Boolean, |
| | | default () { |
| | | return false; |
| | | } |
| | | }, |
| | | |
| | | }, |
| | | data() { |
| | | return {} |
| | |
| | | taskListDesc() { |
| | | let list = this.taskData.taskList || [] |
| | | list = list.map((a) => a.dest?.name) |
| | | |
| | | return list.join("-") |
| | | }, |
| | | taskCycleTime() { |
| | | |
| | | if (this.taskIsRun) |
| | | return `第${this.taskStatus?.curCycleNumber || 0}/${this.taskStatus?.cycleTotleNumber || 0}次` |
| | | |
| | | else |
| | | return `重复${this.taskData.cycleTime || 0}次` |
| | | |
| | | |
| | | }, |
| | | taskIsRun() { |
| | | if (this.taskStatus?.taskGroupID == this.taskData.taskGroupID) { |
| | |
| | | return true |
| | | } |
| | | }, |
| | | |
| | | taskStatusList() { |
| | | if (this.taskIsRun) { |
| | | let list = this.taskStatus.taskStatusList || [] |
| | | list = list.filter((a) => a.cycleNumber == this.taskStatus.curCycleNumber) |
| | | return list |
| | | } else { |
| | | return [] |
| | | } |
| | | } |
| | | |
| | | }, |
| | | |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | clickButton() { |
| | | if (this.taskIsRun) |
| | | this.$emit('click-btn', this.taskData) |
| | | }, |
| | | |
| | | clickTask() { |
| | | this.$emit('click-item', this.taskData) |
| | | }, |
| | |
| | | this.$emit('click-delete', this.taskData) |
| | | }, |
| | | |
| | | |
| | | getStatusText(status) { |
| | | var statusText = "未知" |
| | | if (!status) { |
| | | statusText = "未开始" |
| | | } else if (status === 5) { |
| | | statusText = "强制完成" |
| | | } else if (status === 4) { |
| | | statusText = "异常结束" |
| | | } else if (status === 3) { |
| | | statusText = "已取消" |
| | | } else if (status === 2) { |
| | | statusText = "已完成" |
| | | } else if (status === 1) { |
| | | statusText = "执行中" |
| | | } |
| | | return statusText |
| | | }, |
| | | getDestText(item) { |
| | | const index = this.taskData.taskList.findIndex((a) => a.taskID == item.taskID) |
| | | if (index > -1) { |
| | | return this.taskData.taskList[index]?.dest?.name || "" |
| | | } |
| | | return "" |
| | | }, |
| | | getActionText(item) { |
| | | const index = this.taskData.taskList.findIndex((a) => a.taskID == item.taskID) |
| | | if (index > -1) { |
| | | const task = this.taskData.taskList[index] |
| | | var actionText = "未知" |
| | | if (task.actionType === 1) { |
| | | actionText = "导航" |
| | | } else if (task.actionType === 2) { |
| | | actionText = "取货" |
| | | } else if (task.actionType === 3) { |
| | | actionText = `卸货 等待${taskData.taskList[index]?.wait || 0}秒` |
| | | } else if (task.actionType === 4) { |
| | | actionText = "人工" |
| | | } |
| | | return actionText |
| | | } |
| | | return "" |
| | | }, |
| | | |
| | | } |
| | | } |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .pages-task-item { |
| | | |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | position: relative; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | |
| | | .item-content { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-direction: row; |
| | | align-items: center; |
| | | } |
| | | |
| | | .item-sub { |
| | | display: flex; |
| | | flex-direction: column; |
| | | padding: 10rpx 30rpx 10rpx 50rpx; |
| | | |
| | | .sub-item { |
| | | color: gray; |
| | | padding: 10rpx; |
| | | border-bottom: 1px solid #ddd; |
| | | display: flex; |
| | | flex-direction: row; |
| | | .text { |
| | | color: gray; |
| | | padding: 10rpx; |
| | | } |
| | | } |
| | | |
| | | .sub-item:last-child { |
| | | border-bottom: 0; |
| | | } |
| | | } |
| | | |
| | | .btn-no { |
| | | display: flex; |
| | | margin: 0 10rpx 0 20rpx; |
| | | border-radius: 25rpx; |
| | | background-color: #E6F7FF; |
| | | color: #1890FF; |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | line-height:54rpx ; |
| | | line-height: 54rpx; |
| | | justify-content: center; |
| | | align-items: center; |
| | | text-align: center; |
| | |
| | | } |
| | | |
| | | .content { |
| | | display: flex; |
| | | flex-direction: column; |
| | | flex: 1; |
| | | min-width: 0; |
| | | padding: 5px; |
| | | |
| | | .line { |
| | |
| | | .title { |
| | | font-size: 36rpx; |
| | | font-weight: 600; |
| | | min-width: 0; |
| | | /* 关键:允许收缩到比内容还窄 */ |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .text { |
| | | padding: 0 10px; |
| | | font-size: 14px; |
| | | color: #1ABC9C; |
| | | .desc { |
| | | flex: 1; |
| | | color: gray; |
| | | min-width: 0; |
| | | /* 关键:允许收缩到比内容还窄 */ |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .cycle { |
| | | color: gray; |
| | | padding: 0 10rpx; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | color: #1890FF; |
| | | |
| | | } |
| | | .disabled{ |
| | | |
| | | .disabled { |
| | | color: gray !important; |
| | | } |
| | | |
| | | } |
| | | .disabled{ |
| | | |
| | | .disabled { |
| | | color: gray; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | .btn-del { |
| | | position: absolute; |
| | | right: -80px; |
| | | top: 0; |
| | | padding: 0 8px; |
| | | line-height: 100px; |
| | | background-color: #CC001A; |
| | | font-weight: 700; |
| | | color: #fff; |
| | | border: none; |
| | | border-radius: 10px; |
| | | border-bottom-right-radius: 0px; |
| | | border-bottom-left-radius: 0px; |
| | | border-top-left-radius: 0px; |
| | | transform: translateX(100%); |
| | | transition: transform 0.3s; |
| | | } |
| | | } |
| | | </style> |