|
@@ -1,760 +1,409 @@
|
|
|
<template>
|
|
|
- <n-divider dashed title-placement="left">任务查看</n-divider>
|
|
|
<div class="hc-layout-box">
|
|
|
- <n-card class="hc-card-overflow-box" :segmented="{content: true}">
|
|
|
- <template #header>
|
|
|
- <div class="hc-card-header flex items-center">
|
|
|
- <div class="hc-btn-tab-box">
|
|
|
- <n-button class="ml-3" :type="activeKey === 'key1'?'primary':''" :color="activeKey === 'key1'?'':'#999999'" ghost @click="activeClick('key1')">
|
|
|
- <i class="hcicon-yes-tasks"/>
|
|
|
- <span class="ml-1">待办任务列表</span>
|
|
|
- </n-button>
|
|
|
- <n-button class="ml-3" :type="activeKey === 'key2'?'primary':''" :color="activeKey === 'key2'?'':'#999999'" ghost @click="activeClick('key2')">
|
|
|
- <i class="hcicon-yes-tasks"/>
|
|
|
- <span class="ml-1">已办任务列表</span>
|
|
|
- </n-button>
|
|
|
- <n-button class="ml-3" :type="activeKey === 'key3'?'primary':''" :color="activeKey === 'key3'?'':'#999999'" ghost @click="activeClick('key3')">
|
|
|
- <i class="cicon-my-o"/>
|
|
|
- <span class="ml-1">我发起的任务列表</span>
|
|
|
- </n-button>
|
|
|
+ <!--https://codepen.io/weilanwl/pen/JjLVyOd-->
|
|
|
+ <HcSbTable :datas="sbTableData" :cur="sbTableKey" @tabClick="sbTableClick"/>
|
|
|
+ <div class="hc-content-box">
|
|
|
+ <HcCard :scrollbar="false" actionSize="lg">
|
|
|
+ <template #header>
|
|
|
+ <div class="w-32">
|
|
|
+ <el-select v-model="searchForm.taskType" block clearable size="large" placeholder="任务类型">
|
|
|
+ <el-option v-for="item in tasksType" :label="item.dictValue" :value="item.dictKey"/>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <template #header-extra>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_set_sign_rules?.textInfo" v-if="btn_set_sign_rules">
|
|
|
- <template #trigger>
|
|
|
- <n-button class="px-5" type="primary" strong secondary @click="showSetSignRulesModal = true">
|
|
|
- <i class="cicon-settings"/>
|
|
|
- <span class="ml-1">设置重签规则</span>
|
|
|
- </n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_set_sign_rules?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_batch_review?.textInfo" v-if="btn_batch_review && activeKey === 'key1'">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-5" @click="batchCompleteApprovalTaskClick">批量审批</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_batch_review?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- </template>
|
|
|
- <div class="bg-card-main hc-sticky-box p-6 flex items-center">
|
|
|
- <div class="w-32">
|
|
|
- <n-select v-model:value="searchForm.taskType" :options="tasksType" placeholder="任务类型" clearable label-field="dictValue" value-field="dictKey"/>
|
|
|
- </div>
|
|
|
- <div class="w-32 ml-3">
|
|
|
- <n-select v-model:value="searchForm.taskStatus" :options="tasksStatus" placeholder="任务状态" clearable label-field="dictValue" value-field="dictKey"/>
|
|
|
- </div>
|
|
|
- <div class="ml-3">
|
|
|
- <el-select v-model="searchForm.contractId" placeholder="合同段" clearable @change="ContractIdChange">
|
|
|
- <el-option v-for="item in projectInfo['contractInfoList'] || []" :key="item.id" :label="item.name" :value="item.id"/>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="w-32 ml-3">
|
|
|
- <n-select v-model:value="searchForm.batch" :options="reportBatch" placeholder="上报批次" clearable label-field="batch" value-field="batch"/>
|
|
|
- </div>
|
|
|
- <div class="w-96 ml-3">
|
|
|
- <n-date-picker v-model:formatted-value="datePickerValue" value-format="yyyy-MM-dd" type="daterange" clearable @update:formatted-value="updateFormattedValue"/>
|
|
|
- </div>
|
|
|
- <div class="w-60 ml-3">
|
|
|
- <n-input v-model:value="searchForm.queryValue" type="text" placeholder="请输入关键词" clearable />
|
|
|
- </div>
|
|
|
- <n-button type="primary" class="px-5 ml-3" @click="searchClick">搜索</n-button>
|
|
|
- </div>
|
|
|
- <div class="p-6 pt-0">
|
|
|
- <n-data-table :columns="tableColumns" :data="tableData" :row-key="row => row.id" :pagination="false" :single-line="false" striped @update:checked-row-keys="tableHandleCheck"/>
|
|
|
- </div>
|
|
|
- <template #action>
|
|
|
- <div class="flex items-center">
|
|
|
- <div class="flex-1">
|
|
|
- <span>审批人员中:未签字(黑色)</span>,
|
|
|
- <span class="text-green">已签字(绿色)</span>,
|
|
|
- <span class="text-orange">已废除(黄色)</span>,
|
|
|
- <span class="text-red">签字异常(红色)</span>
|
|
|
+ <div class="w-32 ml-3">
|
|
|
+ <el-select v-model="searchForm.taskStatus" block clearable size="large" placeholder="任务状态">
|
|
|
+ <el-option v-for="item in tasksStatus" :label="item.dictValue" :value="item.dictKey"/>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
- <HcPage :pages="searchForm" @change="pageChange"/>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </n-card>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!--任务审核-->
|
|
|
- <n-modal v-model:show="showTaskReviewModal">
|
|
|
- <n-card class="task-review-modal-card" :segmented="{content: true}">
|
|
|
- <template #header>
|
|
|
- <div class="hc-card-header flex items-center">
|
|
|
- <div class="font-bold mr-5">任务审核 【已开启电签】</div>
|
|
|
- <div class="font-bold text-main" v-if="taskReviewType==='1'">任务名称:{{taskReviewInfo.taskName}}</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div class="hc-card-body-flex">
|
|
|
- <div class="flex-iframe">
|
|
|
- <iframe width='100%' height='100%' frameborder='1' :src="batchPdfUrl"/>
|
|
|
- </div>
|
|
|
- <div class="flex-table" :class="activeKey === 'key1'?'':'vh'">
|
|
|
- <div class="data-table" v-if="taskReviewType==='1'">
|
|
|
- <n-data-table :columns="taskReviewColumns" :data="taskReviewData" :row-key="row => row.fileName" :bordered="false" :single-line="false" :row-props="rowProps"/>
|
|
|
+ <div class="w-32 ml-3">
|
|
|
+ <el-select v-model="searchForm.contractId" placeholder="合同段" block clearable size="large" @change="ContractIdChange">
|
|
|
+ <el-option v-for="item in contractList" :label="item.name" :value="item.id"/>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="w-32 ml-3">
|
|
|
+ <el-select v-model="searchForm.batch" block clearable size="large" placeholder="上报批次">
|
|
|
+ <el-option v-for="item in reportBatch" :label="item.batch" :value="item.batch"/>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="w-64 ml-3">
|
|
|
+ <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
|
|
|
+ </div>
|
|
|
+ <div class="w-56 ml-3">
|
|
|
+ <el-input v-model="searchForm.queryValue" block size="large" placeholder="请输入名称关键词检索" clearable @keyup="keyUpEvent"/>
|
|
|
+ </div>
|
|
|
+ <div class="ml-2">
|
|
|
+ <el-button type="primary" size="large" @click="searchClick">搜索</el-button>
|
|
|
</div>
|
|
|
- <div class="data-table" v-if="taskReviewType==='2'">
|
|
|
- <n-data-table :columns="checkedRowsColumns" :data="checkedRowsRef" :row-key="row => row.parallelProcessInstanceId" :bordered="false" :single-line="false" :row-props="rowProps"/>
|
|
|
+ </template>
|
|
|
+ <template #extra>
|
|
|
+ <HcTooltip keys="tasks_data_set_sign_rules">
|
|
|
+ <el-button hc-btn @click="setSignRulesClick">
|
|
|
+ <HcIcon name="device_hub"/>
|
|
|
+ <span>设置重签规则</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="tasks_data_batch_review" v-if="sbTableKey === 'key1'">
|
|
|
+ <el-button hc-btn type="primary" :disabled="tableCheckedKeys.length <= 0" @click="batchApprovalTaskClick">
|
|
|
+ <HcIcon name="device_hub"/>
|
|
|
+ <span>批量审批</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ </template>
|
|
|
+ <el-scrollbar>
|
|
|
+ <div class="hc-table-ref-box">
|
|
|
+ <el-table ref="tableListRef" hc :data="tableListData" :loading="tableLoading" row-key="id" stripe @selection-change="tableSelectionChange">
|
|
|
+ <el-table-column type="selection" width="50" />
|
|
|
+ <el-table-column prop="num" label="序号" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ {{scope.$index + 1}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="taskName" label="任务名称">
|
|
|
+ <template #default="scope">
|
|
|
+ <span class="text-link" @click="rowTaskName(scope.row)">{{scope.row?.taskName}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="typeValue" label="任务类型" width="120"/>
|
|
|
+ <el-table-column prop="taskStatus" label="任务状态" width="160">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ setStatusTag(scope.row?.taskStatus) }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="startTime" label="开始时间" width="180"/>
|
|
|
+ <el-table-column prop="endTime" label="限定时间" width="180"/>
|
|
|
+ <el-table-column prop="taskContent" label="任务描述"/>
|
|
|
+ <el-table-column prop="reportUserName" label="上报人" width="120"/>
|
|
|
+ <el-table-column prop="waitingUserList" label="签字人员">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ setUserTag(scope.row?.waitingUserList) }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
</div>
|
|
|
- <div class="action-foot-box" v-if="activeKey === 'key1'">
|
|
|
- <div class="radio-group-box">
|
|
|
- <span class="label">审批操作:</span>
|
|
|
- <n-radio-group v-model:value="taskReviewForm.flag" name="radiogroup">
|
|
|
- <n-space>
|
|
|
- <n-radio value="OK">同意</n-radio>
|
|
|
- <n-radio value="NO">废除任务</n-radio>
|
|
|
- </n-space>
|
|
|
- </n-radio-group>
|
|
|
+ </el-scrollbar>
|
|
|
+ <template #action>
|
|
|
+ <div class="lr-dialog-footer">
|
|
|
+ <div class="left">
|
|
|
+ <span class="text-success">审批人员中:</span>
|
|
|
+ <el-tag type="info" class="mx-1" effect="dark">未签字</el-tag>
|
|
|
+ <el-tag type="success" class="mx-1" effect="dark">已签字</el-tag>
|
|
|
+ <el-tag type="warning" class="mx-1" effect="dark">已废除</el-tag>
|
|
|
+ <el-tag type="danger" class="mx-1" effect="dark">签字异常</el-tag>
|
|
|
</div>
|
|
|
- <n-divider/>
|
|
|
- <n-input v-model:value="taskReviewForm.comment" placeholder="请输入审核意见" type="textarea" :autosize="{minRows: 3,maxRows: 5}"/>
|
|
|
- <div class="action-btn-box">
|
|
|
- <n-button class="px-5" @click="showTaskReviewModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-4" :loading="SMSAuthLoading" @click="ConfirmApprovalClick">确认审批</n-button>
|
|
|
+ <div class="right">
|
|
|
+ <HcPages :pages="searchForm" @change="pageChange"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
-
|
|
|
- <!--设置重签规则-->
|
|
|
- <n-modal v-model:show="showSetSignRulesModal">
|
|
|
- <n-card class="w-606" title="设置重签规则" :segmented="{content: true}">
|
|
|
+ </template>
|
|
|
+ </HcCard>
|
|
|
+ </div>
|
|
|
+ <!--任务审核-->
|
|
|
+ <!--设置重签规则-->
|
|
|
+ <el-dialog v-model="showSetSignRulesModal" title="设置重签规则" width="38rem" custom-class="hc-modal-border">
|
|
|
<div class="text-orange mb-10">
|
|
|
<span class="mr-4">提示:设置默认时长,在任务被废除需要重签的时候,规定的重签上报时间提示时间段内,系统提示用户重签信息,但是超过处理时间,系统可默认自动授权重签</span>
|
|
|
- <n-checkbox v-model:checked="setPactVal">
|
|
|
+ <el-checkbox v-model="setPactVal" label="Option 1" size="large">
|
|
|
<span class="text-main">《授权系统自动电签协议》</span>
|
|
|
- </n-checkbox>
|
|
|
+ </el-checkbox>
|
|
|
</div>
|
|
|
<div class="obj-item-cell">
|
|
|
<div class="label">默认处理时间(时)</div>
|
|
|
- <HcCounter v-model:value="formReport.date"></HcCounter>
|
|
|
+ <HcCounter v-model:value="formReport.date" @update:modelValue="dateUpdateValue"/>
|
|
|
</div>
|
|
|
<div class="obj-item-cell">
|
|
|
<div class="label">开启系统自动电签</div>
|
|
|
- <n-switch v-model:value="formReport.active" />
|
|
|
+ <el-switch v-model="formReport.active" />
|
|
|
</div>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showSetSignRulesModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-4">保存</n-button>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="large" @click="showSetSignRulesModal = false">取消</el-button>
|
|
|
+ <el-button type="primary" hc-btn>保存</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
-
|
|
|
- <!--短信认证-->
|
|
|
- <SMSAuth :show="SMSAuthShow" :loading="SMSAuthLoading" @cancel="SMSAuthCancel" @confirm="SMSAuthConfirm"/>
|
|
|
-
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import {h, ref, watch, onMounted} from "vue";
|
|
|
-import {useRoute} from "vue-router";
|
|
|
-import {useAppStore} from "~src/store/index";
|
|
|
-import router from '~src/router/index';
|
|
|
-import HcPage from "~com/plugins/naive/HcPage.vue"
|
|
|
-import HcCounter from "~com/counter/index.vue"
|
|
|
-import SMSAuth from "~com/modal/SMSAuth.vue"
|
|
|
-import tasksDataApi from '~api/tasks/data';
|
|
|
-import {isString} from "~src/utils/lib/isApp";
|
|
|
-import moment from 'moment';
|
|
|
-
|
|
|
-//处理路由参数
|
|
|
+import {h, ref, onMounted} from "vue";
|
|
|
+import {useAppStore} from "~src/store";
|
|
|
+import tasksApi from '~api/tasks/data';
|
|
|
+import {useRouter, useRoute} from 'vue-router'
|
|
|
+import HcSbTable from "~com/hc-sb-table/index.vue";
|
|
|
+import {isType, formValidate, deepClone} from "vue-utils-plus"
|
|
|
+import {ElTag} from 'element-plus'
|
|
|
+
|
|
|
+//初始变量
|
|
|
+const router = useRouter()
|
|
|
const useRoutes = useRoute()
|
|
|
const useAppState = useAppStore()
|
|
|
-const routerQuery = useRoutes?.query
|
|
|
-const MenuBarKey = routerQuery?.MenuBarKey || ''
|
|
|
-let activeVal = routerQuery?.active || 'key1'
|
|
|
+const { isObjNull, getObjValue, getArrValue } = isType()
|
|
|
+
|
|
|
+//路由参数
|
|
|
+const routerQuery = useRoutes?.query;
|
|
|
+const activeName = routerQuery?.active || 'key1'
|
|
|
|
|
|
+//全局变量
|
|
|
const projectId = ref(useAppState.getProjectId);
|
|
|
const contractId = ref(useAppState.getContractId);
|
|
|
const projectInfo = ref(useAppState.getProjectInfo);
|
|
|
|
|
|
-//按钮气泡开关
|
|
|
-const bubbleVal = ref(useAppState.getBubble);
|
|
|
-
|
|
|
-//监听
|
|
|
-watch(() => [
|
|
|
- useAppState.getProjectId,
|
|
|
- useAppState.getContractId,
|
|
|
- useAppState.getProjectInfo,
|
|
|
- useAppState.getBubble,
|
|
|
-], ([UserProjectId,UserContractId,UserProjectInfo,Bubble]) => {
|
|
|
- projectId.value = UserProjectId
|
|
|
- contractId.value = UserContractId
|
|
|
- projectInfo.value = UserProjectInfo
|
|
|
- //按钮气泡开关
|
|
|
- bubbleVal.value = Bubble
|
|
|
-})
|
|
|
-
|
|
|
-//获取气泡数据
|
|
|
-const getButtonsVal = (value) => {
|
|
|
- return useAppState.getButtonsVal(value)
|
|
|
-}
|
|
|
-
|
|
|
-//气泡数据
|
|
|
-const btn_batch_review = ref(getButtonsVal('tasks_data_batch_review'))
|
|
|
-const btn_set_sign_rules = ref(getButtonsVal('tasks_data_set_sign_rules'))
|
|
|
-
|
|
|
-//菜单类别
|
|
|
-const activeKey = ref(activeVal)
|
|
|
-
|
|
|
-//类别被切换
|
|
|
-const activeClick = (val) => {
|
|
|
- activeKey.value = val
|
|
|
- router.push({
|
|
|
- path: useRoutes.path,
|
|
|
- query: {
|
|
|
- MenuBarKey: MenuBarKey,
|
|
|
- active: val,
|
|
|
- }
|
|
|
- })
|
|
|
- searchForm.value.current = 1
|
|
|
- getListTableData()
|
|
|
- checkSmsCode()
|
|
|
-}
|
|
|
-
|
|
|
-const tasksType = ref([]) //任务类型
|
|
|
-const tasksStatus = ref([]) //任务状态
|
|
|
-const reportBatch = ref([]) //上报批次
|
|
|
-
|
|
|
-//搜索表单
|
|
|
-const datePickerValue = ref(null)
|
|
|
-const searchForm = ref({
|
|
|
- projectId: projectId.value, contractId: null,
|
|
|
- queryValue: null, taskType: null, taskStatus: null, batch: null, startTime: null, endTime: null,
|
|
|
- current: 1, size: 20, total: 0
|
|
|
-})
|
|
|
-
|
|
|
-//日期选择处理
|
|
|
-const updateFormattedValue = (val) => {
|
|
|
- datePickerValue.value = val
|
|
|
- if (val && val.length > 0) {
|
|
|
- searchForm.value.startTime = val[0]
|
|
|
- searchForm.value.endTime = val[1]
|
|
|
- } else {
|
|
|
- searchForm.value.startTime = null
|
|
|
- searchForm.value.endTime = null
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
//渲染完成
|
|
|
onMounted(() => {
|
|
|
+ const project = getObjValue(projectInfo.value)
|
|
|
+ contractList.value = getArrValue(project['contractInfoList'])
|
|
|
//获取下拉数据
|
|
|
queryTaskType()
|
|
|
queryTaskStatus()
|
|
|
- queryBatchList()
|
|
|
- //获取列表数据
|
|
|
- getListTableData()
|
|
|
- checkSmsCode()
|
|
|
+ searchClick()
|
|
|
})
|
|
|
|
|
|
+//类型处理
|
|
|
+const sbTableKey = ref(activeName)
|
|
|
+const sbTableData = ref([
|
|
|
+ {icon: 'schedule', label: '待办任务', key: 'key1'},
|
|
|
+ {icon: 'check_circle', label: '已办任务', key: 'key2'},
|
|
|
+ {icon: 'person', label: '我发起的', key: 'key3'},
|
|
|
+])
|
|
|
+const sbTableClick = (key) => {
|
|
|
+ sbTableKey.value = key
|
|
|
+ router.push({
|
|
|
+ path: useRoutes.path,
|
|
|
+ query: {active: key}
|
|
|
+ })
|
|
|
+ searchClick()
|
|
|
+}
|
|
|
+
|
|
|
//获取任务类型
|
|
|
-const queryTaskType = () => {
|
|
|
- tasksDataApi.queryTaskTypeStatus({
|
|
|
+const tasksType = ref([])
|
|
|
+const queryTaskType = async () => {
|
|
|
+ const { error, code, data } = await tasksApi.queryTaskTypeStatus({
|
|
|
typeOrStatus: 'task_type'
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- tasksType.value = data['data']
|
|
|
- } else {
|
|
|
- tasksType.value = []
|
|
|
- }
|
|
|
})
|
|
|
+ if (!error && code === 200) {
|
|
|
+ tasksType.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ tasksType.value = []
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//获取任务状态
|
|
|
-const queryTaskStatus = () => {
|
|
|
- tasksDataApi.queryTaskTypeStatus({
|
|
|
+const tasksStatus = ref([])
|
|
|
+const queryTaskStatus = async () => {
|
|
|
+ const { error, code, data } = await tasksApi.queryTaskTypeStatus({
|
|
|
typeOrStatus: 'task_status'
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- tasksStatus.value = data['data']
|
|
|
- } else {
|
|
|
- tasksStatus.value = []
|
|
|
- }
|
|
|
})
|
|
|
+ if (!error && code === 200) {
|
|
|
+ tasksStatus.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ tasksStatus.value = []
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-//合同段值改变
|
|
|
+//合同段
|
|
|
+const contractList = ref([])
|
|
|
const ContractIdChange = () => {
|
|
|
queryBatchList()
|
|
|
}
|
|
|
|
|
|
//获取上报批次
|
|
|
-const queryBatchList = () => {
|
|
|
+const reportBatch = ref([])
|
|
|
+const queryBatchList = async () => {
|
|
|
const {contractId} = searchForm.value
|
|
|
- tasksDataApi.queryBatchList({
|
|
|
+ const { error, code, data } = await tasksApi.queryBatchList({
|
|
|
projectId: projectId.value,
|
|
|
contractId: contractId || ''
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- reportBatch.value = data['data']
|
|
|
- } else {
|
|
|
- reportBatch.value = []
|
|
|
- }
|
|
|
})
|
|
|
+ if (!error && code === 200) {
|
|
|
+ reportBatch.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ reportBatch.value = []
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-//搜索
|
|
|
-const searchClick = () => {
|
|
|
- searchForm.value.current = 1
|
|
|
- getListTableData()
|
|
|
-}
|
|
|
|
|
|
-//分页被点击
|
|
|
-const pageChange = (res) => {
|
|
|
- searchForm.value.current = res.current;
|
|
|
- searchForm.value.size = res.size;
|
|
|
- getListTableData()
|
|
|
+//搜索表单
|
|
|
+const searchForm = ref({
|
|
|
+ queryValue: null, taskType: null, taskStatus: null, batch: null, startTime: null, endTime: null,
|
|
|
+ current: 1, size: 20, total: 0
|
|
|
+})
|
|
|
+
|
|
|
+//日期时间被选择
|
|
|
+const betweenTime = ref(null)
|
|
|
+const betweenTimeUpdate = ({val,arr}) => {
|
|
|
+ betweenTime.value = arr
|
|
|
+ searchForm.value.startTime = val['start']
|
|
|
+ searchForm.value.endTime = val['end']
|
|
|
}
|
|
|
|
|
|
-//获取列表数据
|
|
|
-const getListTableData = () => {
|
|
|
- searchForm.value.projectId = projectId.value
|
|
|
- if(activeKey.value === 'key1') {
|
|
|
+//回车搜索
|
|
|
+const keyUpEvent = (e) => {
|
|
|
+ if (e.key === "Enter") {
|
|
|
+ searchForm.value.current = 1;
|
|
|
getTableData()
|
|
|
- } else if(activeKey.value === 'key2') {
|
|
|
- queryUserDoneTaskList()
|
|
|
- } else if (activeKey.value === 'key3') {
|
|
|
- queryUserStartFlow()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//设置用户标签
|
|
|
-const setUserSpan = (UserList) => {
|
|
|
- let domArr = [];
|
|
|
- for (let i = 0; i < UserList.length; i++) {
|
|
|
- let item = UserList[i];
|
|
|
- if (item['waitingUserName']) {
|
|
|
- domArr.push(
|
|
|
- h('span', {
|
|
|
- class: `${item.status === 2?'text-green':item.status === 3?'text-orange':item.status === 999?'text-red':''}`
|
|
|
- }, item['waitingUserName'])
|
|
|
- )
|
|
|
- if (i < (UserList.length -1)) {
|
|
|
- domArr.push(h('span', {}, '、'))
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return domArr
|
|
|
+//搜索
|
|
|
+const searchClick = () => {
|
|
|
+ searchForm.value.current = 1;
|
|
|
+ getTableData()
|
|
|
}
|
|
|
|
|
|
-//表格表头
|
|
|
-const tableColumns = [
|
|
|
- {type: 'selection'},
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '任务名称', key: 'taskName',
|
|
|
- render(row) {
|
|
|
- return h('div', {
|
|
|
- class:'text-link',
|
|
|
- onClick: () => queryApprovalParameter(row)
|
|
|
- }, row.taskName)
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '任务类型', key: 'typeValue', width: 120},
|
|
|
- {title: '任务状态', key: 'taskStatus', width: 160,
|
|
|
- render(row) {
|
|
|
- const item = row['taskStatus'];
|
|
|
- return h('div', {
|
|
|
- class: `${item['status'] === 2?'text-green':item['status'] === 3?'text-orange':''}`
|
|
|
- }, {
|
|
|
- default: () => item['statusValue']
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '开始时间', key: 'startTime', width: 180},
|
|
|
- {title: '限定时间', key: 'endTime', width: 180},
|
|
|
- {title: '任务描述', key: 'taskContent'},
|
|
|
- {title: '上报人', key: 'reportUserName', width: 120},
|
|
|
- {title: '签字人员', key: 'waitingUserList',
|
|
|
- render(row) {
|
|
|
- if (row['waitingUserList'].length > 0) {
|
|
|
- return h('div', {}, {
|
|
|
- default: () => setUserSpan(row['waitingUserList'])
|
|
|
- })
|
|
|
- } else {
|
|
|
- return ''
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-]
|
|
|
-//表格数据
|
|
|
-const tableData = ref([]);
|
|
|
+//分页被点击
|
|
|
+const pageChange = ({current, size}) => {
|
|
|
+ searchForm.value.current = current
|
|
|
+ searchForm.value.size = size
|
|
|
+ getTableData()
|
|
|
+}
|
|
|
|
|
|
//获取数据
|
|
|
+const tableLoading = ref(false)
|
|
|
+const tableListData = ref([])
|
|
|
const getTableData = () => {
|
|
|
- tasksDataApi.queryUserToDoTaskList(searchForm.value).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- let res = data['data'] || {}
|
|
|
- tableData.value = res['records'] || []
|
|
|
- searchForm.value.total = res.total || 0
|
|
|
- } else {
|
|
|
- tableData.value = []
|
|
|
- searchForm.value.total = 0
|
|
|
- }
|
|
|
- })
|
|
|
+ const key = sbTableKey.value
|
|
|
+ tableListRef.value?.clearSelection()
|
|
|
+ tableCheckedKeys.value = []
|
|
|
+ if(key === 'key1') {
|
|
|
+ queryUserToDoTaskList()
|
|
|
+ } else if(key === 'key2') {
|
|
|
+ queryUserDoneTaskList()
|
|
|
+ } else if (key === 'key3') {
|
|
|
+ queryUserStartFlow()
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-//审批页详情
|
|
|
-const taskReviewType = ref('1')
|
|
|
-const taskReviewInfo = ref({})
|
|
|
-const queryApprovalParameter = (row) => {
|
|
|
- let pid = row['parallelProcessInstanceId'] || ''
|
|
|
- showTaskReviewModal.value = true
|
|
|
- taskReviewType.value = '1'
|
|
|
- if (row.formDataId) {
|
|
|
- taskReviewInfo.value = row
|
|
|
- tasksDataApi.queryApprovalParameter({
|
|
|
- parallelProcessInstanceId: pid,
|
|
|
- formDataId: row.formDataId,
|
|
|
- approvalType: row.approvalType,
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- const approvalFileList = data['data']['approvalFileList'] || []
|
|
|
- taskReviewData.value = approvalFileList
|
|
|
- if (approvalFileList.length > 0) {
|
|
|
- batchPdfUrl.value = approvalFileList[0].fileUrl
|
|
|
- }
|
|
|
- } else {
|
|
|
- taskReviewData.value = []
|
|
|
- }
|
|
|
- })
|
|
|
+//待办任务列表
|
|
|
+const queryUserToDoTaskList = async () => {
|
|
|
+ tableLoading.value = true
|
|
|
+ const { error, code, data } = await tasksApi.queryUserToDoTaskList({
|
|
|
+ ...searchForm.value,
|
|
|
+ projectId: projectId.value
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ tableLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ tableListData.value = getArrValue(data['records'])
|
|
|
+ searchForm.value.total = data.total || 0
|
|
|
} else {
|
|
|
- taskReviewInfo.value = {}
|
|
|
- window?.$message?.warning('此数据异常')
|
|
|
+ tableListData.value = []
|
|
|
+ searchForm.value.total = 0
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
//获取已办任务
|
|
|
-const queryUserDoneTaskList = () => {
|
|
|
- tasksDataApi.queryUserDoneTaskList(searchForm.value).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- let res = data['data'] || {}
|
|
|
- tableData.value = res['records'] || []
|
|
|
- searchForm.value.total = res.total || 0
|
|
|
- } else {
|
|
|
- tableData.value = []
|
|
|
- searchForm.value.total = 0
|
|
|
- }
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-//获取发起
|
|
|
-const queryUserStartFlow = () => {
|
|
|
- tasksDataApi.queryUserStartFlow(searchForm.value).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- let res = data['data'] || {}
|
|
|
- tableData.value = res['records'] || []
|
|
|
- searchForm.value.total = res.total || 0
|
|
|
- } else {
|
|
|
- tableData.value = []
|
|
|
- searchForm.value.total = 0
|
|
|
- }
|
|
|
+const queryUserDoneTaskList = async () => {
|
|
|
+ tableLoading.value = true
|
|
|
+ const { error, code, data } = await tasksApi.queryUserDoneTaskList({
|
|
|
+ ...searchForm.value,
|
|
|
+ projectId: projectId.value
|
|
|
})
|
|
|
-}
|
|
|
-
|
|
|
-//表格勾选
|
|
|
-const checkedRowsRef = ref([])
|
|
|
-const tableHandleCheck = (_,rows) => {
|
|
|
- checkedRowsRef.value = rows
|
|
|
-}
|
|
|
-
|
|
|
-//批量审批
|
|
|
-const batchCompleteApprovalTaskClick = () => {
|
|
|
- const rows = checkedRowsRef.value
|
|
|
- if (rows.length > 0) {
|
|
|
- taskReviewType.value = '2'
|
|
|
- showTaskReviewModal.value = true
|
|
|
- queryTaskInfo(rows[0])
|
|
|
+ //处理数据
|
|
|
+ tableLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ tableListData.value = getArrValue(data['records'])
|
|
|
+ searchForm.value.total = data.total || 0
|
|
|
} else {
|
|
|
- window?.$message?.warning('请先勾选需要审批的数据')
|
|
|
+ tableListData.value = []
|
|
|
+ searchForm.value.total = 0
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-//PDF预览地址
|
|
|
-const batchPdfUrl = ref('')
|
|
|
-//任务审核
|
|
|
-const showTaskReviewModal = ref(false)
|
|
|
-const taskReviewColumns = [
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '文件名称', key: 'fileName'}
|
|
|
-]
|
|
|
-const taskReviewData = ref([])
|
|
|
-
|
|
|
-//批量列表
|
|
|
-const checkedRowsColumns = [
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '任务名称', key: 'taskName'}
|
|
|
-]
|
|
|
-
|
|
|
-const taskReviewForm = ref({flag: 'OK', comment: ''})
|
|
|
-
|
|
|
-//行被点击
|
|
|
-const rowProps = (row) => {
|
|
|
- const type = taskReviewType.value
|
|
|
- return {
|
|
|
- onClick: () => {
|
|
|
- if (type === '1') {
|
|
|
- batchPdfUrl.value = row.fileUrl
|
|
|
- } else {
|
|
|
- queryTaskInfo(row)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//批量审批获取PDF地址
|
|
|
-const queryTaskInfo = (row) => {
|
|
|
- if (row['hc_batchPdfUrl']) {
|
|
|
- batchPdfUrl.value = row['hc_batchPdfUrl']
|
|
|
+//获取我发起的
|
|
|
+const queryUserStartFlow = async () => {
|
|
|
+ tableLoading.value = true
|
|
|
+ const { error, code, data } = await tasksApi.queryUserStartFlow({
|
|
|
+ ...searchForm.value,
|
|
|
+ projectId: projectId.value
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ tableLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ tableListData.value = getArrValue(data['records'])
|
|
|
+ searchForm.value.total = data.total || 0
|
|
|
} else {
|
|
|
- tasksDataApi.queryTaskInfo({
|
|
|
- formDataId: row['formDataId'] || '',
|
|
|
- approvalType: row['approvalType']
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- const approvalFileList = data['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 {
|
|
|
- window?.$message?.warning(data.msg || 'PDF异常')
|
|
|
- }
|
|
|
- })
|
|
|
+ tableListData.value = []
|
|
|
+ searchForm.value.total = 0
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//短信验证有效期
|
|
|
-const smsCodeTime = ref('')
|
|
|
-const checkSmsCode = () => {
|
|
|
- tasksDataApi.checkSmsCode().then(({data}) => {
|
|
|
- smsCodeTime.value = data.code===200?isString(data?.data)?data?.data:'':'';
|
|
|
- }).catch(() => {
|
|
|
- smsCodeTime.value = '';
|
|
|
+//多选
|
|
|
+const tableListRef = ref(null)
|
|
|
+const tableCheckedKeys = ref([]);
|
|
|
+const tableSelectionChange = (rows) => {
|
|
|
+ tableCheckedKeys.value = rows.filter((item) => {
|
|
|
+ return (item??'') !== '';
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+//设置状态标签
|
|
|
+const setStatusTag = (taskStatus) => {
|
|
|
+ const item = getObjValue(taskStatus)
|
|
|
+ return h(ElTag, {
|
|
|
+ type: `${item['status'] === 2 ? 'success' : item['status'] === 3 ? 'warning' : 'info'}`,
|
|
|
+ effect: "dark",
|
|
|
+ class: "mx-1"
|
|
|
+ }, {
|
|
|
+ default: () => item['statusValue']
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
-//验证短信有效期
|
|
|
-const isCheckSmsCodeTime = () => {
|
|
|
- const smsTime = smsCodeTime.value;
|
|
|
- if (!smsTime) {
|
|
|
- return true
|
|
|
+//设置用户标签
|
|
|
+const setUserTag = (UserList) => {
|
|
|
+ const list = getArrValue(UserList)
|
|
|
+ if (list.length > 0) {
|
|
|
+ return h('div', {}, {
|
|
|
+ default: () => setUserTags(list)
|
|
|
+ })
|
|
|
} else {
|
|
|
- const toDayTime = moment().format("YYYY-MM-DD HH:mm:ss");
|
|
|
- return moment(smsTime).isBefore(toDayTime)
|
|
|
+ return ''
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-//确认审批
|
|
|
-const SMSAuthShow = ref(false)
|
|
|
-const SMSAuthLoading = ref(false)
|
|
|
-const ConfirmApprovalClick = () => {
|
|
|
- const formData = taskReviewForm.value
|
|
|
- if (formData.flag === 'NO' && !formData.comment) {
|
|
|
- window?.$message?.warning('请先输入审核意见')
|
|
|
- } else {
|
|
|
- const ShowAuth = isCheckSmsCodeTime()
|
|
|
- SMSAuthShow.value = ShowAuth
|
|
|
- //免短信验证
|
|
|
- if (!ShowAuth) {
|
|
|
- const type = taskReviewType.value
|
|
|
- if (type === '1') {
|
|
|
- saveCompleteApprovalTask()
|
|
|
- } else {
|
|
|
- batchCompleteApprovalTask()
|
|
|
- }
|
|
|
- checkSmsCode()
|
|
|
+const setUserTags = (list) => {
|
|
|
+ let tagArr = [];
|
|
|
+ for (let i = 0; i < list.length; i++) {
|
|
|
+ let item = getObjValue(list[i]);
|
|
|
+ if (item['waitingUserName']) {
|
|
|
+ tagArr.push(
|
|
|
+ h(ElTag, {
|
|
|
+ type: `${item.status === 2 ? 'success' : item.status === 3 ? 'warning' : item.status === 999 ? 'danger' : 'info'}`,
|
|
|
+ effect: "dark",
|
|
|
+ class: "mx-1"
|
|
|
+ }, {
|
|
|
+ default: () => item['waitingUserName']
|
|
|
+ })
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
+ return tagArr
|
|
|
}
|
|
|
|
|
|
-//短信验证取消
|
|
|
-const SMSAuthCancel = () => {
|
|
|
- SMSAuthShow.value = false
|
|
|
-}
|
|
|
-
|
|
|
-//短信验证确认
|
|
|
-const SMSAuthConfirm = () => {
|
|
|
- const type = taskReviewType.value
|
|
|
- if (type === '1') {
|
|
|
- saveCompleteApprovalTask()
|
|
|
- } else {
|
|
|
- batchCompleteApprovalTask()
|
|
|
- }
|
|
|
- checkSmsCode()
|
|
|
-}
|
|
|
+//任务审核
|
|
|
+const rowTaskName = () => {
|
|
|
|
|
|
-//单个审批
|
|
|
-const saveCompleteApprovalTask = () => {
|
|
|
- const formData = taskReviewForm.value
|
|
|
- const DataInfo = taskReviewInfo.value
|
|
|
- let pid = 'parallelProcessInstanceId';
|
|
|
- //提交请求
|
|
|
- SMSAuthLoading.value = true
|
|
|
- tasksDataApi.saveCompleteApprovalTask({
|
|
|
- ...formData,
|
|
|
- taskId: DataInfo['taskId'] || '',
|
|
|
- parallelProcessInstanceId: DataInfo[pid] || '',
|
|
|
- formDataId: DataInfo['formDataId'] || '',
|
|
|
- approvalType: DataInfo['approvalType']
|
|
|
- }).then(({data}) => {
|
|
|
- SMSAuthLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- SMSAuthShow.value = false
|
|
|
- showTaskReviewModal.value = false
|
|
|
- window?.$message?.success('审批成功')
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.warning(data.msg || '审批异常')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- SMSAuthLoading.value = false
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
-//批量审批
|
|
|
-const batchCompleteApprovalTask = () => {
|
|
|
- const rows = checkedRowsRef.value
|
|
|
- SMSAuthLoading.value = true
|
|
|
- let taskIds = '',parallelProcessInstanceIds = '';
|
|
|
- rows.forEach(item => {
|
|
|
- if (taskIds) {
|
|
|
- taskIds += `,${item['taskId']}`
|
|
|
- parallelProcessInstanceIds += `,${item['parallelProcessInstanceId']}`
|
|
|
- } else {
|
|
|
- taskIds = item['taskId']
|
|
|
- parallelProcessInstanceIds = item['parallelProcessInstanceId']
|
|
|
- }
|
|
|
- })
|
|
|
- //发起请求
|
|
|
- tasksDataApi.batchCompleteApprovalTask({
|
|
|
- taskIds,
|
|
|
- parallelProcessInstanceIds,
|
|
|
- ...taskReviewForm.value
|
|
|
- }).then(({data}) => {
|
|
|
- SMSAuthLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- SMSAuthShow.value = false
|
|
|
- showTaskReviewModal.value = false
|
|
|
- window?.$message?.success('审批成功')
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error(data.msg || '审批出错')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- SMSAuthLoading.value = false
|
|
|
- })
|
|
|
-}
|
|
|
|
|
|
//设置重签规则
|
|
|
const showSetSignRulesModal = ref(false)
|
|
|
const setPactVal = ref(true)
|
|
|
const formReport = ref({date: 1, active: true})
|
|
|
-</script>
|
|
|
-
|
|
|
-<style lang="scss" scoped>
|
|
|
-.hc-layout-box {
|
|
|
- position: relative;
|
|
|
- height: calc(100% - 59px);
|
|
|
- padding: 0 24px 24px;
|
|
|
+const setSignRulesClick = () => {
|
|
|
+ showSetSignRulesModal.value = true
|
|
|
}
|
|
|
-
|
|
|
-.hc-card-header {
|
|
|
- position: relative;
|
|
|
- font-size: initial;
|
|
|
- font-weight: initial;
|
|
|
+const dateUpdateValue = (val) => {
|
|
|
+ formReport.value.date = val
|
|
|
}
|
|
|
-.task-review-modal-card .hc-card-body-flex {
|
|
|
- position: relative;
|
|
|
- display: flex;
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- .flex-iframe {
|
|
|
- flex: 1;
|
|
|
- position: relative;
|
|
|
- height: 100%;
|
|
|
- border:1px solid #777;
|
|
|
- overflow: hidden;
|
|
|
- margin-right: 24px;
|
|
|
- }
|
|
|
- .flex-table {
|
|
|
- position: relative;
|
|
|
- width: 40%;
|
|
|
- height: 100%;
|
|
|
- .data-table {
|
|
|
- position: relative;
|
|
|
- height: calc(100vh - 360px);
|
|
|
- border: 1px solid #efeff5;
|
|
|
- border-radius: 3px;
|
|
|
- overflow: auto;
|
|
|
- }
|
|
|
- .action-foot-box {
|
|
|
- position: absolute;
|
|
|
- margin-top: 15px;
|
|
|
- width: 100%;
|
|
|
- bottom: 0;
|
|
|
- .radio-group-box .label {
|
|
|
- margin-right: 15px;
|
|
|
- }
|
|
|
- .action-btn-box {
|
|
|
- position: relative;
|
|
|
- text-align: center;
|
|
|
- padding-top: 15px;
|
|
|
- }
|
|
|
- }
|
|
|
- &.vh .data-table {
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.obj-item-cell {
|
|
|
- position: relative;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- margin-top: 24px;
|
|
|
- .label {
|
|
|
- margin-right: 20px;
|
|
|
- width: 126px;
|
|
|
- }
|
|
|
+//批量审批
|
|
|
+const batchApprovalTaskClick = () => {
|
|
|
+
|
|
|
}
|
|
|
+</script>
|
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import '../../styles/tasks/hc-data.scss';
|
|
|
</style>
|
|
|
|
|
|
<style lang="scss">
|
|
|
-.n-modal-container .n-modal-body-wrapper .n-scrollbar .n-scrollbar-container {
|
|
|
- overflow: initial;
|
|
|
- .n-modal-scroll-content {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
-}
|
|
|
-.task-review-modal-card {
|
|
|
- height: 95%;
|
|
|
- width: 95%;
|
|
|
- .n-card__content {
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
+.hc-layout-box .hc-content-box .hc-card-box.el-card {
|
|
|
+ border-radius: 0 var(--el-card-border-radius) var(--el-card-border-radius) var(--el-card-border-radius);
|
|
|
}
|
|
|
</style>
|