Commit 3bee3490 authored by 旭艳's avatar 旭艳

装配计划执行接口联调

parent 18ffac7e
<template>
<dee-dialog
id="dee-dialog"
title="装配流程"
:dialog-visible.sync="visible"
width="90%"
custom-class="mobile-dialog"
:before-close="handleClose"
close-on-click-modal
>
<div v-loading="loading" class="assembly-process">
<div>
<p>装配效果图</p>
<p>装配流程</p>
</div>
<div class="img">
<div>
<img v-if="imgLeft" :src="imgLeft" alt="" @click="preview(imgLeft)">
<span v-else>暂无装配效果图</span>
</div>
<div>
<img v-if="imgRight" :src="imgRight" alt="" @click="preview(imgRight)">
<span v-else> 暂无装配流程 </span>
</div>
</div>
</div>
</dee-dialog>
</template>
<script>
import { post } from '@/utils/http'
import { previewIMG } from '@/api/previewIMG.js'
export default {
components: {},
data() {
return {
visible: false,
loading: true,
imgLeft: '',
imgRight: ''
}
},
created() {},
methods: {
// 打开弹出框
open() {
this.visible = true
this.$nextTick(() => {
this.getAssemblyProcess()
})
},
handleClose() {},
preview(src) {
previewIMG(src)
},
getAssemblyProcess() {
this.loading = true
post(
`ExtProcessPlan/getPaper?aoId=${this.$parent.headerData.aoId}`,
{},
'post'
)
.then((res) => {
if (res && res.message.includes('成功')) {
this.imgLeft = res.items['左']
this.imgRight = res.items['右']
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.loading = false
})
}
}
}
</script>
<style lang="scss">
.assembly-process {
> div:first-child {
display: flex;
background-color: #b6dde8;
font-weight: 700;
font-size: 16px;
> p {
width: 50%;
padding: 10px 0;
text-align: center;
&:first-child {
border-right: 2px solid #cecece;
}
}
}
> .img {
display: flex;
> div {
width: 50%;
display: flex;
justify-content: center;
align-items: center;
min-height: 20vh;
max-height: 70vh;
img {
max-height: 100%;
max-width: 100%;
}
}
}
}
</style>
......@@ -15,16 +15,12 @@
</header>
<el-form-item>
<DeeUploadTable
v-model="objFileLinks"
attr-key="objFileLinks"
v-model="process.fileList"
app-name="tf-mom"
:read-only="false"
:config-item="{}"
:config-item="tableConfig"
:table-columns="tableColumns"
:remove-check-fn="removeCheckFn"
:table-config="tableConfig"
@input="modifyed=true"
/>
<!-- <upload-files v-if="uploadVisble" ref="upload" v-model="objFileLinks" /> -->
</el-form-item>
<el-form-item class="btns">
<el-button
......@@ -39,6 +35,7 @@
</dee-dialog>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'StorageExperimentDialog',
data() {
......@@ -48,33 +45,18 @@ export default {
process: {},
processNumber: null,
processName: null,
objFileLinks: [],
disabled: false,
uploadVisble: false,
modifyed: false,
tableColumns: [
{
'title': '文件名',
'key': 'originalFileName',
'key': 'target.originalFileName',
'parentKey': 'target',
'headerAlign': 'center',
'align': 'left'
},
{
'title': '文件大小',
'key': 'fileSize',
'parentKey': 'target',
'level': 1,
'show': true,
'headerAlign': 'center',
'align': 'left',
formatter: (row) => {
return this.$utils.formatGMK(row.fileSize)
}
},
{
'title': '扩展名',
'key': 'fileExtension',
'key': 'target.fileSize',
'parentKey': 'target',
'level': 1,
'show': true,
......@@ -82,23 +64,8 @@ export default {
'align': 'left'
},
{
'title': '文件状态',
'key': 'fileStatus',
'fildProp': {
'id': 164,
'refId': null,
'type': 'DictDataVO',
'rule': {
'typeName': 'DictDataVO',
'comment': null,
'length': null,
'defaultValue': '',
'notNull': false,
'unique': false,
'scale': null,
'dictTypeCode': 'FileStatus'
}, 'attrType': 'BASE'
},
'title': '扩展名',
'key': 'target.fileExtension',
'parentKey': 'target',
'level': 1,
'show': true,
......@@ -107,69 +74,75 @@ export default {
}
],
tableConfig: {
'filterKey': 'contentType',
'serverUrl': '',
'pageShow': true,
'taleType': 'single',
'url': '/dfs/fileManager/feign/uploadFile',
'showFileList': true,
// 'identFilter': ['FLOW_FILE'],
limit: 1,
isBigFileUpload: false,
isNeedBucket: false,
'uploadFilter': 'FLOW_FILE',
formatData: (val) => {
return [val]
}
component: {
alimit: 1,
appendFilter: ['ATTACH_FILE', 'SECONDARY', 'FLOW_FILE', 'PROCESS_CONTENTROLE_PDF'],
appendTitle: '附件',
appendUploadFilter: 'ATTACH_FILE',
defaultValueSelfFun: 'return null',
disabled: false,
filterKey: 'contentType',
// limit: 1,
masterFilter: ['MASTER_FILE', 'PRIMARY'],
masterTitle: '主内容',
masterUploadFilter: 'MASTER_FILE',
mlimit: 1,
mrequired: true,
name: 'DeeUploadTable',
placeholder: '',
required: false,
showFileList: true,
state: 'edit',
taleType: 'single',
url: '/dfs/fileManager/feign/uploadFile'
},
descriptionShowMode: 'text',
hidden: false,
key: 'objFileLinks',
name: '附件',
parentKey: 'objFileLinks',
premMark: true,
title: '',
width: 3
}
}
},
computed: {},
created() {},
mounted() {},
methods: {
removeCheckFn(rows) {
this.objFileLinks = this.objFileLinks.filter(el => {
const findFlag = rows.find(item => {
return item.id === el.id
})
return !findFlag
})
return
},
// 打开弹出框
open(data) {
console.log(343434, data)
this.process = data
this.process = this.$utils.deepClone(data)
this.visible = true
},
// 保存
onSubmit() {
this.disabled = true
this.loading = true
// const params = {
// ...this.row
// }
// params.objFileLinks = this.objFileLinks
// params.operator = 'MODIFY'
// AttachmentPreservation(params)
// .then((res) => {
// this.$parent.getEnclosureFeil()
// this.$utils.showMessageSuccess('保存成功')
// // 关闭抽屉并刷新表格
// this.visible = false
// this.$emit('reload')
// })
// .catch((err) => {
// console.log(err)
// })
// .finally(() => {
// this.disabled = false
// this.visible = false
// this.uploadVisble = true
// this.loading = false
// })
const params = {
operator: 'MODIFY',
id: this.process.id,
extProcessOperation: {
id: this.process.tableId,
operator: 'MODIFY'
}
}
params.extProcessOperation.objFileLinks = this.process.fileList
post('/JoExecuteOpPlan/recursion', params)
.then((res) => {
this.$parent.getWorkingProcedure()
this.$utils.showMessageSuccess('保存成功')
// 关闭抽屉并刷新表格
this.visible = false
this.$emit('reload')
})
.catch((err) => {
console.log(err)
})
.finally(() => {
this.disabled = false
this.visible = false
// this.uploadVisble = true
this.loading = false
})
}
}
}
......@@ -185,7 +158,7 @@ export default {
display: flex;
white-space: nowrap;
align-items: center;
margin-left: 30px;
margin-bottom: 20px;
> div {
width: 140px;
margin-left: 15px;
......
<template>
<section>
<!-- 表格 -->
<dee-table
:loading="loading"
:index-row="indexRow"
:columns="tableColums"
:data="tableData"
:options="tableOptions"
/>
</section>
</template>
<script>
export default {
components: {},
data() {
return {
// 加载中
loading: false,
// 搜索条件
form: [],
// 序号
indexRow: { title: '序号', align: 'center', width: '70' },
// 所有可动态配置的表格列
colums: [
{
title: '所需产品设计图号',
show: true,
key: 'docNumber'
},
{
title: '图样名称',
show: true,
key: 'name'
},
{
title: '版次',
show: true,
key: 'gaceVersion'
}
],
// 默认展示的表格列
tableColums: [],
// 表格数据
tableData: [],
// 表格样式配置
tableOptions: {
stripe: true,
border: true
}
}
},
created() {
this.setDefaultColums()
},
mounted() {
// this.init()
},
methods: {
// 设置默认展示列
setDefaultColums() {
this.tableColums = this.colums.filter((item) => item.show)
},
// 初始化数据
init() {
this.tableData = this.$parent.$parent.$parent.tableDesign || []
this.loading = false
}
}
}
</script>
<style lang="scss">
</style>
<template>
<section>
<!-- 表格 -->
<!-- <dee-table
:loading="loading"
:index-row="indexRow"
:columns="tableColums"
:data="tableData"
:options="tableOptions"
/> -->
<el-table
v-loading="loading"
:data="tableData"
class="pdf"
border
size="small"
>
<el-table-column
type="index"
label="序号"
width="70"
header-align="center"
/>
<el-table-column
prop="docNumber"
label="所需技术文件编号"
header-align="center"
>
<template
slot-scope="scope"
><el-button
class="seepdf"
size="mini"
type="text"
@click="seePDF(scope.row)"
>{{ scope.row.docNumber }}</el-button>
</template>
</el-table-column>
<el-table-column prop="name" label="名称" header-align="center" />
<el-table-column
prop="gaceVersion"
label="版次"
header-align="center"
/></el-table>
</section>
</template>
<script>
// import { downloadPdfHandle } from '@/api/inventory.js'
// import axios from 'axios'
export default {
components: {},
data() {
return {
// 加载中
loading: false,
// 搜索条件
form: [],
// 序号
indexRow: { title: '序号', align: 'center', width: '70' },
// 所有可动态配置的表格列
colums: [
{
title: '所需技术文件编号',
show: true,
key: 'docNumber',
sortable: true,
component: {
render: (h, params) => {
return h('div', [
h(
'span',
{
class: 'link-style',
on: {
click: () => {
console.log(123)
}
}
},
params.docNumber
)
])
}
}
},
{
title: '名称',
show: true,
key: 'name'
},
{
title: '版次',
show: true,
key: 'gaceVersion'
}
],
// 默认展示的表格列
tableColums: [],
// 表格数据
tableData: [],
// 表格样式配置
tableOptions: {
stripe: true,
border: true
}
}
},
created() {
this.setDefaultColums()
},
mounted() {
// this.init()
},
methods: {
// 设置默认展示列
setDefaultColums() {
this.tableColums = this.colums.filter((item) => item.show)
},
// 初始化数据
init() {
this.tableData = this.$parent.$parent.$parent.tableFile || []
this.loading = false
},
seePDF(row) {
if (!row.docsUrl) {
this.$message({
showClose: true,
message: 'pdf不存在',
type: 'error'
})
}
// const baseURl = downloadPdfHandle()
// axios({
// method: 'get',
// url: '/gace/mbom/downloadGACEAppData',
// params: {
// gaceUrl: row.docsUrl + localStorage.getItem('fullName'),
// docName: row.docName
// },
// baseURL: baseURl,
// headers: { token: `${localStorage.getItem('token')}`, 'equipment_id': `${localStorage.getItem('uid')}` },
// responseType: 'arraybuffer'
// }).then((res) => {
// const blob = new Blob([res.data], {
// type: 'application/pdf'
// })
// if (window.navigator.msSaveOrOpenBlob) {
// navigator.msSaveBlob(blob)
// } else {
// // const elink = document.createElement('a')
// // elink.download = 'pdf.pdf'
// // elink.style.display = 'none'
// // elink.href = URL.createObjectURL(blob)
// var openUrl = URL.createObjectURL(blob)
// window.open(openUrl)
// // obj.document.title = '驱蚊器为切为'
// // document.body.appendChild(elink)
// // elink.click()
// // document.body.removeChild(elink)
// }
// })
}
}
}
</script>
<style lang="scss">
.pdf.el-table {
.seepdf {
padding: 0;
}
thead th {
padding: 0;
background-color: #f3f6f7;
line-height: 45px !important;
color: #2e2e2e;
font-weight: 700;
font-size: 14px;
border: 0;
&:not(:last-child):not(.gutter):before {
content: "";
height: 24px;
line-height: 24px;
border-right: 1px solid #d8d8d8;
position: absolute;
top: 0;
bottom: 0;
right: 0;
margin: auto 0;
}
}
}
</style>
<template>
<section>
<!-- 表格 -->
<dee-table
:loading="loading"
:index-row="indexRow"
:columns="tableColums"
:data="tableData"
:options="tableOptions"
/>
</section>
</template>
<script>
export default {
components: {},
data() {
return {
// 加载中
loading: false,
// 搜索条件
form: [],
// 序号
indexRow: { title: '序号', align: 'center', width: '70' },
// 所有可动态配置的表格列
colums: [
{
title: '所需专工工装编号',
show: true,
key: 'resCode'
},
{
title: '工艺装备名称',
show: true,
key: 'resName'
},
{
title: '序列号',
show: true,
key: 'modelNo'
}
],
// 默认展示的表格列
tableColums: [],
// 表格数据
tableData: [],
// 表格样式配置
tableOptions: {
stripe: true,
border: true
}
}
},
created() {
this.setDefaultColums()
},
mounted() {
// this.init()
},
methods: {
// 设置默认展示列
setDefaultColums() {
this.tableColums = this.colums.filter((item) => item.show)
},
// 初始化数据
init() {
// 设置数据
this.loading = true
this.tableData = this.$parent.$parent.$parent.tableClothes || []
this.loading = false
}
}
}
</script>
<style lang="scss">
</style>
<template>
<dee-dialog
id="dee-dialog"
title="技术要求"
:dialog-visible.sync="visible"
width="90%"
custom-class="mobile-dialog"
:before-close="handleClose"
close-on-click-modal
>
<section class="TechnicalRequirements">
<p class="TechnicalRequirements-header-title">换版说明</p>
<p class="content">{{ versionChangeDesc }}</p>
<p class="TechnicalRequirements-header-title">编制说明</p>
<p class="content">{{ prepareDescription }}</p>
<Table1 ref="table1" />
<Table2 ref="table2" />
<Table3 ref="table3" />
<p style="margin-top:20px" class="TechnicalRequirements-header-title">工作说明</p>
<p class="content">{{ workDescription }}</p>
</section>
</dee-dialog>
</template>
<script>
import { post } from '@/utils/http'
import Table1 from './components/Table1'
import Table2 from './components/Table2'
import Table3 from './components/Table3'
export default {
components: {
Table1,
Table2,
Table3
},
data() {
return {
visible: false,
tableDesign: [],
tableFile: [],
tableClothes: [],
versionChangeDesc: null,
workDescription: null,
prepareDescription: null
}
},
created() {},
mounted() {
// this.getTablesData()
},
methods: {
// 打开弹出框
open() {
this.visible = true
this.$nextTick(() => {
this.getTablesData()
})
},
handleClose() {},
getTablesData() {
var that = this
this.$refs.table1.loading = true
this.$refs.table2.loading = true
this.$refs.table3.loading = true
const params = {
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'extProcessDocLinks.sourceId',
'operator': 'EQ',
'value': '249403670569000'
// 'value': this.$parent.headerData.aoId
},
{
'fieldName': 'subTypeName',
'operator': 'EQ',
'value': 'DxProcessPlanDesignView'
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [
{
'name': 'extProcessDocLinks'
}
],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
],
'toValidateKeys': ''
}
post(`/ExtProcessDocument/search`,
params)
.then((res) => {
if (res.message.includes('成功')) {
this.tableDesign = res.items.designViews || []
this.tableFile = res.items.docRefs || []
this.tableClothes = res.items.materialVos || []
this.versionChangeDesc = res.items.dxProcessPlanVo.versionChangeDesc
this.prepareDescription = res.items.dxProcessPlanVo.prepareDescription
this.workDescription = res.items.dxProcessPlanVo.workDescription
this.$nextTick(() => {
this.$refs.table1.init()
this.$refs.table2.init()
this.$refs.table3.init()
})
} else {
that.$message({
showClose: true,
message: '保存失败',
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.$refs.table1.loading = false
this.$refs.table2.loading = false
this.$refs.table3.loading = false
})
}
}
}
</script>
<style lang="scss">
.TechnicalRequirements {
width: 100%;
box-sizing: border-box;
// max-height: 70vh;
overflow: auto;
.TechnicalRequirements-header-title {
border-left: 6px solid #4099f7;
padding: 10px 0 10px 5px;
font-size: 20px;
font-weight: 700;
color: #000;
background-color: #e4e1e1;
}
.content{
padding: 10px;
min-height: 50px;
}
.dee-table-no-header{
height:0;
}
}
</style>
<template>
<dee-dialog
v-if="visible"
title="检验驳回"
:dialog-visible.sync="visible"
custom-class="mobile-dialog"
width="90%"
>
<section class="chatbox-com">
<!-- <div class="header">
<h3>缺件信息维护</h3>
</div> -->
<div class="main">
<div class="talkshow">
<ul v-for="item in list" :key="item.id" class="atalk">
<li class="textLeft">
<img
src="/icons/photo.jpg"
alt="信息"
class="img"
>
<span class="info">
<section class="top">
<span class="left">{{ item.name }}</span>
<span class="right">{{ item.time }}</span>
</section>
<strong>{{ item.message }}</strong>
</span>
</li>
<!-- <strong v-if="item.id===1"> :{{ item.name }}</strong> -->
</ul>
</div>
</div>
<!-- 发送消息 -->
<div class="sendbox">
<el-input
v-model.trim="wordone"
class="inputword"
type="textarea"
maxlength="125"
show-word-limit
placeholder="请输入不超过255个字符"
:autosize="{ minRows: 1, maxRows: 2 }"
resize="none"
clearable
@keyup.enter.native="sendmsg"
/>
<button class="btnsend" @click="sendmsg">
{{ closeTime ? closeTimeNum+"S后关闭!" : "添加" }}
</button>
<button class="btnClose" @click="closeMsgBox">关闭</button>
</div>
</section>
</dee-dialog>
</template>
<script>
import { post } from '@/utils/http'
import $ from 'jquery'
export default {
data() {
return {
list: [],
wordone: '',
visible: false,
row: {},
closeTime: false,
closeTimeNum: 3,
timer: null
}
},
watch: {
// 消息自动滚动到最低部
list() {
this.$nextTick(() => {
var h = $('.talkshow').innerHeight()
$('.main').scrollTop(h)
})
}
},
created() {},
methods: {
/**
* 信息接受
*/
infoInit() {
this.loading = true
// var procedureId = this.$parent.procedureId
const params = {
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'keyID',
'operator': 'EQ',
'value': this.$parent.procedureId
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
],
'toValidateKeys': ''
}
// viewRejectionRecord(procedureId)
post(`/OBJRejectHistory/search`, params)
.then((res) => {
this.list = []
res.items.map((item) => {
if (!item.remake) return
this.list.push({
name: item.creator.userName,
message: item.remake,
time: item.createTime
})
})
})
.catch((err) => {
console.log(err)
})
.finally(() => {
this.loading = false
})
},
/**
* 信息发送
*/
sendmsg() {
var that = this
if (that.wordone.trim().length) {
if (that.wordone.trim().length > 255) {
return that.$utils.showMessageWarning('输入内容过长,请重新输入')
}
that.loading = true
const params = {
keyID: that.$parent.procedureId,
remake: that.wordone
}
post(`JoExecuteOpPlan/inspection/rejected`, params)
.then((res) => {
that.closeTime = true
that.$utils.showMessageSuccess('添加成功')
that.infoInit()
that.$parent.getWorkingProcedure()
that.timer = setInterval(function() {
that.closeTimeNum--
if (that.closeTimeNum === 0) {
that.closeTime = false
that.closeMsgBox()
clearInterval(that.timer)
that.timer = null
}
}, 1000)
})
.catch((err) => {
console.log(err)
})
.finally(() => {
that.wordone = ''
that.loading = false
})
} else {
that.$utils.showMessageWarning('请输入内容后添加')
}
},
// 打开弹出框
open(row = {}) {
this.visible = true
this.list = []
this.wordone = ''
this.closeTimeNum = 3
this.row = row
this.infoInit()
},
// 关闭弹框
closeMsgBox() {
this.wordone = ''
this.visible = false
}
}
}
</script>
<style lang="scss">
.chatbox-com {
width: 100%;
// height: calc(95vh - 160px);
overflow: hidden;
.main{
min-height: 200px;
}
.talkshow li {
list-style: none;
position: relative;
padding: 5px;
margin-bottom: 10px;
.img {
position: absolute;
border-radius: 25px;
width: 50px;
height: 50px;
left: -10px;
top: 5px;
}
}
.talkshow li > span {
position: relative;
border-radius: 7px;
background-color: #a6e860;
margin-left: 50px;
padding: 6px 10px 8px 10px;
z-index: 1;
display: inline-block;
min-height: 50px;
background-color: rgb(230, 249, 255);
.top {
display: flex;
justify-content: space-between;
color: blue;
font-size: 15px;
}
strong {
line-height: 1.4;
}
}
.talkshow .textLeft span {
background-color: rgb(230, 249, 255);
}
.talkshow li.textLeft span:before {
content: "";
display: block;
width: 0;
height: 0;
border: 8px solid transparent;
border-right: 8px solid rgb(230, 249, 255);
position: absolute;
top: 20px;
left: -16px;
}
.main {
box-sizing: border-box;
height: 90%;
overflow: scroll;
font-size: 16px;
padding: 10px;
}
div::-webkit-scrollbar {
display: none;
}
.atalk {
margin: 10px;
}
.atalk span {
display: inline-block;
padding: 3px 10px;
border-radius: 15px;
padding: 8px 5px;
}
.sendbox {
height: 60px;
width: 100%;
margin-top: 5px;
display: flex;
margin-left: -4px;
padding-left: 4px;
background-color: rgba(0, 0, 0, 0.1);
justify-content: center;
align-content: center;
align-items: center;
flex-wrap: wrap;
}
.inputword {
outline: none;
width: 75%;
min-height: 36px;
text-indent: 12px;
.el-textarea__inner {
border-radius: 15px;
border: 1px solid #3a8ee6;
}
}
.btnsend,
.btnClose {
line-height: 18px;
font-size: 18px;
color: #fff;
padding-bottom: 4px;
outline: none;
width: 9%;
height: 35px;
white-space: nowrap;
border-radius: 15px;
margin-left: 2%;
background: #909399;
border: 1px solid #909399;
}
.btnsend {
border: 1px solid #409eff;
background: url("/icons/send.jpg") no-repeat left top;
}
}
</style>
......@@ -6,7 +6,10 @@
<div class="p-item" @click="routerAssemblyExecution(item)">
<a :name="item.code" />
<div class="process-header">
<div class="status-box" :class="item.status">
<div v-if="$route.query.title === '检验任务'" class="status-box Delivery">
待检验
</div>
<div v-else class="status-box" :class="item.status">
{{ item.status | statusFilters(joExecutePlanStateData) }}
</div>
<div class="h-title">
......@@ -235,6 +238,7 @@ export default {
},
getTaskAcceptance() {
const that = this
const user = localStorage.getItem('userId') || ''
var param = {
'searchQueryCondition': {
'searchItems': {
......@@ -252,7 +256,8 @@ export default {
{
'fieldName': 'prodTask.extProcessSkillUser.dxUserInfoId',
'operator': 'EQ',
'value': 1626781927440
// 'value': 1626781927440
value: user
}
],
'operator': 'AND'
......
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