branchErp/src/components/approval/approval-detail-dialog_copy_2.vue
2025-09-18 14:14:05 +08:00

4447 lines
116 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<n-modal
:autoFocus="false"
:closeOnEsc="false"
:mask-closable="false"
:show="props.artworkVisiable"
:to="app"
>
<n-card
:style="{
width: 'fit-content',
marginTop: '30px',
marginBottom: '30px',
minHeight: '600px'
}"
:bordered="false"
size="large"
role="dialog"
aria-modal="true"
>
<template #header>
<div class="flex items-center justify-center">
<div class="modal-title">
{{ title }}
</div>
<div class="close-box">
<n-button
@click="handleOk"
text
style="font-size: 24px"
>
<n-icon>
<close-icon />
</n-icon>
</n-button>
</div>
</div>
</template>
<template #footer>
<div class="button-group" v-if="state.canApproval">
<n-button
v-if="props.approvalStatus == 4"
@click="goRead"
class="save-btn"
>已阅</n-button
>
<n-button
v-if="
!props.isMeCheck &&
(props.approvalStatus == 1 ||
props.approvalStatus == 6) &&
id !== state.recordsData[0].SubmitterID
"
@click="goApproval"
class="save-btn"
>{{
props.actType === 'single' ? '审批' : '批量审批'
}}</n-button
>
</div>
</template>
<div class="content-wrapper" v-loading="state.loading">
<!-- 录用审批 -->
<div v-if="state.approvalType.includes('employ')" class="approval">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="归属部门">{{
item.Employ?.BelongDepartment
}}</n-descriptions-item>
<n-descriptions-item label="岗位名称">{{
item.Employ.Post
}}</n-descriptions-item>
<n-descriptions-item label="姓名">
{{ item.Employ.Name }}
</n-descriptions-item>
<n-descriptions-item label="手机号">{{
item.Employ.Mobile
}}</n-descriptions-item>
<n-descriptions-item label="员工类型">{{
item.Employ.EmployeeType
}}</n-descriptions-item>
<n-descriptions-item
:label="
item.Employ?.EntryTime
? '预计入职时间'
: '确认入职时间'
"
>{{
item.Employ?.EntryTime ||
item.Employ.confirmDate
}}</n-descriptions-item
>
<n-descriptions-item label="工号"
>{{ item.Employ.EmployeeNo }}
</n-descriptions-item>
<n-descriptions-item label="应聘登记表">
<div
v-if="item.Employ.InterviewFile"
style="cursor: pointer"
>
<span v-if="isPic(item.Employ.InterviewFile)">
<n-image
style="width: 80px; height: 80px"
:src="item.Employ.InterviewFile"
/>
</span>
<span
v-else
@click="
handleOpenLink(
item.Employ.InterviewFile
)
"
>
{{ item.Employ.InterviewFile }}
</span>
</div>
</n-descriptions-item>
<n-descriptions-item label="简历">
<img
src="@/assets/file/pdf.png"
style="width: 80px; height: 80px"
v-if="item.Employ.ResumeFile.endsWith('.pdf')"
@click="handleOpenLink(item.Employ.ResumeFile)"
/>
<img
src="@/assets/file/word.png"
style="width: 80px; height: 80px"
v-if="item.Employ.ResumeFile.endsWith('.doc')"
@click="handleOpenLink(item.Employ.ResumeFile)"
/>
</n-descriptions-item>
<n-descriptions-item label="备注" :span="3">{{
item.Employ.remark
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
style="margin-bottom: 0"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 人员增补详情 -->
<div class="approval" v-if="state.approvalType === 'staffSupply'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="岗位名称">{{
item.StaffSupply.PositionName
}}</n-descriptions-item>
<n-descriptions-item label="归属部门">{{
item.StaffSupply.DepartmentName
}}</n-descriptions-item>
<n-descriptions-item label="申请增补人数">
{{ item.StaffSupply.Num }}
</n-descriptions-item>
<n-descriptions-item label="岗位需求">{{
item.StaffSupply.JobAsk
}}</n-descriptions-item>
<n-descriptions-item :span="2" label="期待到职日期">{{
item.StaffSupply.JoinInTime
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 任命详情 -->
<div class="approval" v-if="state.approvalType === 'promotion'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="姓名">
{{
item.Promotion.StaffName +
'(' +
item.Promotion.StaffNum +
')'
}}</n-descriptions-item
>
<n-descriptions-item label="原职务">{{
item.Promotion.OldJob
}}</n-descriptions-item>
<n-descriptions-item label="任命职务">{{
item.Promotion.NewJob
}}</n-descriptions-item>
<n-descriptions-item label="生效日期">{{
item.Promotion.EffectiveTime
}}</n-descriptions-item>
<n-descriptions-item :span="2" label="任命文件">
<span
style="cursor: pointer"
@click="handleOpenLink(item.Promotion.FileUrl)"
>
{{ item.Promotion.FileUrl }}
</span>
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 画展包付款单申请 -->
<div
class="approval"
v-if="state.approvalType === 'bundlePayPrice'"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="画展包名称">{{
item.BundlePayPrice.ShowName
}}</n-descriptions-item>
<n-descriptions-item label="画家名称">{{
item.BundlePayPrice.ArtistShowCount ||
item.BundlePayPrice.ArtistName
}}</n-descriptions-item>
<n-descriptions-item label="画展包底价">{{
item.BundlePayPrice.ShowLowPrice
}}</n-descriptions-item>
<n-descriptions-item label="画作数量">{{
item.BundlePayPrice.ArtworkNum
}}</n-descriptions-item>
<n-descriptions-item label="画作总平尺数">
{{ item.BundlePayPrice.ArtworkSize }}
</n-descriptions-item>
<n-descriptions-item label="画展时间">
{{ item.BundlePayPrice.ShowDate }}
</n-descriptions-item>
<n-descriptions-item :span="3" label="画展地点">
{{ item.BundlePayPrice.ShowAddress }}
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 画作申请详情 -->
<div class="approval" v-if="state.approvalType === 'work'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="画作详情">
<a-table
class="artwork-table"
:rowKey="(record) => record.Id"
:columns="state.workColumns"
:data-source="item.Work.ApprovalWorks"
:scroll="{ y: 245 }"
:showHeader="false"
:pagination="false"
>
<template #bodyCell="{ column, record }">
<template
v-if="column.key === 'ArtworkCover'"
>
<img
style="height: 40px; width: 40px"
:src="
record.ArtworkCover +
'?x-oss-process=image/resize,w_40,h_40'
"
/>
</template>
<span
v-if="
column.dataIndex ===
'ArtistShowCount'
"
>{{
record.ArtistShowCount
? record.ArtistShowCount
: record.ArtistName
}}</span
>
</template>
</a-table>
</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 画展包数量详情 -->
<div class="approval" v-if="state.approvalType === 'bundle'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="申请数量">{{
item.Bundle.ApplicationsNum
}}</n-descriptions-item>
<n-descriptions-item :span="2" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 画展包审批 ,画展包润格详情-->
<div
class="approval"
v-if="
state.approvalType === 'exhibition' ||
state.approvalType === 'artExhibitionReward'
"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="详情"
><n-descriptions
class="detail-box"
v-for="(exh, exi) in item.Exhibition
.ApprovalExhibitions"
:key="exi"
:title="'画展包:' + exh.PackageName"
layout="vertical"
bordered
>
<n-descriptions-item
v-if="state.approvalType === 'exhibition'"
label="画展时间"
>{{ exh.ShowDate }}</n-descriptions-item
>
<n-descriptions-item
v-if="state.approvalType === 'exhibition'"
label="画展地址"
>{{ exh.Address }}</n-descriptions-item
>
<n-descriptions-item label="画家名称">{{
exh.ArtExhibitionDetail.ArtistShowCount ||
exh.ArtExhibitionDetail.ArtistName
}}</n-descriptions-item>
<n-descriptions-item label="包含画作数量">{{
exh.ArtExhibitionDetail.ArtworkNum
}}</n-descriptions-item>
<n-descriptions-item label="包含画作总平尺">{{
exh.ArtExhibitionDetail.Ruler
}}</n-descriptions-item>
<n-descriptions-item label="画作总价">{{
exh.TotalPrice
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="推荐人">{{
exh.ArtExhibitionDetail.Agent
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="画作详情">
<a-table
class="artwork-table"
:rowKey="(record) => record.ArtworkUuid"
:columns="state.ArtworksColoums"
:data-source="exh.Artworks"
:scroll="{ y: 325, x: 100 }"
:pagination="false"
>
<template
#bodyCell="{ column, record }"
>
<template
v-if="column.key === 'SmallPic'"
>
<!-- 展示图片的优先级为DigiArtImgHdPicPhotoPic -->
<a-image
style="
height: 40px;
width: 40px;
"
:preview="{
src: record.SmallPic
}"
:src="
record.SmallPic +
'?x-oss-process=image/resize,w_158,h_158'
"
/>
</template>
<template
v-if="column.key === 'Reward'"
>
{{ record.Reward }}
</template>
<template
v-if="
column.key === 'oneAllPrice'
"
>
{{
record.Reward * record.Ruler
}}
</template>
<template
v-if="
column.key === 'SaleAddress'
"
>
{{ record.SaleAddress }}
</template>
</template>
</a-table>
</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 画展包修改审批 -->
<div class="approval" v-if="state.approvalType === 'showUpdate'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="详情"
><n-descriptions
class="detail-box"
v-for="(exh, exi) in item.ExhibitionHis
.ApprovalExhibitionHiss"
:key="exi"
:title="'画展包:' + exh.PackageName"
layout="vertical"
bordered
>
<n-descriptions-item label="画展时间">{{
exh.ShowDate
}}</n-descriptions-item>
<n-descriptions-item label="画展地址">{{
exh.Address
}}</n-descriptions-item>
<n-descriptions-item label="画家名称">{{
exh.ArtExhibitionDetail.ArtistShowCount ||
exh.ArtExhibitionDetail.ArtistName
}}</n-descriptions-item>
<n-descriptions-item label="包含画作数量">{{
exh.ArtExhibitionDetail.ArtworkNum
}}</n-descriptions-item>
<n-descriptions-item label="包含画作总平尺">{{
exh.ArtExhibitionDetail.Ruler
}}</n-descriptions-item>
<n-descriptions-item label="画作总价">{{
exh.TotalPrice
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="推荐人">{{
exh.ArtExhibitionDetail.Agent
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="画作详情">
<a-table
class="artwork-table"
:rowKey="(record) => record.ArtworkUuid"
:columns="state.ArtworksColoums"
:data-source="exh.Artworks"
:scroll="{ y: 325, x: 100 }"
:pagination="false"
>
<template
#bodyCell="{ column, record }"
>
<template
v-if="column.key === 'SmallPic'"
>
<!-- 展示图片的优先级为DigiArtImgHdPicPhotoPic -->
<a-image
style="
height: 40px;
width: 40px;
"
:preview="{
src: record.SmallPic
}"
:src="
record.SmallPic +
'?x-oss-process=image/resize,w_158,h_158'
"
/>
</template>
<template
v-if="column.key === 'Reward'"
>
{{ record.Reward }}
</template>
<template
v-if="
column.key === 'oneAllPrice'
"
>
{{
record.Reward * record.Ruler
}}
</template>
<template
v-if="
column.key === 'SaleAddress'
"
>
{{ record.SaleAddress }}
</template>
</template>
</a-table>
</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 财务表单审批详情-->
<div
class="approval"
v-if="state.approvalType === 'financialFormApply'"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="付款公司别">{{
item.FinancialForm.PaymentCompany
}}</n-descriptions-item>
<n-descriptions-item label="经办部门">{{
item.FinancialForm.TransactionDepartment
}}</n-descriptions-item>
<n-descriptions-item label="收款人全称">{{
item.FinancialForm.Payee
}}</n-descriptions-item>
<n-descriptions-item label="收款人开户行">{{
item.FinancialForm.BeneficiaryBank
}}</n-descriptions-item>
<n-descriptions-item :span="2" label="收款人账号">{{
item.FinancialForm.BankNo
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="费用说明"
><n-descriptions
class="detail-box"
v-for="(fin, fini) in item.FinancialForm
.CostInfo"
:key="fini"
:title="'费用' + (fini + 1) + '说明'"
layout="vertical"
bordered
>
<n-descriptions-item label="费用单价">{{
fin.UnitPrice
}}</n-descriptions-item>
<n-descriptions-item label="费用单位">{{
fin.CostUnit
}}</n-descriptions-item>
<n-descriptions-item label="费用数量">{{
fin.CostNum
}}</n-descriptions-item>
<n-descriptions-item label="费用总额">{{
fin.TotalPrice
}}</n-descriptions-item>
<n-descriptions-item label="使用部门">{{
fin.UsedDepartment
}}</n-descriptions-item>
<n-descriptions-item label="付款方式">{{
item.FinancialForm.PaymentMethod
}}</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item :span="3" label="发票信息"
><n-descriptions
class="detail-box"
v-for="(inv, invi) in item.FinancialForm
.InvoiceInfo"
:key="invi"
:title="'发票信息' + (invi + 1)"
layout="vertical"
bordered
>
<n-descriptions-item label="发票日期">{{
inv.InvoiceDate
}}</n-descriptions-item>
<n-descriptions-item
label="发票号码(电子发票需提供)"
>{{ inv.InvoiceNo }}</n-descriptions-item
>
<n-descriptions-item label="发票供应商名称">{{
inv.InvoiceProvider
}}</n-descriptions-item>
<n-descriptions-item label="发票或付款金额">{{
inv.Amount
}}</n-descriptions-item>
<n-descriptions-item label="费用用途">{{
inv.UseTo
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
inv.Applicant
}}</n-descriptions-item>
<n-descriptions-item label="付款方式">{{
inv.PaymentMethod
}}</n-descriptions-item>
<n-descriptions-item label="付款或报销对象">{{
inv.PaymentObj
}}</n-descriptions-item>
<n-descriptions-item label="发票类型">{{
inv.InvoiceType
}}</n-descriptions-item>
<n-descriptions-item label="备注">{{
inv.Notes
}}</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item :span="3" label="具体内容">{{
item.Content
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 签到申请 -->
<div class="approval" v-if="state.approvalType === 'checkIn'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'签到申请' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="站点名称">{{
item.CheckIn.SaleAddress
}}</n-descriptions-item>
<n-descriptions-item :span="2" label="站点地址">{{
item.CheckIn.DetailAddress
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="地图位置">
<div
:id="'mapContainer' + item.ID"
style="
overflow: hidden;
width: 100%;
height: 300px;
margin: 0;
"
></div>
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- diy审批 -->
<div class="approval" v-if="state.IsCustom === 1">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-for="(cus, cui) in item.CustomizeInfo"
:key="cui"
:label="cus.ApprovalName"
><span
v-if="cus.ApprovalType === 'upload'"
style="cursor: pointer"
>
<div v-if="isArray(cus.ApprovalValue)">
<span v-if="isPic(cus.ApprovalValue)">
<n-image
style="width: 80px; height: 80px"
:src="cus.ApprovalValue"
/>
</span>
<span
v-else
@click="
handleOpenLink(cus.ApprovalValue)
"
>
{{
JSON.parse(
cus.ApprovalValue
).toString()
}}
</span>
</div>
<div v-else>
<viewer
:images="
JSON.parse(
cus.ApprovalValue || '[]'
) || []
"
>
<div
v-for="(v, i) in JSON.parse(
cus.ApprovalValue || '[]'
) || []"
:key="i"
style="
display: flex;
align-items: center;
"
>
<span>附件{{ i + 1 }}&nbsp;</span>
<span v-if="isPic(v)">
<img
:src="v"
:key="i"
style="
width: 80px;
height: 80px;
"
/>
</span>
<span
v-else
@click="handleOpenLink(v)"
>
{{ v }}
</span>
</div>
</viewer>
</div>
</span>
<span
v-else-if="
cus.ApprovalType === 'artworkList' &&
cus.ApprovalValue
"
>
<div>
<span style="font-size: 16px"
>画家画作:</span
>
<a-select
:disabled="true"
v-model:value="
JSON.parse(cus.ApprovalValue)
.ArtistUID
"
style="
width: 120px;
margin-bottom: 10px;
"
:getPopupContainer="getContainer"
placeholder="可搜索"
:fieldNames="{
label: 'Name',
value: 'Uid'
}"
:options="state.options"
></a-select>
</div>
<a-table
class="artwork-table"
:rowKey="(record) => record.Id"
:columns="state.workColumns"
:data-source="
JSON.parse(cus.ApprovalValue).Artworks
"
:scroll="{ y: 245 }"
:showHeader="false"
:pagination="false"
>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'HdPic'">
<a-image
style="
height: 60px;
width: 60px;
"
:src="
record.DigiArtImg
? record.DigiArtImg
: record.HdPic
? record.HdPic
: record.PhotoPic
"
/>
</template>
<template
v-if="column.key === 'action'"
>
<span
@click="openAuthen(record)"
class="checkPic"
>查看鉴证图</span
>
</template>
<span
v-if="
column.dataIndex ===
'ArtistShowCount'
"
>{{
record.ArtistShowCount
? record.ArtistShowCount
: record.ArtistName
}}</span
>
</template>
</a-table>
</span>
<!-- <span
v-else-if="cus.ApprovalType === 'position'"
style="cursor: pointer"
>
<div>
{{ JSON.parse(cus.ApprovalValue).PositionName }}
</div>
</span> -->
<div
v-else
style="width: 1200px; overflow-wrap: break-word"
>
{{ cus.ApprovalValue }}
</div>
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
class="preP"
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 补卡 -->
<div class="approval" v-if="state.approvalType === 'makeUp'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="补卡时间">
{{
item.ApprovalOA.MakeUp.ApplyTimes[0].Date +
' ' +
item.ApprovalOA.MakeUp.ApplyTimes[0].Hour
}}
</n-descriptions-item>
<n-descriptions-item :span="2" label="理由">{{
item.ApprovalOA.MakeUp.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 加班 -->
<div class="approval" v-if="state.approvalType === 'overTime'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="开始时间">
{{
item.ApprovalOA.OverTime.ApplyTimes[0].Date +
' ' +
item.ApprovalOA.OverTime.ApplyTimes[0].Hour
}}
</n-descriptions-item>
<n-descriptions-item label="结束时间">
{{
item.ApprovalOA.OverTime.ApplyTimes[1].Date +
' ' +
item.ApprovalOA.OverTime.ApplyTimes[1].Hour
}}
</n-descriptions-item>
<n-descriptions-item label="时长">{{
item.ApprovalOA.OverTime.Hours
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="理由">{{
item.ApprovalOA.OverTime.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 外勤 -->
<div class="approval" v-if="state.approvalType === 'outWork'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="开始时间">
{{
item.ApprovalOA.OutWork.ApplyTimes[0].Date +
' ' +
item.ApprovalOA.OutWork.ApplyTimes[0].Hour
}}
</n-descriptions-item>
<n-descriptions-item label="结束时间">
{{
item.ApprovalOA.OutWork.ApplyTimes[1].Date +
' ' +
item.ApprovalOA.OutWork.ApplyTimes[1].Hour
}}
</n-descriptions-item>
<n-descriptions-item label="交通工具">{{
item.ApprovalOA.OutWork.Vehicle
}}</n-descriptions-item>
<n-descriptions-item label="目的地">{{
item.ApprovalOA.OutWork.OutWorkAddress
}}</n-descriptions-item>
<n-descriptions-item label="时长">{{
item.ApprovalOA.OutWork.Hours
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="理由">{{
item.ApprovalOA.OutWork.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 离职申请 -->
<div
class="approval"
v-if="state.approvalType.includes('turnover')"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item
label="部门/岗位"
content-style="width:150px"
>
{{
item.ApprovalOA.Turnover.Positions.map(
(item) =>
item.DepartmentName +
'/' +
item.PositionName
).join('')
}}
</n-descriptions-item>
<n-descriptions-item label="工号">
{{ item.ApprovalOA.Turnover.StaffNum }}
</n-descriptions-item>
<n-descriptions-item label="入职日期">
{{ item.ApprovalOA.Turnover.JoinTime }}
</n-descriptions-item>
<n-descriptions-item label="离职日期">
{{ item.ApprovalOA.Turnover.LeftTime }}
</n-descriptions-item>
<n-descriptions-item label="联系电话">
{{ item.ApprovalOA.Turnover.ContactInfo }}
</n-descriptions-item>
<n-descriptions-item label="离职后住址">
{{ item.ApprovalOA.Turnover.Address }}
</n-descriptions-item>
<n-descriptions-item label="离职原因" :span="3">{{
item.ApprovalOA.Turnover.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 离职交接 -->
<div
class="approval"
v-if="state.approvalType.includes('handover')"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<n-descriptions-item label="序号" :span="1">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人" :span="1">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型" :span="1">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item
label="部门/岗位"
:span="1"
content-style="width:150px"
>
{{
item.ApprovalOA.Turnover.Positions.map(
(item) =>
item.DepartmentName +
'/' +
item.PositionName
).join('')
}}
</n-descriptions-item>
<n-descriptions-item label="工号" :span="1">
{{ item.ApprovalOA.Turnover.StaffNum }}
</n-descriptions-item>
<n-descriptions-item label="入职日期" :span="1">
{{ item.ApprovalOA.Turnover.JoinTime }}
</n-descriptions-item>
<n-descriptions-item label="离职日期">
{{ item.ApprovalOA.Turnover.LeftTime }}
</n-descriptions-item>
<n-descriptions-item label="联系电话">
{{ item.ApprovalOA.Turnover.ContactInfo }}
</n-descriptions-item>
<n-descriptions-item label="离职后住址">
{{ item.ApprovalOA.Turnover.Address }}
</n-descriptions-item>
<n-descriptions-item label="交接人" :span="1">
{{ item.ApprovalOA.Turnover.HandoverName }}
</n-descriptions-item>
<n-descriptions-item label="监交人" :span="1">{{
item.ApprovalOA.Turnover.SuperviseName
}}</n-descriptions-item>
<n-descriptions-item label="工作交接事项" :span="3">{{
item.ApprovalOA.Turnover.WorkItems
}}</n-descriptions-item>
<n-descriptions-item label="财务交接事项" :span="3">{{
item.ApprovalOA.Turnover.FinanceItems
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 额度申请 -->
<div
class="approval"
v-if="
state.approvalType === 'maternityLeaveApply' ||
state.approvalType === 'annualLeaveApply' ||
state.approvalType === 'maritalLeaveApply' ||
state.approvalType === 'matingCheckLeaveApply' ||
state.approvalType === 'paternityLeaveApply' ||
state.approvalType === 'nursingLeaveApply' ||
state.approvalType === 'parentalLeaveApply' ||
state.approvalType === 'funeralLeaveApply'
"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="证明材料">
<viewer
:images="
item.ApprovalOA.LeaveApply.VerifyFile || []
"
>
<div
style="margin-bottom: 20px"
v-for="(lea, leai) in item.ApprovalOA
.LeaveApply.VerifyFile"
:key="leai"
>
<span style="margin-right: 20px"
>材料{{ leai + 1 }}</span
>
<span v-if="isPic(lea)">
<img
:src="lea"
style="width: 80px; height: 80px"
/>
</span>
<span
v-else
@click="handleOpenLink(lea)"
style="cursor: pointer"
>
{{ lea }}
</span>
</div>
</viewer>
<!-- <div
style="margin-bottom: 20px"
v-for="(lea, leai) in item.ApprovalOA.LeaveApply.VerifyFile"
:key="leai"
>
<span style="margin-right: 20px">材料{{ leai + 1 }}</span>
<span v-if="isPic(lea)">
<n-image style="width: 80px; height: 80px" :src="lea"
/></span>
<span
v-else
@click="handleOpenLink(lea)"
style="cursor: pointer"
>
{{ lea }}
</span>
</div> -->
</n-descriptions-item>
<n-descriptions-item label="审批假期天数">
<n-input
:disabled="
item.WorkFlows[item.NowLevel - 1]
.BalanceFillIn == 0 ||
props.isMeCheck ||
item.Status === 2 ||
item.Status === 3
"
style="width: 130px"
v-model:value="
item.ApprovalOA.LeaveApply.LeaveBalance
"
/>
</n-descriptions-item>
<n-descriptions-item label="申请理由">{{
item.ApprovalOA.LeaveApply.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 假期申请 -->
<div
class="approval"
v-if="
state.approvalType === 'annualLeave' ||
state.approvalType === 'dayOff' ||
state.approvalType === 'leave' ||
state.approvalType === 'sick' ||
state.approvalType === 'funeralLeave' ||
state.approvalType === 'maritalLeave' ||
state.approvalType === 'maternityLeave' ||
state.approvalType === 'paternityLeave' ||
state.approvalType === 'parentalLeave' ||
state.approvalType === 'nursingLeave' ||
state.approvalType === 'matingCheckLeave' ||
state.approvalType === 'breastFeedingLeave' ||
state.approvalType === 'abortLeave'
"
>
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="开始时间">
<div>
<span>{{
item.ApprovalOA.Leave.ApplyTimes[0].Date +
' '
}}</span>
<span
v-if="
item.ApprovalOA.Leave.ApplyTimes[0].Hour
"
>{{
item.ApprovalOA.Leave.ApplyTimes[0].Hour
}}</span
>
<span
v-if="item.ApprovalOA.Leave.ApplyTimes[0].M"
>{{
item.ApprovalOA.Leave.ApplyTimes[0].M
}}</span
>
</div>
</n-descriptions-item>
<n-descriptions-item label="结束时间">
<div>
<span>{{
item.ApprovalOA.Leave.ApplyTimes[1].Date +
' '
}}</span>
<span
v-if="
item.ApprovalOA.Leave.ApplyTimes[1].Hour
"
>{{
item.ApprovalOA.Leave.ApplyTimes[1].Hour
}}</span
>
<span
v-if="item.ApprovalOA.Leave.ApplyTimes[1].M"
>{{
item.ApprovalOA.Leave.ApplyTimes[1].M
}}</span
>
</div>
</n-descriptions-item>
<n-descriptions-item
v-if="
item.Type === 'breastFeedingLeave' ||
item.Type === 'maternityLeave'
"
label="婴儿数量"
>{{
item.ApprovalOA.Leave.Children
}}</n-descriptions-item
>
<n-descriptions-item
v-if="item.Type === 'maternityLeave'"
label="是否难产"
>{{
item.ApprovalOA.Leave.Dystocia == 1
? '是'
: '否'
}}</n-descriptions-item
>
<n-descriptions-item
v-if="
item.Type === 'matingCheckLeave' ||
item.Type === 'abortLeave'
"
label="孕期"
>{{ item.ApprovalOA.Leave.Month }}月
</n-descriptions-item>
<n-descriptions-item label="时长">
<div>
<span v-if="item.ApprovalOA.Leave.Days"
>{{ item.ApprovalOA.Leave.Days }}天</span
>
<span v-if="item.ApprovalOA.Leave.Hours"
>{{ item.ApprovalOA.Leave.Hours }}小时</span
>
</div>
</n-descriptions-item>
<n-descriptions-item :span="3" label="理由">{{
item.ApprovalOA.Leave.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.Type === 'maternityLeave' ||
item.Type === 'maritalLeave' ||
item.Type === 'paternityLeave' ||
item.Type === 'abortLeave' ||
item.Type === 'matingCheckLeave' ||
item.Type === 'sick'
"
label="证明材料"
>
<viewer
:images="item.ApprovalOA.Leave.VerifyFile || []"
>
<div
style="margin-bottom: 20px"
v-for="(lea, leai) in item.ApprovalOA.Leave
.VerifyFile"
:key="leai"
>
<span style="margin-right: 20px"
>材料{{ leai + 1 }}</span
>
<span v-if="isPic(lea)">
<img
:src="lea"
style="width: 80px; height: 80px"
/>
</span>
<span
v-else
@click="handleOpenLink(lea)"
style="cursor: pointer"
>
{{ lea }}
</span>
</div>
</viewer>
<!-- <div
style="margin-bottom: 20px"
v-for="(lea, leai) in item.ApprovalOA.Leave.VerifyFile"
:key="leai"
>
<span style="margin-right: 20px">材料{{ leai + 1 }}</span>
<span v-if="isPic(lea)">
<a-image style="width: 80px; height: 80px" :src="lea"
/></span>
<span
v-else
@click="handleOpenLink(lea)"
style="cursor: pointer"
>
{{ lea }}
</span>
</div> -->
</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- <div class="button-group" v-if="state.canApproval">
<n-button
v-if="props.approvalStatus == 4"
@click="goRead"
class="save-btn"
>已阅</n-button
>
<n-button
v-if="
!props.isMeCheck &&
(props.approvalStatus == 1 || props.approvalStatus == 6)
"
@click="goApproval"
class="save-btn"
>{{ props.actType === "single" ? "审批" : "批量审批" }}</n-button
>
</div> -->
<!-- 画展审批 -->
<div class="approval" v-if="state.approvalType === 'show'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<!-- <template #extra>
<el-button
width="100px"
type="danger"
v-if="
!props.isMeCheck && (item.Status == 1 || item.Status == 6)
"
@click="goRevoke(item)"
>驳回</el-button
>
</template> -->
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="详情"
><n-descriptions
class="detail-box"
v-for="(exh, exi) in item.Show"
:key="exh.ID"
:title="`画展${exi + 1}`"
layout="vertical"
bordered
>
<n-descriptions-item label="时间">{{
exh.ShowAt
}}</n-descriptions-item>
<n-descriptions-item label="地址">{{
exh.Address
}}</n-descriptions-item>
<n-descriptions-item label="人数">{{
exh.ArtistNum
}}</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<!-- <template #dot
><a-badge
:status="
per.Status == 1
? 'processing'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
/></template> -->
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 外出 -->
<div class="approval" v-if="state.approvalType === 'goOut'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
<n-descriptions-item label="开始时间">
<div>
<span>{{
item.ApprovalOA.GoOut.ApplyTimes[0].Date +
' '
}}</span>
<span
v-if="
item.ApprovalOA.GoOut.ApplyTimes[0].Hour
"
>{{
item.ApprovalOA.GoOut.ApplyTimes[0].Hour
}}</span
>
<span
v-if="item.ApprovalOA.GoOut.ApplyTimes[0].M"
>{{
item.ApprovalOA.GoOut.ApplyTimes[0].M
}}</span
>
</div>
</n-descriptions-item>
<n-descriptions-item label="结束时间">
<div>
<span>{{
item.ApprovalOA.GoOut.ApplyTimes[1].Date +
' '
}}</span>
<span
v-if="
item.ApprovalOA.GoOut.ApplyTimes[1].Hour
"
>{{
item.ApprovalOA.GoOut.ApplyTimes[1].Hour
}}</span
>
<span
v-if="item.ApprovalOA.GoOut.ApplyTimes[1].M"
>{{
item.ApprovalOA.GoOut.ApplyTimes[1].M
}}</span
>
</div>
</n-descriptions-item>
<n-descriptions-item label="时长">
<div>
<span v-if="item.ApprovalOA.GoOut.Days"
>{{ item.ApprovalOA.GoOut.Days }}天</span
>
<span v-if="item.ApprovalOA.GoOut.Hours"
>{{ item.ApprovalOA.GoOut.Hours }}小时</span
>
</div>
</n-descriptions-item>
<n-descriptions-item :span="3" label="理由">{{
item.ApprovalOA.GoOut.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{
item.ApprovalOA.RevokeReason
}}</n-descriptions-item
>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 出差 -->
<div class="approval" v-if="state.approvalType === 'businessTrip'">
<div v-for="(item, index) in state.recordsData" :key="index">
<n-button
v-if="
!props.isMeCheck &&
(item.Status == 1 || item.Status == 6) &&
id !== state.recordsData[0].SubmitterID
"
width="100px"
type="danger"
@click="goRevoke(item)"
class="button"
>
驳回
</n-button>
<n-descriptions
class="detail-box"
:title="'审批' + (index + 1)"
layout="vertical"
bordered
>
<n-descriptions-item label="序号">{{
item.ID
}}</n-descriptions-item>
<n-descriptions-item label="申请人">{{
item.SubmitterName
}}</n-descriptions-item>
<n-descriptions-item label="申请类型">{{
item.TypeName
}}</n-descriptions-item>
</n-descriptions>
<n-descriptions
class="journey"
:title="'行程' + (vIndex + 1)"
layout="vertical"
bordered
v-for="(v, vIndex) in item.ApprovalOA.BusinessTrip
.ItineraryList"
:key="vIndex"
>
<n-descriptions-item label="交通工具">{{
v.Vehicle
}}</n-descriptions-item>
<n-descriptions-item label="出发地">{{
v.StartAddress
}}</n-descriptions-item>
<n-descriptions-item label="目的地">{{
v.EndAddress
}}</n-descriptions-item>
<n-descriptions-item label="开始时间">
<div>
<span>{{ v.ApplyTimes[0].Date + ' ' }}</span>
<span v-if="v.ApplyTimes[0].Hour">{{
v.ApplyTimes[0].Hour
}}</span>
<span v-if="v.ApplyTimes[0].M">{{
v.ApplyTimes[0].M
}}</span>
</div>
</n-descriptions-item>
<n-descriptions-item label="结束时间">
<div>
<span>{{ v.ApplyTimes[1].Date + ' ' }}</span>
<span v-if="v.ApplyTimes[1].Hour">{{
v.ApplyTimes[1].Hour
}}</span>
<span v-if="v.ApplyTimes[1].M">{{
v.ApplyTimes[1].M
}}</span>
</div>
</n-descriptions-item>
<n-descriptions-item label="时长">
<div>
<span v-if="v.Days">{{ v.Days }}天</span>
<span v-if="v.Hours">{{ v.Hours }}小时</span>
</div>
</n-descriptions-item>
</n-descriptions>
<n-descriptions
class="detail-box"
layout="vertical"
bordered
>
<n-descriptions-item :span="3" label="出差总天数">{{
item.ApprovalOA.BusinessTrip.TotalDays
}}</n-descriptions-item>
<n-descriptions-item :span="3" label="理由">{{
item.ApprovalOA.BusinessTrip.Reason
}}</n-descriptions-item>
<n-descriptions-item
:span="3"
v-if="
item.ApprovalOA &&
item.ApprovalOA.RevokeReason &&
(item.Status == 7 || item.Status == 6)
"
label="撤销理由"
>{{ item.ApprovalOA.RevokeReason }}
</n-descriptions-item>
<n-descriptions-item :span="3" label="申请流程">
<n-timeline>
<n-timeline-item
v-for="(per, i) in item.WorkFlows"
:key="i"
placement="top"
:color="
per.Status == 1 ? '#B2A6D7' : '#46299D'
"
>
<span>{{ per.OperatedAt }}</span>
<n-card>
<h5 class="name-box">
<span class="preName">{{
per.Name
}}</span>
<span v-if="per.Status == 2">
<img
src="../../assets/image/approval/pass.png"
/>
</span>
<span v-if="per.Status == 3">
<img
src="../../assets/image/approval/notPass.png"
/>
</span>
</h5>
<p
v-if="
per.Status !== 6 &&
per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
<!-- 退回审批 -->
<div v-if="state.approvalType === 'returnArtwork'">
<n-descriptions
label-placement="top"
:bordered="true"
:column="3"
:title="'审批' + (index + 1)"
v-for="(item, index) in state.recordsData"
:key="index"
>
<n-descriptions-item
label="序号"
label-style="background-color: #46299D;color: #fff;"
>
{{ item.ID }}
</n-descriptions-item>
<n-descriptions-item
label="申请人"
label-style="background-color: #46299D;color: #fff;"
>
{{ item.SubmitterName }}
</n-descriptions-item>
<n-descriptions-item
label="审批类型"
label-style="background-color: #46299D;color: #fff;"
>
{{ item.TypeName }}
</n-descriptions-item>
<n-descriptions-item
label="详情"
span="3"
label-style="background-color: #46299D;color: #fff;"
>
<n-descriptions
label-placement="top"
:bordered="true"
:column="3"
:title="'画展包' + (v + 1)"
v-for="(n, v) in item.ReturnArtworkInfo.ReturnInfos"
:key="v"
>
<n-descriptions-item
label="画家姓名"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.ArtistName }}
</n-descriptions-item>
<n-descriptions-item
label="画作数量"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.Artworks?.length }}
</n-descriptions-item>
<n-descriptions-item
label="画作总平尺数"
label-style="background-color: #7c68bc;color: #fff;"
>
{{
n.Artworks.reduce(
(pre, cur) => pre + cur.Ruler,
0
)
}}
</n-descriptions-item>
<n-descriptions-item
label="画作详情"
span="3"
label-style="background-color: #7c68bc;color: #fff;"
>
<n-data-table
:pagination="false"
:columns="state.returnColumns"
:bordered="false"
:data="n.Artworks"
></n-data-table>
</n-descriptions-item>
<n-descriptions-item
label="退回画作画家姓名"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.ArtistName }}
</n-descriptions-item>
<n-descriptions-item
label="退回原因"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.ReturnReason }}
</n-descriptions-item>
<n-descriptions-item
label="退回时间"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.ReturnTime }}
</n-descriptions-item>
<n-descriptions-item
label="快递单号"
v-if="n.PostNum"
label-style="background-color: #7c68bc;color: #fff;"
>
{{ n.PostNum }}
</n-descriptions-item>
</n-descriptions>
</n-descriptions-item>
<n-descriptions-item
label="申请流程"
label-style="background-color: #46299D;color: #fff;"
>
<n-timeline>
<n-timeline-item
:type="
per.Status == 1
? 'info'
: per.Status == 2
? 'success'
: per.Status == 3
? 'error'
: 'default'
"
v-for="(per, i) in item.WorkFlows"
:key="i"
>
<n-card>
<h5 class="name-box">
{{ per.Name }}
<span
v-if="per.Status == 2"
class="seal"
>{{ per.Name }}</span
>
</h5>
<p
v-if="
per.Status !== 6 && per.Status !== 7
"
>
{{ per.Tips || per.Reply || '' }}
</p>
</n-card>
</n-timeline-item>
</n-timeline>
</n-descriptions-item>
</n-descriptions>
</div>
</div>
</n-card>
</n-modal>
</template>
<script setup>
import {
ref,
reactive,
watch,
onMounted,
nextTick,
defineProps,
defineEmits,
getCurrentInstance
} from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Close as CloseIcon } from '@vicons/ionicons5'
import {
CloseCircleOutlined,
ClockCircleOutlined,
CheckCircleOutlined
} from '@ant-design/icons-vue'
import CreateExhibition from '../../views/artExhibition/components/createExhibition.vue'
import authenticationDialog from '@/components/approval/authentication-dialog'
import moment from 'moment'
import { useStore } from 'vuex'
import { Session, Local } from '@/utils/storage.js'
import { deepCopy } from '@/utils/helper/form'
import {
processError,
processSuccess,
processWarning
} from '@/utils/helper/message'
const props = defineProps({
// 查看画展包画作申请弹窗显示
artworkVisiable: {
type: Boolean,
default: false
},
// 弹窗类型1-审批中 2-审批通过 3-审批拒绝 4-已阅读
approvalStatus: {
type: Number,
default: 0
},
records: {
type: Array,
default: () => []
},
title: {
type: String,
default: '查看申请'
},
isMeCheck: {
type: Boolean,
default: false
},
isOut: {
type: Boolean,
default: false
},
actType: {
type: String,
default: 'single'
}
})
// 审批是否通过
const isPass = ref(2)
const currentInstance = getCurrentInstance()
const { $request } = currentInstance.appContext.config.globalProperties
// 审批备注
const approvalTxt = ref('')
const basicForm = ref()
// 查看窗显示
const authenticationVisible = ref(false)
// 表头
const state = reactive({
IsCustom: 0,
loading: false,
approvalType: '',
Tips: '',
ApprovalOA: null,
canApproval: true,
labelCol: {
style: {
minWidth: '80px'
}
},
fatherData: {},
ApprovalExhibitions: [],
ApprovalExhibitionsEditData: [],
options: [],
apiReciveDate: '',
ArtistName: '',
ArtistUID: '',
typeName: '',
workColumns: [
{
title: '画作名称',
dataIndex: 'ArtworkName',
align: 'center'
},
{
title: '画作编号',
dataIndex: 'Tfnum',
align: 'center'
},
{
title: '画家名称',
dataIndex: 'ArtistShowCount',
align: 'center'
},
{
title: '图片',
dataIndex: 'HdPic',
align: 'center',
key: 'HdPic'
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
key: 'action'
}
],
ShowUID: [],
workTableData: [],
selectedRowKeys: [],
selectedRows: [],
rowData: {},
packageData: [],
ArtworksColoums: [
{
title: '画作编号',
dataIndex: 'Tfnum',
width: 80,
align: 'center',
sorter: {
compare: (a, b) => {
let a1 = a.Tfnum
let b1 = b.Tfnum
console.log(a1, b1)
if (a1 < b1) {
return -1
}
if (a1 > b1) {
return 1
}
if (a1 == b1) {
return 0
}
}
}
},
{
title: '小图',
dataIndex: 'SmallPic',
width: 80,
align: 'center',
key: 'SmallPic'
},
{
title: '画作名称',
dataIndex: 'ArtworkName',
width: 80,
align: 'center'
},
{
title: '长度',
dataIndex: 'Length',
width: 80,
align: 'center'
},
{
title: '宽度',
dataIndex: 'Width',
width: 80,
align: 'center'
},
{
title: '平尺数',
dataIndex: 'Ruler',
width: 80,
align: 'center'
},
{
title: '润格',
dataIndex: 'Reward',
width: 80,
align: 'center',
key: 'Reward'
},
{
title: '单幅总价',
dataIndex: 'oneAllPrice',
width: 140,
align: 'center',
key: 'oneAllPrice'
},
{
title: '销售站点',
dataIndex: 'SaleAddress',
width: 140,
align: 'center',
key: 'SaleAddress'
}
],
returnColumns: [
{
title: '画作编号',
key: 'Tfnum',
align: 'center',
minWidth: 100
},
{
title: '小图',
key: 'SmallPic',
align: 'center',
minWidth: 100,
render: (row) => {
return h(NImage, {
width: '100',
src: row.SmallPic
})
}
},
{
title: '画作名称',
key: 'ArtworkName',
align: 'center',
minWidth: 100
},
{
title: '长度',
key: 'Length',
align: 'center',
minWidth: 100
},
{
title: '宽度',
key: 'Width',
align: 'center',
minWidth: 100
},
{
title: '平尺数',
key: 'Ruler',
align: 'center',
minWidth: 100
}
]
})
// 生成画展包弹窗
const createExVisible = ref(false)
// 生成画展关闭回调
const createHandleOk = () => {
createExVisible.value = false
}
const store = useStore()
const formState = reactive({
ApplicationsNum: null,
Content: '',
ReceivedAt: '',
leaveBalance: null
})
const id = computed(() => {
return Local.get('userInfo').ID
})
// 驳回
const goRevoke = (item) => {
const boxMess = document.getElementById('approvalModalBox')
ElMessageBox.prompt('请输入驳回理由', '驳回', {
confirmButtonText: '确认',
cancelButtonText: '取消',
appendTo: boxMess
})
.then(({ value }) => {
state.loading = true
let data = []
if (state.approvalType == 'work') {
data.push({
ArtworkIds: item.Work.ApprovalWorks.map(
(work) => work.ArtworkID
),
ID: item.ID,
Status: 3,
Reply: value,
Title: item.TypeName,
RetStatus: props.approvalStatus
})
} else {
data.push({
leaveBalance: item.ApprovalOA?.LeaveApply?.LeaveBalance
? parseFloat(item.ApprovalOA.LeaveApply?.LeaveBalance)
: 0,
ID: item.ID,
Status: 3,
Reply: value,
Title: item.TypeName,
RetStatus: props.approvalStatus
})
}
if (props.isOut) {
data.Domain = 'out'
}
console.log(132123, state.recordsData)
$request.HTTP.approval
.goApproval(data)
.then((res) => {
if (res.status === 0) {
state.loading = false
getALLApprovalNum()
getOAALLApprovalNum()
if (item.Type == 'bundlePayPrice') {
getPaymentNum()
}
if (!res.data) {
if (state.recordsData.length > 1) {
const index = state.recordsData.findIndex(
(n) => n.ID == item.ID
)
state.recordsData.splice(index, 1)
} else {
handleOk()
}
} else {
nextTick(() => {
state.recordsData = res.data.data
state.approvalType = state.recordsData[0].Type
})
}
processSuccess('审批成功')
} else {
state.loading = false
processError(res.msg)
}
})
.catch((e) => {
state.loading = false
})
})
.catch(() => {
state.loading = false
})
}
// 通过
const goApproval = () => {
const boxMess = document.getElementById('approvalModalBox')
ElMessageBox.prompt('请输入批语', '通过', {
confirmButtonText: '确认',
cancelButtonText: '取消',
appendTo: boxMess
})
.then(({ value }) => {
state.loading = true
let data = []
if (state.approvalType == 'work') {
state.recordsData.forEach((item) => {
data.push({
ArtworkIds: item.Work.ApprovalWorks.map(
(work) => work.ArtworkID
),
ID: item.ID,
Status: 2,
Tips: value,
Title: item.TypeName
})
})
console.log(data)
} else {
state.recordsData.forEach((item) => {
data.push({
leaveBalance: item.ApprovalOA?.LeaveApply?.LeaveBalance
? parseFloat(
item.ApprovalOA.LeaveApply?.LeaveBalance
)
: null,
ID: item.ID,
Status: 2,
Tips: value,
Title: item.TypeName,
Domain: props.isOut ? 'out' : null
})
})
}
$request.HTTP.approval
.getBatchV2(data)
.then((res) => {
console.log(res, 5555555555555555)
if (res.status === 0) {
state.loading = false
getALLApprovalNum()
getOAALLApprovalNum()
if (state.approvalType == 'bundlePayPrice') {
getPaymentNum()
}
handleOk()
processSuccess('审批成功')
} else {
state.loading = false
processError(res.msg)
}
})
.catch((e) => {
state.loading = false
})
})
.catch(() => {
state.loading = false
})
}
// 判断字符串是否已[开头
const isArray = (str) => {
if (!str) return false
if (Array.isArray(JSON.parse(str))) {
return (
JSON.parse(str).filter(Boolean).length === 0 ||
!Array.isArray(JSON.parse(str).filter(Boolean))
)
}
}
// 判断是否是图片
const isPic = (str) => {
let reg = /(.*)\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$/i
return reg.test(str)
}
// 查看画展包详情
const getExDetail = (val) => {
console.log(val, 222)
// $request.HTTP.artExhibition
// .getDetail({ ApplyID: val.ShowUID })
// .then((res) => {
// if (res.status === 0) {
// } else {
// processError(res.msg);
// }
// })
// .catch((e) => {});
state.rowData = val
createExVisible.value = true
}
const changePass = (val) => {
approvalTxt.value = ''
state.Tips = ''
}
const authenticationHandleOk = () => {
authenticationVisible.value = false
}
const openAuthen = (val) => {
state.fatherData = val
authenticationVisible.value = true
}
const handleOpenLink = (url) => {
window.open(url)
}
// 获取带我审批数
const getALLApprovalNum = () => {
let data = {
UserID: Local.get('userInfo') ? Local.get('userInfo').ID : '',
Type: '',
menuType: 2
}
$request.HTTP.approval
.getInformation(data)
.then((res) => {
if (res.status === 0) {
// 将DoingTotal存入vuex
store.commit(
'GET_DOING_TOTAL',
res.data.SubmitMeInfo.DoingTotal
)
} else {
processError(res.msg)
}
})
.catch((e) => {})
}
// 获取OA带我审批数
const getOAALLApprovalNum = () => {
let data = {
UserID: Local.get('userInfo') ? Local.get('userInfo').ID : '',
Type: '',
menuType: 1
}
$request.HTTP.approval
.getInformation(data)
.then((res) => {
if (res.status === 0) {
// 将DoingTotal存入vuex
store.commit(
'GET_OADOING_TOTAL',
res.data.SubmitMeInfo.DoingTotal
)
} else {
processError(res.msg)
}
})
.catch((e) => {})
}
// 获取付款单未处理数量
const getPaymentNum = () => {
$request.HTTP.common
.getPayNum()
.then((res) => {
if (res.status === 0) {
store.commit('GET_PAYMENT_NUM', res.data.NoCount)
} else {
processError(res.msg)
}
})
.catch((e) => {})
}
// 已阅
const goRead = () => {
let data = {
ID: state.recordsData[0].ID
}
$request.HTTP.approval
.goRead(data)
.then((res) => {
if (res.status === 0) {
handleOk()
processSuccess('阅读成功')
} else {
console.log(res)
processError(res.msg)
}
})
.catch((e) => {})
}
const emit = defineEmits(['artworkHandleOk'])
// 改变modal根节点 解决打开后出现padding
const getContainer = () => {
return document.getElementById('approvalModalBox')
}
// 获取画家列表
const getArtistList = () => {
$request.HTTP.artist
.artistBaseInfoList({
Keyword: '',
Page: 1,
PageSize: 99999999
})
.then((res) => {
if (res.status == 0) {
state.options = res.data.Data
} else {
}
})
.catch((e) => {})
}
// 关闭回调
const handleOk = (e) => {
state.ShowUID = []
state.Tips = ''
isPass.value = 2
approvalTxt.value = ''
console.log(88888888888888888)
emit('artworkHandleOk')
}
// 超管额外逻辑
const etArtistList = () => {
// 从localstorage中获取角色部判断是否是超级管理
const isSuperAdmin = Local.get('userInfo').DepartmentName === '超级管理员'
// 获取当前用户
const userName = Local.get('userInfo').NickName
// 如果当前角色部门是超级管理员,则不能审批,但是如果该审批中审批人是超级管理,则可以审批
if (isSuperAdmin && props.records[0].NowUserName !== userName) {
state.canApproval = false
} else {
state.canApproval = true
}
}
// 加载百度地图js
const loadBaiduMap = () => {
return new Promise((resolve, reject) => {
const script = document.createElement('script')
script.type = 'text/javascript'
script.src =
'https://api.map.baidu.com/getscript?v=2.0&ak=hMPtCMLVem8gOeuFud9CEXC8k7woOWiq&services=&t=20240108120844&s=1'
script.onerror = reject
script.onload = resolve
document.head.appendChild(script)
})
}
// 百度地图额外处理
const extra = () => {
const proptocolStr = window.location.protocol
switch (proptocolStr) {
case 'https:':
window.HOST_TYPE = 2
break
default:
break
}
}
watch(
() => props.artworkVisiable,
(newValue, oldValue) => {
if (newValue) {
state.recordsData = props.records
state.approvalType = state.recordsData
? state.recordsData[0].Type
: ''
state.IsCustom = state.recordsData
? state.recordsData[0].IsCustom
: 0
// 超管额外逻辑
etArtistList()
// 如果是签到详情,加载地图
if (state.approvalType === 'checkIn') {
extra()
loadBaiduMap().then(() => {
// 循环加载地图
state.recordsData.forEach((item) => {
// 百度地图API功能
var map = new BMap.Map('mapContainer' + item.ID) // 创建Map实例
map.centerAndZoom(
new BMap.Point(
item.CheckIn.Longitude,
item.CheckIn.Latitude
),
18
) // 初始化地图,设置中心点坐标和地图级别
// map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
// 添加地图类型控件
map.addControl(
new BMap.MapTypeControl({
mapTypes: [BMAP_NORMAL_MAP, BMAP_HYBRID_MAP]
})
)
// 添加地图缩放控件
map.addControl(new BMap.NavigationControl())
// 添加地图比例尺控件
map.addControl(new BMap.ScaleControl())
// 添加地图定位控件
map.addControl(
new BMap.OverviewMapControl({
isOpen: true,
anchor: BMAP_ANCHOR_BOTTOM_RIGHT
})
)
// 添加地图标注
var marker = new BMap.Marker(
new BMap.Point(
item.CheckIn.Longitude,
item.CheckIn.Latitude
)
) // 创建标注
map.addOverlay(marker) // 将标注添加到地图中
marker.setAnimation(BMAP_ANIMATION_BOUNCE) //跳动的动画
})
})
}
//存在岗位申请时添加岗位所属部门字段
let deepCopyRecordsData = deepCopy(state.recordsData)
state.recordsData = deepCopyRecordsData.map((item) => {
if (item.CustomizeInfo && item.CustomizeInfo.length) {
item.CustomizeInfo.forEach((n, index, list) => {
if (n.ApprovalType == 'position') {
list.push({
ApprovalKey: '',
ApprovalMark: false,
ApprovalName: '岗位申请',
ApprovalPlaceholder: '',
ApprovalRequired: false,
ApprovalType: 'position',
ApprovalValue: n.ApprovalValue
})
}
})
const CustomizeInfo = item.CustomizeInfo.map((n) => {
if (n.ApprovalType == 'position') {
if (!n.ApprovalKey) {
return {
ApprovalKey: n.ApprovalKey,
ApprovalMark: false,
ApprovalName: '岗位申请',
ApprovalPlaceholder: '',
ApprovalRequired: false,
ApprovalType: n.ApprovalType,
ApprovalValue: JSON.parse(n.ApprovalValue)
.PositionName
}
} else {
return {
ApprovalKey: n.ApprovalKey,
ApprovalMark: false,
ApprovalName: '岗位所属部门',
ApprovalPlaceholder: '',
ApprovalRequired: false,
ApprovalType: n.ApprovalType,
ApprovalValue: JSON.parse(n.ApprovalValue)
.DepartmentName
}
}
} else {
return { ...n }
}
})
return {
...item,
CustomizeInfo
}
} else {
return {
...item
}
}
})
console.log(state.recordsData)
if (state.IsCustom === 1) {
getArtistList()
}
}
}
)
</script>
<style lang="scss" scoped>
:deep(.n-data-table .n-data-table-thead > tr > th) {
background-color: #b2a6d9;
color: #fff;
}
:deep(.n-descriptions) {
margin-bottom: 20px;
}
.title {
text-align: center;
margin: 0;
color: #1f2225;
font-size: 20px;
}
:v-deep .ant-space {
display: block;
}
.detail-box,
.journey {
margin-bottom: 20px;
}
:deep(.el-timeline-item__tail) {
position: absolute;
left: 2px;
top: 18px;
height: 88%;
}
:deep(.ant-descriptions-item-label) {
font-weight: bold;
}
:deep(.ant-descriptions-item-content) {
color: #695959;
}
.type-name {
width: fit-content;
padding: 3px;
background: #e2e0ea;
text-align: center;
}
.approval-box {
display: flex;
width: 300px;
align-items: flex-end;
text-align: left;
color: $theme-primary;
margin-bottom: 25px;
}
.form-label {
font-size: 16px;
color: $theme-primary;
}
.artwork-table {
:deep(.ant-table) {
border-radius: 1px;
overflow: hidden;
color: $basic-black;
}
:deep(.ant-table-container) {
border: 1px solid #cfcad8;
}
:deep(.ant-table-thead > tr > th) {
padding: 4px 4px;
}
:deep(.ant-table-tbody > tr > td) {
padding: 4px 16px;
}
:deep(.ant-table-thead > tr > th) {
background: #cfcad8 !important;
border-bottom: 1px solid #dfd7f2;
font-weight: bolder !important;
color: #7161a5 !important;
}
}
.tags {
background-color: #cfcad8;
width: 422px;
margin-left: 109px;
}
.textarea {
margin-top: 10px;
background: #cfcad8ff;
color: black;
}
.action-table {
display: flex;
align-items: center;
margin-bottom: 10px;
margin-top: 10px;
}
.button-group {
text-align: center;
.cancel-btn {
width: 123px;
border-radius: 20px;
background: #eeeaf7;
margin-right: 10px;
color: $theme-primary;
}
.save-btn {
width: 123px;
border-radius: 3px;
background: $theme-primary;
color: #ffff;
}
}
.fp-number {
:deep(.ant-form-item-label > label) {
display: contents;
}
:deep(.ant-form-item-label) {
height: 40px;
}
}
.checkPic {
color: $theme-primary;
cursor: pointer;
}
.name-box {
position: relative;
display: flex;
justify-content: space-between;
.preName {
font-size: 14px;
color: #1f2225;
}
.preP {
color: #9ea4aa;
}
.seal {
position: absolute;
top: 0;
font-size: 14px;
left: 0;
color: red;
padding: 3px;
border: 2px solid red;
// 倾斜45度
transform: rotate(-40deg);
// 宋体
font-family: 'SimSun';
font-weight: bold;
}
}
.ant-timeline-item {
padding-bottom: 30px;
}
.button {
position: absolute;
right: 0;
}
:deep(
.n-descriptions.n-descriptions--bordered
.n-descriptions-table-wrapper
.n-descriptions-table
.n-descriptions-table-row
.n-descriptions-table-header
) {
background-color: #eee9f8;
color: #000000;
}
.approval {
position: relative;
}
</style>
<style lang="scss">
.approval-dialog {
.ant-modal-content {
border-radius: 0 0 20px 20px;
}
.main-dialog {
width: 1300px !important;
.ant-modal-body {
height: 700px !important;
overflow-y: auto;
}
}
}
.modal-title {
color: #7650fe;
font-size: 16px;
font-weight: bold;
}
.close-box {
width: 30px;
height: 20px;
position: absolute;
right: 40px;
top: 27px;
}
.approval-detail-dialog {
width: initial !important;
}
.content-wrapper {
width: 1300px;
height: 700px;
overflow-y: auto;
}
</style>