Commit 6da33764 authored by “lixuyan”'s avatar “lixuyan”

单架次指令标识维护批量前生

parent b3324372
......@@ -16,8 +16,8 @@ function patch(url, params) {
function del(url, params) {
return http.del(url, params)
}
function downloadFile(url, type) {
return http.downloadFile(url, type)
function downloadFile(url, type, params) {
return http.downloadFile(url, type, params)
}
function downloadZip(url, type) {
return http.downloadZip(url, type)
......
<template>
<section>
<div v-if="!show" class="from">
<div class="icon-wrap"><i class="icon" /> <span>搜索</span></div>
<el-form ref="ruleForm" :model="form" label-width="95px">
<el-form-item label="机型" prop="model">
<el-select v-model="form.model" clearable class="input-with-select el-input--small">
<el-option
v-for="item in dataModel"
:key="item.id"
:label="item.defName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="架次" prop="sortie">
<el-select v-model="form.sortie" clearable class="input-with-select el-input--small" :loading="sortiesLoading">
<el-option
v-for="item in dataSortie"
:key="item.id"
:label="item.defName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item v-if="labelShow()" label="AO(号/名称)" prop="aoName">
<el-input v-model="form.aoName" clearable class="input-with-select el-input--small" @change="searchAoname" />
</el-form-item>
<p class="btn">
<el-button size="small" type="primary" @click="searchForm">查询</el-button>
<el-button size="small" @click="resetForm('ruleForm')">重置</el-button>
</p>
</el-form>
</div>
</section>
</template>
<script>
export default {
name: 'Left',
props: {
show: {
type: Boolean,
default: null
},
dataModel: {
type: Array,
default: () => {
return []
}
}
},
data() {
return {
form: {
model: '',
modelName: '',
sortie: '',
sortieName: '',
aoName: ''
},
sortiesLoading: true,
dataSortie: [],
isCollapse: false
}
},
watch: {
dataModel(newV) {
if (newV.length <= 0) return
this.$nextTick(() => {
this.form.model = newV[0].id
this.form.modelName = newV[0].defName
this.getAddRecursion()
})
},
'form.model': {
immediate: true,
handler(val) {
if (!val) {
return
}
const model = this.dataModel.find((r) => r.id === val)
this.$set(this.form, 'modelName', (model && model.defName) || '')
this.getAddRecursion()
}
},
'form.sortie': {
immediate: true,
handler(val) {
if (!val) {
return
}
const sorties = this.dataSortie.find((r) => r.id === val)
this.$set(this.form, 'sortieName', (sorties && sorties.defName) || '')
}
}
},
mounted() {
this.getAddRecursion()
},
methods: {
labelShow() {
if (this.$parent.$parent &&
this.$parent.$parent.name === 'right' &&
this.$parent.$parent.isActive === 'ag') {
return false
} else {
return true
}
},
searchForm() {
this.$parent.$children
.filter(function(item) {
return item.name === 'tree'
})[0]
.getTreeData(this.form)
},
searchAoname() {
const that = this
if (that.$parent.$parent.name === 'right') {
that.$parent.$parent.getTableData()
} else {
this.searchForm()
}
},
/**
* 获取架次数据
*/
getAddRecursion() {
this.sortiesLoading = true
const params = { searchItems: { items: [{ fieldName: 'aircraftTypeId', operator: 'EQ', value: this.form.model }] }, sortItem: [{ fieldName: 'modifyTime', sortOrder: 'asc' }] }
params.openProps = [{ name: 'aircraftType' }]
this.$api
.searchApi('AircraftSorties', params)
.then((res) => {
this.dataSortie = []
if (res) {
this.dataSortie = res && res.items && res.items.content
this.$nextTick(() => {
if (this.dataSortie.length) {
this.form.sortie = this.dataSortie[0].id
this.form.sortieName = this.dataSortie[0].defName
this.searchForm()
}
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.log(err))
.finally(() => {
this.$nextTick(() => {
this.sortiesLoading = false
})
})
},
resetForm() {
if (this.dataModel.length) {
this.form.model = this.dataModel[0].id
this.getAddRecursion()
}
this.form.aoName = null
}
}
}
</script>
<style lang="scss" >
.from {
border: 1px solid #ccc;
padding: 20px 20px 5px 20px;
border-radius: 5px;
box-sizing: border-box;
.icon-collapse {
display: inline-block;
width: 21px;
height: 21px;
background-size: contain;
cursor: pointer;
position: absolute;
z-index: 10;
top: 20px;
right: 20px;
}
.tobottom {
background: url("/icons/tobottom.png") no-repeat;
}
.totop {
background: url("/icons/totop.png") no-repeat;
}
.icon-wrap {
margin-bottom: 10px;
position: relative;
.icon {
display: inline-block;
width: 21px;
height: 21px;
background: url("/icons/r-access.png") no-repeat;
background-size: contain;
vertical-align: middle;
}
span {
vertical-align: middle;
// font-size: 12px;
}
}
.btn {
text-align: center;
}
.el-form-item {
margin-bottom: 8px;
}
}
/deep/.el-input {
height: 32px;
}
/deep/.el-button {
border-radius: 5px;
padding: 12px 30px;
}
</style>
<template>
<section class="single-mbom-left" :class="{ collapse: isCollapse }">
<div class="left-menu">
<searchForm
ref="searchForm"
:show="isCollapse"
:data-model="searchData.model"
/>
<!-- <i
class="iconTo"
:class="[isCollapse ? 'toright' : 'toleft']"
@click="handleCollapse"
/> -->
<tree
ref="tree"
class="tree"
:is-collapse="isCollapse"
/>
</div>
</section>
</template>
<script>
import searchForm from './form'
import tree from './tree'
export default {
components: {
searchForm,
tree
},
props: {
searchData: {
type: Object,
default: () => {
return {
model: []
}
}
}
},
data() {
return {
isCollapse: false
}
},
computed: {},
mounted() { },
created() {},
methods: {
// handleCollapse() {
// this.isCollapse = !this.isCollapse
// this.$emit('handleCollapse', this.isCollapse)
// }
}
}
</script>
<style lang="scss" >
.single-mbom-left {
height: 100%;
// width: 320px;
.left-menu {
position: relative;
display: flex;
flex-direction: column;
height: 100%;
.iconTo {
display: block;
width: 18px;
height: 21px;
background-size: contain;
cursor: pointer;
position: absolute;
top: 292px;
}
// .toleft {
// background: url("/icons/toleft.png") no-repeat;
// right: -18px;
// }
// .toright {
// background: url("/icons/toright.png") no-repeat;
// left: -10px;
// }
}
p {
text-align: right;
.b-packup {
display: inline-block;
width: 21px;
height: 21px;
background: url("/icons/b-packup.png") no-repeat;
background-size: contain;
cursor: pointer;
}
}
&.collapse {
width: 0px;
}
}
</style>
<template>
<section v-show="!isCollapse" class="left-tree">
<el-tree
class="tree"
:data="treeData"
default-expand-all
node-key="id"
:props="defaultProps"
:highlight-current="true"
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<span
slot-scope="{ data }"
class="custom-tree-node"
:class="[{ 'is-leaff': data.isLeaf }, { 'is-curr': data.id == curId }]"
>
<span class="tree-row">
<i :class="data.icon" />
<span class="label">{{ data.title }}</span>
<span>{{
"(" + data.quantity + "/" + data.total + ")"
}}</span>
</span>
</span>
</el-tree>
</section>
</template>
<script>
import { post } from '@/utils/http'
import $ from 'jquery'
export default {
name: 'Tree',
props: {
isCollapse: {
type: Boolean,
default: null
}
},
data() {
return {
// 组件唯一标识
name: 'tree',
treeData: [],
rowData: {},
curId: null,
// 判断当前组件处于指令标识还是Mbom
isMbom: false,
curNodeTitle: null,
assembly: null,
defaultProps: {
children: 'children',
label: 'label'
},
curTree: {}
}
},
mounted() {
this.$bus.$on('getPositionData', () => {
this.getTreeData()
})
// const that = this
// if (that.$parent.$parent.name === 'right') {
// that.assembly = that.$parent.$parent.$parent.$parent
// that.isMbom = true
// } else {
// that.assembly = that.$parent.$parent.$children.filter(function(item) {
// return item.name === 'right'
// })[0]
// }
},
methods: {
handleNodeClick(data, node, event) {
if (!data || !data.id) return
// 处于单架次的一级node 处于禁用状态
// if (this.isMbom) {
// if (this.assembly.isActive === 'ag' && !data.isLeaf) return
// else if (this.assembly.isActive === 'ins' && !data.isLeaf) return
// else if (this.assembly.isActive === 'ass' && data.isLeaf) return
// } else {
// console.log(44555, this.$parent)
// this.$parent.$parent.$parent.$parent.$refs.right.tablePagination.currentPage = 1
// this.$parent.$parent.$parent.$parent.$refs.right.tablePagination.pageSize = 10
// this.curTree = data
// if (data.isLeaf) return
// }
// this.curId = data.id
// this.assembly.title.sorties = data.serialNo
// this.curNodeTitle = data.title
// this.highlightTreeRow()
// 获取表格数据
// this.assembly.getTableData(data.id, this.froms.aoName, this.isMbom)
this.$bus.$emit('getPlanData', data)
},
/**
* 高亮状态
*/
highlightTreeRow() {
if (this.isMbom) {
this.$nextTick(() => {
if (
this.assembly.isActive === 'ag' ||
this.assembly.isActive === 'ins'
) {
$('.el-tree-node__content').each((index, ele) => {
$(ele).removeClass('disabled')
$(ele).removeClass('is-curr')
if ($(ele).find('.is-leaff').length) {
$(ele).addClass('hhover')
} else {
$(ele).addClass('disabled')
}
if ($(ele).find('.is-curr').length) {
$(ele).addClass('is-curr')
}
})
} else {
$('.el-tree-node__content').each((index, ele) => {
$(ele).removeClass('disabled')
$(ele).removeClass('is-curr')
if ($(ele).find('.is-leaff').length) {
$(ele).addClass('disabled')
} else {
$(ele).addClass('hhover')
}
if ($(ele).find('.is-curr').length) {
$(ele).addClass('is-curr')
}
})
}
})
} else {
this.$nextTick(() => {
$('.el-tree-node__content').each((index, ele) => {
$(ele).removeClass('disabled')
$(ele).removeClass('is-curr')
if ($(ele).find('.is-leaff').length) {
$(ele).addClass('disabled')
} else {
$(ele).addClass('hhover')
}
if ($(ele).find('.is-curr').length) {
$(ele).addClass('is-curr')
}
})
})
}
},
statuwMbom(id) {
if (id) {
this.curId = id
}
const that = this
if (that.isMbom) {
if (this.assembly.isActive === 'ass') {
this.handleNodeClick(that.data[0].children[0], this.froms.aoName)
} else {
this.handleNodeClick(that.data[0], this.froms.aoName)
}
}
this.highlightTreeRow()
},
/**
* 获取树结构数据
*/
getTreeData(froms) {
// var that = this
if (froms) {
this.froms = froms
}
const params = {
pageFrom: 1,
pageSize: 9999,
searchItems: {
children: [
{
items: [
{
fieldName: 'aircraftSorties.id', // 架次ID
operator: 'EQ',
value: this.froms.sortie
}
],
operator: 'AND'
}
],
items: [],
operator: 'AND'
},
openProps: [
{
name: 'extPositionPlans'
},
{
name: 'extPositionLinks',
openProps: [
{
name: 'target',
openProps: [
{
name: 'wrProduction'
}
]
}
]
}
],
sortItem: [
{
fieldName: 'serialNumber',
sortOrder: 'desc'
}
]
}
post(
'/ExtPosition/searchBatchExaminePosition?taskDefinitionKey=' + this.$route.query.taskDefinitionKey,
params
)
.then((res) => {
let quantity = 0
let total = 0
const data = [{
title: this.froms.modelName + '-' + this.froms.sortieName,
icon: 'aircraft',
id: this.froms.sortie,
isLeaf: true,
disabled: true,
children: res.items.map((t) => {
quantity += t.completeCount
total += t.carryCount
return {
serialNo: this.froms.sortieName,
title: t.serialNumber,
icon: 'c-backups3',
id: t.id,
quantity: t.completeCount,
total: t.carryCount
}
}),
quantity: quantity,
total: total
}]
this.treeData = data
this.handleNodeClick(data[0].children[0])
// if (that.isMbom) {
// this.handleNodeClick(data[0], this.froms.aoName)
// } else {
// if (
// JSON.stringify(this.curTree) === '{}' &&
// data[0].children &&
// data[0].children.length
// ) {
// this.curTree = data[0].children[0]
// this.handleNodeClick(data[0].children[0], this.froms.aoName)
// } else {
// this.handleNodeClick(this.curTree, this.froms.aoName)
// }
// }
// this.highlightTreeRow()
})
.catch((err) => console.error(err))
.finally(() => {})
}
}
}
</script>
<style lang="scss" >
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-thumb {
border-radius: 100px;
background: #dcdfe6;
}
.left-tree {
margin-top: 20px;
border: 1px solid #ccc;
padding: 20px;
border-radius: 5px;
box-sizing: border-box;
flex-grow: 1;
overflow: auto;
> .tree {
//当前选中项
&.el-tree--highlight-current .el-tree-node__content {
&.disabled {
color: #c0c4cc;
cursor: not-allowed;
background-color: #fff;
}
&.is-curr:not(.disabled),
&:hover:not(.disabled) {
font-weight: bold;
color: rgb(31, 30, 30);
background-color: rgb(214, 214, 214);
}
}
.el-tree-node {
// margin: 20px 0 !important;
.el-tree-node__content {
height: 40px !important;
// &:hover {
// font-weight: bold;
// color: #000;
// }
i {
display: inline-block;
vertical-align: middle;
margin: 10px;
}
.aircraft {
background: url("/icons/aircraft.png") no-repeat;
width: 32px;
height: 30px;
}
.c-backups3 {
width: 21px;
height: 21px;
background: url("/icons/u513.png") no-repeat;
background-size: contain;
}
.label {
vertical-align: middle;
}
}
}
}
overflow: hidden;
&:hover {
overflow: auto;
}
}
// .sidebar-container.sidebar-container{
// display: none;
// }
</style>
<template>
<section class="single-sortie-instruction-identification-right">
<div class="header">
<div class="tools">
<span v-if="jurisdId !== 'Activity_0v2qfnh'">
提示:<i class="el-icon-edit-outline" />状态为待提交可双击编辑列
</span>
<dee-tools app-name="tf-mom" :tools="tools" mode="normal" :collapse="false" />
</div>
</div>
<div class="table">
<div>
<div>
<el-table
ref="table"
:data="tableData"
height="100%"
border
size="mini"
highlight-current-row
:cell-class-name="deeTableCellStyle"
@row-click="rowInitClick"
@selection-change="checkPreservation"
@cell-click="deeTableEdit"
>
<el-table-column type="selection" :width="55" align="center" />
<el-table-column
type="index"
:width="80"
label="序号"
align="center"
/>
<el-table-column
prop="number"
align="center"
label="AO号"
:min-width="250"
sortable
show-overflow-tooltip
/>
<el-table-column
prop="name"
align="center"
label="AO名称"
:min-width="120"
sortable
show-overflow-tooltip
/>
<el-table-column
prop="gaceVersion"
align="center"
label="版本"
:width="80"
sortable
/>
<el-table-column
prop="sorties"
align="center"
label="有效架次"
:width="120"
sortable
/>
<el-table-column
prop="firstCheckFlag"
align="center"
label="首件检验标识"
:width="135"
>
<template slot="header">
<span>首件检验标识 </span>
<i v-if="jurisdId !== 'Activity_0v2qfnh'" class="el-icon-edit-outline" />
</template>
<template slot-scope="scope">
<el-select
v-if="scope.row.firstCheckFlagSelect"
v-model="scope.row.firstCheckFlag"
placeholder="请选择"
@change="deeTableBlur(scope.row, true)"
@visible-change="visibleChange($event, scope.row)"
>
<el-option :key="1" label="是" value="是" />
<el-option :key="2" label="否" value="否" />
</el-select>
<span v-else>{{ scope.row[scope.column.property] }}</span>
<i
v-if="scope.row.firstCheckFlagLoading"
class="el-icon-loading"
/>
</template>
</el-table-column>
<el-table-column
prop="countWorkHour"
align="center"
label="定额工时(h)"
:width="140"
>
<template slot="header">
<span>定额工时(h)</span>
<i v-if="jurisdId !== 'Activity_0v2qfnh'" class="el-icon-edit-outline" />
</template>
<template slot-scope="scope">
<el-input
v-if="scope.row.countWorkHourSelect"
v-model="scope.row.countWorkHour"
type="number"
:min="0"
@click.stop.native
@focus="tableInputFocus($event, true)"
@blur="deeTableBlur(scope.row, false)"
/>
<span v-else>{{ scope.row[scope.column.property] }}</span>
<i v-if="scope.row.countWorkHourLoading" class="el-icon-loading" />
</template>
</el-table-column>
<el-table-column
prop="workHour"
align="center"
label="工期(h)"
:width="120"
sortable
/>
<el-table-column
prop="stateDisplayName"
align="center"
label="状态"
:width="90"
sortable
:formatter="applyStatusFormatter"
/>
<el-table-column
prop="userName"
align="center"
label="编制者"
:width="130"
sortable
/>
<el-table-column
prop="createTime"
align="center"
label="接收时间"
:width="180"
sortable
/>
</el-table>
</div>
<el-pagination
:current-page="tablePagination.currentPage"
:page-sizes="tablePagination.pageSizes"
:page-size="tablePagination.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="tablePagination.total"
@size-change="setPage"
@current-change="setPage($event, true)"
/>
</div>
<div>
<div>
<el-table
v-loading="workProcedureLoading"
:data="workProcedureData"
height="100%"
border
size="mini"
:cell-class-name="deeTableCellStyle"
@cell-click="workProcedureEdit"
>
<el-table-column
type="index"
align="center"
label="序号"
:width="80"
/>
<el-table-column
prop="operationNumber"
align="center"
label="工序号"
show-overflow-tooltip
/>
<el-table-column
prop="operationName"
align="center"
label="工序名称"
show-overflow-tooltip
/>
<el-table-column
prop="checkFlag"
align="center"
label="是否检验"
show-overflow-tooltip
/>
<el-table-column
prop="keyOperation"
align="center"
label="关键标识"
:width="120"
/>
<el-table-column
prop="airFlag"
align="center"
label="适航标识"
:width="200"
>
<template slot="header">
<span>适航标识 </span>
<i v-if="jurisdId !== 'Activity_0v2qfnh'" class="el-icon-edit-outline" />
</template>
<template slot-scope="scope">
<el-select
v-if="scope.row.airFlagSelect"
v-model="scope.row.airFlag"
placeholder="请选择"
@change="workProcedureBlur(scope.row, true)"
@visible-change="
visibleWorkProcedureChange($event, scope.row)
"
>
<el-option :key="0" label=" " value=" " />
<el-option :key="1" label="目击" value="目击" />
<el-option :key="2" label="AAD" value="AAD" />
</el-select>
<span v-else>{{ scope.row[scope.column.property] }}</span>
<i v-if="scope.row.airFlagLoading" class="el-icon-loading" />
</template>
</el-table-column>
</el-table>
</div>
<el-pagination
:current-page="workProcedurePage.currentPage"
:page-sizes="workProcedurePage.pageSizes"
:page-size="workProcedurePage.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="workProcedurePage.total"
@size-change="workProcedureSetPage"
@current-change="workProcedureSetPage($event, true)"
/>
</div>
</div>
</section>
</template>
<script>
import { post, downloadFile } from '@/utils/http'
export default {
data() {
return {
// 识别组件
name: 'right',
// 工具栏
tools: [],
tablePagination: {
currentPage: 1,
pageSize: 10,
total: 0,
pageSizes: [5, 10, 20, 50]
},
workProcedurePage: {
currentPage: 1,
pageSize: 10,
total: 0,
pageSizes: [5, 10, 20, 50]
},
// 加载中
loading: false,
curRowId: null,
curTableId: null,
// 选中数据
selctionDatas: [],
selctionData: '',
// 表格数据
tableData: [],
aoLoading: false,
workProcedureData: [],
workProcedureLoading: false,
// 默认展示的表格列
deeColums: [],
treeData: [],
addLoading: false,
timer: null,
workProcedureTimer: null,
aoName: '',
countWorkHour: 0,
workProcedureWworkHour: 0,
sortiesData: [],
jurisdId: ' ',
stateDisplayName: true,
seePdfShow: false,
stateOption: [],
nodeData: {}
}
},
created() {
this.jurisdId = this.$route.query.taskDefinitionKey
this.getTools()
},
mounted() {
this.$bus.$on('getPlanData', (data) => {
this.$nextTick(() => {
this.nodeData = data
this.getTableData(data)
})
})
this.getDicListByCode()
},
methods: {
applyStatusFormatter(row, column, cellValue, index) {
const obj = this.stateOption.find(m => m.value === cellValue)
return obj.label
},
async getDicListByCode() {
this.stateOption = await this.$utils.getDicListByCode('ObjStatus')
},
/**
* 工具栏
*/
getTools() {
const that = this
if (that.jurisdId === 'Activity_0z9axwg') {
this.tools = [
{
name: '提交',
icon: '/icons/check.png',
handler: {
click: () => this.submit()
}
},
{
addRowTemplateDataPosition: 'last',
btnStyle: '',
btnValue: 'importFile',
businessType: 'importFile',
downloadParams: 'downloadParams = {}',
downloadRequestMethod: 'get',
editTableShowMode: 'alway',
icon: '/icons/c-Import.png',
importUrl: '/ExtProcessPlan/import/excel',
key: 'importFile',
loadSelfComType: 'privateComponents',
name: '导入',
notDetectionControl: false,
rowEditSubmitAddress: 'requestURL=""',
rowEditSubmitHttpType: 'post',
rowEditSubmitParams: 'requestParams = row',
rowEditSubmitReturnVal: 'newRow = res.items',
selectNum: 'one',
templateDataFun: 'return {}'
},
{
name: '导出',
icon: '/icons/c-export.png',
handler: {
click: () => {
this.handleExport()
}
}
}
]
} else {
this.tools = [
{
name: '提交',
icon: '/icons/check.png',
handler: {
click: () => this.submit()
}
},
{
name: '驳回',
icon: '/icons/c-return.png',
handler: {
click: () => this.reject()
}
},
{
name: '作废',
icon: '/icons/c-export.png',
handler: {
click: () => {
this.cancel()
}
}
}
]
}
},
rowInitClick(row, column, event) {
this.workProcedurePage.currentPage = 1
this.workProcedurePage.pageSize = 10
this.rowClick(row, column, event)
},
workProcedureSetPage($event, state) {
if (state) {
this.workProcedurePage.currentPage = $event
} else {
this.workProcedurePage.currentPage = 1
this.workProcedurePage.pageSize = $event
}
this.rowClick()
},
/**
* 提交
*/
submit() {
if (!this.selctionData) {
this.$message({
showClose: true,
message: '没有勾选数据',
type: 'error'
})
return
}
this.aoLoading = true
const ids = this.selctionDatas.map(item => item.processTaskId)
post(
'DxWorkflowTask/apply/pass?taskIds=' + ids.join(','),
{}
)
.then((res) => {
if (res.message.includes('成功')) {
this.$bus.$emit('getPositionData')
// this.$parent.$refs.left.$refs.tree.getTreeData()
this.$message({
showClose: true,
message: res.message,
type: 'success'
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.aoLoading = false
})
},
reject() {
if (!this.selctionData) {
this.$message({
showClose: true,
message: '没有勾选数据',
type: 'error'
})
return
}
this.aoLoading = true
const ids = this.selctionDatas.map(item => item.processTaskId)
post(
'DxWorkflowTask/apply/reject?taskIds=' + ids.join(','),
{}
)
.then((res) => {
if (res.message.includes('成功')) {
this.$bus.$emit('getPositionData')
this.$message({
showClose: true,
message: res.message,
type: 'success'
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.aoLoading = false
})
},
cancel() {
if (!this.selctionData) {
this.$message({
showClose: true,
message: '没有勾选数据',
type: 'error'
})
return
}
this.aoLoading = true
const ids = this.selctionDatas.map(item => item.processTaskId)
post(
'DxWorkflowTask/apply/cancellation?taskIds=' + ids.join(','),
{}
)
.then((res) => {
if (res.message.includes('成功')) {
this.$bus.$emit('getPositionData')
this.$message({
showClose: true,
message: res.message,
type: 'success'
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.aoLoading = false
})
},
// /**
// * 导入
// */
// handleImport() {
// this.HttpRequest(
// '/DxProcessOperation/importByExcel?id=196697352507000',
// {
// id: this.curRowId
// },
// 'post'
// )
// .then((res) => {
// })
// .catch((err) => console.error(err))
// .finally(() => {})
// },
/**
* 导出
*/
handleExport() {
const params = {
pageFrom: this.tablePagination.currentPage,
pageSize: this.tablePagination.pageSize,
searchItems: {
items: [
{
fieldName: 'positionNumber',
operator: 'EQ',
value: this.nodeData.title
}
],
operator: 'AND'
},
openProps: [],
sortItem: [
{
fieldName: 'serialNumber',
sortOrder: 'desc'
}
]
}
const downloadTitle = '单架次指令标识-' + this.nodeData.title + '.xlsx'
downloadFile(`ExtProcessPlan/download/excel?taskDefinitionKey=${this.$route.query.taskDefinitionKey}`, 'post', params).then(res => {
this.$utils.downLoadFile(res, downloadTitle)
})
},
/**
* 获取表格数据
*/
getTableData(data) {
const that = this
that.aoLoading = true
that.tableData = []
that.workProcedureData = []
const params = {
pageFrom: this.tablePagination.currentPage,
pageSize: this.tablePagination.pageSize,
searchItems: {
items: [
{
fieldName: 'positionNumber',
operator: 'EQ',
value: data.title
}
],
operator: 'AND'
},
openProps: [],
sortItem: [
{
fieldName: 'serialNumber',
sortOrder: 'desc'
}
]
}
post('/ExtProcessPlan/searchBatchExamineAo?taskDefinitionKey=' + this.$route.query.taskDefinitionKey, params)
.then((res) => {
if (res && res.items && res.items.content) {
that.tablePagination.total = res.items.totalElements
that.tableData = res.items.content.map((p, index) => {
return {
id: p.pbo.id,
index: index + 1,
number: p.pbo.serialNumber,
name: p.pbo.name,
gaceVersion: p.pbo.gaceVersion,
sorties: data.serialNo,
firstCheckFlag: p.pbo.firstCheckFlag,
firstCheckFlagSelect: false,
workHour: p.pbo.workHour,
subTypeName: p.pbo.subTypeName,
firstCheckFlagLoading: false,
countWorkHour: p.pbo.opHour,
countWorkHourLoading: false,
countWorkHourSelect: false,
stateDisplayName: p.pbo.state,
userName: p.pbo.noteName,
createTime: p.pbo.createTime,
processTaskId: p.processTask.id
}
})
that.tableData.length &&
that.$nextTick(() => {
that.$refs.table.setCurrentRow(that.tableData[0])
that.rowInitClick(that.tableData[0])
})
that.getTools()
} else {
this.$message({
showClose: true,
message: '机型数据获取失败!',
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
that.aoLoading = false
})
},
// 行点击方法
rowClick(row, column, event) {
if (column && column.property && column.property === 'firstCheckFlag') {
return
}
if (column && column.property && column.property === 'countWorkHour') return
const that = this
that.workProcedureData = []
that.workProcedureLoading = true
if (row && row.id) {
this.curTableId = row.id
this.stateDisplayName = row.stateDisplayName
}
const params = {
pageFrom: this.workProcedurePage.currentPage,
pageSize: this.workProcedurePage.pageSize,
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'targetExtProcessUsageLink.sourceId',
'operator': 'EQ',
'value': this.curTableId
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
]
}
this.$api
.searchApi('ExtProcessOperation', params)
.then((res) => {
if (res && res.items && res.items.content) {
this.workProcedurePage.total = res.items.totalElements
this.workProcedureData = res.items.content.map((p, index) => {
return {
key: index + 1,
id: p.id,
index: index + 1,
operationNumber: p.code,
operationName: p.name,
keyOperation: p.keyOperation ? '是' : '否',
airFlag: p.airFlag,
checkFlag: p.checkFlag === 'true' ? '是' : '否',
airFlagSelect: false,
airFlagLoading: false,
subTypeName: p.subTypeName
}
})
} else {
this.$message({
showClose: true,
message: '机型数据获取失败!',
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
that.workProcedureLoading = false
})
},
/**
* 页码触发
*/
setPage($event, state) {
if (state) {
this.tablePagination.currentPage = $event
} else {
this.tablePagination.currentPage = 1
this.tablePagination.pageSize = $event
}
this.getTableData()
},
/**
* 关闭
*/
close() {
var row = this.tableData.filter((p) => p.id === this.curTableId)[0]
if (row.subTypeName !== 'DxProcessPlanAOR') {
this.$message({
message: '只有AOR才可关闭',
type: 'warning'
})
return
}
this.aoLoading = true
post('/DxProcessPlan/aor/close?id=' + row.id, {}, 'post')
.then((res) => {
if (res.message.includes('成功')) {
this.getTableData()
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {})
},
/**
* 表一多选框
*/
checkPreservation(selection) {
this.selctionDatas = selection
if (selection.length) {
this.selctionData = selection.map((p) => p.id).join(',')
} else {
this.selctionData = []
}
},
deeTableEdit(row, column, cell, event) {
if (column.property === 'number') {
if (row.id) {
this.seePdf(row.id)
} else {
this.$message({
message: '该AO没有PDF',
type: 'warning'
})
}
}
if (this.jurisdId === 'Activity_0v2qfnh') return
if (row.stateDisplayName === 'Audited') return
var that = this
if (column.property === 'firstCheckFlag') {
row.firstCheckFlagSelect = true
} else if (column.property === 'countWorkHour') {
this.countWorkHour = row.countWorkHour
row.countWorkHourSelect = true
} else {
return
}
this.timer = setTimeout(function() {
if (column.property === 'firstCheckFlag') {
row.firstCheckFlagSelect = false
} else if (column.property === 'countWorkHour') {
row.countWorkHourSelect = false
}
clearTimeout(this.timer)
that.timer = null
}, 2000)
},
visibleChange(event, row) {
if (event) {
clearTimeout(this.timer)
this.timer = null
} else {
row.firstCheckFlagSelect = false
row.countWorkHourSelect = false
}
},
visibleWorkProcedureChange(event, row) {
if (event) {
clearTimeout(this.workProcedureTimer)
this.workProcedureTimer = null
} else {
row.airFlagSelect = false
}
},
tableInputFocus($event, status) {
if (status) {
clearTimeout(this.timer)
this.timer = null
} else {
clearTimeout(this.workProcedureTimer)
this.workProcedureTimer = null
}
},
workProcedureEdit(row, column, cell, event) {
if (this.jurisdId === 'Activity_0v2qfnh') return
var that = this
if (that.stateDisplayName === 'Audited') return
if (column.property === 'airFlag') {
row.airFlagSelect = true
} else {
return
}
that.workProcedureTimer = setTimeout(function() {
if (column.property === 'airFlag') {
row.airFlagSelect = false
}
clearTimeout(that.workProcedureTimer)
that.workProcedureTimer = null
}, 2000)
},
deeTableBlur(row, status) {
var that = this
const param = {
id: row.id,
operator: 'MODIFY',
opHour: row.countWorkHour,
subTypeName: row.subTypeName,
firstCheckFlag: row.firstCheckFlag
}
if (status) {
row.firstCheckFlagLoading = true
} else {
row.countWorkHourSelect = false
// 利用按值传递特性比较数值是否修改
if (this.countWorkHour === Number(row.countWorkHour)) return
row.countWorkHourLoading = true
}
this.$api.recursion('ExtProcessPlan', param)
.then((res) => {
if (res.message.includes('成功')) {
that.$message({
showClose: true,
message: '保存成功',
type: 'success'
})
} else {
that.$message({
showClose: true,
message: '保存失败',
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
if (status) {
row.firstCheckFlagLoading = false
} else {
row.countWorkHourLoading = false
}
})
},
workProcedureBlur(row, status) {
row.airFlagSelect = false
var that = this
const param = {
operator: 'MODIFY',
id: row.id,
airFlag: row.airFlag
}
if (status) {
row.airFlagLoading = true
}
this.$api.recursion('ExtProcessOperation', param)
.then((res) => {
if (res.message.includes('成功')) {
that.$message({
showClose: true,
message: '操作成功!',
type: 'success'
})
} else {
that.$message({
showClose: true,
message: '保存失败!',
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
if (status) {
row.airFlagLoading = false
}
})
},
deeTableCellStyle({ row, column, rowIndex, columnIndex }) {
if (
(column.property === 'firstCheckFlag' && row.firstCheckFlagSelect) ||
(column.property === 'airFlag' && row.airFlagSelect) ||
(column.property === 'countWorkHour' && row.countWorkHourSelect)
) {
return 'highlight'
} else if (column.property === 'number') {
return 'seepdf'
}
},
async seePdf(id) {
if (id) {
if (this.seePdfShow) {
return
}
const notify = this.$notify({
title: '提示',
message: 'PDF正在加载中...,请稍后!',
duration: 0
})
this.seePdfShow = true
downloadFile(`/ExtProcessPlan/createPDF?id=${id}`, 'get').then(res => {
const blob = new Blob([res.data], {
type: 'application/pdf'
})
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob)
} else {
var openUrl = URL.createObjectURL(blob)
this.seePdfShow = false
notify.close()
window.open(openUrl, '_blank')
}
}).catch((error) => {
console.log(error)
notify.close()
this.seePdfShow = false
})
} else {
this.$message({
message: '该AO没有PDF',
type: 'warning'
})
}
}
}
}
</script>
<style lang="scss">
.single-sortie-instruction-identification-right {
padding-left: 20px;
display: flex;
flex-direction: column;
height: 100%;
> .header {
display: flex;
width: 100%;
height: 35px;
justify-content: flex-end;
.tools {
display: flex;
align-items: center;
> span {
color: red;
font-size: 12px;
}
.dee-tools {
display: flex;
margin-left: 14px;
.tools-block > .tool-item {
padding-left: 14px;
padding-right: 0;
}
}
}
}
> .table {
height: 20px;
flex-grow: 1;
display: flex;
flex-direction: column;
> div {
flex: 1;
height: 20px;
flex-direction: column;
display: flex;
> div:first-child {
flex-grow: 1;
height: 20px;
.el-table thead th {
color: #2e2e2e;
font-weight: 700;
font-size: 14px;
padding: 0;
background-color: #f3f6f7;
line-height: 46px !important;
}
.el-table .highlight {
border: 1px solid #1497f5;
padding: 0;
.cell {
padding: 0;
.el-select {
width: 100%;
}
input {
border: 0;
height: 35px;
background-color: transparent;
text-align: center;
padding-right: 0;
}
}
}
.el-table .seepdf {
color: #3a8ee6;
cursor: pointer;
}
.el-table .cell i.el-icon-loading {
font-size: 16px;
color: #ff0c00;
font-weight: bold;
position: absolute;
right: 10px;
top: 10px;
}
}
.el-pagination {
text-align: right;
padding: 10px 0;
}
.el-loading-spinner {
width: 100%;
}
}
}
.single-sortie-instruction-identification-right-dialog-add {
.el-dialog__header {
text-align: center;
}
.el-dialog__body {
.dee-table {
height: 200px;
width: 100%;
}
> div > div:not(:first-child) {
margin-top: 10px;
display: flex;
> p {
height: 40px;
flex: 1;
display: flex;
align-items: center;
> span {
width: 70px;
text-align: right;
}
> label {
margin-left: 30px;
}
> div {
width: 40px;
flex-grow: 1;
> input {
padding-right: 0;
}
}
&:last-child {
margin-left: 30px;
}
}
}
}
.el-dialog__footer {
text-align: center;
padding: 0 10px 10px 30px;
}
}
.single-sortie-instruction-identification-right-dialog
.el-dialog__body
> div
> p {
display: flex;
align-items: center;
> span {
width: 140px;
text-align: right;
}
> div {
width: 40px;
flex-grow: 1;
> input {
padding-right: 0;
}
}
&:first-child {
margin-bottom: 15px;
}
}
.el-dialog__header {
text-align: center;
}
.el-dialog__footer {
text-align: center;
margin-right: 10px;
margin-bottom: 10px;
}
}
</style>
<template>
<section v-loading="instructionIdentificationShow" class="single-sortie-instruction-identification">
<dee-fold-pane :min-percent="18" :default-percent="18" split="vertical" class="detail-pane">
<template slot="paneL">
<div class="left">
<left
ref="left"
:search-data="searchData"
@handleTreeClick="handleTreeClick"
/>
</div>
</template>
<template slot="paneR">
<div class="right">
<right ref="right" />
</div>
</template>
</dee-fold-pane>
</section>
</template>
<script>
import left from './components/left/index'
import right from './components/right/index'
export default {
components: {
left,
right
},
data() {
return {
title: '',
instructionIdentificationShow: false,
jurisdId: null,
searchData: {
model: []
}
}
},
mounted() {
this.getModelData()
},
created() { },
methods: {
/**
* 获取机型数据
*/
getModelData() {
console.log(5555)
const param = { searchItems: { items: [{ fieldName: 'id', operator: 'NEQ', value: 0 }] }, sortItem: [{ fieldName: 'modifyTime', sortOrder: 'asc' }] }
this.$api
.searchApi('AircraftType', param)
.then((res) => {
if (res && res.items && res.items.content) {
this.searchData.model = res.items.content
} else {
this.$message({
showClose: true,
message: '机型数据获取失败!',
type: 'error'
})
}
})
.catch((err) => console.log(err))
.finally(() => { })
},
open(v) {
this.dialogCmp = {
typeName: 'RequestOutStorageOut',
typeKey: '34fcf9f2-0ae6-47bb-920c-7c625d3e0937'
}
// this.$refs.dialog.open()
},
handleTreeClick(v) {
this.title = v.label
},
handleCollapse(v) {
}
}
}
</script>
<style lang="scss" >
.single-sortie-instruction-identification {
display: flex;
height: 100%;
.detail-pane{
width: 100%;
.left{
height: 100%;
overflow-x: hidden;
}
.right {
height: 100%;
.table {
margin-top: 0;
}
}
}
}
</style>
......@@ -35,7 +35,9 @@ export default {
PlannerConfirm: () => import('./plannerConfirm'), // 计划员确认
WorkHourExamine: () => import('./workHourExamine'), // 工时审核
OutStorageMatchConfirm: () => import('./outStorageMatchConfirm'), // 配套出库确认
ProPreparateWorkerConfirm: () => import('./proPreparatWorkerConfirm') // 生产准备工确认
ProPreparateWorkerConfirm: () => import('./proPreparatWorkerConfirm'), // 生产准备工确认
InstructionIdentificationBatch: () => import('./instructionIdentificationBatch'), // 指令标识
InstructionIdentificationBatchInfo: () => import('./instructionIdentificationBatch') // 指令标识不编辑
},
props: {
selectData: {
......
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 to comment