图书馆综合管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

804 lines
31 KiB

<template>
<div class="app-container row-container">
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<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.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>
<date-range-picker v-model="blurryTime" class="date-item" />
<el-input v-model="query.search" clearable size="small" placeholder="输入单号/备注关键字搜索" prefix-icon="el-icon-search" style="width: 220px;" class="filter-item" @clear="crud.toQuery" @keyup.enter.native="crud.toQuery" />
<rrOperation />
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button v-permission="permission.add" class="check-btn" size="mini" @click="crud.toAdd">
<i class="iconfont icon-shengchengpandiandan" />
全量盘点
</el-button>
</template>
</crudOperation>
</div>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-table
ref="table"
v-loading="crud.loading"
class="archives-table"
:data="crud.data"
style="width: 100%;"
height="calc(100vh - 329px)"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
@row-dblclick="handleDbClick"
>
<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>
<span v-if="scope.row.stockType===7">移动盘点</span>
</template>
</el-table-column>
<el-table-column prop="stockRegion" label="目标位置" min-width="180" />
<el-table-column prop="stockGridNum" label="目标数量">
<template slot-scope="scope">
<div>{{ scope.row.stockGridNum + ' / '+ (scope.row.totalGridNum?scope.row.totalGridNum:'0') +' 层位' }}</div>
</template>
</el-table-column>
<el-table-column prop="stockRemarks" label="备注">
<template slot-scope="scope">
<div v-if="scope.row.stockRemarks !== null">{{ scope.row.stockRemarks }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column prop="startTime" label="盘点开始时间">
<template slot-scope="scope">
<div v-if="scope.row.startTime !== null">{{ scope.row.startTime | parseTime }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<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>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
<!-- form -->
<el-dialog :class="unreachable.length !== 0 ? 'stock-dialog':''" append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog" style="display: flex; justify-content: flex-start;">
<div :style=" {'width': unreachable.length !== 0 ? '670px':''}">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="盘点单号" prop="stockBill">
<el-input v-model="form.stockBill" disabled />
</el-form-item>
<el-form-item label="盘点类型" prop="stockTypeName">
<el-input v-model="form.stockTypeName" disabled />
</el-form-item>
<el-form-item label="目标位置" prop="stockRegion">
<el-input v-model="form.stockRegion" disabled />
</el-form-item>
<el-form-item
class="stockGridNumName-style"
label="目标数量"
prop="stockGridNumName"
>
<span v-if="stockInfoLoading" class="el-icon-loading" />
<!-- <el-input v-else disabled v-html="form.stockGridNumName" /> -->
<div v-else style="display: flex; justify-content: flex-start;">
<el-input disabled v-html="form.stockGridNumName" />
<el-popover
class="stock-popover"
placement="top-start"
width="250"
trigger="hover"
>
<div>
<span style="display:block; font-weight: bold; margin-bottom: 10px;">A / B / C 层位 </span>
A:开启盘点功能 且 当前可盘点 层位数量<br>
B:开启盘点功能 且 当前不可盘点 层为数量<br>
C:具备盘点功能的 层位数量
</div>
<i slot="reference" class="iconfont icon-zhuyi-lan" />
</el-popover>
</div>
</el-form-item>
<el-row>
<el-form-item label="备注" prop="stockRemarks">
<el-input v-model="form.stockRemarks" type="textarea" style="width: 572px;" :rows="4" />
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="padding-right: 20px;">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :disabled="isBtnDisabled" :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">保存</el-button>
</div>
</div>
<div v-if="unreachable.length !== 0" style="width: 500px; margin-left: 10px;">
<div class="stock-info-tips">
<p>注意:系统检查到,有参与本次盘点的摄像头无法连接!仅<i>{{ reachable.length }}</i>/个层架位可盘点。</p>
<span>不可盘点具体情况如下:</span>
</div>
<div style="display: flex; justify-content: space-between;">
<el-card class="box-card">
<div slot="header">
<span>无法连接的摄像头( <i style="color: #f53f3f; font-weight: bold; font-style: normal;">{{ ipStatusFalseNum }}</i> /个)</span>
</div>
<div v-for="(item,index) in ipStatusFalse" :key="index" class="stock-info-item">
<span> {{ item.ip }} </span>
</div>
</el-card>
<el-card class="box-card">
<div slot="header">
<span>无法盘点的层架位( <i style="color: #f53f3f; font-weight: bold; font-style: normal;">{{ unreachable.length }}</i> /个)</span>
</div>
<div v-for="(item,index) in unreachable" :key="index" class="stock-info-item">
<span> {{ item.gridName }} </span>
</div>
</el-card>
</div>
</div>
</div>
</el-dialog>
<el-dialog class="detailBook" append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="handleCloseDialog" :visible="detailVisible" title="盘点详情">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="detail-tab tab-content">
<ul class="tab-nav">
<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>{{ 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 v-if="detailInfo.stockType===7"><span>盘点类型:</span>移动盘点</li>
<li><span>目标位置:</span>{{ detailInfo.stockRegion }}</li>
<li><span>目标数量:</span>{{ detailInfo.stockGridNum }} / {{ detailInfo.totalGridNum }} 层位</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 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><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 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="gridName" label="层位架" min-width="180" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.gridName | removeQUPrefix }}
</template>
</el-table-column>
<el-table-column prop="floorName" label="楼层" />
<el-table-column prop="regionName" label="区域" min-width="120" />
<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="120" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ scope.row.progress !== null ? scope.row.progress : '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="detailsRemarks" label="备注" min-width="100" :show-overflow-tooltip="true" />
<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 v-if="detailInfo.state === 1" :loading="crud.delAllLoading" type="primary" class="end-btn" @click="toDelete"><i class="iconfont icon-stop" />删除盘点</el-button>
<el-button v-if="detailInfo.state === 2" :loading="stopLoading" type="primary" class="end-btn" @click="toStopStockBill"><i class="iconfont icon-stop" />终止盘点</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="detailVisible=false">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
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 DateRangePicker from '@/components/DateRangePicker'
import { mapGetters } from 'vuex'
import { parseTime, saveAs, getBlob } from '@/utils/index'
import qs from 'qs'
const defaultForm = { stockTypeName: '全量盘点', stockType: 1, stockBill: null, stockRegion: '全部区域', stockGridNum: null, stockGridNumName: null, totalGridNum: null, stockRemarks: null, regionId: null, shelfId: null, gridShelf: null, gridId: null, reableGridIds: [], unReableGridIds: [] }
export default {
name: 'CheckLog',
components: { crudOperation, rrOperation, pagination, taskStockLogEcharts, DateRangePicker },
cruds() {
return CRUD({ title: '盘点日志', idField: 'billId', url: 'api/stocktask-task/initStockLogList', crudMethod: { ...crudStockTaskLog }, sort: [], optShow: {
add: false,
edit: false,
del: false,
download: false,
group: false,
reset: false
}})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
statusOptions: [
{ 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: 7, display_name: '移动盘点' }
],
blurryTime: null,
tabIndex: 0,
detailVisible: false,
stopLoading: false,
dbRowData: {},
detailInfo: {},
taskStockLogData: [],
gridTableLoading: false,
detailPage: {
page: 1,
size: 10,
total: 0
},
detailTable: [],
permission: {
add: ['admin', 'checkLog:add'],
edit: ['admin', 'checkLog:edit'],
del: ['admin', 'checkLog:del']
},
rules: {
stockBill: [
{ required: true, message: '请输入盘点单号', trigger: 'blur' }
],
stockTypeName: [
{ required: true, message: '请输入盘点类型', trigger: 'blur' }
],
stockRegion: [
{ required: true, message: '请输入目标位置', trigger: 'blur' }
],
stockGridNumName: [
{ required: true, message: '请输入目标数量', trigger: 'blur' }
]
},
stockInfo: null,
ipStatusList: [],
ipStatusFalseNum: 0,
unreachable: [],
reachable: [],
isBtnDisabled: true,
stockInfoLoading: false
}
},
computed: {
...mapGetters([
'user',
'baseApi'
])
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
if (this.blurryTime) {
this.crud.query.startTime = this.blurryTime[0]
this.crud.query.endTime = this.blurryTime[1]
} else {
this.crud.query.startTime = null
this.crud.query.endTime = null
}
},
[CRUD.HOOK.afterRefresh](crud) {
this.isBtnDisabled = true
this.stockInfoLoading = false
},
// 新增前
[CRUD.HOOK.beforeToAdd]() {
let params
if (this.crud.form.stockType === 1) {
this.crud.form.stockTypeName = '全量盘点'
params = {
'gridShelf': null,
'regionId': null,
'shelfId': null
}
}
this.stockInfoLoading = true
const stockInfoPromise = crudStockTaskLog.FetchStockGirdSuccess()
.then(stockInfo => {
this.stockInfoLoading = false
return stockInfo
})
.catch(error => {
this.stockInfoLoading = false
console.error('stockInfo 接口失败:', error)
throw error
})
const otherPromises = [
crudStockTaskLog.FetchNewBillNo(),
crudStockTaskLog.FetchStockGirdNum(),
crudStockTaskLog.FetchTotalGirdNum(params)
]
Promise.all([stockInfoPromise, ...otherPromises])
.then(([stockInfo, newBillNoRes, stockGridNumRes, totalGirdNumRes]) => {
console.log('stockInfo', stockInfo)
this.stockInfo = stockInfo
const ipStatusList = stockInfo
? Object.entries(stockInfo.ipReachableCache).map(([ip, status]) => ({ ip, status }))
: []
this.ipStatusList = ipStatusList
this.ipStatusFalse = this.ipStatusList.filter(item => !item.status)
this.ipStatusFalseNum = this.ipStatusList.filter(item => !item.status).length
this.reachable = stockInfo.reachable
this.unreachable = stockInfo.unreachable
// 测试
// this.reachable = stockInfo.unreachable
// this.unreachable = []
if (stockInfo && this.reachable.length !== 0) {
this.isBtnDisabled = false
} else {
this.isBtnDisabled = true
}
this.crud.form.stockBill = newBillNoRes
this.crud.form.stockGridNumName = stockInfo
? `<span style="color: #00b42a;">${this.reachable.length}</span> /
<span style="color: #f53f3f;">${this.unreachable.length}</span> /
${totalGirdNumRes} 层位`
: '数据加载失败'
this.crud.form.stockGridNum = stockGridNumRes
this.crud.form.totalGridNum = totalGirdNumRes
})
.catch(error => {
console.error('整体请求失败:', error)
this.isBtnDisabled = true
})
},
[CRUD.HOOK.afterAddCancel]() {
this.isBtnDisabled = true
this.stockInfoLoading = false
},
// 初始化编辑时
[CRUD.HOOK.beforeToEdit](crud, form) {
},
[CRUD.HOOK.beforeValidateCU](crud, form) {
},
// 提交前做的操作
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
crud.form.reableGridIds = this.reachable.map(item => item.gridId)
crud.form.unReableGridIds = this.unreachable.map(item => item.gridId)
delete crud.form.stockGridNumName
delete crud.form.stockTypeName
return true
},
clickRowHandler(row) {
// this.$refs.table.clearSelection()
// this.$refs.table.toggleRowSelection(row)
},
doExport(data) {
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
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)
})
}).catch(() => {
})
},
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(() => {
})
},
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) {
if (this.dbRowData.state === 2) {
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
})
} else {
this.detailTable = res.content.map((item, index) => {
item.progress = this.dbRowData.state === 0 ? '已终止' : (this.dbRowData.state === 1 ? '排队中' : '已完成')
return item
})
this.gridTableLoading = false
}
this.detailPage.total = res.totalElements
}
}).catch(() => {
this.gridTableLoading = false
})
},
handleSizeChange(size) {
this.detailPage.size = size
this.detailPage.page = 1
this.tabIndex = 1
this.getInitStockTaskDetails()
},
handleCurrentPage(val) {
this.detailPage.page = val
this.tabIndex = 1
this.getInitStockTaskDetails()
},
handleCloseDialog() {
this.detailVisible = false
this.tabIndex = 0
this.isBtnDisabled = true
this.stockInfoLoading = false
},
toDelete() {
this.$confirm('此操作将删除当前盘点单任务<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const params = {
'id': this.dbRowData.billId
}
console.log(params)
crudStockTaskLog.del(params).then(res => {
console.log(res)
if (res && res.code !== 500) {
this.$message({ message: '当前盘点单任务删除成功', type: 'success', offset: 8 })
this.crud.refresh()
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.handleCloseDialog()
this.crud.delAllLoading = false
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
}).catch(() => {
this.crud.delAllLoading = false
})
},
toStopStockBill() {
this.$confirm('此操作将终止当前盘点单任务<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.stopLoading = true
const params = {
'id': this.dbRowData.billId
}
crudStockTaskLog.FetchStopStockBill(params).then(res => {
console.log(res)
if (res && res.code !== 500) {
this.$message({ message: '当前盘点单任务终止成功', type: 'success', offset: 8 })
this.crud.refresh()
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.handleCloseDialog()
this.stopLoading = false
}).catch(err => {
console.log(err)
this.stopLoading = false
})
}).catch(() => {
this.stopLoading = false
})
}
}
}
</script>
<style lang="scss" scoped>
.detailBook {
::v-deep .el-dialog {
width: 1000px !important;
.el-dialog__body{
padding: 0 0 30px 0;
}
}
.detail-check{
padding: 20px 30px;
background-color: #F6F8FC;
}
.book-detail{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
li{
width: 50%;
line-height: 40px;
span{
display: inline-block;
width: 100px;
text-align: right;
margin-right: 20px;
color: #0C0E1E;
}
i{
font-style: normal;
padding: 0 8px;
}
&.row-li{
width: 100%
}
}
}
.end-btn{
width: auto !important;
padding: 0 10px;
border-color: #ED4A41;
background-color: #ED4A41;
}
.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: 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{
margin-top: 30px;
}
.archives-table td.el-table__cell .row-state{
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;
}
}
}
}
.stock-dialog{
::v-deep .el-dialog{
width: 1220px !important;
}
}
.stockGridNumName-style{
::v-deep .el-form-item__content{
width: auto !important;
padding: 0 10px;
.stock-popover{
display: inline-block;
margin-left: 6px;
color: #0348f3;
}
}
}
.stock-info-tips{
line-height: 24px;
margin-bottom: 20px;
p{
color: #0c0e1e;
i{
display: inline-block;
padding: 0 4px;
font-weight: bold;
font-style: normal;
color: #00b42a;
}
}
span{
display: block;
}
}
::v-deep .el-card {
flex: 1;
margin-right: 15px;
.el-card__header{
color: #0c0e1e;
// font-size: 16px;
background-color: #fff !important;
border-bottom: 1px solid #ebeef5 !important;
}
.el-card__body{
height: 180px;
overflow: hidden;
overflow-y: scroll;
}
.stock-info-item{
display: flex; justify-content: space-between; padding: 4px 20px;
span{
display: block;
height: 26px;
line-height: 26px;
}
}
}
</style>