1252 lines
31 KiB
Vue
1252 lines
31 KiB
Vue
|
<template>
|
|||
|
<view class="top-level">
|
|||
|
<view class="subsetion">
|
|||
|
<u-subsection
|
|||
|
:list="list"
|
|||
|
mode="button"
|
|||
|
:bgColor="'#fff'"
|
|||
|
:fontSize="14"
|
|||
|
:activeColor="'#ffffff'"
|
|||
|
:current="currentIndex"
|
|||
|
@change="handelrSubSectionChange"
|
|||
|
></u-subsection>
|
|||
|
</view>
|
|||
|
<view v-if="currentIndex === 0">
|
|||
|
<slot name="main"></slot>
|
|||
|
</view>
|
|||
|
<view v-if="currentIndex === 1" class="approveBox">
|
|||
|
<div class="auditWork" v-if="stepList.length > 0">
|
|||
|
<div
|
|||
|
v-for="(item, index) in stepList"
|
|||
|
:key="index"
|
|||
|
style="margin-bottom: 15px"
|
|||
|
>
|
|||
|
<div style="display: flex">
|
|||
|
<div class="auditWork_left">
|
|||
|
<div
|
|||
|
class="auditWork_left_image"
|
|||
|
:style="{
|
|||
|
borderColor:
|
|||
|
item.step < stepnum
|
|||
|
? '#5FDA1D'
|
|||
|
: item.step == stepnum
|
|||
|
? '#1478F6'
|
|||
|
: '#BBBBBB',
|
|||
|
}"
|
|||
|
></div>
|
|||
|
<div
|
|||
|
class="auditWork_left_line"
|
|||
|
v-if="item.step != stepList.length"
|
|||
|
></div>
|
|||
|
</div>
|
|||
|
<div class="auditWork_right">
|
|||
|
<div
|
|||
|
class="auditWork_right_title"
|
|||
|
:class="
|
|||
|
item.step < stepnum
|
|||
|
? 'color1'
|
|||
|
: item.step == stepnum
|
|||
|
? 'color2'
|
|||
|
: 'color3'
|
|||
|
"
|
|||
|
>
|
|||
|
{{ item.nodeName }}
|
|||
|
</div>
|
|||
|
<div class="auditWork_right_content">
|
|||
|
<div
|
|||
|
v-for="(el, index) in item.list"
|
|||
|
:key="index"
|
|||
|
style="
|
|||
|
display: flex;
|
|||
|
height: 100%;
|
|||
|
width: 50%;
|
|||
|
align-items: center;
|
|||
|
"
|
|||
|
:class="
|
|||
|
el.state != 0 && item.step <= stepnum ? 'color1' : 'color3'
|
|||
|
"
|
|||
|
>
|
|||
|
<div style="margin-top: 5px">
|
|||
|
<div
|
|||
|
class="text"
|
|||
|
v-if="el.headImageUrl == null"
|
|||
|
style="font-size: 24rpx; font-weight: 400"
|
|||
|
>
|
|||
|
{{
|
|||
|
el.auditPersonName
|
|||
|
? String(el.auditPersonName).slice(-2)
|
|||
|
: String(el.name).slice(-2)
|
|||
|
}}
|
|||
|
</div>
|
|||
|
<img
|
|||
|
class="avatar"
|
|||
|
v-else
|
|||
|
:src="
|
|||
|
configData.baseUrl +
|
|||
|
`${String(el.headImageUrl).split('/wwwroot')[1]}`
|
|||
|
"
|
|||
|
alt=""
|
|||
|
/>
|
|||
|
</div>
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<span style="">{{ el.auditPersonName }}</span>
|
|||
|
|
|||
|
<img
|
|||
|
class="img"
|
|||
|
alt=""
|
|||
|
v-if="el.state == 1"
|
|||
|
:src="require('@/static/images/audit/1.png')"
|
|||
|
/>
|
|||
|
|
|||
|
<img
|
|||
|
class="img"
|
|||
|
alt=""
|
|||
|
v-if="el.state == 2"
|
|||
|
:src="require('@/static/images/audit/2.png')"
|
|||
|
/>
|
|||
|
|
|||
|
<img
|
|||
|
style="
|
|||
|
width: 20px;
|
|||
|
height: 20px;
|
|||
|
cursor: pointer;
|
|||
|
margin-left: 6px;
|
|||
|
"
|
|||
|
@click="handlerUrgingClick(el.id)"
|
|||
|
alt=""
|
|||
|
v-if="
|
|||
|
item.step == stepnum && el.state != 2 && el.state != 1
|
|||
|
"
|
|||
|
:src="require('@/static/images/audit/催办.png')"
|
|||
|
/>
|
|||
|
</div>
|
|||
|
<div>
|
|||
|
<span>{{ el.auditdate | getDate }}</span>
|
|||
|
<span>{{ !el.state ? el.name : "" }}</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div v-else style="text-align: center">
|
|||
|
<u-empty mode="data" :icon="require('@/static/images/empty.png')">
|
|||
|
</u-empty>
|
|||
|
</div>
|
|||
|
</view>
|
|||
|
<view v-if="currentIndex === 2" class="approveBox">
|
|||
|
<div v-if="auditNote.length > 0">
|
|||
|
<div ref="auditNote">
|
|||
|
<div
|
|||
|
class="auditNote"
|
|||
|
v-for="(item, index) in auditNote"
|
|||
|
:key="index"
|
|||
|
>
|
|||
|
<div class="flex">
|
|||
|
<div
|
|||
|
class="text"
|
|||
|
v-if="item.headImageUrl == null"
|
|||
|
style="font-size: 24rpx; font-weight: 400"
|
|||
|
>
|
|||
|
{{ String(item.auditPersonName).slice(-2) }}
|
|||
|
</div>
|
|||
|
<img
|
|||
|
class="avatar"
|
|||
|
v-else
|
|||
|
alt=""
|
|||
|
:src="
|
|||
|
configData.baseUrl +
|
|||
|
`${String(item.headImageUrl).split('/wwwroot')[1]}`
|
|||
|
"
|
|||
|
/>
|
|||
|
<div class="d-flex-c">
|
|||
|
<span>{{ item.auditPersonName }}</span>
|
|||
|
<span style="margin-top: 5px">{{ item.auditMessage }}</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="d-flex-c" style="align-items: flex-end">
|
|||
|
<span>{{ item.auditdate }}</span>
|
|||
|
<span
|
|||
|
:style="{
|
|||
|
color: item.stateName == '同意' ? '#1478F6' : '#F51701',
|
|||
|
marginTop: '5px',
|
|||
|
}"
|
|||
|
>
|
|||
|
{{ item.stateName }}</span
|
|||
|
>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div v-else style="text-align: center">
|
|||
|
<u-empty mode="data" :icon="require('@/static/images/empty.png')">
|
|||
|
</u-empty>
|
|||
|
</div>
|
|||
|
</view>
|
|||
|
<view class="bottomPage" v-if="auditData.length > 0">
|
|||
|
<view class="disagreeContent button" v-if="isShowDisagree">
|
|||
|
<u-button
|
|||
|
text="不同意"
|
|||
|
type="error"
|
|||
|
size="normal"
|
|||
|
@click="showBtnGroup"
|
|||
|
></u-button>
|
|||
|
<u-transition :show="isShowBtnGroup" mode="fade-up">
|
|||
|
<view class="btnDisagreeBox">
|
|||
|
<view @click="handlerDisagreeClickEvent('continue')">继续</view>
|
|||
|
<view @click="handlerDisagreeClickEvent('back')">回退</view>
|
|||
|
<view @click="handlerDisagreeClickEvent('termination')">终止</view>
|
|||
|
</view>
|
|||
|
</u-transition>
|
|||
|
</view>
|
|||
|
<u-button
|
|||
|
v-if="isShowCountersign"
|
|||
|
text="加签"
|
|||
|
type="primary"
|
|||
|
size="normal"
|
|||
|
class="button"
|
|||
|
@click="handlerCountersignClick"
|
|||
|
style="flex: 1"
|
|||
|
></u-button>
|
|||
|
<u-button
|
|||
|
v-if="isShowAgree"
|
|||
|
text="同意"
|
|||
|
type="primary"
|
|||
|
class="button"
|
|||
|
size="normal"
|
|||
|
@click="handlerAgreeClick"
|
|||
|
style="flex: 1"
|
|||
|
></u-button>
|
|||
|
<u-button
|
|||
|
v-if="isShowRead"
|
|||
|
text="已读"
|
|||
|
class="button"
|
|||
|
type="primary"
|
|||
|
size="normal"
|
|||
|
@click="handlerReadClick"
|
|||
|
style="flex: 1"
|
|||
|
></u-button>
|
|||
|
<u-button
|
|||
|
v-if="isShowWithdraw"
|
|||
|
text="撤回"
|
|||
|
type="error"
|
|||
|
class="button"
|
|||
|
size="normal"
|
|||
|
@click="handlerWithdrawClick"
|
|||
|
style="flex: 1"
|
|||
|
></u-button>
|
|||
|
</view>
|
|||
|
<u-toast ref="uToast"></u-toast>
|
|||
|
<uni-popup ref="alertDialog" type="dialog">
|
|||
|
<uni-popup-dialog
|
|||
|
:type="msgType"
|
|||
|
cancelText="取消"
|
|||
|
confirmText="同意"
|
|||
|
title="提示"
|
|||
|
content="确认开始催办吗?"
|
|||
|
@confirm="dialogConfirm"
|
|||
|
></uni-popup-dialog>
|
|||
|
</uni-popup>
|
|||
|
<!-- 加签 -->
|
|||
|
<u-modal
|
|||
|
title="加签审批"
|
|||
|
:show="countersignShow"
|
|||
|
showCancelButton
|
|||
|
:closeOnClickOverlay="false"
|
|||
|
@confirm="auditAddFlow"
|
|||
|
@cancel="countersignShow = false"
|
|||
|
@close="countersignShow = false"
|
|||
|
>
|
|||
|
<u-form :model="counterSignModel" :labelStyle="{ fontSize: '14px' }">
|
|||
|
<u-form-item
|
|||
|
label="审核类型"
|
|||
|
prop="auditType"
|
|||
|
ref="item1"
|
|||
|
:borderBottom="false"
|
|||
|
:labelWidth="'200rpx'"
|
|||
|
>
|
|||
|
<u-radio-group v-model="counterSignModel.auditType">
|
|||
|
<u-radio
|
|||
|
shape="circle"
|
|||
|
name="1"
|
|||
|
label="审核"
|
|||
|
style="margin-right: 20rpx"
|
|||
|
></u-radio>
|
|||
|
<u-radio shape="circle" name="2" label="抄送"></u-radio>
|
|||
|
</u-radio-group>
|
|||
|
</u-form-item>
|
|||
|
<u-form-item
|
|||
|
label="加签人员"
|
|||
|
prop="additionalPersonnel"
|
|||
|
ref="item1"
|
|||
|
:borderBottom="false"
|
|||
|
:labelWidth="'200rpx'"
|
|||
|
@click="handlerPeopelClickEvent"
|
|||
|
>
|
|||
|
<u--input
|
|||
|
placeholder="请选择人员"
|
|||
|
suffixIcon="arrow-right"
|
|||
|
:disabled="true"
|
|||
|
:border="'none'"
|
|||
|
disabledColor="#fff"
|
|||
|
></u--input>
|
|||
|
</u-form-item>
|
|||
|
<view v-if="selectedListBaseinfo.length > 0" style="margin: 10rpx 0"
|
|||
|
>已关联人员:</view
|
|||
|
>
|
|||
|
<view class="flex" style="flex-wrap: wrap">
|
|||
|
<view
|
|||
|
class="select-item"
|
|||
|
v-for="(item, index) in selectedListBaseinfo"
|
|||
|
:key="index"
|
|||
|
>
|
|||
|
<view class="name">
|
|||
|
<text>{{ item.p_PersonName }}</text>
|
|||
|
</view>
|
|||
|
<view class="close" @click.stop="removeSelectedItem(item)">
|
|||
|
<uni-icons type="closeempty" size="16" color="#999"></uni-icons>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</u-form>
|
|||
|
<u-toast ref="countersignToast"></u-toast>
|
|||
|
</u-modal>
|
|||
|
<!-- 不同意 -->
|
|||
|
<u-modal
|
|||
|
:title="disagreeTitle"
|
|||
|
:show="disagreeModalShow"
|
|||
|
showCancelButton
|
|||
|
closeOnClickOverlay
|
|||
|
@confirm="disagreeConfirm"
|
|||
|
@cancel="disagreeModalShow = false"
|
|||
|
@close="disagreeModalShow = false"
|
|||
|
>
|
|||
|
<view class="reasonBox">
|
|||
|
<text>请输入{{ disagreeTitle }}理由:</text>
|
|||
|
<u--textarea
|
|||
|
v-model="disagreeReason"
|
|||
|
placeholder="请输入..."
|
|||
|
></u--textarea>
|
|||
|
<u-toast ref="disagreeToast"></u-toast>
|
|||
|
</view>
|
|||
|
</u-modal>
|
|||
|
<!-- 同意 -->
|
|||
|
<u-modal
|
|||
|
title="同意"
|
|||
|
:show="agreeModalShow"
|
|||
|
showCancelButton
|
|||
|
closeOnClickOverlay
|
|||
|
@confirm="agreeAudit"
|
|||
|
@cancel="agreeModalShow = false"
|
|||
|
@close="agreeModalShow = false"
|
|||
|
>
|
|||
|
<view class="reasonBox">
|
|||
|
<text>请输入同意理由:</text>
|
|||
|
<u--textarea
|
|||
|
v-model="agreeTextarea"
|
|||
|
placeholder="请输入..."
|
|||
|
></u--textarea>
|
|||
|
</view>
|
|||
|
</u-modal>
|
|||
|
<!-- 已读 -->
|
|||
|
<u-modal
|
|||
|
title="已读"
|
|||
|
:show="readShow"
|
|||
|
showCancelButton
|
|||
|
closeOnClickOverlay
|
|||
|
@confirm="readConfirm"
|
|||
|
@cancel="readShow = false"
|
|||
|
@close="readShow = false"
|
|||
|
>
|
|||
|
<view class="reasonBox">
|
|||
|
<text>请输入已读理由:</text>
|
|||
|
<u--textarea
|
|||
|
v-model="readTextarea"
|
|||
|
placeholder="请输入..."
|
|||
|
></u--textarea>
|
|||
|
</view>
|
|||
|
</u-modal>
|
|||
|
<!-- 撤回 -->
|
|||
|
<u-modal
|
|||
|
title="撤回"
|
|||
|
:show="withdrawShow"
|
|||
|
showCancelButton
|
|||
|
closeOnClickOverlay
|
|||
|
@confirm="withdrawConfirm"
|
|||
|
@cancel="withdrawShow = false"
|
|||
|
@close="withdrawShow = false"
|
|||
|
>
|
|||
|
<view class="reasonBox">
|
|||
|
<text>请输入撤回理由:</text>
|
|||
|
<u--textarea
|
|||
|
v-model="withdrawTextarea"
|
|||
|
placeholder="请输入..."
|
|||
|
></u--textarea>
|
|||
|
</view>
|
|||
|
</u-modal>
|
|||
|
<u-loading-page
|
|||
|
:loading="maskLoading"
|
|||
|
:loadingText="'正在提交'"
|
|||
|
></u-loading-page>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import localStorage from "@/utils/localStorage";
|
|||
|
import {
|
|||
|
getAuditList,
|
|||
|
getAuditNote,
|
|||
|
auditUrging,
|
|||
|
audit,
|
|||
|
auditAddFlow,
|
|||
|
getAuditBtn,
|
|||
|
removeAudit,
|
|||
|
read,
|
|||
|
} from "@/api/system/audit.js";
|
|||
|
import config from "@/config";
|
|||
|
export default {
|
|||
|
props: {
|
|||
|
billid: {
|
|||
|
type: String,
|
|||
|
required: "",
|
|||
|
},
|
|||
|
billKindID: {
|
|||
|
type: String,
|
|||
|
required: "",
|
|||
|
},
|
|||
|
auditType: {
|
|||
|
type: String,
|
|||
|
required: "",
|
|||
|
},
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
maskLoading: false,
|
|||
|
msgType: "warn",
|
|||
|
currentIndex: 0,
|
|||
|
list: [
|
|||
|
{
|
|||
|
name: "审批详情",
|
|||
|
},
|
|||
|
{
|
|||
|
name: "审批流程",
|
|||
|
},
|
|||
|
{
|
|||
|
name: "审批记录",
|
|||
|
},
|
|||
|
],
|
|||
|
stepList: [], //审批流程
|
|||
|
stepnum: "",
|
|||
|
configData: {},
|
|||
|
auditNote: [], //审批记录
|
|||
|
urgingBillid: "", //催办ID
|
|||
|
countersignShow: false,
|
|||
|
counterSignModel: {
|
|||
|
auditType: "1",
|
|||
|
},
|
|||
|
isShowBtnGroup: false,
|
|||
|
disagreeModalShow: false,
|
|||
|
disagreeReason: "",
|
|||
|
disagreeTitle: "",
|
|||
|
personIDs: [],
|
|||
|
personNames: [],
|
|||
|
agreeModalShow: false,
|
|||
|
agreeTextarea: "",
|
|||
|
buttonData: [],
|
|||
|
readShow: false,
|
|||
|
readTextarea: "",
|
|||
|
withdrawShow: false,
|
|||
|
withdrawTextarea: "",
|
|||
|
|
|||
|
isShowAgree: false,
|
|||
|
isShowDisagree: false,
|
|||
|
isShowRead: false,
|
|||
|
isShowCountersign: false,
|
|||
|
isShowWithdraw: false,
|
|||
|
auditData: [],
|
|||
|
};
|
|||
|
},
|
|||
|
onLoad: function (option) {
|
|||
|
//option为object类型,会序列化上个页面传递的参数
|
|||
|
},
|
|||
|
watch: {
|
|||
|
selectedListBaseinfo: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal.length > 0) {
|
|||
|
newVal.forEach((item) => {
|
|||
|
this.personIDs.push(item.p_PersonID);
|
|||
|
this.personNames.push(item.p_PersonName);
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
// 同意
|
|||
|
agreeModalShow: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal == false) {
|
|||
|
this.agreeTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
// 已读
|
|||
|
readShow: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal == false) {
|
|||
|
this.readTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
// 撤回
|
|||
|
withdrawShow: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal == false) {
|
|||
|
this.withdrawTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
// 不同意
|
|||
|
disagreeModalShow: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal == false) {
|
|||
|
this.disagreeReason = "";
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
// 加签
|
|||
|
countersignShow: {
|
|||
|
deep: true,
|
|||
|
handler(newVal, oldVal) {
|
|||
|
if (newVal == false) {
|
|||
|
this.counterSignModel.auditType = "1";
|
|||
|
this.$store.commit("SET_SELECTSDATA", []);
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
},
|
|||
|
computed: {
|
|||
|
selectedListBaseinfo() {
|
|||
|
return this.$store.getters.selectsdata || [];
|
|||
|
},
|
|||
|
},
|
|||
|
filters: {
|
|||
|
getDate(value) {
|
|||
|
if (!value) {
|
|||
|
return "";
|
|||
|
}
|
|||
|
return value.split(".")[0].replace("T", " ");
|
|||
|
},
|
|||
|
getDate1(value) {
|
|||
|
if (!value) {
|
|||
|
return "";
|
|||
|
}
|
|||
|
return value.split("T")[0];
|
|||
|
},
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
this.init();
|
|||
|
},
|
|||
|
methods: {
|
|||
|
init() {
|
|||
|
this.isShowAgree = false;
|
|||
|
this.isShowDisagree = false;
|
|||
|
this.isShowRead = false;
|
|||
|
this.isShowCountersign = false;
|
|||
|
this.isShowWithdraw = false;
|
|||
|
this.configData = config;
|
|||
|
if (this.auditType == "audit") {
|
|||
|
this.getAuditBtn();
|
|||
|
}
|
|||
|
if (
|
|||
|
this.billid != "" &&
|
|||
|
this.billid != null &&
|
|||
|
this.billid != undefined &&
|
|||
|
this.billid != "null" &&
|
|||
|
this.billid != "undefined" &&
|
|||
|
this.billKindID != "" &&
|
|||
|
this.billKindID != null &&
|
|||
|
this.billKindID != undefined &&
|
|||
|
this.billKindID != "null" &&
|
|||
|
this.billKindID != "undefined"
|
|||
|
) {
|
|||
|
this.getAuditList();
|
|||
|
this.getAuditNote();
|
|||
|
}
|
|||
|
this.maskLoading = false;
|
|||
|
},
|
|||
|
//获取审批权限按钮
|
|||
|
async getAuditBtn() {
|
|||
|
let params = {
|
|||
|
billID: this.billid,
|
|||
|
billKindID: this.billKindID,
|
|||
|
};
|
|||
|
const res = await getAuditBtn(params);
|
|||
|
let arr = res.data[0];
|
|||
|
this.auditData = arr;
|
|||
|
arr.forEach((el) => {
|
|||
|
if (el == "3") {
|
|||
|
//同意
|
|||
|
this.isShowAgree = true;
|
|||
|
} else if (el == "4") {
|
|||
|
//不同意
|
|||
|
this.isShowDisagree = true;
|
|||
|
} else if (el == "5") {
|
|||
|
//已读
|
|||
|
this.isShowRead = true;
|
|||
|
} else if (el == "6") {
|
|||
|
//加签
|
|||
|
this.isShowCountersign = true;
|
|||
|
} else if (el == "7") {
|
|||
|
//撤回
|
|||
|
this.isShowWithdraw = true;
|
|||
|
} else {
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
resetAudit() {
|
|||
|
this.getAuditList();
|
|||
|
this.getAuditNote();
|
|||
|
},
|
|||
|
showBtnGroup() {
|
|||
|
this.isShowBtnGroup = !this.isShowBtnGroup;
|
|||
|
},
|
|||
|
handlerDisagreeClickEvent(type) {
|
|||
|
// 继续
|
|||
|
if (type == "continue") {
|
|||
|
this.disagreeTitle = "继续";
|
|||
|
this.disagreeModalShow = true;
|
|||
|
} else if (type == "termination") {
|
|||
|
//终止
|
|||
|
this.disagreeTitle = "终止";
|
|||
|
this.disagreeModalShow = true;
|
|||
|
} else if (type == "back") {
|
|||
|
//退回
|
|||
|
this.disagreeTitle = "退回";
|
|||
|
this.disagreeModalShow = true;
|
|||
|
} else {
|
|||
|
//do something
|
|||
|
}
|
|||
|
this.isShowBtnGroup = false;
|
|||
|
},
|
|||
|
disagreeConfirm() {
|
|||
|
if (
|
|||
|
this.disagreeReason == "" ||
|
|||
|
this.disagreeReason == null ||
|
|||
|
this.disagreeReason == undefined
|
|||
|
) {
|
|||
|
this.$refs.disagreeToast.show({
|
|||
|
type: "warning",
|
|||
|
message: "请输入" + this.disagreeTitle + "理由!",
|
|||
|
});
|
|||
|
return;
|
|||
|
}
|
|||
|
this.disagreeModalShow = false;
|
|||
|
this.maskLoading = true;
|
|||
|
setTimeout(() => {
|
|||
|
this.maskLoading = false;
|
|||
|
}, 5000);
|
|||
|
//审批流程控制(2不同意-继续,3不同意-退回,不同意-终止)
|
|||
|
if (this.disagreeTitle == "继续") {
|
|||
|
this.handleClickAgree("2");
|
|||
|
}
|
|||
|
if (this.disagreeTitle == "终止") {
|
|||
|
this.handleClickAgree("4");
|
|||
|
}
|
|||
|
if (this.disagreeTitle == "退回") {
|
|||
|
this.handleClickAgree("3");
|
|||
|
}
|
|||
|
},
|
|||
|
//审核不同意
|
|||
|
async handleClickAgree(type) {
|
|||
|
const res = await audit({
|
|||
|
billID: this.billid,
|
|||
|
billKindID: this.billKindID,
|
|||
|
auditState: type,
|
|||
|
agree: "0", //审批结果(1同意,0不同意)
|
|||
|
auditMessage: this.disagreeReason,
|
|||
|
});
|
|||
|
this.maskLoading = false;
|
|||
|
if (res.success == true) {
|
|||
|
this.$refs.disagreeToast.show({
|
|||
|
type: "success",
|
|||
|
message: "审核成功!",
|
|||
|
});
|
|||
|
this.init();
|
|||
|
this.disagreeReason = "";
|
|||
|
}
|
|||
|
},
|
|||
|
// 加签选择人员
|
|||
|
handlerPeopelClickEvent() {
|
|||
|
let url = "/components/basePeople/index";
|
|||
|
this.$tab.navigateTo(url);
|
|||
|
},
|
|||
|
// 加签删除
|
|||
|
removeSelectedItem(row) {
|
|||
|
let arrData = this.selectedListBaseinfo.filter(
|
|||
|
(item, index) => item.p_PersonID !== row.p_PersonID
|
|||
|
);
|
|||
|
this.$store.commit("SET_SELECTSDATA", arrData);
|
|||
|
},
|
|||
|
// 确定加签
|
|||
|
async auditAddFlow() {
|
|||
|
this.countersignShow = false;
|
|||
|
this.maskLoading = true;
|
|||
|
setTimeout(() => {
|
|||
|
this.maskLoading = false;
|
|||
|
}, 5000);
|
|||
|
const res = await auditAddFlow({
|
|||
|
billID: this.billid,
|
|||
|
auditType: this.counterSignModel.auditType, //加签节点审核类型(1、审核 2抄送)
|
|||
|
personIDs: this.personIDs.join(), //加签人ID集合,多个人英文逗号隔开
|
|||
|
personNames: this.personNames.join(), //加签人姓名集合,多个人英文逗号隔开
|
|||
|
});
|
|||
|
this.maskLoading = false;
|
|||
|
if (res.success == "true") {
|
|||
|
this.$refs.uToast.show({
|
|||
|
type: "success",
|
|||
|
message: "加签成功",
|
|||
|
});
|
|||
|
}
|
|||
|
this.counterSignModel.auditType = "1";
|
|||
|
this.$store.commit("SET_SELECTSDATA", []);
|
|||
|
this.getAuditList();
|
|||
|
},
|
|||
|
handelrSubSectionChange(index) {
|
|||
|
this.currentIndex = index;
|
|||
|
},
|
|||
|
//获取单据审批流程
|
|||
|
async getAuditList() {
|
|||
|
const res = await getAuditList({
|
|||
|
billID: this.billid,
|
|||
|
});
|
|||
|
this.stepnum = res.data[0];
|
|||
|
let stepList = res.data[1];
|
|||
|
stepList.forEach((el) => {
|
|||
|
if (res.data[2] && res.data[2].length > 0) {
|
|||
|
res.data[2].forEach((item) => {
|
|||
|
if (el.step == item.step) {
|
|||
|
if (!el.list) {
|
|||
|
el.list = [];
|
|||
|
}
|
|||
|
el.list.push(item);
|
|||
|
el.list = Array.from(new Set(el.list));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
if (res.data[3] && res.data[3].length) {
|
|||
|
res.data[3].forEach((item) => {
|
|||
|
if (el.step == item.step) {
|
|||
|
if (!el.list) {
|
|||
|
el.list = [];
|
|||
|
}
|
|||
|
el.list.push(item);
|
|||
|
el.list = Array.from(new Set(el.list));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
this.stepList = stepList;
|
|||
|
},
|
|||
|
//获取单据审批记录
|
|||
|
async getAuditNote() {
|
|||
|
const res = await getAuditNote({
|
|||
|
billID: this.billid,
|
|||
|
});
|
|||
|
this.auditNote = res.data[0];
|
|||
|
},
|
|||
|
//催办
|
|||
|
handlerUrgingClick(id) {
|
|||
|
this.$refs.alertDialog.open();
|
|||
|
this.urgingBillid = id;
|
|||
|
},
|
|||
|
async dialogConfirm(id) {
|
|||
|
auditUrging({ id: id }).then((res) => {
|
|||
|
if (res.code == 1) {
|
|||
|
this.$refs.uToast.show({
|
|||
|
type: "success",
|
|||
|
message: res.message,
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
handlerCountersignClick() {
|
|||
|
this.countersignShow = true;
|
|||
|
},
|
|||
|
// 同意
|
|||
|
handlerAgreeClick() {
|
|||
|
this.agreeModalShow = true;
|
|||
|
},
|
|||
|
async agreeAudit() {
|
|||
|
this.agreeModalShow = false;
|
|||
|
this.maskLoading = true;
|
|||
|
setTimeout(() => {
|
|||
|
this.maskLoading = false;
|
|||
|
}, 5000);
|
|||
|
const res = await audit({
|
|||
|
billID: this.billid,
|
|||
|
billKindID: this.billKindID,
|
|||
|
auditState: "1", //审批流程控制(2不同意-继续,3不同意-退回,不同意-终止)
|
|||
|
agree: "1", //审批结果(1同意,0不同意)
|
|||
|
auditMessage: this.agreeTextarea, //审批回复
|
|||
|
});
|
|||
|
this.maskLoading = false;
|
|||
|
if (res.success == "true") {
|
|||
|
this.$refs.uToast.show({
|
|||
|
type: "success",
|
|||
|
message: res.message,
|
|||
|
});
|
|||
|
this.init();
|
|||
|
this.agreeTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
// 已读
|
|||
|
handlerReadClick() {
|
|||
|
this.readShow = true;
|
|||
|
},
|
|||
|
async readConfirm() {
|
|||
|
this.readShow = false;
|
|||
|
this.maskLoading = true;
|
|||
|
setTimeout(() => {
|
|||
|
this.maskLoading = false;
|
|||
|
}, 5000);
|
|||
|
const res = await read({
|
|||
|
billID: this.billid,
|
|||
|
auditMessage: this.readTextarea,
|
|||
|
});
|
|||
|
this.maskLoading = false;
|
|||
|
if (res.code == 1) {
|
|||
|
this.$refs.uToast.show({
|
|||
|
type: "success",
|
|||
|
message: "已读成功",
|
|||
|
});
|
|||
|
this.init();
|
|||
|
this.readTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
// 撤回
|
|||
|
handlerWithdrawClick() {
|
|||
|
this.withdrawShow = true;
|
|||
|
},
|
|||
|
async withdrawConfirm() {
|
|||
|
this.withdrawShow = false;
|
|||
|
this.maskLoading = true;
|
|||
|
setTimeout(() => {
|
|||
|
this.maskLoading = false;
|
|||
|
}, 5000);
|
|||
|
const res = await removeAudit({
|
|||
|
billID: this.billid,
|
|||
|
billKindID: this.billKindID,
|
|||
|
auditMessage: this.withdrawTextarea, //审批回复
|
|||
|
});
|
|||
|
if (res.success == "true") {
|
|||
|
this.maskLoading = false;
|
|||
|
this.$refs.uToast.show({
|
|||
|
type: "success",
|
|||
|
message: "撤回审核成功",
|
|||
|
});
|
|||
|
this.init();
|
|||
|
this.withdrawTextarea = "";
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style scoped lang="scss">
|
|||
|
::v-deep .u-modal__title {
|
|||
|
font-size: 15px;
|
|||
|
font-weight: bold;
|
|||
|
color: #000000;
|
|||
|
text-align: center;
|
|||
|
padding-top: 10px;
|
|||
|
}
|
|||
|
.select-item {
|
|||
|
margin: 10rpx 10rpx 10rpx 0;
|
|||
|
padding: 10rpx 20rpx;
|
|||
|
max-width: auto;
|
|||
|
height: auto;
|
|||
|
background-color: #eaeaea;
|
|||
|
border-radius: 10rpx;
|
|||
|
color: #333;
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
font-size: 28rpx;
|
|||
|
|
|||
|
.name {
|
|||
|
flex: 1;
|
|||
|
padding-right: 10rpx;
|
|||
|
font-size: 13px;
|
|||
|
}
|
|||
|
|
|||
|
.close {
|
|||
|
width: 18px;
|
|||
|
height: 18px;
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
}
|
|||
|
.bottomPage {
|
|||
|
width: 100%;
|
|||
|
position: fixed;
|
|||
|
bottom: 0;
|
|||
|
padding: 20rpx 30rpx 30rpx 30rpx;
|
|||
|
background-color: #fff;
|
|||
|
margin-top: 15rpx;
|
|||
|
display: flex;
|
|||
|
border-top: 8rpx solid #f1f1f1;
|
|||
|
|
|||
|
.button:last-child {
|
|||
|
margin-right: 0; /* 默认右间隙 */
|
|||
|
}
|
|||
|
|
|||
|
.button:not(:last-child) {
|
|||
|
margin-right: 10px; /* 中间按钮的右间隙 */
|
|||
|
}
|
|||
|
}
|
|||
|
.plusButton {
|
|||
|
width: 100rpx;
|
|||
|
height: 100rpx;
|
|||
|
background: #3c9cff;
|
|||
|
border-radius: 50%;
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
position: fixed;
|
|||
|
bottom: 200rpx;
|
|||
|
right: 28rpx;
|
|||
|
}
|
|||
|
.d-flex-c {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
}
|
|||
|
.disagreeContent {
|
|||
|
position: relative;
|
|||
|
flex: 1;
|
|||
|
}
|
|||
|
.btnDisagreeBox {
|
|||
|
position: absolute;
|
|||
|
bottom: 44px;
|
|||
|
width: 100%;
|
|||
|
background: #ffffff;
|
|||
|
border: 1px solid #f1f1f1;
|
|||
|
border-radius: 8px 8px 0 0;
|
|||
|
text-align: center;
|
|||
|
|
|||
|
view {
|
|||
|
padding: 26rpx 0;
|
|||
|
}
|
|||
|
|
|||
|
view:nth-child(2) {
|
|||
|
border-top: 1px solid #f1f1f1;
|
|||
|
border-bottom: 1px solid #f1f1f1;
|
|||
|
}
|
|||
|
}
|
|||
|
.reasonBox {
|
|||
|
width: 100%;
|
|||
|
text {
|
|||
|
display: inline-block;
|
|||
|
font-size: 14px;
|
|||
|
color: #979797;
|
|||
|
margin-bottom: 15px;
|
|||
|
}
|
|||
|
}
|
|||
|
.top-level {
|
|||
|
.listContent {
|
|||
|
margin: 20rpx 24rpx 0 24rpx;
|
|||
|
}
|
|||
|
|
|||
|
.swipe-action-item {
|
|||
|
margin: 20rpx 0 20rpx 0;
|
|||
|
}
|
|||
|
|
|||
|
.listData {
|
|||
|
background-color: #fff;
|
|||
|
border-radius: 16rpx;
|
|||
|
padding: 20rpx 20rpx;
|
|||
|
|
|||
|
.head {
|
|||
|
height: 64rpx;
|
|||
|
border-bottom: 1px solid #f7f7f7;
|
|||
|
justify-content: space-between;
|
|||
|
}
|
|||
|
|
|||
|
.head {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
color: #333;
|
|||
|
margin-bottom: 16rpx;
|
|||
|
}
|
|||
|
|
|||
|
.head .itembox {
|
|||
|
font-size: 32rpx;
|
|||
|
font-weight: 600;
|
|||
|
display: flex;
|
|||
|
justify-content: space-between;
|
|||
|
align-items: center;
|
|||
|
|
|||
|
.levelbox {
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
border: 4rpx solid #1e9fff;
|
|||
|
border-radius: 50%;
|
|||
|
width: 40rpx;
|
|||
|
height: 40rpx;
|
|||
|
color: #1e9fff;
|
|||
|
font-weight: 700;
|
|||
|
font-size: 28rpx;
|
|||
|
margin: 0 10rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.head .itemName {
|
|||
|
font-size: 24rpx;
|
|||
|
color: #999999;
|
|||
|
margin-left: 10px;
|
|||
|
font-weight: 400;
|
|||
|
|
|||
|
text {
|
|||
|
color: #fff;
|
|||
|
padding: 4rpx 8rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.state {
|
|||
|
margin: 25rpx 0;
|
|||
|
}
|
|||
|
|
|||
|
.time {
|
|||
|
margin: 24rpx 0 0;
|
|||
|
font-size: 28rpx;
|
|||
|
flex-wrap: wrap;
|
|||
|
line-height: 1.5;
|
|||
|
|
|||
|
text {
|
|||
|
display: inline-block;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #979797;
|
|||
|
margin-bottom: 30rpx;
|
|||
|
}
|
|||
|
|
|||
|
view {
|
|||
|
height: 60rpx;
|
|||
|
width: 50%;
|
|||
|
}
|
|||
|
|
|||
|
view:nth-child(4) {
|
|||
|
text:nth-child(2) {
|
|||
|
font-size: 28rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.content {
|
|||
|
line-height: 1.5;
|
|||
|
font-size: 28rpx;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
|
|||
|
text {
|
|||
|
font-size: 28rpx;
|
|||
|
color: #979797;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.noData {
|
|||
|
text-align: center;
|
|||
|
margin-top: 10px;
|
|||
|
}
|
|||
|
|
|||
|
.Page_change {
|
|||
|
width: 100%;
|
|||
|
background-color: #fff;
|
|||
|
padding: 10rpx 20rpx 20rpx 20rpx;
|
|||
|
position: fixed;
|
|||
|
top: 0;
|
|||
|
z-index: 1;
|
|||
|
|
|||
|
.buttom {
|
|||
|
justify-content: space-between;
|
|||
|
padding-top: 30rpx;
|
|||
|
|
|||
|
::v-deep .u-button--circle {
|
|||
|
width: 30%;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.input_box {
|
|||
|
margin-top: 20rpx;
|
|||
|
|
|||
|
::v-deep .u-input--radius:nth-child(1) {
|
|||
|
margin-right: 20rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.approveBox {
|
|||
|
padding: 0 20rpx 160rpx;
|
|||
|
}
|
|||
|
|
|||
|
.auditWork {
|
|||
|
background: #fcfcfc;
|
|||
|
border-radius: 12rpx;
|
|||
|
border: 2rpx solid #f1f1f1;
|
|||
|
padding: 20rpx 20rpx;
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
justify-content: flex-start;
|
|||
|
|
|||
|
.auditWork_left {
|
|||
|
margin-top: 8rpx;
|
|||
|
text-align: center;
|
|||
|
|
|||
|
.auditWork_left_image {
|
|||
|
width: 16rpx;
|
|||
|
height: 16rpx;
|
|||
|
line-height: 16rpx;
|
|||
|
border-radius: 50%;
|
|||
|
text-align: center;
|
|||
|
z-index: 10;
|
|||
|
border-width: 4rpx;
|
|||
|
border-style: solid;
|
|||
|
border-color: #bbbbbb;
|
|||
|
}
|
|||
|
|
|||
|
.auditWork_left_line {
|
|||
|
background-color: #e1e1e1;
|
|||
|
width: 1rpx;
|
|||
|
height: 103%;
|
|||
|
margin: 0 auto;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.auditWork_right {
|
|||
|
width: 96%;
|
|||
|
|
|||
|
.auditWork_right_title {
|
|||
|
margin-left: 20rpx;
|
|||
|
font-weight: 600;
|
|||
|
}
|
|||
|
|
|||
|
.auditWork_right_content {
|
|||
|
display: flex;
|
|||
|
flex-direction: row;
|
|||
|
flex-wrap: wrap;
|
|||
|
width: 100%;
|
|||
|
align-items: center;
|
|||
|
padding: 10rpx 20rpx;
|
|||
|
font-size: 24rpx;
|
|||
|
|
|||
|
.avatar {
|
|||
|
width: 70rpx;
|
|||
|
height: 70rpx;
|
|||
|
border-radius: 50%;
|
|||
|
margin-right: 24rpx;
|
|||
|
}
|
|||
|
|
|||
|
.text {
|
|||
|
width: 70rpx;
|
|||
|
height: 70rpx;
|
|||
|
margin-right: 10rpx;
|
|||
|
line-height: 70rpx;
|
|||
|
color: #fff;
|
|||
|
border-radius: 50%;
|
|||
|
text-align: center;
|
|||
|
background: #00aaff;
|
|||
|
}
|
|||
|
|
|||
|
.img {
|
|||
|
margin-top: 12rpx;
|
|||
|
margin-right: 60rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.left {
|
|||
|
// background: #dcdcdc;
|
|||
|
}
|
|||
|
|
|||
|
.right {
|
|||
|
// background: #333333bb;
|
|||
|
}
|
|||
|
|
|||
|
.on {
|
|||
|
// background: #2a6aff;
|
|||
|
}
|
|||
|
|
|||
|
.color1 {
|
|||
|
width: 100%;
|
|||
|
line-height: 40rpx;
|
|||
|
height: 40rpx;
|
|||
|
// font-family: PingFangSC;
|
|||
|
color: #999999;
|
|||
|
}
|
|||
|
|
|||
|
.color2 {
|
|||
|
// font-family: PingFangSC;
|
|||
|
color: #1478f6;
|
|||
|
}
|
|||
|
|
|||
|
.color3 {
|
|||
|
width: 100%;
|
|||
|
height: 40rpx;
|
|||
|
line-height: 40rpx;
|
|||
|
// font-family: PingFangSC;
|
|||
|
color: #333333d9;
|
|||
|
font-weight: 600;
|
|||
|
}
|
|||
|
}
|
|||
|
.auditNote {
|
|||
|
display: flex;
|
|||
|
place-content: space-around space-between;
|
|||
|
margin-bottom: 8px;
|
|||
|
background: #fcfcfc;
|
|||
|
border: 1px solid #f1f1f1;
|
|||
|
font-size: 13px;
|
|||
|
padding: 15px 10px;
|
|||
|
border-radius: 5px;
|
|||
|
justify-content: space-between;
|
|||
|
align-items: center;
|
|||
|
.avatar {
|
|||
|
width: 70rpx;
|
|||
|
height: 70rpx;
|
|||
|
border-radius: 50%;
|
|||
|
margin-right: 24rpx;
|
|||
|
}
|
|||
|
|
|||
|
.text {
|
|||
|
width: 70rpx;
|
|||
|
height: 70rpx;
|
|||
|
margin-right: 10rpx;
|
|||
|
line-height: 70rpx;
|
|||
|
color: #fff;
|
|||
|
border-radius: 50%;
|
|||
|
text-align: center;
|
|||
|
background: #00aaff;
|
|||
|
}
|
|||
|
}
|
|||
|
::v-deep .subsetion {
|
|||
|
// position: fixed;
|
|||
|
// top: 0;
|
|||
|
// z-index: 1;
|
|||
|
width: 100%;
|
|||
|
padding: 10rpx;
|
|||
|
background: #fff;
|
|||
|
}
|
|||
|
::v-deep .subsetion .u-subsection--button {
|
|||
|
height: 70rpx;
|
|||
|
margin-top: 10px;
|
|||
|
}
|
|||
|
::v-deep .u-subsection--button__bar {
|
|||
|
background-color: #3c9cff;
|
|||
|
}
|
|||
|
</style>
|