Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	mes-ui/mes-ui-admin-vue3/src/views/heli/projectorder/detail.vue
pull/1/head
zengchenxi 9 months ago
commit 73c09b4f90

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@ -78,7 +78,6 @@
}
}
.hl-card-info {
box-shadow: none !important;
border: none !important;
@ -120,7 +119,23 @@
.hl-footer {
margin: 30px 0;
}
.abstatus {
position: absolute;
right: 80px;
top: 20px;
z-index: 999;
img {
width: 150px;
}
.shipments {
display: flex;
align-items: center;
width: 450px;
justify-content: space-between;
.shipmentsfont {
font-size: 35px !important;
font-weight: 500;
color: red;
}
}
}

@ -1,13 +1,46 @@
<template>
<el-card class="hl-card">
<el-card class="hl-card" style="position: relative">
<template #header>
<span><span v-html="dialogTitle"></span></span>
</template>
<div class="abstatus">
<img src="/src/assets/imgs/status/status16.png" v-if="formData.orderStatus == 16" alt="" />
<img src="/src/assets/imgs/status/status3.png" v-else-if="formData.orderStatus == 3" alt="" />
<img src="/src/assets/imgs/status/status8.png" v-else-if="formData.orderStatus == 8" alt="" />
<div v-else-if="formData.orderStatus == 32" class="shipments">
<div v-if="formData.deliveryStatus == 3">
<span class="shipmentsfont">已发货</span>
</div>
<div v-else>
<span
v-if="betweenDay(new Date(), new Date(formData.projectEndTime)) == -1"
class="shipmentsfont"
>距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
<span
v-else-if="betweenDay(new Date(), new Date(formData.projectEndTime)) < -1"
class="shipmentsfont"
>距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
<span v-else class="shipmentsfont"
>距交货还有{{ betweenDay(new Date(), new Date(formData.projectEndTime)) + 1 }}
</span>
</div>
<img src="/src/assets/imgs/status/status32.png" alt="" />
</div>
<img
src="/src/assets/imgs/status/status64.png"
v-else-if="formData.orderStatus == 64"
alt=""
/>
</div>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="160px"
v-loading="formLoading"
>
<el-card class="hl-card-info">
@ -19,7 +52,12 @@
<el-row>
<el-col :span="24">
<el-form-item label="项目编号" prop="code">
<el-input disabled v-model="formData.code" placeholder="系统自动生成" />
<el-input
disabled
v-model="formData.code"
class="!w-250px"
placeholder="系统自动生成"
/>
</el-form-item>
</el-col>
</el-row>
@ -27,6 +65,7 @@
<el-col :span="24">
<el-form-item label="提出部门" prop="businessDeptId">
<el-tree-select
class="!w-250px"
v-model="formData.businessDeptId"
:data="deptList"
:props="defaultProps"
@ -42,7 +81,10 @@
<el-row>
<el-col :span="24">
<el-form-item label="所属业务线" prop="businessLine">
<el-select v-model="formData.businessLine" placeholder="请选择所属业务线"
<el-select
class="!w-250px"
v-model="formData.businessLine"
placeholder="请选择所属业务线"
:disabled="alterDisabled || detailDisabled"
>
<el-option
@ -71,14 +113,27 @@
<el-row>
<el-col :span="24">
<el-form-item label="可引用的原有技术" prop="referenceTechnology">
<el-input :disabled="detailDisabled" v-model="formData.referenceTechnology" placeholder="请输入可引用的原有技术" />
<el-input
class="!w-250px"
:disabled="detailDisabled"
v-model="formData.referenceTechnology"
placeholder="请输入可引用的原有技术"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="检验要求" prop="qualityRequirement">
<el-input :disabled="detailDisabled" type="textarea" v-model="formData.qualityRequirement" placeholder="请输入检验要求" show-word-limit maxlength="200"/>
<el-input
class="!w-250px"
:disabled="detailDisabled"
type="textarea"
v-model="formData.qualityRequirement"
placeholder="请输入检验要求"
show-word-limit
maxlength="200"
/>
</el-form-item>
</el-col>
</el-row>
@ -94,7 +149,9 @@
<el-row>
<el-col :span="24">
<el-form-item label="业务员" prop="businessMan">
<el-select v-model="formData.businessMan"
<el-select
class="!w-250px"
v-model="formData.businessMan"
placeholder="请输入负责人"
:remote-method="remoteUserSearch"
remote-show-suffix
@ -118,7 +175,12 @@
<el-row>
<el-col :span="24">
<el-form-item label="模具图号" prop="blueprintNo">
<el-input :disabled="alterDisabled || detailDisabled" v-model="formData.blueprintNo" placeholder="请输入模具图号" />
<el-input
class="!w-250px"
:disabled="alterDisabled || detailDisabled"
v-model="formData.blueprintNo"
placeholder="请输入模具图号"
/>
</el-form-item>
</el-col>
</el-row>
@ -126,13 +188,25 @@
<el-col :span="24">
<el-form-item label="项目结束日期" prop="projectEndTime">
<el-date-picker
class="!w-250px"
v-model="formData.projectEndTime"
type="date"
value-format="x"
placeholder="选择项目结束日期"
:disabled="detailDisabled"
/>
<span v-if="formData.projectStartTime && formData.projectEndTime">{{" "+betweenDay(new Date(formData.projectStartTime), new Date(formData.projectEndTime))+""}}</span>
<span
style="position: absolute; right: -45px"
v-if="formData.projectStartTime && formData.projectEndTime"
>{{
' 共计' +
betweenDay(
new Date(formData.projectStartTime),
new Date(formData.projectEndTime)
) +
'天'
}}</span
>
</el-form-item>
</el-col>
</el-row>
@ -148,7 +222,9 @@
<el-row>
<el-col :span="24">
<el-form-item label="客户名称" prop="customerId">
<el-select v-model="formData.customerId"
<el-select
class="!w-250px"
v-model="formData.customerId"
placeholder="请输入客户名称"
:remote-method="remoteCustomerSearch"
remote-show-suffix
@ -217,11 +293,17 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark" :disabled="detailDisabled">
<el-input :disabled="detailDisabled" type="textarea" v-model="formData.remark" show-word-limit maxlength="200"/>
<el-input
class="!w-250px"
:disabled="detailDisabled"
type="textarea"
v-model="formData.remark"
show-word-limit
maxlength="200"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
@ -234,22 +316,46 @@
<el-row>
<el-col :span="24">
<el-form-item label="合同号" prop="contractNo">
<el-input :disabled="alterDisabled || detailDisabled" v-model="formData.contractNo" placeholder="请输入合同号" />
<el-input
class="!w-250px"
:disabled="alterDisabled || detailDisabled"
v-model="formData.contractNo"
placeholder="请输入合同号"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="模具名称" prop="mouldName">
<el-input :disabled="alterDisabled || detailDisabled" v-model="formData.mouldName" placeholder="请输入模具名称" />
<el-input
class="!w-250px"
:disabled="alterDisabled || detailDisabled"
v-model="formData.mouldName"
placeholder="请输入模具名称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="价格(元)" prop="price">
<el-input-number v-model="formData.price" :disabled="detailDisabled || (formData.hasPrice == 0 && (formData.price = ''))" placeholder="请输入价格(元)" :controls="false" :min="0" :precision="6" />
<el-select :disabled="detailDisabled" v-model="formData.currency" placeholder="请选择币种">
<div style="display: flex; align-items: center">
<el-input-number
v-model="formData.price"
:disabled="detailDisabled || formData.hasPrice == 0"
placeholder="请输入价格"
:controls="false"
:min="0"
:precision="6"
style="width: 150px"
/>
<el-select
:disabled="detailDisabled"
v-model="formData.currency"
placeholder="请选择币种"
style="width: 100px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_CURRENCY)"
:key="dict.value"
@ -257,13 +363,19 @@
:value="dict.value"
/>
</el-select>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="性质" prop="property">
<el-select :disabled="detailDisabled" v-model="formData.property" placeholder="请选择性质">
<el-select
class="!w-250px"
:disabled="detailDisabled"
v-model="formData.property"
placeholder="请选择性质"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)"
:key="dict.value"
@ -279,7 +391,8 @@
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">客户提供信息资料内容</span>
<div class="hl-card-info-icona"></div
><span class="hl-card-info-text">客户提供信息资料内容</span>
</template>
<el-row>
<el-col :span="6">
@ -323,7 +436,13 @@
</el-col>
<el-col :span="6">
<el-form-item label="" label-width="0" prop="blueprintRemark">
<el-input v-model="formData.blueprintRemark" placeholder="请输入图纸/数模说明" :disabled="detailDisabled || (formData.hasBlueprint == 0 && (formData.blueprintRemark = ''))"/>
<el-input
v-model="formData.blueprintRemark"
placeholder="请输入图纸/数模说明"
:disabled="
detailDisabled || (formData.hasBlueprint == 0 && (formData.blueprintRemark = ''))
"
/>
</el-form-item>
</el-col>
</el-row>
@ -335,43 +454,79 @@
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col v-if="('update,create'.indexOf(query.active) > -1)">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"></el-button>
<el-col v-if="'update,create'.indexOf(query.active) > -1">
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"
>新增</el-button
>
</el-col>
<el-form ref="projectOrderSubFormRef" :model="formData.projectOrderSubs"
<el-form
ref="projectOrderSubFormRef"
:model="formData.projectOrderSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0">
<el-table
:data="formData.projectOrderSubs"
class="hl-table"
label-width="0"
>
<el-table :data="formData.projectOrderSubs" class="hl-table">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="子项目名称" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="subFormRules.name" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.name" placeholder="请输入子项目名称" />
<el-form-item
:prop="`${$index}.name`"
:rules="subFormRules.name"
class="mb-0px!"
>
<el-input
:disabled="detailDisabled"
v-model="row.name"
placeholder="请输入子项目名称"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="设备型号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.deviceModel`" :rules="subFormRules.deviceModel" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.deviceModel" placeholder="请输入设备型号" />
<el-form-item
:prop="`${$index}.deviceModel`"
:rules="subFormRules.deviceModel"
class="mb-0px!"
>
<el-input
:disabled="detailDisabled"
v-model="row.deviceModel"
placeholder="请输入设备型号"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input-number :disabled="detailDisabled" v-model="row.amount" placeholder="请输入数量" :min="0" :precision="0"/>
<el-form-item
:prop="`${$index}.amount`"
:rules="subFormRules.amount"
class="mb-0px!"
>
<el-input-number
:disabled="detailDisabled"
v-model="row.amount"
placeholder="请输入数量"
:min="0"
:precision="0"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-select :disabled="detailDisabled" v-model="row.unit" placeholder="请选择单位">
<el-form-item
:prop="`${$index}.unit`"
:rules="subFormRules.unit"
class="mb-0px!"
>
<el-select
:disabled="detailDisabled"
v-model="row.unit"
placeholder="请选择单位"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_PROJECT_ORDER_SUB_UNIT)"
:key="dict.value"
@ -384,8 +539,13 @@
</el-table-column>
<el-table-column label="材质" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.compositionId`" :rules="subFormRules.compositionId" class="mb-0px!">
<el-select v-model="row.compositionId"
<el-form-item
:prop="`${$index}.compositionId`"
:rules="subFormRules.compositionId"
class="mb-0px!"
>
<el-select
v-model="row.compositionId"
placeholder="请输入材质"
:remote-method="remoteCompositionSearch"
remote-show-suffix
@ -408,15 +568,23 @@
</el-table-column>
<el-table-column label="备注" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" :rules="subFormRules.remark" class="mb-0px!">
<el-input :disabled="detailDisabled" v-model="row.remark" placeholder="请输入备注" />
<el-form-item
:prop="`${$index}.remark`"
:rules="subFormRules.remark"
class="mb-0px!"
>
<el-input
:disabled="detailDisabled"
v-model="row.remark"
placeholder="请输入备注"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
v-if="('update,create'.indexOf(query.active) > -1) && !formData.hasAlter"
v-if="'update,create'.indexOf(query.active) > -1 && !formData.hasAlter"
link
type="danger"
size="small"
@ -439,14 +607,17 @@
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col v-if="('update,create,alter'.indexOf(query.active) > -1)">
<el-col v-if="'update,create,alter'.indexOf(query.active) > -1">
<el-upload
ref="contractUploadRef"
:file-list="contractUploadFiles"
multiple
:limit="10"
:action="uploadUrl"
:headers="{'Authorization': 'Bearer ' + getAccessToken(),'tenant-id': getTenantId()}"
:headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}"
name="files"
:show-file-list="false"
:auto-upload="false"
@ -461,7 +632,10 @@
multiple
:limit="10"
:action="uploadUrl"
:headers="{'Authorization': 'Bearer ' + getAccessToken(),'tenant-id': getTenantId()}"
:headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}"
name="files"
:show-file-list="false"
:auto-upload="false"
@ -476,16 +650,37 @@
<el-table-column prop="name" label="文件名称" align="center" />
<el-table-column prop="businessFileType" label="文件类型" align="center">
<template #default="scope">
{{getDictLabel(DICT_TYPE.HELI_BUSINESS_FILE_TYPE, scope.row.businessFileType)}}
{{
getDictLabel(DICT_TYPE.HELI_BUSINESS_FILE_TYPE, scope.row.businessFileType)
}}
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter"/>
<el-table-column
prop="createTime"
align="center"
label="上传时间"
:formatter="dateFormatter"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button v-if="('update,create,alter'.indexOf(query.active) > -1)" link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
<el-button
v-if="'update,create,alter'.indexOf(query.active) > -1"
link
type="danger"
size="small"
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"
>
删除
</el-button>
<el-button v-if="!!scope.row.id" link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)"> </el-button>
<el-button
v-if="!!scope.row.id"
link
type="primary"
size="small"
@click="downloadAttachment(scope.row.name, scope.row.url)"
>
下载
</el-button>
</template>
</el-table-column>
</el-table>
@ -523,36 +718,77 @@
</el-form>
<div class="text-center hl-footer">
<el-button @click="() => router.back()" size="large"> </el-button>
<el-button v-if="('update,create'.indexOf(query.active) > -1) && formData.orderStatus <= 4" @click="submitForm('SAVE')" type="success" size="large"
<el-button
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus <= 4"
@click="submitForm('SAVE')"
type="success"
size="large"
> </el-button
>
<el-button v-if="('update,create'.indexOf(query.active) > -1) && formData.orderStatus < 8" @click="submitForm('SUBMIT_AUDIT')" type="primary" size="large"
<el-button
v-if="'update,create'.indexOf(query.active) > -1 && formData.orderStatus < 8"
@click="submitForm('SUBMIT_AUDIT')"
type="primary"
size="large"
> </el-button
>
<el-button v-if="query.active == 'audit' && formData.orderStatus == 8" @click="submitForm('AUDIT')" type="primary" size="large"
<el-button
v-if="query.active == 'audit' && formData.orderStatus == 8"
@click="submitForm('AUDIT')"
type="primary"
size="large"
> </el-button
>
<el-button v-if="query.active == 'approve' && formData.orderStatus == 16" @click="submitForm('APPROVE')" type="primary" size="large"
<el-button
v-if="query.active == 'approve' && formData.orderStatus == 16"
@click="submitForm('APPROVE')"
type="primary"
size="large"
> </el-button
>
<el-button v-if="query.active == 'alter' && formData.orderStatus == 32" @click="submitForm('ALTER')" type="danger" size="large"
<el-button
v-if="query.active == 'alter' && formData.orderStatus == 32"
@click="submitForm('ALTER')"
type="danger"
size="large"
>发起变更</el-button
>
<el-button v-if="'audit,approve'.indexOf(query.active) > -1 && (formData.orderStatus == 8 || formData.orderStatus == 16)" @click="activeOpinionDialogVisible=true" type="danger" size="large"
<el-button
v-if="
'audit,approve'.indexOf(query.active) > -1 &&
(formData.orderStatus == 8 || formData.orderStatus == 16)
"
@click="activeOpinionDialogVisible = true"
type="danger"
size="large"
> </el-button
>
<el-button v-if="query.active == 'terminate' && formData.orderStatus == 32" @click="submitForm('TERMINATE')" type="danger" size="large"
<el-button
v-if="query.active == 'terminate' && formData.orderStatus == 32"
@click="submitForm('TERMINATE')"
type="danger"
size="large"
>直接终止</el-button
>
</div>
</el-card>
<el-dialog v-model="activeOpinionDialogVisible" title="打回原因" width="30%" center>
<el-input type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原因" show-word-limit maxlength="200"/>
<el-input
type="textarea"
v-model="formData.activeOpinion"
placeholder="请输入打回原因"
show-word-limit
maxlength="200"
/>
<template #footer>
<span class="dialog-footer">
<el-button @click="activeOpinionDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm('REPULSE') && (activeOpinionDialogVisible = false)">确认打回</el-button>
<el-button
type="primary"
@click="submitForm('REPULSE') && (activeOpinionDialogVisible = false)"
>确认打回</el-button
>
</span>
</template>
</el-dialog>
@ -561,25 +797,25 @@
import { inject } from 'vue'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
import * as ProjectOrderApi from '@/api/heli/projectorder'
import {betweenDay, dateFormatter, formatDate} from "@/utils/formatTime";
import {defaultProps, handleTree} from "@/utils/tree";
import { betweenDay, dateFormatter, formatDate } from '@/utils/formatTime'
import { defaultProps, handleTree } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept'
import * as UserApi from "@/api/system/user";
import * as CustomerApi from "@/api/heli/customer/index"
import * as CompositionApi from "@/api/heli/composition/index"
import {getAccessToken, getTenantId} from "@/utils/auth";
import {UploadUserFile} from "element-plus";
import {deleteFile, downloadFile, getFilePage} from "@/api/infra/file";
import {propTypes} from "@/utils/propTypes";
import download from "@/utils/download";
import {useUserStore} from "@/store/modules/user";
import {getUserProfile} from "@/api/system/user/profile";
import {getOperateLogPage} from "@/api/system/operatelog";
import * as UserApi from '@/api/system/user'
import * as CustomerApi from '@/api/heli/customer/index'
import * as CompositionApi from '@/api/heli/composition/index'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { UploadUserFile } from 'element-plus'
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
import { propTypes } from '@/utils/propTypes'
import download from '@/utils/download'
import { useUserStore } from '@/store/modules/user'
import { getUserProfile } from '@/api/system/user/profile'
import { getOperateLogPage } from '@/api/system/operatelog'
const { t } = useI18n() //
const message = useMessage() //
const { query } = useRoute()
const router = useRouter();
const router = useRouter()
const reload = inject('reload')
const activeOpinionDialogVisible = ref(false) //
@ -598,7 +834,7 @@ const formData = ref({
blueprintNo: undefined,
hasPrice: 1,
price: undefined,
currency: "1",
currency: '1',
projectStartTime: undefined,
projectEndTime: undefined,
isUrgency: 0,
@ -625,7 +861,7 @@ const formData = ref({
snapshotId: undefined,
snapshotCode: undefined,
orderTime: new Date(),
snapshotOrderTime: undefined,
snapshotOrderTime: undefined
})
const formRules = reactive({
businessDeptId: [{ required: true, message: '提出部门不能为空', trigger: 'blur' }],
@ -642,7 +878,7 @@ const formRules = reactive({
hasTechnologyProtocol: [{ required: true, message: '有无技术协议不能为空', trigger: 'blur' }],
hasBlueprint: [{ required: true, message: '有无图纸/数模不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态,1表示正常2表示禁用不能为空', trigger: 'blur' }],
businessMan: [{ required: true, message: '业务员不能为空', trigger: 'blur' }],
businessMan: [{ required: true, message: '业务员不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
const subFormLoading = ref(false) //
@ -651,13 +887,13 @@ const subFormRules = reactive({
amount: [{ required: true, message: '数量不能为空', trigger: 'blur' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
compositionId: [{ required: true, message: '材质不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态,1表示正常2表示禁用不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态,1表示正常2表示禁用不能为空', trigger: 'blur' }]
})
const deptList = ref<Tree[]>([]) //
const userList = ref<UserApi.UserVO[]>([]) //
const userSelectList = ref<UserApi.UserVO[]>([])
const userSelectLoading = ref(false);
const userSelectLoading = ref(false)
const remoteUserSearch = (query: string) => {
if (query) {
@ -665,7 +901,10 @@ const remoteUserSearch = (query: string) => {
setTimeout(() => {
userSelectLoading.value = false
userSelectList.value = userList.value.filter((item) => {
return item.nickname.toLowerCase().includes(query.toLowerCase()) || item.username.toLowerCase().includes(query.toLowerCase())
return (
item.nickname.toLowerCase().includes(query.toLowerCase()) ||
item.username.toLowerCase().includes(query.toLowerCase())
)
})
}, 200)
} else {
@ -675,7 +914,7 @@ const remoteUserSearch = (query: string) => {
const customerList = ref<CustomerApi.CustomerVO[]>([])
const customerSelectList = ref<CustomerApi.CustomerVO[]>([])
const customerSelectLoading = ref(false);
const customerSelectLoading = ref(false)
const remoteCustomerSearch = (query: string) => {
if (query) {
@ -693,7 +932,7 @@ const remoteCustomerSearch = (query: string) => {
const compositionList = ref<CompositionApi.CompositionVO[]>([])
const compositionSelectList = ref<CompositionApi.CompositionVO[]>([])
const compositionSelectLoading = ref(false);
const compositionSelectLoading = ref(false)
const remoteCompositionSearch = (query: string) => {
if (query) {
@ -723,7 +962,8 @@ const queryData = async (type: string, id?: number) => {
if (id) {
formData.value = await ProjectOrderApi.getProjectOrder(id)
//
formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(id);
formData.value.projectOrderSubs =
await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(id)
//
if(type == 'detailArchive'){
@ -736,7 +976,7 @@ const queryData = async (type: string, id?: number) => {
businessId: id,
businessType: 'PROJECT_ORDER'
}
formData.value.operateLogs = (await getOperateLogPage(logParams)).list;
formData.value.operateLogs = (await getOperateLogPage(logParams)).list
//
let attParams = {
@ -745,7 +985,7 @@ const queryData = async (type: string, id?: number) => {
businessId: id,
businessType: 'PROJECT_ORDER'
}
formData.value.attachments = (await getFilePage(attParams)).list;
formData.value.attachments = (await getFilePage(attParams)).list
}
//
deptList.value = handleTree(await DeptApi.getSimpleDeptList())
@ -754,37 +994,37 @@ const queryData = async (type: string, id?: number) => {
let userParams = {
pageNo: 1,
pageSize: 10,
status: "0"
status: '0'
}
const data = await UserApi.getUserPage(userParams)
userList.value = data.list;
userSelectList.value = data.list;
userList.value = data.list
userSelectList.value = data.list
//
let customerParams = {
pageNo: 1,
pageSize: 10,
status: "1"
status: '1'
}
const customerData = await CustomerApi.getCustomerPage(customerParams)
customerList.value = customerData.list;
customerSelectList.value = customerData.list;
customerList.value = customerData.list
customerSelectList.value = customerData.list
//
let compositionParams = {
pageNo: 1,
pageSize: 10,
status: "1"
status: '1'
}
const compositionData = await CompositionApi.getCompositionPage(compositionParams)
compositionList.value = compositionData.list;
compositionSelectList.value = compositionData.list;
compositionList.value = compositionData.list
compositionSelectList.value = compositionData.list
//
formData.value.businessMan = useUserStore().getUser.id //
const userProfile = await getUserProfile(formData.value.businessMan);
const userProfile = await getUserProfile(formData.value.businessMan)
if (userProfile.dept) {
formData.value.businessDeptId = userProfile.dept.id;
formData.value.businessDeptId = userProfile.dept.id
}
} finally {
formLoading.value = false
@ -793,7 +1033,7 @@ const queryData = async (type: string, id?: number) => {
const submitForm = async (active) => {
//
formData.value.active = active;
formData.value.active = active
await formRef.value.validate()
//
try {
@ -806,14 +1046,14 @@ const submitForm = async (active) => {
try {
// 退
if (active != 'REPULSE') {
formData.value.activeOpinion = '';
formData.value.activeOpinion = ''
}
const data = formData.value as unknown as ProjectOrderApi.ProjectOrderVO
if (active == 'SUBMIT_AUDIT') {
//
if (!data.projectOrderSubs || data.projectOrderSubs.length == 0) {
message.error("子项目信息不能为空")
message.error('子项目信息不能为空')
return
}
}
@ -822,7 +1062,7 @@ const submitForm = async (active) => {
// 0
if (data.projectOrderSubs && data.projectOrderSubs.length > 0) {
if (data.projectOrderSubs.some((sub) => !sub.amount || sub.amount <= 0)) {
message.error("子项目数量不能为0")
message.error('子项目数量不能为0')
return
}
}
@ -832,10 +1072,10 @@ const submitForm = async (active) => {
// 0
if (data.projectOrderSubs && data.projectOrderSubs.length > 0) {
const total = data.projectOrderSubs.reduce((acc, cur) => {
return acc+cur;
}, 0);
return acc + cur
}, 0)
if (total <= 0) {
message.error("子项目数量和不能为0")
message.error('子项目数量和不能为0')
return
}
}
@ -868,20 +1108,20 @@ const submitForm = async (active) => {
//
if (contractUploadFiles.value.length > 0) {
contractUploadData.value.businessId = orderId
contractUploadRef.value!.submit();
contractUploadRef.value!.submit()
}
if (protocolUploadFiles.value.length > 0) {
protocolUploadData.value.businessId = orderId
protocolUploadRef.value!.submit();
protocolUploadRef.value!.submit()
}
//
if (active != 'SAVE') {
router.back();
router.back()
} else {
//
reload();
query.id = orderId;
reload()
query.id = orderId
}
} finally {
formLoading.value = false
@ -899,7 +1139,7 @@ const onAddItem = () => {
compositionId: undefined,
unit: undefined,
remark: undefined,
status: 1,
status: 1
}
row.projectOrderId = formData.value.id
formData.value.projectOrderSubs.push(row)
@ -910,54 +1150,62 @@ const onDeleteItem = (index) => {
formData.value.projectOrderSubs.splice(index, 1)
}
const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL)
const contractUploadRef = ref();
const contractUploadFiles = ref<UploadUserFile[]>([]);
const contractUploadData = ref({'businessType': 'PROJECT_ORDER', 'businessId': formData.value.id, 'businessFileType': 'CONTRACT'});
const contractUploadRef = ref()
const contractUploadFiles = ref<UploadUserFile[]>([])
const contractUploadData = ref({
businessType: 'PROJECT_ORDER',
businessId: formData.value.id,
businessFileType: 'CONTRACT'
})
const protocolUploadRef = ref();
const protocolUploadFiles = ref<UploadUserFile[]>([]);
const protocolUploadData = ref({'businessType': 'PROJECT_ORDER', 'businessId': formData.value.id, 'businessFileType': 'TECHNOLOGY_PROTOCOL'});
const protocolUploadRef = ref()
const protocolUploadFiles = ref<UploadUserFile[]>([])
const protocolUploadData = ref({
businessType: 'PROJECT_ORDER',
businessId: formData.value.id,
businessFileType: 'TECHNOLOGY_PROTOCOL'
})
const contractUploadChange = (file, files) => {
contractUploadFiles.value = files;
contractUploadFiles.value = files
refreshAttachments(files, 'CONTRACT')
}
const protocolUploadChange = (file, files) => {
protocolUploadFiles.value = files;
protocolUploadFiles.value = files
refreshAttachments(files, 'TECHNOLOGY_PROTOCOL')
}
const refreshAttachments = (files, type) => {
formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return value.businessFileType != type;
});
return value.businessFileType != type
})
for (let i = 0; i < files.length; i++) {
let file = files[i];
file.businessFileType = type;
file.createTime = new Date();
formData.value.attachments.push(file);
let file = files[i]
file.businessFileType = type
file.createTime = new Date()
formData.value.attachments.push(file)
}
//
formData.value.attachments.sort((v1, v2) => {
return v1.createTime - v2.createTime < 0;
return v1.createTime - v2.createTime < 0
})
}
//
const handleDeleteAttachment = async (index, type) => {
const deletedAttachments = formData.value.attachments.splice(index, 1);
const deletedAttachments = formData.value.attachments.splice(index, 1)
for (let i = 0; i < deletedAttachments.length; i++) {
const attachment = deletedAttachments[i];
const attachment = deletedAttachments[i]
if (attachment.id) {
//
await deleteFile(attachment.id);
await deleteFile(attachment.id)
}
//
contractUploadFiles.value = contractUploadFiles.value.filter(file1 => {
return file1.name != attachment.name || file1.businessFileType != type;
contractUploadFiles.value = contractUploadFiles.value.filter((file1) => {
return file1.name != attachment.name || file1.businessFileType != type
})
protocolUploadFiles.value = protocolUploadFiles.value.filter(file2 => {
return file2.name != attachment.name || file2.businessFileType != type;
protocolUploadFiles.value = protocolUploadFiles.value.filter((file2) => {
return file2.name != attachment.name || file2.businessFileType != type
})
}
}
@ -965,7 +1213,7 @@ const handleDeleteAttachment = async (index, type) => {
//
const downloadAttachment = async (name, url) => {
const data = await downloadFile(url)
download.any(data, name);
download.any(data, name)
}
/** 重置表单 */
@ -982,7 +1230,7 @@ const resetForm = () => {
blueprintNo: undefined,
hasPrice: 1,
price: undefined,
currency: "1",
currency: '1',
projectStartTime: undefined,
projectEndTime: undefined,
isUrgency: 0,
@ -1001,6 +1249,7 @@ const resetForm = () => {
createTime: new Date(),
projectOrderSubs: [],
attachments: [],
operateLogs: [],
contractNo: undefined,
active: '',
activeOpinion: '',
@ -1021,12 +1270,12 @@ const alterDisabled = ref(false)
const detailDisabled = ref(false)
onMounted(() => {
if (query.active == 'alter') {
alterDisabled.value = true;
alterDisabled.value = true
}
if('detail,audit,approve,terminate,detailArchive'.indexOf(query.active) > -1){
detailDisabled.value = true;
detailDisabled.value = true
}
queryData(query.active, query.id);
queryData(query.active, query.id)
})
</script>
<style>

Loading…
Cancel
Save