4447 lines
116 KiB
Vue
4447 lines
116 KiB
Vue
<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'"
|
||
>
|
||
<!-- 展示图片的优先级为DigiArtImg,HdPic,PhotoPic -->
|
||
|
||
<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'"
|
||
>
|
||
<!-- 展示图片的优先级为DigiArtImg,HdPic,PhotoPic -->
|
||
|
||
<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 }}: </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>
|