|
@@ -14,7 +14,51 @@
|
|
|
@rowTaskName="rowTaskName" @signRules="setSignRulesClick" @batchApproval="batchApprovalTaskClick"/>
|
|
|
</template>
|
|
|
</HcTabsSimple>
|
|
|
+
|
|
|
<!--任务审核-->
|
|
|
+ <el-dialog v-model="showTaskReviewModal" width="80vw" class="hc-modal-border hc-modal-table">
|
|
|
+ <template #header="{ titleId, titleClass }">
|
|
|
+ <div class="hc-card-header flex items-center">
|
|
|
+ <div :id="titleId" :class="titleClass">任务审核 【已开启电签】</div>
|
|
|
+ <div class="ml-6 font-bold text-main" v-if="taskReviewType === '1'">任务名称:{{taskReviewInfo.taskName}}</div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="hc-card-body-flex">
|
|
|
+ <div class="flex-iframe" v-if="batchPdfUrl">
|
|
|
+ <iframe width='100%' height='100%' frameborder='1' :src="batchPdfUrl"></iframe>
|
|
|
+ </div>
|
|
|
+ <div class="flex-iframe hc-no-table-form" v-else>
|
|
|
+ <div class="table-form-no">
|
|
|
+ <img :src="notableform" alt=""/>
|
|
|
+ <div class="desc">暂无 PDF 数据</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="flex-table" :class="sbTableKey === 'key1'?'':'vh'">
|
|
|
+ <div class="data-table" v-if="taskReviewType==='1'">
|
|
|
+ <HcTable :column="taskReviewColumns" :datas="taskReviewData" @row-click="rowTaskReviewClick"/>
|
|
|
+ </div>
|
|
|
+ <div class="data-table" v-if="taskReviewType==='2'">
|
|
|
+ <HcTable :column="checkedRowsColumns" :datas="checkedRowsRef" @row-click="rowTaskReviewClick"/>
|
|
|
+ </div>
|
|
|
+ <div class="radio-group-box" v-if="sbTableKey === 'key1'">
|
|
|
+ <span class="label">审批操作:</span>
|
|
|
+ <el-radio-group v-model="taskReviewForm.flag">
|
|
|
+ <el-radio label="OK">同意</el-radio>
|
|
|
+ <el-radio label="NO">废除任务</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+ <div class="textarea-box" v-if="sbTableKey === 'key1'">
|
|
|
+ <el-input type="textarea" v-model="taskReviewForm.comment" placeholder="请输入审核意见" :autosize="{ minRows: 3, maxRows: 5 }"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="large" @click="showTaskReviewModal = false">取消</el-button>
|
|
|
+ <el-button type="primary" hc-btn :loading="SMSAuthLoading" @click="ConfirmApprovalClick">确认审批</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
|
|
|
<!--设置重签规则-->
|
|
|
<el-dialog v-model="showSetSignRulesModal" title="设置重签规则" width="38rem" class="hc-modal-border">
|
|
@@ -39,6 +83,9 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!--短信认证-->
|
|
|
+ <HcSmsAuth :show="SMSAuthShow" :loading="SMSAuthLoading" @cancel="SMSAuthCancel" @confirm="SMSAuthConfirm"/>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -47,14 +94,15 @@ import {ref, onMounted} from "vue";
|
|
|
import {useAppStore} from "~src/store";
|
|
|
import {useRouter, useRoute} from 'vue-router'
|
|
|
import TableCard from './components/TableCard.vue';
|
|
|
-import {isType, formValidate, deepClone} from "vue-utils-plus"
|
|
|
+import notableform from '~src/assets/view/notableform.svg';
|
|
|
+import {getObjValue, getArrValue, isString} from "vue-utils-plus"
|
|
|
import tasksApi from '~api/tasks/data';
|
|
|
+import dayjs from "dayjs"
|
|
|
|
|
|
//初始变量
|
|
|
const router = useRouter()
|
|
|
const useRoutes = useRoute()
|
|
|
const useAppState = useAppStore()
|
|
|
-const { getObjValue, getArrValue } = isType()
|
|
|
|
|
|
//路由参数
|
|
|
const routerQuery = useRoutes?.query;
|
|
@@ -87,9 +135,197 @@ const sbTableClick = (key) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+//审批页详情
|
|
|
+const showTaskReviewModal = ref(false)
|
|
|
+const taskReviewType = ref('1')
|
|
|
+const taskReviewInfo = ref({})
|
|
|
+const taskReviewData = ref([])
|
|
|
+const batchPdfUrl = ref('')
|
|
|
+const taskReviewForm = ref({flag: 'OK', comment: ''})
|
|
|
+const taskReviewColumns = ref([
|
|
|
+ {key:'fileName', name: '文件名称'}
|
|
|
+])
|
|
|
//任务审核
|
|
|
-const rowTaskName = () => {
|
|
|
+const rowTaskName = async (row) => {
|
|
|
+ if (row.formDataId) {
|
|
|
+ taskReviewInfo.value = row
|
|
|
+ const { error, code, data } = await tasksApi.queryApprovalParameter({
|
|
|
+ parallelProcessInstanceId: row['parallelProcessInstanceId'],
|
|
|
+ formDataId: row.formDataId,
|
|
|
+ approvalType: row.approvalType,
|
|
|
+ })
|
|
|
+ if (!error && code === 200) {
|
|
|
+ const approvalFileList = getArrValue(data['approvalFileList'])
|
|
|
+ taskReviewData.value = approvalFileList
|
|
|
+ if (approvalFileList.length > 0) {
|
|
|
+ batchPdfUrl.value = approvalFileList[0].fileUrl
|
|
|
+ }
|
|
|
+ taskReviewType.value = '1'
|
|
|
+ showTaskReviewModal.value = true
|
|
|
+ } else {
|
|
|
+ taskReviewData.value = []
|
|
|
+ batchPdfUrl.value = ''
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ taskReviewInfo.value = {}
|
|
|
+ taskReviewData.value = []
|
|
|
+ batchPdfUrl.value = ''
|
|
|
+ window?.$message?.warning('此数据异常')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//批量审批
|
|
|
+const checkedRowsColumns = ref([
|
|
|
+ {key:'taskName', name: '任务名称'}
|
|
|
+])
|
|
|
+const checkedRowsRef = ref([])
|
|
|
+const batchApprovalTaskClick = (rows) => {
|
|
|
+ taskReviewType.value = '2'
|
|
|
+ showTaskReviewModal.value = true
|
|
|
+ queryTaskInfo(rows[0])
|
|
|
+}
|
|
|
|
|
|
+//行被点击
|
|
|
+const rowTaskReviewClick = async (row) => {
|
|
|
+ const type = taskReviewType.value
|
|
|
+ if (type === '1') {
|
|
|
+ batchPdfUrl.value = row.fileUrl
|
|
|
+ } else if (row['hc_batchPdfUrl']) {
|
|
|
+ batchPdfUrl.value = row['hc_batchPdfUrl']
|
|
|
+ } else {
|
|
|
+ queryTaskInfo(row)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//获取PDF数据
|
|
|
+const queryTaskInfo = async (row) => {
|
|
|
+ const { error, code, data } = await tasksApi.queryTaskInfo({
|
|
|
+ formDataId: row['formDataId'] || '',
|
|
|
+ approvalType: row['approvalType']
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ const approvalFileList = getArrValue(data['approvalFileList'])
|
|
|
+ if (approvalFileList.length > 0) {
|
|
|
+ batchPdfUrl.value = approvalFileList[0].fileUrl
|
|
|
+ row['hc_batchPdfUrl'] = approvalFileList[0].fileUrl
|
|
|
+ } else {
|
|
|
+ batchPdfUrl.value = ''
|
|
|
+ row['hc_batchPdfUrl'] = ''
|
|
|
+ window?.$message?.warning('PDF获取异常')
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ batchPdfUrl.value = ''
|
|
|
+ row['hc_batchPdfUrl'] = ''
|
|
|
+ window?.$message?.warning(data.msg || 'PDF异常')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//确认审批
|
|
|
+const ConfirmApprovalClick = () => {
|
|
|
+ const formData = taskReviewForm.value
|
|
|
+ if (formData.flag === 'NO' && !formData.comment) {
|
|
|
+ window?.$message?.warning('请先输入审核意见')
|
|
|
+ } else {
|
|
|
+ const ShowAuth = isCheckSmsCodeTime()
|
|
|
+ SMSAuthShow.value = ShowAuth
|
|
|
+ //免短信验证
|
|
|
+ if (!ShowAuth) {
|
|
|
+ SMSAuthConfirm()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//短信验证有效期
|
|
|
+const smsCodeTime = ref('')
|
|
|
+const checkSmsCode = async () => {
|
|
|
+ const {error, code, data} = await tasksApi.checkSmsCode()
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ smsCodeTime.value = isString(data) ? data : '';
|
|
|
+ } else {
|
|
|
+ smsCodeTime.value = '';
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//验证短信有效期
|
|
|
+const isCheckSmsCodeTime = () => {
|
|
|
+ const smsTime = smsCodeTime.value;
|
|
|
+ if (!smsTime) {
|
|
|
+ return true
|
|
|
+ } else {
|
|
|
+ const toDayTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')
|
|
|
+ return dayjs(smsTime).isBefore(toDayTime)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//短信验证
|
|
|
+const SMSAuthLoading = ref(false)
|
|
|
+const SMSAuthShow = ref(false)
|
|
|
+const SMSAuthConfirm = () => {
|
|
|
+ const type = taskReviewType.value
|
|
|
+ if (type === '1') {
|
|
|
+ saveCompleteApprovalTask()
|
|
|
+ } else {
|
|
|
+ batchCompleteApprovalTask()
|
|
|
+ }
|
|
|
+ checkSmsCode()
|
|
|
+}
|
|
|
+const SMSAuthCancel = () => {
|
|
|
+ SMSAuthShow.value = false
|
|
|
+}
|
|
|
+
|
|
|
+//单个审批
|
|
|
+const saveCompleteApprovalTask = async () => {
|
|
|
+ const DataInfo = taskReviewInfo.value
|
|
|
+ SMSAuthLoading.value = true
|
|
|
+ const {error, code} = await tasksApi.saveCompleteApprovalTask({
|
|
|
+ ...taskReviewForm.value,
|
|
|
+ taskId: DataInfo['taskId'] || '',
|
|
|
+ parallelProcessInstanceId: DataInfo['parallelProcessInstanceId'] || '',
|
|
|
+ formDataId: DataInfo['formDataId'] || '',
|
|
|
+ approvalType: DataInfo['approvalType']
|
|
|
+ },false)
|
|
|
+ //处理数据
|
|
|
+ SMSAuthLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ SMSAuthShow.value = false
|
|
|
+ showTaskReviewModal.value = false
|
|
|
+ window?.$message?.success('审批成功')
|
|
|
+ window?.location?.reload() //刷新页面
|
|
|
+ } else {
|
|
|
+ window?.$message?.warning('审批异常')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//批量审批
|
|
|
+const batchCompleteApprovalTask = async() => {
|
|
|
+ const rows = checkedRowsRef.value
|
|
|
+ SMSAuthLoading.value = true
|
|
|
+ let taskIds = rowsToId(rows,'taskId')
|
|
|
+ let parallelProcessInstanceIds = rowsToId(rows,'parallelProcessInstanceId')
|
|
|
+ const {error, code} = await tasksApi.batchCompleteApprovalTask({
|
|
|
+ ...taskReviewForm.value,
|
|
|
+ taskIds,
|
|
|
+ parallelProcessInstanceIds
|
|
|
+ },false)
|
|
|
+ //处理数据
|
|
|
+ SMSAuthLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ SMSAuthShow.value = false
|
|
|
+ showTaskReviewModal.value = false
|
|
|
+ window?.$message?.success('审批成功')
|
|
|
+ window?.location?.reload() //刷新页面
|
|
|
+ } else {
|
|
|
+ window?.$message?.warning('审批出错')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//拼接ID
|
|
|
+const rowsToId = (rows,key) => {
|
|
|
+ return rows.map((obj) => {
|
|
|
+ return obj['key'];
|
|
|
+ }).join(",")
|
|
|
}
|
|
|
|
|
|
//设置重签规则
|
|
@@ -101,10 +337,6 @@ const setSignRulesClick = () => {
|
|
|
}
|
|
|
const dateUpdateValue = (val) => {
|
|
|
formReport.value.date = val
|
|
|
-}
|
|
|
-//批量审批
|
|
|
-const batchApprovalTaskClick = () => {
|
|
|
-
|
|
|
}
|
|
|
</script>
|
|
|
|