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.
 
 
 
 
 

321 lines
8.4 KiB

<template>
<div class="sop-list-component" style="padding: 2px !important">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-button @click="fileLibraryHandle()">从文件库添加</el-button>
<el-button type="danger" @click="batchDeleteHandle()" :disabled="dataListSelections.length === 0" :loading="deleteLoading">删除</el-button>
<a class="sop-external-link" href="#" @click.prevent="openExternalLink">外部链接</a>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
:height="tableHeight"
style="width: 100%;">
<el-table-column
type="selection"
header-align="center"
align="center"
width="50">
</el-table-column>
<el-table-column
prop="sopNo"
header-align="center"
align="center"
label="文件编码"
min-width="120">
</el-table-column>
<el-table-column
prop="sopName"
header-align="center"
align="left"
label="文件名称"
min-width="200">
</el-table-column>
<el-table-column
prop="sopType"
header-align="center"
align="center"
label="文件类型"
min-width="100">
</el-table-column>
<el-table-column
prop="fileSuffix"
header-align="center"
align="center"
label="文件后缀"
mib-width="100">
</el-table-column>
<el-table-column
prop="version"
header-align="center"
align="center"
label="版本号"
min-width="100">
</el-table-column>
<el-table-column
prop="operationDesc"
header-align="center"
align="left"
label="工序"
min-width="120">
</el-table-column>
<el-table-column
prop="phaseInDate"
header-align="center"
align="center"
label="生效日期"
min-width="120">
</el-table-column>
<el-table-column
prop="phaseOutDate"
header-align="center"
align="center"
label="失效日期"
min-width="120">
</el-table-column>
<el-table-column
prop="sourceSystem"
header-align="center"
align="center"
label="来源系统"
min-width="100">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="standardFields"-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- label="4个标准字段"-->
<!-- min-width="120">-->
<!-- </el-table-column>-->
<el-table-column
fixed="right"
header-align="center"
align="center"
width="100"
label="操作">
<template slot-scope="scope">
<a type="text" size="small" @click="previewHandle(scope.row)">预览</a>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
style="margin-top: 0px;">
</el-pagination>
<!-- 文件上传弹窗 -->
<sop-file-upload
v-if="sopFileUploadVisible"
ref="sopFileUpload"
@refreshDataList="getDataList">
</sop-file-upload>
</div>
</template>
<script>
import SopFileUpload from './sopFileUpload'
import { sopListSearch, sopRecordDelete, downloadSopFile } from '@/api/qc/qc.js'
export default {
name: 'SopListComponent',
components: {
SopFileUpload
},
props: {
partNo: {
type: String,
default: ''
},
site: {
type: [String, Number],
default: ''
},
buNo: {
type: String,
default: ''
},
tableHeight: {
type: Number,
default: 200
}
},
data () {
return {
dataForm: {},
dataList: [],
pageIndex: 1,
pageSize: 20,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
sopFileUploadVisible: false,
deleteLoading: false
}
},
watch: {
partNo: {
handler (newVal) {
if (newVal) {
this.getDataList()
}
},
immediate: true
}
},
methods: {
// 获取数据列表
getDataList () {
if (!this.partNo) {
this.dataList = []
this.totalPage = 0
return
}
this.dataListLoading = true
sopListSearch({
page: this.pageIndex,
limit: this.pageSize,
partNo: this.partNo,
site: this.site || this.$store.state.user.site
}).then(({data}) => {
if (data && data.code === 0) {
this.dataList = data.page.list || []
this.totalPage = data.page.totalCount || 0
} else {
this.dataList = []
this.totalPage = 0
}
this.dataListLoading = false
}).catch(() => {
this.dataList = []
this.totalPage = 0
this.dataListLoading = false
})
},
// 每页数
sizeChangeHandle (val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
// 当前页
currentChangeHandle (val) {
this.pageIndex = val
this.getDataList()
},
// 多选
selectionChangeHandle (val) {
this.dataListSelections = val
},
// 从文件库查询并关联到物料
fileLibraryHandle () {
if (!this.partNo) {
this.$message.warning('请先选择物料')
return
}
this.sopFileUploadVisible = true
this.$nextTick(() => {
this.$refs.sopFileUpload.init(this.partNo, this.site, this.buNo)
})
},
// 打开外部链接(按物料编码)
openExternalLink () {
if (!this.partNo) {
this.$message.warning('请先选择物料')
return false
}
const baseUrl = window.SITE_CONFIG['processDataUrl'] || 'http://pdm.bt.in/#/public/processData'
const targetUrl = `${baseUrl}/${this.partNo}`
window.open(targetUrl, '_blank')
},
// 预览
previewHandle (row) {
if (!row.sopUrl) {
this.$message.warning('该文件暂无预览路径')
return
}
const fileName = row.sopName || row.sopUrl
downloadSopFile(row.sopUrl).then(({ data }) => {
this.$filePreview.previewFile(data, fileName).then(result => {
if (result.message) {
this.$message.success(result.message)
}
}).catch(error => {
this.$message.error('文件预览失败:' + (error.message || '未知错误'))
})
}).catch(() => {
this.$message.error('文件下载失败,请稍后重试')
})
},
// 批量删除
batchDeleteHandle () {
if (this.dataListSelections.length === 0) {
this.$message.warning('请先选择要删除的记录')
return
}
this.$confirm(`确定要删除选中的${this.dataListSelections.length}条SOP记录吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.deleteLoading = true
const deletePromises = this.dataListSelections.map(row => {
return sopRecordDelete({
site: row.site,
buNo: row.buNo,
partNo: row.partNo,
sopNo: row.sopNo
})
})
Promise.all(deletePromises).then((responses) => {
const successCount = responses.filter(({data}) => data && data.code === 0).length
if (successCount === this.dataListSelections.length) {
this.$message.success(`成功删除${successCount}条记录`)
} else {
this.$message.warning(`删除了${successCount}条记录,${this.dataListSelections.length - successCount}条删除失败`)
}
this.getDataList()
this.deleteLoading = false
}).catch(() => {
this.$message.error('删除失败')
this.deleteLoading = false
})
}).catch(() => {})
}
}
}
</script>
<style scoped>
.sop-list-component {
padding: 10px;
}
.sop-external-link {
margin-left: 10px;
color: #17b3a3;
text-decoration: underline;
font-size: 13px;
cursor: pointer;
}
.sop-external-link:visited,
.sop-external-link:active,
.sop-external-link:hover {
color: #17b3a3;
}
</style>