Commit 94735721 authored by jingnan's avatar jingnan 👀

Merge branch 'online'

parents be522b16 26a435fe
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*
* @Author: gjn
* @Date: 2024-06-14 11:34:56
* @Description:
*/
export default {
state: {
isFullscreen: false
},
mutations: {
setFullscreen(state) {
state.isFullscreen = !state.isFullscreen
}
}
}
import { post } from '../utils/http'
// 主页面
/**
* 获取架次
*/
export function getMaterial(params) {
return post('/ORProduction/board/getSorties', params)
}
/**
*站位
* @param {*} params
* @returns
*/
export function getAllPlan(params) {
return post(`/ExtPosition/board/getPosition?sortieId=${params.sortieId}`)
}
// ------------------end------------------------
// 站位现场看板
/**
* 现场问题督办table
* @param {*} params
* @returns
*/
export function stationSpotProblemTable(params) {
return post(`/SpotProblem/board/plan/spotProblem?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
/**
* 站位sqcdp数据
* @param {*} params
* @returns
*/
export function stationSQCDP(params) {
return post(`/FactoryCalendar/look/plan/SQCDP?positionNo=${params.positionNo}`)
}
/**
* 现场问题督办echart
* @param {*} params
* @returns
*/
export function stationSpotProblemEchart(params) {
return post(`/SpotProblem/board/plan/spotProblem/matrix?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
/**
* 物料配套及缺件情况 echart
* @param {*} params
* @returns
*/
export function stationFitRates(params) {
return post(`/ExtSupportingItem/board/plan/fitRates?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
/**
* 站位三天滚动计划
* @param {*} params
* @returns
*/
export function stationPlan(params) {
return post(`/ExtProcessPlan/board/threeDay/plan?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
/**
* 周作业计划完成趋势
* @param {*} params
* @returns
*/
export function completion(params) {
return post(`/JoExecutePlan/board/weekPlan/search?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
/**
* 物料配套及缺件情况 table
* @param {*} params
* @returns
*/
export function stationMaterialLacke(params) {
return post(`/WrMaterialLack/board/plan/materialLack?positionNo=${params.positionNo}&sorties=${params.sorties}`)
}
// ------------------end------------------------
// 总装集成现场看板
/**
* 架次现场督办
* @param {*} paramss
* @returns
*/
export function sortiesSpotProblem(params) {
return post(`/SpotProblem/board/spotProblemWithSortie?sorties=${params.sorties}&aircraftType=${params.aircraftType}`)
}
/**
* 架次SQCDP
* @param {*} params
* @returns
*/
export function sortiesSQCDP(params) {
return post(`/FactoryCalendar/look/SQCDP/searchWithSortieId?sorties=${params.sorties}&aircraftType=${params.aircraftType}`)
}
/**
* 架次三期预警
* @param {*} params
* @returns
*/
export function sortiesThree() {
return post('/Inventory/board/third/warning')
}
/**
* 架次行动项
* @param {*} paramss
* @returns
*/
export function sortiesActionitems(params) {
return post(`/ActionItem/board/actionItem/matrix?aircraftType=${params.aircraftType}&sorties=${params.sorties}`)
}
/**
* 架次配套情况
* @param {*} params
* @returns
*/
export function sortiesFitRates(params) {
return post(`/ExtSupportingItem/board/fitRatesWithSorties?sorties=${params.sorties}&aircraftType=${params.aircraftType}&typeName=${params.typeName}`)
}
// ------------------end------------------------
/**
*站位缺件汇总 获取站位
*/
export function getStationPosition(params) {
return post('/DxProcessPlan/find/recursion', params)
}
/**
* 站位缺件汇总 获取数据
*/
export function getSummaryOfStationMissingParts(params) {
return post(`/WrMaterialLack/lackOfParts?planId=${params.planId}&typeName=${params.typeName}&pageSize=${params.pageSize}&pageForm=${params.pageForm}&isOk=${params.seriesName}`, {})
}
/**
* sqcdp维护 获取站位
*/
export function getAllPosition() {
return post(`/DxProcessPlan/getAllPosition`, {})
}
/**
* sqcdp维护 获取站位
*/
export function searchDictData(params) {
return post(`/DictData/search`, params)
}
/**
* sqcdp维护 初始化年份
*/
export function getAllFactoryYear() {
return post(`/FactoryCalendar/getAllFactoryYear`, {})
}
/**
* sqcdp维护 初始化年份
*/
export function getCalendarData(params) {
return post(`/FactoryCalendar/find/recursion`, params)
}
/**
* 现场问题管理查询 获取数据
*/
export function getSummarizingData(params) {
return post(`/SpotProblem/summarizing`, params)
}
This diff is collapsed.
......@@ -208,7 +208,8 @@ export default {
searchItems: {
items: [{ 'fieldName': 'aircraftType.defName', operator: 'EQ', value: val }],
operator: 'AND'
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params)
.then((res) => {
......
/**
* @Description:
* @author gjn
* @date 2024/05/06
*/
<template>
<div class="AddExtRetentionDetailDialog-dialog">
<dee-as-com
ref="tableCom"
:basic-data="{...basicData,dictOptions}"
class="list-table"
:lay-config="layConfig"
@selectionChange="selectionChange"
/>
<div slot="footer" class="foot-btn-box">
<el-button type="primary" @click="submitEvent">确认</el-button>
<el-button @click="cancelEvent">取消</el-button>
</div>
</div>
</template>
<script>
export default {
componentName: '添加AO保留弹框',
name: 'AddExtRetentionDetailDialog',
components: {},
props: {
basicData: {
type: Object,
default: () => {}
},
componentProp: {
type: Object,
default: () => {}
}
},
data() {
return {
selection: [],
dictOptions: [],
layConfig: { typeName: 'ExtProcessPlan', layKey: 'addExtRetentionLists' }
}
},
computed: {
isAddAO() {
return this.componentProp.name === '添加AO保留'
}
},
watch: {
isAddAO: {
immediate: true,
handler(val) {
if (val) {
this.layConfig = { typeName: 'ExtProcessPlan', layKey: 'addExtRetentionLists' }
} else {
this.layConfig = { typeName: 'ExtProcessPlan', layKey: 'addOtherExtRetentionLists' }
}
}
}
},
created() {
this.getDictData()
},
mounted() {},
methods: {
// 加载字典数据
async getDictData() {
this.dictOptions = await this.$utils.getDicListByCode('PlanState')
},
findByNameVnode(obj, targetName) {
if (obj && obj.$vnode && obj.$vnode.tag && obj.$vnode.tag.includes(targetName)) {
return obj
} else {
return this.findByNameVnode(obj.$parent, targetName)
}
},
getCaNo(data) {
if (data.subTypeName === 'ExtProcessPlanAssemblyUnit') {
return data.serialNumber
} else {
return this.getCaNo(data.targetExtProcessUsageLink && data.targetExtProcessUsageLink[0] && data.targetExtProcessUsageLink[0].source)
}
},
selectionChange(val) {
this.selection = val
},
submitEvent() {
if (this.selection.length) {
const showData = this.findByNameVnode(this, 'DeeAsTable').showData
if (showData.length) {
const validId = this.isAddAO ? 'id' : 'targetId'
this.selection = this.selection.filter(item => !showData.some(x => x.targetId === item[validId]))
}
const data = this.selection.map(row => {
let item = ''
let assemblyUnit = ''
if (this.isAddAO) {
item = row
assemblyUnit = this.getCaNo(item.targetExtProcessUsageLink && item.targetExtProcessUsageLink[0] && item.targetExtProcessUsageLink[0].source)
} else {
item = row.target
assemblyUnit = row.assemblyUnit
}
return {
operator: 'ADD',
dictOptions: this.dictOptions,
assemblyUnit: assemblyUnit,
target: item,
targetId: item.id,
targetIdType: 'ExtProcessPlan',
planStateLabel: this.$utils.getParamsFromLists(this.dictOptions, 'value', item.joExecutePlan[0].planState, 'label')
}
})
this.$emit('submitEvent', { formData: data })
}
},
cancelEvent() {
this.$emit('cancel')
}
}
}
</script>
<style lang='scss'>
.AddExtRetentionDetailDialog-dialog{
.list-table{
height: 510px!important;
}
.foot-btn-box{
display: flex;
justify-content: center;
align-content: center;
margin-top: 10px;
}
.search-box-col{
width: 300px !important;
}
.w60{
width: 30px !important;
}
}
</style>
......@@ -18,7 +18,17 @@
</el-select>
</div>
<dee-as-com
v-if="typeName"
v-if="typeName==='replaceUse'"
ref="basicInfoTable"
:form="bindForm"
style="border:none;"
model-name="OutStorageUse"
:lay-config="cmpOptions"
:basic-data="{...basicData,useRequestType:basicData.typeName||typeName}"
/>
<dee-as-com
v-else-if="typeName"
ref="basicInfoTable"
style="border:none;"
model-name="OutStorageUse"
:lay-config="cmpOptions"
......@@ -29,7 +39,7 @@
</template>
<script>
// import { post } from '@/utils/http'
import { post } from '@/utils/http'
export default {
componentName: '领用出库申请新建',
name: 'AddOutStorageUseCom',
......@@ -59,6 +69,7 @@ export default {
typeName: 'OutStorageUse',
layKey: 'outStorageUseApplyAdd_useAO'
},
bindForm: {},
outStorageUseId: ''//
}
},
......@@ -67,12 +78,19 @@ export default {
typeName: {
immediate: true,
handler(val) {
this.bindForm = {}
if (!this.basicData.id) {
this.$set(this.cmpOptions, 'layKey', `outStorageUseApplyAdd_${val}`)
} else {
this.$set(this.cmpOptions, 'layKey', `outStorageUseApplyEdit_${val}`)
}
}
},
'bindForm.replaceDocNo': {
immediate: true,
handler(val) {
val && typeof (val) === 'number' && this.getReplaceOutInfo(val)
}
}
},
created() {
......@@ -103,6 +121,15 @@ export default {
this.formData = Object.assign({}, val)
this.formData.typeName = this.typeName
}
},
getReplaceOutInfo(id) {
this.bindForm = { replaceDocNo: this.bindForm.replaceDocNo }
post(`OutStorageRequest/createReplaceOutInfo?replaceDocId=${id}`).then(res => {
if (!res.items) return
this.bindForm = res.items
}).catch(err => {
console.log(err)
}).finally(() => {})
}
// cancelHandler(val) {
// this.$confirm('此操作将解除已占用的操作, 是否继续?', '提示', {
......
......@@ -73,6 +73,7 @@ export default {
case 'useAO' :
case 'materialUse':
case 'NoMachineMaterialUse':
case 'UrgentUse':
this.amountItemLabel = '申领数量'
this.$set(this.cmpOptions, 'layKey', `outStorageUseMaterial_Add_${val}`)
break
......
......@@ -126,6 +126,14 @@ export default {
}
}
}
},
'form.replaceDocNo': {
immediate: true,
handler(val) {
if (val && this.form.inStorageRequestItems) {
this.tableData = this.form.inStorageRequestItems
}
}
}
},
mounted() {
......
......@@ -1771,7 +1771,8 @@ export default {
'value': this.form.airModel
}
]
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
const SORTIES = this.formFileds[0].data.find(
......
......@@ -1773,7 +1773,8 @@ export default {
'value': this.form.airModel
}
]
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
const SORTIES = this.formFileds[0].data.find(
......
......@@ -9,6 +9,7 @@ import config from './config'
import data from './data'
import CsvExportor from 'csv-exportor'
import moment from 'moment'
import { post } from '@/utils/http'
export default {
name: 'TfMomWebStep',
mixins: [config, data],
......@@ -399,7 +400,7 @@ export default {
extProcessExecutorRoutes: routes
}
})
this.$api.recursion('ExtPosition', params, true).then(() => {
post('/ExtPosition/seriesParallelRelationship/save', params, true).then(() => {
this.$utils.showMessageSuccess('保存成功!')
this.getData()
}).finally(() => { this.loading = false })
......
<template>
<div>
<el-select
v-model="selVal"
filterable
:disabled="disabled"
remote
placeholder="请输入"
:remote-method="remoteMethod"
:loading="loading"
@change="changeEvent"
>
<el-option
v-for="(item,i) in requestOp"
:key="i"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
componentName: '产品件号/型号选择',
name: 'ProductModelSelect',
components: {},
props: {
value: {
type: Object,
default: null
},
basicData: {
type: Object,
default: null
},
form: {
type: Object,
default: null
},
itemObj: {
type: Object,
default: null
}
},
data() {
return {
selVal: '',
linkageValue: '',
requestOp: [],
loading: false,
com: null
}
},
computed: {
disabled() {
let disabled = false
this.$utils.findByNameVnode(this, 'DeeAsForm').formData.forEach(item => {
item.data && item.data.forEach(x => {
if (x.key === this.itemObj.key) {
disabled = x.component.disabled
}
})
})
return disabled
}
},
watch: {
value: {
handler: function() {
if (Object.keys(this.basicData).length) {
this.setData(this.value)
}
},
deep: true
}
},
// 生命周期 - 创建完成(可以访问当前this 实例)
created() {
},
// 生命周期 - 挂载之前
beforeMount() {
},
// 生命周期 - 挂载完成(可以访问 DOM 元素)
mounted() {
// 流程里使用
if (Object.keys(this.basicData).length) {
this.setData(this.form.extMaterial)
}
},
methods: {
async setData(value) {
if (value) {
await this.getModelNo(value.modelNo)
this.selVal = JSON.stringify(value)
}
},
async getModelNo(query) {
const params = {
'pageFrom': 1,
'pageSize': 200,
'searchItems': {
'operator': 'AND',
'items': [{
'fieldName': 'modelNo',
'operator': 'LIKE',
'value': query
}]
},
'openProps': [
{
'name': 'extUnit'
}
]
}
await post(`/ExtDxProcessMaterial/search`, params)
.then(res => {
this.loading = false
if (res.code === 0) {
this.requestOp = res.items.content.map(item => {
return {
label: item.modelNo,
value: JSON.stringify(item)
}
})
}
})
},
changeEvent(value) {
const obj = JSON.parse(value)
this.$set(this.form, 'extMaterial', obj)
this.$set(this.form, 'sourceSerno', '')
this.$set(this.form, 'sourceApprovalCert', '')
this.$set(this.form, 'sourceProductDrawver', '')
this.$set(this.form, 'sourceElecHardwareNo', '')
this.$set(this.form, 'sourceSoftConfPieceNo', '')
this.$set(this.form, 'targetSerno', '')
this.$set(this.form, 'targetApprovalCert', '')
this.$set(this.form, 'targetProductDrawver', '')
this.$set(this.form, 'targetElecHardwareNo', '')
this.$set(this.form, 'targetSoftConfPieceNo', '')
},
remoteMethod(query) {
if (query && query.length >= 2) {
if (this.time) {
this.time = null
}
this.time = setTimeout(() => {
this.loading = true
this.getModelNo(query)
}, 500)
}
}
}
}
</script>
<style lang='scss' scoped>
</style>
......@@ -1772,7 +1772,8 @@ export default {
'value': this.form.airModel
}
]
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
const SORTIES = this.formFileds[0].data.find(
......
......@@ -116,7 +116,7 @@ export default {
},
getSortiesList() {
this.sortiesData = []
const params = { 'searchItems': { 'items': [] }, 'sortItem': [{ 'fieldName': 'modifyTime', 'sortOrder': 'asc' }] }
const params = { 'searchItems': { 'items': [] }, 'sortItem': [{ 'fieldName': 'defCode', 'sortOrder': 'asc' }] }
this.$api.searchApi('AircraftSorties', params).then(res => {
if (res.items && res.items.content) {
this.sortiesData = res.items.content.map(row => {
......
export default {
props: {},
layoutConfigData: [
{
title: '高级组件配置',
data: [
{
title: 'attrKey',
key: 'attrKey',
component: {
name: 'el-input',
placeholder: ''
}
},
{
title: '是否禁用',
key: 'disabled',
component: {
name: 'el-select',
options: [{
label: '是',
value: true
}, {
label: '否',
value: false
}]
}
}
]
}
],
data() {
return {
}
},
created() {
},
computed: {
},
methods: {
}
}
<template>
<div>
<el-select
v-model="selVal"
filterable
remote
:disabled="disabled"
placeholder="请输入"
:remote-method="remoteMethod"
value-key="id"
:loading="loading"
@change="changeEvent"
>
<el-option
v-for="(item,i) in requestOp"
:key="i"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
<script>
import { post } from '@/utils/http'
import config from './config'
export default {
componentName: '装机指令号选择器',
name: 'SerialNumberSelect',
components: {},
mixins: [config],
props: {
basicData: {
type: Object,
default: null
},
value: {
type: Object,
default: null
},
form: {
type: Object,
default: null
},
itemObj: {
type: Object,
default: null
}
},
data() {
return {
selVal: '',
linkageValue: '',
requestOp: [],
loading: false
}
},
computed: {
disabled() {
return this.itemObj.disabled
}
},
watch: {
value() {
if (typeof this.value !== 'string') {
if (Object.keys(this.basicData).length) {
this.setData(this.value)
}
}
}
},
// 生命周期 - 创建完成(可以访问当前this 实例)
created() {
},
// 生命周期 - 挂载之前
beforeMount() {
},
// 生命周期 - 挂载完成(可以访问 DOM 元素)
mounted() {
this.com = this.$utils.findByNameVnode(this, 'DeeAsForm')
if (Object.keys(this.basicData).length) {
this.setData(this.form.sourceAo)
}
},
methods: {
async setData(value) {
let data = value
// 处理串件单类型等于库房串件时 source1(source必填,source1非必填)的回显问题
if (this.itemObj.attrKey.includes('targetAo') && this.form.replaceDocType === '库房串件') {
data = this.form.targetAo
}
if (data) {
await this.getModelNo(data.serialNumber)
this.selVal = data
}
},
async getModelNo(query) {
const params = {
'pageFrom': 1,
'pageSize': 200,
'searchItems': {
'operator': 'AND',
'items': [{
'fieldName': 'serialNumber',
'operator': 'LIKE',
'value': query
}]
},
'openProps': [
{
'name': 'extUnit'
},
{
'name': 'objOrg'
}
]
}
await post(`/ExtProcessPlan/search`, params)
.then(res => {
this.loading = false
if (res.code === 0) {
this.requestOp = res.items.content.map(item => {
return {
label: item.serialNumber,
value: item
}
})
}
})
},
changeEvent(value) {
this.$set(this.form, this.itemObj.key, value)
},
remoteMethod(query) {
if (query && query.length >= 2) {
if (this.time) {
this.time = null
}
this.time = setTimeout(() => {
this.loading = true
this.getModelNo(query)
}, 500)
}
}
}
}
</script>
<style lang='scss' scoped>
</style>
export default {
props: {},
layoutConfigData: [
{
title: '高级组件配置',
data: [
{
title: 'attrKey',
key: 'attrKey',
component: {
name: 'el-input',
placeholder: ''
}
}
]
}
],
data() {
return {
}
},
created() {
},
computed: {
},
methods: {
}
}
<template>
<div>
<el-select
v-model="selVal"
:disabled="disabled"
placeholder="请选择"
>
<el-option
v-for="(item,i) in requestOp"
:key="i"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
<script>
import { get, post } from '@/utils/http'
import config from './config'
export default {
componentName: '串件架次选择',
name: 'SerialPieceSorties',
components: {},
mixins: [config],
props: {
value: {
type: String,
default: ''
},
basicData: {
type: Object,
default: null
},
form: {
type: Object,
default: null
},
itemObj: {
type: Object,
default: null
},
componentProp: {
type: Object,
default: () => { return {} }
}
},
data() {
return {
selVal: '',
linkageValue: '',
requestOp: [],
loading: false,
com: null
}
},
computed: {
disabled() {
let disabled = false
this.$utils.findByNameVnode(this, 'DeeAsForm').formData.forEach(item => {
item.data && item.data.forEach(x => {
if (x.key === this.itemObj.attrKey) {
disabled = x.component.disabled
}
})
})
return disabled
}
},
watch: {
'form.aircraftType': function(val) {
this.getSortiesByCode(val)
},
'form.extMaterial': function(val) {
// this.findCanReplaceSerno(val.id, this.selVal)
},
selVal(val) {
this.$set(this.form, this.itemObj.key, val)
let obj = this.form
const keyList = this.itemObj.key.split('.')
keyList.forEach((item, i) => {
if (i < keyList.length - 1) {
if (!obj[item]) {
obj[item] = {}
this.$set(obj, item, {})
obj = obj[item]
}
} else {
this.$set(obj, item, val)
}
})
if (this.form.extMaterial) {
// this.findCanReplaceSerno(this.form.extMaterial.id, val)
}
}
},
// 生命周期 - 创建完成(可以访问当前this 实例)
created() {
},
// 生命周期 - 挂载之前
beforeMount() {
},
// 生命周期 - 挂载完成(可以访问 DOM 元素)
mounted() {
this.com = this.$utils.findByNameVnode(this, 'DeeAsForm')
if (Object.keys(this.basicData).length) {
this.setData(this.form.aircraftType)
}
},
methods: {
async setData(value) {
await this.getSortiesByCode(value)
if (this.itemObj.key.includes('source')) {
this.selVal = this.basicData.sourceSorties
} else {
this.selVal = this.basicData.targetSorties
}
},
async getSortiesByCode(val) {
await get(`/AircraftSorties/getSortiesByCode?aircraftType=${val}&aircraftTypeId=${val}`)
.then(res => {
this.loading = false
if (res.code === 0) {
this.requestOp = res.items.map(item => {
return {
label: item.defName,
value: item.defCode
}
})
}
})
},
findCanReplaceSerno(materialId, sorties) {
if (materialId && sorties) {
post(`/Inventory/findCanReplaceSerno?materialId=${materialId}&sorties=${sorties}`)
.then(res => {
this.loading = false
if (res.code === 0) {
const keyList = Object.keys(res.items)
let attrKey = 'sourceSerno'
if (this.itemObj.key.includes('source')) {
this.form.sourceInventoryMap = res.items
} else {
this.form.targetInventoryMap = res.items
attrKey = 'targetSerno'
}
let options = []
if (keyList.length) {
options = keyList.map(key => {
return {
label: key,
value: key
}
})
} else {
if (this.itemObj.key.includes('source')) {
this.$set(this.form, 'sourceSerno', '')
this.$set(this.form, 'sourceApprovalCert', '')
this.$set(this.form, 'sourceProductDrawver', '')
this.$set(this.form, 'sourceElecHardwareNo', '')
this.$set(this.form, 'sourceSoftConfPieceNo', '')
} else {
this.$set(this.form, 'targetSerno', '')
this.$set(this.form, 'targetApprovalCert', '')
this.$set(this.form, 'targetProductDrawver', '')
this.$set(this.form, 'targetElecHardwareNo', '')
this.$set(this.form, 'targetSoftConfPieceNo', '')
}
}
this.com.formData.forEach(item => {
item.data && item.data.forEach(x => {
if (x.key === attrKey) {
this.$set(x.component, 'options', options)
}
})
})
}
})
}
}
}
}
</script>
<style lang='scss' scoped>
</style>
<template>
<div class="materialReferenceLink-table">
<dee-as-com
ref="searchForm"
:form="searchForm"
:lay-config="{ typeName: 'ReplaceMaterialDoc', layKey: 'defaultQuery' }"
@searchEvent="initData"
/>
<dee-up-table
ref="upTable"
:columns="tableColumns"
:data="tableData"
:index-row="{ title: '序号', width: '60', align: 'center', fixed: true }"
selection-row
:pagination="pagination"
@pagination-size-change="changePageSize"
@pagination-current-change="changePageNum"
@selection-change="selectionChange"
/>
<dee-drawer title="查看" :dialog-visible="visible" @handleClose="()=>{visible = false}">
<dee-as-com
v-if="btnType === 0"
:lay-config="layConfig"
:basic-data="basicData"
/>
<TaskDetailProcess v-if="btnType === 1" :basic-data="rowData" />
<ProcessTracking v-if="btnType === 2" :basic-data="rowData" />
</dee-drawer>
</div>
</template>
<script>
import { post } from '../../../utils/http'
import TaskDetailProcess from '../../../../../dee-task-center/src/privateComponents/components/TaskDetailProcess'
import ProcessTracking from '../../../../../dee-task-center/src/privateComponents/components/ProcessTracking'
export default {
name: 'SerialSingleReport', // name写在组件的最前方,自定义组件为必填
componentName: '串件单报表',
components: { ProcessTracking, TaskDetailProcess },
data() {
return {
visible: false,
rowData: null,
btnType: 0,
basicData: {},
tableColumns: [
{ title: '操作', key: 'operate', align: 'center', hideTip: true, component: {
show: true,
name: 'EditTableRow',
props: {
btns: [
{
operation: '查看',
handleClick: (row, index) => {
this.btnType = 0
this.visible = true
this.getData(row)
},
icon: '/icons/components/dashboard/preview.png'
},
{
operation: '下载PDF',
handleClick: (row, index) => {
this.download(row)
},
icon: '/icons/c-down.png'
},
{
operation: '审签历史记录',
handleClick: (row, index) => {
this.btnType = 1
this.rowData = row
this.visible = true
},
icon: '/icons/c-doclink.png'
},
{
operation: '流程跟踪',
handleClick: (row, index) => {
this.btnType = 2
this.rowData = row
this.visible = true
},
icon: '/icons/b-structure.png'
}
]
}
}, width: 200 },
{
title: '登记时间',
key: 'createTime',
width: 200
},
{
title: ' 串件单申请单编号',
key: 'reqNo',
width: 200
},
{
title: '产品件号/型号',
key: 'extMaterial.modelNo',
width: 200
},
{
title: '产品名称',
key: 'extMaterial.resName'
},
{
title: '串件数量',
key: 'amount'
},
{
title: '串件原因类型',
key: 'replaceReasonType'
},
{
title: '串件原因',
key: '串件原因'
},
{
title: '被替换件', children: [
{ title: '架次', key: 'sourceSorties', align: 'center' },
{ title: '系列号', key: 'sourceSerno', align: 'center', width: 200 },
{ title: '是否试验件', key: 'sourceIsExperiment', align: 'center' },
{ title: '适航批准标签', key: 'sourceApprovalCert', align: 'center', width: 200 },
{ title: '供应商图号/版本', key: 'sourceProductDrawver', align: 'center', width: 200 },
{ title: '软件件号/版本', key: 'sourceSoftConfPieceNo', align: 'center', width: 200 },
{ title: '制造偏离单号', key: 'sourceMfgDevDoc', align: 'center', width: 200 }
]
},
{
title: '拟装机件', children: [
{ title: '架次', key: 'targetSorties', align: 'center' },
{ title: '系列号', key: 'targetSerno', align: 'center', width: 200 },
{ title: '是否试验件', key: 'targetIsExperiment', align: 'center' },
{ title: '适航批准标签', key: 'targetApprovalCert', align: 'center', width: 200 },
{ title: '供应商图号/版本', key: 'targetProductDrawver', align: 'center', width: 200 },
{ title: '软件件号/版本', key: 'targetSoftConfPieceNo', align: 'center', width: 200 },
{ title: '制造偏离单号', key: 'targetMfgDevDoc', align: 'center', width: 200 }
]
},
{
title: '经办人',
key: 'creator.userName'
},
{
title: '临时计划号',
key: ''
},
{
title: '工艺员',
key: ''
},
{
title: '装机指令号',
key: ''
}
],
tableData: [],
pagination: {
currentPage: 1,
pageSize: 10,
total: 0,
pageSizes: [10, 20, 50]
},
selectionRow: [],
formButtons: [
{
'text': '查询',
'type': 'submit',
'component': {
'type': 'primary'
}
}
],
searchForm: {
rescodeA: '',
rescodeB: ''
},
searchFormData: [{
split: 3,
data: [
{
key: 'rescodeA',
title: '物料A编码',
component: {
name: 'el-input'
}
},
{
key: 'rescodeB',
title: '物料B编码',
component: {
name: 'el-input'
}
}
]
}]
}
},
computed: {
layConfig() {
return { typeName: 'ReplaceMaterialDoc', layKey: 'defaultView' }
}
},
created() {
// 初始化数据
this.initData()
},
methods: {
initData(searchForm) {
// 初始化数据
const params = {
'pageFrom': this.pagination.currentPage,
'pageSize': this.pagination.pageSize,
'searchItems': { },
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
]
}
if (searchForm) {
params.searchItems = searchForm
}
params.openProps = [
{
'name': 'extMaterial',
'pageFrom': 1,
'pageSize': 9999
},
{
'name': 'sourceInventory',
'pageFrom': 1,
'pageSize': 9999
}
]
post('ReplaceMaterialDoc/list/search', params).then(res => {
if (res.items && res.items.content) {
this.tableData = res.items.content.map(item => {
const replaceMaterialDocVO = item.replaceMaterialDocVO
let processInstanceId = null
let processTaskId = null
if (item.taskProcess) {
processInstanceId = item.taskProcess.procInstId
processTaskId = item.taskProcess.id
}
return {
...replaceMaterialDocVO,
processInstanceId,
processTaskId
}
})
this.pagination.total = res.items.totalElements
}
})
},
getData(data) {
const params = {
'searchItems': {
'items': [
{
'fieldName': 'id',
'operator': 'EQ',
'value': data.id
}
]
},
'openProps': [
{
'name': 'sourceAo'
},
{
'name': 'targetAo'
},
{
'name': 'extMaterial',
'openProps': [
{
'name': 'extUnit'
}
]
},
{
'name': 'creator',
'pageFrom': 1,
'pageSize': 9999
}
]
}
post('/ReplaceMaterialDoc/search', params).then(res => {
if (res.items && res.items.content) {
this.basicData = res.items.content[0]
}
})
},
download(data) {
this.$api.apiDownloadFile(`/ReplaceMaterialDoc/download/pdf?id=${data.id}`).then((res) => {
this.$utils.downLoadFile(res, '')
})
},
selectionChange(v) {
this.selectionRow = v
},
changePageSize(pageSize) {
this.pagination.pageSize = pageSize
this.pagination.currentPage = 1
this.initData()
},
changePageNum(pageNum) {
this.pagination.currentPage = pageNum
this.initData()
},
addCancel(pageNum) {
this.addDialogVisible = false
},
successFun() {
this.initData()
}
}
}
</script>
<style lang='scss'>
.materialReferenceLink-table {
.dee-up-table {
height: 500px;
}
}
</style>
......@@ -105,7 +105,8 @@ export default {
searchItems: {
items: [{ 'fieldName': 'aircraftType.defName', operator: 'EQ', value: val }],
operator: 'AND'
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
this.options = res.items.content.map(row => {
......
......@@ -97,7 +97,8 @@ export default {
searchItems: {
items: [{ 'fieldName': 'aircraftTypeId', operator: 'EQ', value: val }],
operator: 'AND'
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
this.options = res.items.content.map(row => {
......
......@@ -102,7 +102,8 @@ export default {
}
]
}
]
],
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.options = []
this.loading = true
......
......@@ -655,7 +655,8 @@ export default {
'value': this.form.airModel
}
]
}
},
sortItem: [{ fieldName: 'defCode', sortOrder: 'asc' }]
}
this.$api.searchApi('AircraftSorties', params).then(res => {
const SORTIES = this.formFileds[0].data.find(
......
<template>
<div>
<dee-as-com
ref="applyTable"
class="list-table"
:basic-data="{ selectData,selectionRows }"
:lay-config="{ typeName: 'OutStorageUse', layKey: 'outStorageUseApplyList' }"
@tableToolHandler="tableToolHandler"
@selectionChange="selectionChange"
/>
<dee-dialog
title="发起领用申请"
:dialog-visible="dialogVisible"
>
<div style="margin-bottom: 20px;font-size: 14px;font-weight: bolder;">确认提交吗?</div>
<div style="text-align: center;">
<el-button type="primary" @click="confirm">确 定</el-button>
<el-button @click="cancle">取 消</el-button>
</div>
</dee-dialog>
<dee-dialog
title="选择审批领导"
:dialog-visible="setPersonVisible"
>
<dee-form
ref="form"
label-width="100"
:form="form"
:form-data="formData"
:rules="rules"
>
<el-button type="primary" @click="setPersonConfirm">确 定</el-button>
<el-button @click="setPersonCancle">取 消</el-button>
</dee-form>
</dee-dialog>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'UseApply',
componentName: '领用申请',
components: { },
props: {
selectData: {
type: Object,
default: () => {}
}
},
data() {
return {
dialogVisible: false,
setPersonVisible: false,
selectionRows: [],
form: {},
formData: [{
split: 1,
data: [
{
title: '设置审批领导',
key: 'userIds',
component: {
clearable: true,
name: 'el-select',
placeholder: '请选择',
multiple: true,
options: []
}
}]
}],
rules: {
userIds: [
{
required: true,
message: '请填写审批领导',
trigger: ['blur', 'change']
}
]
}
}
},
created() {
const httpParams = {
'pageFrom': 1,
'pageSize': 9999,
'searchItems': {
'children': [],
'items': [
{
'fieldName': 'source.name',
'operator': 'IN',
'value': ['项目部审批人员']
}
],
'operator': 'AND'
},
'openProps': [
{
'name': 'source',
'pageFrom': 1,
'pageSize': 9999
},
{
'name': 'target',
'pageFrom': 1,
'pageSize': 9999
}
],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
]
}
post('/DxGroupMemberLink/search', httpParams).then(res => {
const arr = []
const ids = []
res.items.content.forEach(item => {
if (ids.indexOf(item.target.id) === -1) {
ids.push(item.target.id)
arr.push({
value: item.target.id,
label: item.target.name + '/' + item.target.number
})
}
})
this.formData[0].data.forEach(item => {
if (item.key === 'userIds') {
item.component.options = arr
}
/**
item.key === 'userIds' && (item.component.options = arr.map(row => {
return {
value: row.value,
label: row.label
}
}
))
*/
})
}).catch((err) => {
console.log(err)
})
},
methods: {
tableToolHandler(e) {
console.log(e.key.btnValue)
if (e.key.btnValue === 'UseApply') {
this.useApply()
}
},
useApply() {
this.dialogVisible = true
},
confirm() {
let isUrgentUse = 0
this.selectionRows.forEach(item => {
if (item.typeName !== 'UrgentUse') {
isUrgentUse++
}
})
if (isUrgentUse === 0) {
// 紧急领用选人
this.dialogVisible = false
this.setPersonVisible = true
} else if (isUrgentUse === this.selectionRows.length) {
post('/OutStorageRequest/outStorageOut/submit?applyIds=' + this.selectionRows.map(item => Number(item.id))).then(res => {
this.$utils.showMessageSuccess('提交成功')
this.$refs.applyTable.$refs.asCom.getData()
}).catch(() => {
this.$utils.showMessageWarning('出现异常,提交失败')
}).finally(() => {
this.dialogVisible = false
})
} else {
this.dialogVisible = false
this.$utils.showMessageWarning('紧急领用不能和其他领用类型一起提交')
}
},
cancle() {
this.dialogVisible = false
},
setPersonConfirm() {
const ids = []
if (this.selectionRows && this.selectionRows.length) {
this.selectionRows.forEach(item => ids.push(item.id))
}
if (this.form.userIds && this.form.userIds.length !== 0) {
post('/OutStorageRequest/creator/apply?userIds=' + this.form.userIds, ids).then(res => {
this.$utils.showMessageSuccess('提交成功')
setTimeout(() => {
this.$refs.applyTable.$refs.asCom.getData()
}, 1500)
}).catch(err => {
this.$utils.showMessageWarning('出现异常,提交失败')
console.log(err)
}).finally(() => {
this.dialogVisible = false
this.setPersonVisible = false
this.$set(this.form, 'userIds', '')
})
} else {
this.$utils.showMessageWarning('请选择审批领导')
}
},
setPersonCancle() {
this.setPersonVisible = false
this.$set(this.form, 'userIds', '')
},
selectionChange(val) {
this.selectionRows = val
}
}
}
</script>
<style></style>
<template>
<el-dialog
:visible.sync="visible"
fullscreen
:modal="false"
title="行动项"
:modal-append-to-body="false"
class="actionitems-dialog"
:destroy-on-close="true"
@close="close"
@opened="opened"
>
<!-- <Actionitems /> -->Actionitems
</el-dialog>
</template>
<script>
// import Actionitems from '@/views/mes/actionItemManagement/actionItemManagementSearch/index'
export default {
name: 'ActionitemsDialog',
components: {
// Actionitems
},
props: { },
data() {
return {
visible: false
}
},
computed: {
},
created() {},
methods: {
opened() {
this.$children[0].$children[0].getAirModelList()
},
close() {
this.visible = false
this.$parent.actionitemsParams = {}
}
}
}
</script>
<style lang='scss'>
.actionitems-dialog{
position: absolute;
.el-dialog__header{
text-align: center;
}
.el-dialog {
max-height:100%;
max-width:100%;
}
}
</style>
<template>
<el-dialog
:visible.sync="visible"
fullscreen
:modal="false"
title="三期预警"
:modal-append-to-body="false"
class="expire-warning-dialog"
:destroy-on-close="true"
@close="close"
@opened="opened"
>
<!-- <ExpireWarning /> -->ExpireWarning
</el-dialog>
</template>
<script>
// import ExpireWarning from '@/views/mes/InsideStorageOperation/StorageExpireWarning/index.vue'
export default {
name: 'ExpireWarningDialog',
components: {
// ExpireWarning
},
props: { },
data() {
return {
visible: false
}
},
computed: { },
created() {},
methods: {
opened() {
this.$children[0].$children[0].$refs.highSearch.save()
this.$parent.StorageExpireWarningParams = {}
},
close() {
this.$parent.StorageExpireWarningParams = {}
this.visible = false
}
}
}
</script>
<style lang='scss'>
.expire-warning-dialog{
position: absolute;
.el-dialog__header{
text-align: center;
}
.el-dialog {
max-height:100%;
max-width:100%;
}
}
</style>
<template>
<el-dialog
:visible.sync="visible"
fullscreen
:modal="false"
title="作业计划执行查询"
:modal-append-to-body="false"
class="job-plan-execution-query-dialog"
:destroy-on-close="true"
@close="close"
@opened="opened"
>
JobPlanExecutionQuery <!-- <JobPlanExecutionQuery /> -->
</el-dialog>
</template>
<script>
// import JobPlanExecutionQuery from '@/views/mes/physicalQualityAndConfiguratioCnontrol/jobPlanExecutionSummary'
export default {
name: 'JobPlanExecutionQueryDialog',
components: {
// JobPlanExecutionQuery
},
props: {},
data() {
return {
visible: false
}
},
computed: {},
created() {},
methods: {
opened() {
this.$children[0].$children[0].getAirModelList()
// this.$parent.JobPlanExecutionQueryParams = {}
},
close() {
this.visible = false
}
}
}
</script>
<style lang="scss">
.job-plan-execution-query-dialog {
position: absolute;
.el-dialog__header {
text-align: center;
}
.el-dialog {
max-height: 100%;
max-width: 100%;
}
}
</style>
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