Browse Source

盘点日志/样式完善

master
xuhuajiao 6 months ago
parent
commit
ef3105923f
  1. 60
      src/api/stockTaskLog/index.js
  2. 10
      src/assets/styles/manage.scss
  3. 143
      src/views/components/echarts/taskStockLog.vue
  4. 2
      src/views/visualCheck/checkManage/bookshelfSearch/index.vue
  5. 382
      src/views/visualCheck/checkManage/checkLog/index.vue
  6. 81
      src/views/visualCheck/checkManage/checkPlan/index.vue
  7. 82
      src/views/visualCheck/checkManage/dataScreening/girdList.vue
  8. 28
      src/views/visualCheck/checkManage/dataScreening/shelfList.vue
  9. 12
      src/views/visualCheck/venueDevice/bookshelfPosition/index.vue

60
src/api/stockTaskLog/index.js

@ -0,0 +1,60 @@
import request from '@/utils/request'
import qs from 'qs'
// export function add(data) {
// return request({
// url: 'api/stocktask-task/editStockTask',
// method: 'post',
// data
// })
// }
// export function edit(data) {
// return request({
// url: 'api/stocktask-task/editStockTask',
// method: 'post',
// data
// })
// }
// export function del(ids) {
// return request({
// url: '',
// method: 'post',
// data: ids
// })
// }
// 盘点日志列表
export function FetchInitStockLogList(params) {
return request({
url: 'api/stocktask-task/initStockLogList' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 盘点日志详情
export function FetchInitStockLogDetails(params) {
return request({
url: 'api/stocktask-task/initStockLogDetails' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 根据盘点单id查看各层位详情
export function FetchInitStockTaskDetails(params) {
return request({
url: 'api/stocktask-task/initStockTaskDetails' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 根据盘点单号和层架位编码查看进度
export function FetchProgressByStockBillAndGridCode(params) {
return request({
url: 'api/stocktask-task/getProgressByStockBillAndGridCode' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { FetchInitStockLogList, FetchInitStockLogDetails, FetchProgressByStockBillAndGridCode, FetchInitStockTaskDetails }

10
src/assets/styles/manage.scss

@ -301,7 +301,7 @@
.cabinet-row{
display: flex;
flex: 1;
// flex: 1;
flex-wrap: wrap;
text-align: center;
// height: 100%;
@ -377,7 +377,7 @@
.tag-place{
i{
color: #FF8329;
color: #ED4A41;
}
}
@ -386,3 +386,9 @@
color: #2ECAAC;
}
}
.tag-all{
i{
color: #0C0E1E;
}
}

143
src/views/components/echarts/taskStockLog.vue

@ -0,0 +1,143 @@
<template>
<!-- 档案类型 -->
<div id="stockLog" :style="{height:height,width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from '@/views/dashboard/mixins/resize'
export default {
name: 'AcrossEcharts',
mixins: [resize],
props: {
taskStockLogData: {
type: Array,
require: true,
default: function() {
return []
}
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '100%'
}
},
data() {
return {
chart: null
}
},
watch: {
'taskStockLogData': {
handler(val) {
setTimeout(() => {
this.drawChart()
}, 100)
},
immediate: true,
deep: true
}
},
mounted() {
this.drawChart()
window.addEventListener('resize', this.__resizeHandler)
},
methods: {
drawChart() {
const chartDom = document.getElementById('stockLog')
this.chart = echarts.init(chartDom)
let option = null
option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
right: 12,
top: 0,
bottom: 20,
icon: 'rect',
itemHeight: 14,
itemWidth: 14,
textStyle: {
color: '#545B65'
},
formatter: function(name) {
if (!name) return ''
if (name.length > 10) {
name = name.slice(0, 10) + '...'
}
return name
}
},
series: [
{
name: '',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: false
}
},
labelLine: {
normal: {
length: 4, // 线
length2: 40 // 线
}
},
itemStyle: {
normal: {
label: {
show: true,
formatter: function(item) {
const data = option.series[0].data
let total = 0
let tarValue = 0
for (let i = 0, l = data.length; i < l; i++) {
total += data[i].value
if (data[i].name === item.name) {
tarValue = data[i].value
}
}
if (total === 0) {
return '0.00%'
}
const p = (tarValue / total * 100).toFixed(2)
return p + '%'
}
},
borderColor: '#fff',
borderWidth: 4,
color: function(params) {
var colorItem = ['#2ecaac', '#ED4A41', '#0348f3']
var colorList = []
for (var i = 0; i < option.series[0].data.length; i++) {
colorList.push(colorItem[i % 5])
}
return colorList[params.dataIndex]
}
}
},
data: this.taskStockLogData
}
]
}
option && this.chart.setOption(option)
}
}
}
</script>
<style lang="scss" scoped>
</style>

2
src/views/visualCheck/checkManage/bookshelfSearch/index.vue

@ -59,7 +59,7 @@
<div class="tag-info">
<p class="tag-sort">错序<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-place">错架<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-in">在架<i class="iconfont icon-zhuangtai2" />20</p>
<p class="tag-all">在架<i class="iconfont icon-zhuangtai2" />20</p>
</div>
<!-- <span class="row-state row-binding state-active">在架</span>
<span class="row-state row-lending state-active">错架</span>

382
src/views/visualCheck/checkManage/checkLog/index.vue

@ -3,11 +3,11 @@
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<el-select v-model="query.status" clearable size="small" placeholder="盘点状态" class="filter-item" style="width: 120px" @change="crud.toQuery">
<el-select v-model="query.stockStatus" clearable size="small" placeholder="盘点状态" class="filter-item" style="width: 120px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai" />
<el-option v-for="item in statusOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select>
<el-select v-model="query.status" clearable size="small" placeholder="盘点类型" class="filter-item" style="width: 120px" @change="crud.toQuery">
<el-select v-model="query.stockType" clearable size="small" placeholder="盘点类型" class="filter-item" style="width: 120px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai" />
<el-option v-for="item in TypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select>
@ -21,12 +21,6 @@
全量盘点
</el-button>
</template>
<template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</el-button>
</template>
</crudOperation>
</div>
<div class="container-wrap">
@ -38,33 +32,52 @@
class="archives-table"
:data="crud.data"
style="width: 100%;"
height="540"
height="calc(100vh - 329px)"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
@row-dblclick="handleDbClick"
>
<el-table-column prop="regionName" label="盘点单号" />
<el-table-column prop="regionCode" label="盘点类型" />
<el-table-column prop="floorName" label="目标位置" />
<el-table-column prop="booksheflCount" label="目标数量" />
<el-table-column prop="booksheflCount" label="备注" />
<el-table-column prop="createTime" label="盘点开始时间">
<el-table-column prop="stockBill" label="盘点单号" />
<el-table-column prop="stockType" label="盘点类型">
<template slot-scope="scope">
<span v-if="scope.row.stockType===1">全量盘点</span>
<span v-if="scope.row.stockType===2">区域盘点</span>
<span v-if="scope.row.stockType===3">计划盘点</span>
<span v-if="scope.row.stockType===4">书架盘点</span>
<span v-if="scope.row.stockType===5">架位盘点</span>
<span v-if="scope.row.stockType===6">层位盘点</span>
</template>
</el-table-column>
<el-table-column prop="stockRegion" label="目标位置" :show-overflow-tooltip="true" />
<el-table-column prop="stockGridNum" label="目标数量">
<template slot-scope="scope">
<div>{{ scope.row.stockGridNum + ' / 层位' }}</div>
</template>
</el-table-column>
<el-table-column prop="stockRemarks" label="备注">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div v-if="scope.row.stockRemarks !== null">{{ scope.row.stockRemarks }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column prop="createTime" label="盘点结束时间">
<el-table-column prop="startTime" label="盘点开始时间">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div v-if="scope.row.startTime !== null">{{ scope.row.startTime | parseTime }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column label="盘点状态" align="center" prop="deptsStatus">
<!-- slot-scope="scope" -->
<template>
<span class="row-state row-warehousing state-active">排队中</span>
<!-- <span class="row-state row-binding state-active">盘点中</span>
<span class="row-state row-lending state-active">已终止</span>
<span class="row-state row-physical state-active">已完成</span> -->
<el-table-column prop="endTime" label="盘点结束时间">
<template slot-scope="scope">
<div v-if="scope.row.endTime !== null">{{ scope.row.endTime | parseTime }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column prop="state" label="盘点状态" align="center">
<template slot-scope="scope">
<span v-if="scope.row.state === 0" class="row-state row-lending state-active">已终止</span>
<span v-if="scope.row.state === 1" class="row-state row-warehousing state-active">排队中</span>
<span v-if="scope.row.state === 2" class="row-state row-binding state-active">盘点中</span>
<span v-if="scope.row.state === 3" class="row-state row-physical state-active">已完成</span>
</template>
</el-table-column>
</el-table>
@ -79,16 +92,16 @@
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="盘点单号" prop="taskName">
<el-input v-model="form.taskName" />
<el-input v-model="form.taskName" disabled />
</el-form-item>
<el-form-item label="盘点类型" prop="taskType">
<el-input v-model="form.taskType" />
<el-input v-model="form.taskType" disabled />
</el-form-item>
<el-form-item label="目标位置" prop="location">
<el-input v-model="form.location" />
<el-input v-model="form.location" disabled />
</el-form-item>
<el-form-item label="目标数量" prop="number">
<el-input v-model="form.number" />
<el-input v-model="form.number" disabled />
</el-form-item>
<el-row>
<el-form-item label="备注" prop="remark">
@ -112,62 +125,100 @@
<li :class="{'active-tab-nav': tabIndex === 0}" @click="changeDetailTab(0)">基础信息</li>
<li :class="{'active-tab-nav': tabIndex === 1}" @click="changeDetailTab(1)">层位盘点信息</li>
</ul>
<el-button v-if="detailInfo.state === 3" style="position: absolute; right: 0; top: -10px;" size="mini" @click="doExport(detailInfo)">
<i class="iconfont icon-daochu" />
导出
</el-button>
<div v-if="tabIndex===0" class="detail-check">
<ul class="book-detail">
<li><span>盘点单号</span>P20241209001</li>
<li><span>盘点类型</span>全量盘点</li>
<li><span>目标位置</span>全部区域</li>
<li><span>目标数量</span>396 / 层位</li>
<li class="row-li"><span>备注</span></li>
<li><span>开始时间</span>2024-12-09 08:00:00</li>
<li><span>结束时间</span>2024-12-09 09:00:00</li>
<li><span>盘点单号</span>{{ detailInfo.stockBill }}</li>
<li v-if="detailInfo.stockType===1"><span>盘点类型</span>全量盘点</li>
<li v-if="detailInfo.stockType===2"><span>盘点类型</span>区域盘点</li>
<li v-if="detailInfo.stockType===3"><span>盘点类型</span>计划盘点</li>
<li v-if="detailInfo.stockType===4"><span>盘点类型</span>书架盘点</li>
<li v-if="detailInfo.stockType===5"><span>盘点类型</span>架位盘点</li>
<li v-if="detailInfo.stockType===6"><span>盘点类型</span>层位盘点</li>
<li><span>目标位置</span>{{ detailInfo.stockRegion }}</li>
<li><span>目标数量</span>{{ detailInfo.stockGridNum }} / 层位</li>
<li v-if="detailInfo.stockRemarks !== null" class="row-li"><span>备注</span>{{ detailInfo.stockRemarks }}</li>
<li v-else class="row-li"><span>备注</span>-</li>
<li v-if="detailInfo.startTime !== null"><span>开始时间</span>{{ detailInfo.startTime | parseTime }}</li>
<li v-else><span>开始时间</span>-</li>
<li v-if="detailInfo.endTime !== null"><span>结束时间</span>{{ detailInfo.endTime | parseTime }}</li>
<li v-else><span>结束时间</span>-</li>
<li class="row-li" style="margin-left: 30px;">
<i class="row-state soon-state">排队中</i>
<!-- <i class="row-state end-state">盘点中</i>
<i class="row-state cancel-state">已终止</i>
<i class="row-state ing-state">已完成</i> -->
<i v-if="detailInfo.state === 0" class="row-state cancel-state">已终止</i>
<i v-if="detailInfo.state === 1" class="row-state soon-state">排队</i>
<i v-if="detailInfo.state === 2" class="row-state end-state">盘点中</i>
<i v-if="detailInfo.state === 3" class="row-state ing-state">已完成</i>
</li>
</ul>
<div class="detail-other">
<ul class="book-detail">
<li class="row-li"><span>在架图书</span>40000 / </li>
<li><span>错架图书</span>30 / </li>
<li><span>错架率</span>0.75%</li>
<li><span>错序图书</span>5 / </li>
<li><span>错序率</span>0.01%</li>
<li class="row-li"><span>在架图书</span><p><i style=" font-weight: bold;">{{ detailInfo.onShelfNum }}</i> / </p></li>
<li><span>错架图书</span><p><i style="color:#ED4A41; font-weight: bold;">{{ detailInfo.errorShelfNum }}</i> / </p></li>
<li><span>错架率</span><p style="color:#ED4A41; font-weight: bold;">{{ detailInfo.errorShelfProba }}</p></li>
<li><span>错序图书</span><p><i style="color:#0348f3; font-weight: bold;">{{ detailInfo.errorOrderNum }}</i> / </p></li>
<li><span>错序率</span><p style="color:#0348f3; font-weight: bold;">{{ detailInfo.errorOrderProba }}</p></li>
</ul>
<div>
图表部分
<!-- 图表部分 -->
<div style="width: 60%; height: 140px;">
<taskStockLogEcharts :task-stock-log-data="taskStockLogData" />
</div>
</div>
</div>
<div v-if="tabIndex===1">
<el-table
ref="table"
v-loading="gridTableLoading"
class="archives-table"
:data="detailTable"
style="width: 100%;"
>
<el-table-column prop="regionCode" label="层位架" />
<el-table-column prop="gridName" label="层位架" min-width="180" :show-overflow-tooltip="true" />
<el-table-column prop="floorName" label="楼层" />
<el-table-column prop="booksheflCount" label="区域" />
<el-table-column prop="booksheflCount" label="盘点详情" />
<el-table-column prop="booksheflCount" label="进度" />
<el-table-column prop="createTime" label="状态">
<!-- slot-scope="scope" -->
<template>
<span class="row-state row-warehousing state-active">排队中</span>
<!-- <span class="row-state row-binding state-active">盘点中</span>
<span class="row-state row-lending state-active">已终止</span>
<span class="row-state row-physical state-active">已完成</span> -->
<el-table-column prop="regionName" label="区域" />
<el-table-column prop="booksheflCount" label="盘点详情" min-width="280" :show-overflow-tooltip="true">
<template slot-scope="scope">
<ul class="detail-table-info">
<li><span>在架</span><p><i>{{ scope.row.onShelfNum }}</i> / </p> </li>
<li><span>错架</span><p><i style="color:#ED4A41;">{{ scope.row.errorShelfNum }}</i> / </p> </li>
<li><span>错序</span><p><i style="color:#0348f3;">{{ scope.row.errorOrderNum }}</i> / </p> </li>
</ul>
</template>
</el-table-column>
<el-table-column prop="progress" label="进度" min-width="140" />
<el-table-column prop="state" label="状态" width="80">
<template slot-scope="scope">
<span v-if="scope.row.state === 0" class="row-state row-lending state-active">已终止</span>
<span v-if="scope.row.state === 1" class="row-state row-warehousing state-active">排队中</span>
<span v-if="scope.row.state === 2" class="row-state row-binding state-active">盘点中</span>
<span v-if="scope.row.state === 3" class="row-state row-physical state-active">已完成</span>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="detailTable.length !== 0"
:page-size.sync="detailPage.size"
:total="detailPage.total"
:current-page.sync="detailPage.page"
style="margin-top: 8px;"
:pager-count="5"
layout="total, sizes, prev, pager, next"
@size-change="handleSizeChange"
@current-change="handleCurrentPage"
/>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" class="end-btn"><i class="iconfont icon-stop" />终止盘点</el-button>
<!-- 排队中会多一个删除盘点 进行中的多一个终止盘点 -->
<el-button v-if="detailInfo.state === 1" type="primary" class="end-btn"><i class="iconfont icon-stop" />删除盘点</el-button>
<el-button v-if="detailInfo.state === 2" type="primary" class="end-btn"><i class="iconfont icon-stop" />终止盘点</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="detailVisible=false">确定</el-button>
</div>
</div>
@ -177,21 +228,22 @@
</template>
<script>
import crudRegion from '@/api/area/index'
import crudStockTaskLog from '@/api/stockTaskLog/index'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'
import taskStockLogEcharts from '@/views/components/echarts/taskStockLog.vue'
import { mapGetters } from 'vuex'
// import { exportFile } from '@/utils/index'
// import qs from 'qs'
import { parseTime, saveAs, getBlob } from '@/utils/index'
import qs from 'qs'
const defaultForm = { id: null, taskType: null, taskName: null, location: null, number: null, remark: null }
export default {
name: 'CheckLog',
components: { crudOperation, rrOperation, pagination },
components: { crudOperation, rrOperation, pagination, taskStockLogEcharts },
cruds() {
return CRUD({ title: '盘点', url: 'api/libraryRegion/initLibraryRegionList', crudMethod: { ...crudRegion }, sort: [], optShow: {
return CRUD({ title: '盘点日志', idField: 'billId', url: 'api/stocktask-task/initStockLogList', crudMethod: { ...crudStockTaskLog }, sort: [], optShow: {
add: false,
edit: false,
del: false,
@ -204,22 +256,31 @@ export default {
data() {
return {
statusOptions: [
{ key: '1', display_name: '排队中' },
{ key: '2', display_name: '进行中' },
{ key: '3', display_name: '已终止' },
{ key: '4', display_name: '已完成' }
{ key: 0, display_name: '已终止' },
{ key: 1, display_name: '排队中' },
{ key: 2, display_name: '盘点中' },
{ key: 3, display_name: '已完成' }
],
TypeOptions: [
{ key: '1', display_name: '计划盘点' },
{ key: '2', display_name: '全量盘点' },
{ key: '3', display_name: '区域盘点' },
{ key: '4', display_name: '书架盘点' },
{ key: '5', display_name: '架位盘点' },
{ key: '6', display_name: '层位盘点' }
{ key: 1, display_name: '全量盘点' },
{ key: 2, display_name: '区域盘点' },
{ key: 3, display_name: '计划盘点' },
{ key: 4, display_name: '书架盘点' },
{ key: 5, display_name: '架位盘点' },
{ key: 6, display_name: '层位盘点' }
],
tabIndex: 0,
detailVisible: false,
detailTable: [{}],
dbRowData: {},
detailInfo: {},
taskStockLogData: [],
gridTableLoading: false,
detailPage: {
page: 1,
size: 10,
total: 0
},
detailTable: [],
permission: {
add: ['admin', 'checkLog:add'],
edit: ['admin', 'checkLog:edit'],
@ -267,82 +328,94 @@ export default {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
toDelete(datas) {
this.$confirm('此操作将删除当前任务<span>你是否还要继续?</span>', '提示', {
doExport(data) {
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
const params = {
'billId': data.id
}
const fileName = '盘点单-' + parseTime(new Date()) + '.xlsx'
getBlob(this.baseApi + '/api/stocktask-task/exportStockBill' + '?' + qs.stringify(params, { indices: false }), function(blob) {
saveAs(blob, fileName)
})
console.log(ids)
// crudRegion.del(ids).then(res => {
// console.log(res)
// this.$message({ message: res, type: 'success', offset: 8 })
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
this.crud.delAllLoading = false
})
},
//
changeStatus(data, val) {
data.id = data.deptsId
this.$confirm('此操作将禁用 / 启用当前任务' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
// crudDept.FetchUpdateDeptsStatus(data).then(res => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.refresh()
// }).catch(() => {
// data.deptsStatus = !data.deptsStatus
// })
handleDbClick(row) {
this.tabIndex = 0
this.detailVisible = true
this.dbRowData = row
this.detailTable = []
crudStockTaskLog.FetchInitStockLogDetails({ 'billId': row.billId }).then(res => {
this.detailInfo = res
this.taskStockLogData = [
{ value: res.onShelfNum - res.errorShelfNum - res.errorOrderNum, name: '正常在架' },
{ value: res.errorShelfNum, name: '错架' },
{ value: res.errorOrderNum, name: '错序' }
]
}).catch(() => {
this.$message({ message: '已取消修改', offset: 8 })
data.deptsStatus = data.deptsStatus ? 0 : 1
})
},
doExport(data) {
console.log(data)
this.crud.downloadLoading = true
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = []
data.forEach(val => {
ids.push(val.deptsId)
})
const params = {
'deptsIds': ids
changeDetailTab(index) {
this.tabIndex = index
if (index === 1) {
this.getInitStockTaskDetails()
}
},
getInitStockTaskDetails() {
this.gridTableLoading = true
const params = {
'billId': this.dbRowData.billId,
'page': this.detailPage.page - 1,
'size': this.detailPage.size
}
crudStockTaskLog.FetchInitStockTaskDetails(params).then(res => {
if (res) {
const progressPromises = res.content.map(item => {
const paramsProgress = {
'stockBill': this.dbRowData.stockBill,
'gridCode': item.gridCode
}
return crudStockTaskLog.FetchProgressByStockBillAndGridCode(paramsProgress)
})
Promise.all(progressPromises).then(progressResults => {
this.detailTable = res.content.map((item, index) => {
item.progress = progressResults[index]
return item
})
this.gridTableLoading = false
}).catch(error => {
console.error(error)
this.gridTableLoading = false
})
this.detailPage.total = res.totalElements
}
console.log(params)
// exportFile(this.baseApi + '/api/depts/download?' + qs.stringify(params, { indices: false }))
// this.crud.downloadLoading = false
}).catch(() => {
this.gridTableLoading = false
})
},
handleDbClick() {
this.detailVisible = true
handleSizeChange(size) {
this.detailPage.size = size
this.detailPage.page = 1
this.tabIndex = 1
this.getInitStockTaskDetails()
},
changeDetailTab(index) {
this.tabIndex = index
handleCurrentPage(val) {
this.detailPage.page = val
this.tabIndex = 1
this.getInitStockTaskDetails()
},
handleCloseDialog() {
this.detailVisible = false
this.tabIndex = 0
}
}
}
@ -392,11 +465,31 @@ export default {
.detail-other{
display: flex;
justify-content: space-between;
align-items: flex-start;
border-top: 1px solid #edeff3;
padding-top: 20px;
margin-top: 20px;
.book-detail{
width: 60%;
width: 50%;
li{
display: flex;
justify-content: flex-start;
// width: 50%;
span{
display: block;
width: 100px;
text-align: right;
margin-right: 0;
}
p{
width: 100px;
text-align: right;
i{
padding: 0;
}
}
}
}
}
::v-deep .dialog-footer{
@ -406,4 +499,27 @@ export default {
margin: 0 !important;
}
}
.detail-table-info{
display: flex;
justify-content: flex-start;
li{
width: calc(100% / 3);
margin-right: 15px;
span{
display: inline-block;
width: 40px;
text-align: right;
}
p{
display: inline-block;
text-align: right;
width: calc(100% - 40px);
i{
font-weight: bold;
font-style: normal;
}
}
}
}
</style>

81
src/views/visualCheck/checkManage/checkPlan/index.vue

@ -33,7 +33,7 @@
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
height="540"
height="calc(100vh - 329px)"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
@row-dblclick="handleDbClick"
@ -204,24 +204,52 @@
</el-dialog>
<!-- 双击详情 -->
<el-dialog append-to-body :close-on-click-modal="false" :visible.sync="detailVisible" title="定时盘点任务1 - 日志" @close="handleCloseDialog">
<el-dialog class="detailBook" append-to-body :close-on-click-modal="false" :visible.sync="detailVisible" :title="detailTitle" @close="handleCloseDialog">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table
ref="table"
:data="detailTable"
class="archives-table"
style="width: 100%;"
>
<el-table-column prop="regionCode" label="任务类型" />
<el-table-column prop="floorName" label="目标位置" />
<el-table-column prop="booksheflCount" label="执行结果" />
<el-table-column prop="createTime" label="完成时间">
<el-table-column prop="stockType" label="任务类型">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<span v-if="scope.row.stockType===1">全量盘点</span>
<span v-if="scope.row.stockType===2">区域盘点</span>
<span v-if="scope.row.stockType===3">计划盘点</span>
<span v-if="scope.row.stockType===4">书架盘点</span>
<span v-if="scope.row.stockType===5">架位盘点</span>
<span v-if="scope.row.stockType===6">层位盘点</span>
</template>
</el-table-column>
<el-table-column prop="stockRegion" label="目标位置" />
<el-table-column prop="state" label="执行结果" width="80">
<template slot-scope="scope">
<span v-if="scope.row.state === 0" class="row-state row-lending state-active">已终止</span>
<span v-if="scope.row.state === 1" class="row-state row-warehousing state-active">排队中</span>
<span v-if="scope.row.state === 2" class="row-state row-binding state-active">盘点中</span>
<span v-if="scope.row.state === 3" class="row-state row-physical state-active">已完成</span>
</template>
</el-table-column>
<el-table-column prop="endTime" label="完成时间">
<template slot-scope="scope">
<div>{{ scope.row.endTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<el-pagination
v-if="detailTable.length !== 0"
:page-size.sync="detailPage.size"
:total="detailPage.total"
:current-page.sync="detailPage.page"
style="margin-top: 8px;"
:pager-count="5"
layout="total, sizes, prev, pager, next"
@size-change="handleSizeChange"
@current-change="handleCurrentPage"
/>
</div>
</el-dialog>
@ -230,6 +258,7 @@
<script>
import crudStocktask from '@/api/stockTask/index'
import { FetchInitStockLogList } from '@/api/stockTaskLog/index'
import { FetchRegionTree } from '@/api/deviceVI/index'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
@ -264,7 +293,14 @@ export default {
{ key: 0, display_name: '锁定' }
],
detailVisible: false,
detailTitle: '-日志',
detailTable: [],
dbRowData: {},
detailPage: {
page: 1,
size: 10,
total: 0
},
regionOptions: [],
tabIndex: 0,
permission: {
@ -278,7 +314,6 @@ export default {
value: 1
}
],
deviceOptions: [],
timeTypeOptions: [
{
label: '周循环',
@ -438,7 +473,6 @@ export default {
}
},
[CRUD.HOOK.beforeRefresh]() {
},
[CRUD.HOOK.afterRefresh](crud) {
},
@ -636,14 +670,35 @@ export default {
this.crud.downloadLoading = false
})
},
changeActiveTab(index) {
this.archivesTabIndex = index
},
handleDbClick(row) {
this.detailVisible = true
this.dbRowData = row
this.detailTitle = row.taskName + ' - 日志'
this.getStockLogList()
},
getStockLogList() {
const params = {
'taskId': this.dbRowData.id,
'page': this.detailPage.page - 1,
'size': this.detailPage.size
}
FetchInitStockLogList(params).then(res => {
this.detailTable = res.content
this.detailPage.total = res.totalElements
}).catch(() => {
})
},
handleSizeChange(size) {
this.detailPage.size = size
this.detailPage.page = 1
this.getStockLogList()
},
handleCurrentPage(val) {
this.detailPage.page = val
this.getStockLogList()
},
handleCloseDialog() {
this.detailVisible = false
}
}
}

82
src/views/visualCheck/checkManage/dataScreening/girdList.vue

@ -18,7 +18,7 @@
<div class="tag-info">
<p class="tag-sort">错序<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-place">错架<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-in">在架<i class="iconfont icon-zhuangtai2" />20</p>
<p class="tag-all">在架<i class="iconfont icon-zhuangtai2" />20</p>
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
@ -65,7 +65,7 @@
<div class="layer-tag-info">
<div class="tag-item tag-sort">错序<i class="iconfont icon-zhuangtai2" /><p>1</p><span>5.00%</span></div>
<div class="tag-item tag-place">错架<i class="iconfont icon-zhuangtai2" /><p>1</p><span>5.00%</span></div>
<div class="tag-item tag-in">在架<i class="iconfont icon-zhuangtai2" /><p>20</p></div>
<div class="tag-item tag-all">在架<i class="iconfont icon-zhuangtai2" /><p>20</p></div>
</div>
<div class="layer-handle">
<el-button size="mini" @click="handleDetail">
@ -88,14 +88,14 @@
>
<div class="popover-content">
<div class="tooltip-top">
<h4>层位概况</h4>
<i class="update-time">2024-11-28 09:46</i>
<h4>水浒传</h4>
<span class="tag-item tag-sort">错架</span>
</div>
<ul>
<li><p>层位</p><em class="percentage"><i style="color: #fff;">{{ currentBookName }}</i></em></li>
<li><p>在架</p><em><i>15000</i></em></li>
<li><p>错架</p><em><i>300</i></em> <em class="percentage">2.00%</em></li>
<li><p>错序</p><em><i>0</i></em><em class="percentage">0.00%</em></li>
<li><p>索书号</p><em>I247/163:03</em></li>
<li><p>ISBN</p><em>96532175632</em></li>
<li><p>著者</p><em>施耐庵</em></li>
<li><p>出版社</p><em>人民出版社</em></li>
</ul>
</div>
</div>
@ -161,9 +161,9 @@
<el-table-column prop="booksheflCount" label="条码" />
<el-table-column prop="booksheflCount" label="应在位置" />
<el-table-column prop="booksheflCount" label="盘点位置" />
<el-table-column prop="booksheflCount" label="盘点结果">
<el-table-column prop="booksheflCount" label="盘点结果" align="center">
<template>
<span class="row-state row-warehousing state-active">错架</span>
<span class="row-state row-lending state-active">错架</span>
<!-- <span class="row-state row-binding state-active">在架</span>
<span class="row-state row-physical state-active">错序</span> -->
</template>
@ -492,7 +492,7 @@ export default {
console.log('this.popoverPosition ', this.popoverPosition)
},
hidePopover() {
this.popoverIndex = null
// this.popoverIndex = null
// popover
// this.popoverVisible.forEach((isVisible, index) => {
// if (isVisible) {
@ -536,23 +536,23 @@ export default {
}
}
.tag-sort{
i{
color: #0348F3;
}
}
// .tag-sort{
// i{
// color: #0348F3;
// }
// }
.tag-place{
i{
color: #FF8329;
}
}
// .tag-place{
// i{
// color: #ED4A41;
// }
// }
.tag-in{
i{
color: #2ECAAC;
}
}
// .tag-in{
// i{
// color: #2ECAAC;
// }
// }
.gird-data-book{
position: relative;
@ -764,6 +764,34 @@ export default {
font-style: normal;
font-size: 12px;
}
.tag-item{
display: block;
// width: 50px;
height: 22px;
line-height: 20px;
padding: 0 4px;
border-radius: 3px;
font-size: 12px;
color: #A6ADB6;
border: 1px solid #E6E8ED;
background-color: #F3F5F9;
text-align: center;
&.tag-sort{
color: #FD7359 !important;
border-color: #FBC0B5 !important;
background-color: #FCECE9 !important;
}
&.tag-place{
color: #018BFF !important;
border-color: #9BD1FF !important;
background-color: #DCEDFD !important;
}
&.tag-all{
color: #0C0E1E;
border-color: #545B65 !important;
background-color: #E6E8ED !important;
}
}
ul{
padding: 10px;
}
@ -781,7 +809,7 @@ export default {
text-align: right;
}
ul li em{
width: 100px;
width: 140px;
display: block;
text-align: right;
font-style: normal;

28
src/views/visualCheck/checkManage/dataScreening/shelfList.vue

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<div class="venue-header">
<div class="venue-header dataScreening-header">
<h4 @click="handleToGrids"><i class="iconfont icon-shuju" />书架总览</h4>
<span class="bookshelf-area">{{ floorName }} - {{ regionName }}</span>
<p><i class="iconfont icon-gongsi" />{{ user.fonds.fondsName }}</p>
@ -35,13 +35,13 @@
<div class="tag-info">
<p class="tag-sort">错序<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-place">错架<i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-in">在架<i class="iconfont icon-zhuangtai2" />20</p>
<p class="tag-all">在架<i class="iconfont icon-zhuangtai2" />20</p>
</div>
<!-- </div> -->
<div class="shelf-top">
<p v-for="(item,index) in reversedRackNum" :key="index" :style="{width: `calc(${'100%/' + rackNum} - 4px )`}"><span>{{ item + '架' }}</span></p>
<div class="shelf-top" :style="rowStyle">
<p v-for="(item,index) in reversedRackNum" :key="index" :style="{width: `calc(142px)`}"><span>{{ item + '架' }}</span></p>
</div>
<ul v-loading="listLoading" class="data-shelf-row">
<ul v-loading="listLoading" class="data-shelf-row" :style="rowStyle">
<!-- :class="{ active: i === cellIndex }" -->
<li
v-for="(cell,i) in booShelfGrid"
@ -56,7 +56,7 @@
<div class="tag-info">
<p class="tag-sort"><i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-place"><i class="iconfont icon-zhuangtai2" />1</p>
<p class="tag-in"><i class="iconfont icon-zhuangtai2" />20</p>
<p class="tag-all"><i class="iconfont icon-zhuangtai2" />20</p>
</div>
<el-popover
v-if="popoverIndex === i"
@ -234,13 +234,23 @@ export default {
swiperTitle() {
return this.$refs.swiperTitle.$el.swiper
},
// cellStyle: function() {
// // const h = '100%/' + this.layerNum
// // const w = '100%/' + this.rackNum
// const h = '76px'
// const w = '100%/' + this.rackNum
// return { width: `calc(${w} )`, height: `calc(${h})` }
// },
cellStyle: function() {
// const h = '100%/' + this.layerNum
// const w = '100%/' + this.rackNum
const h = '76px'
const w = '100%/' + this.rackNum
// const w = '100%/' + this.rackNum
const w = '146px'
return { width: `calc(${w} )`, height: `calc(${h})` }
},
rowStyle: function() {
const w = 146 * this.rackNum + 'px'
return { width: `calc(${w})` }
},
reversedRackNum() {
if (this.booShelfGrid && this.booShelfGrid.length > 0) {
console.log('ddd')

12
src/views/visualCheck/venueDevice/bookshelfPosition/index.vue

@ -57,6 +57,7 @@
<swiper
ref="swiperContent"
class="swiper-content"
:style="rowStyle"
:options="swiperOptionContent"
:auto-update="true"
:auto-destroy="true"
@ -68,7 +69,7 @@
:key="'content' + index"
class="swiper-slide-content"
>
<ul class="cabinet-row">
<ul class="cabinet-row" :style="rowStyle">
<li v-for="(item,index) in booShelfGrid" :key="index" class="cabinet-cell" :style="cellStyle" :class="{ active: index === cellIndex }" @click="handleCellCurrent(item,index)">
<span>{{ removeAreaPrefix(item.gridName) }}</span>
</li>
@ -254,8 +255,12 @@ export default {
// const h = '100%/' + this.layerNum
// const w = '100%/' + this.rackNum
const h = '60px'
const w = '100%/' + this.rackNum
const w = '146px'
return { width: `calc(${w} - 4px )`, height: `calc(${h} - 2px)` }
},
rowStyle: function() {
const w = 146 * this.rackNum + 'px'
return { width: `calc(${w})` }
}
},
watch: {
@ -583,4 +588,7 @@ export default {
width: 1000px !important;
}
}
.swiper-container{
margin: 0 !important;
}
</style>
Loading…
Cancel
Save