5.6页面样式bug更改
This commit is contained in:
parent
7b04cb0076
commit
0c3b314861
BIN
frontend/public/file/注册操作手册.docx
Normal file
BIN
frontend/public/file/注册操作手册.docx
Normal file
Binary file not shown.
BIN
frontend/public/file/过鱼设施数据填报操作手册.docx
Normal file
BIN
frontend/public/file/过鱼设施数据填报操作手册.docx
Normal file
Binary file not shown.
@ -34,3 +34,12 @@ export function batchApproveByApprovalId(data: any) {
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 批量驳回
|
||||
export function batchReject(data: { approvalIds: string[], rejectReason: string }) {
|
||||
return request({
|
||||
url: '/data/fishDraft/batchReject',
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
</a-form-item>
|
||||
|
||||
<!-- 密码 -->
|
||||
<a-form-item name="password" label="密 码" :dependencies="['username']">
|
||||
<a-form-item name="password" label="密 码" :dependencies="['username']">
|
||||
<a-input-password v-model:value="registerData.password"
|
||||
placeholder="请设置密码(6-20个字符)" />
|
||||
</a-form-item>
|
||||
@ -83,12 +83,18 @@
|
||||
<!-- 返回登录 -->
|
||||
<a-form-item style="display: flex;align-items: center;justify-content: center;width: 100%;">
|
||||
|
||||
<a-button type="link" size="small" block @click="backToLogin"
|
||||
style="margin-left: 20px;">
|
||||
<a-button type="link" size="small" block @click="backToLogin">
|
||||
已有账号?返回登录
|
||||
</a-button>
|
||||
|
||||
|
||||
<a-button type="link" size="small" block >
|
||||
|
|
||||
</a-button>
|
||||
<div></div>
|
||||
<a href="/file/注册操作手册.docx" download="注册用户操作手册.docx">
|
||||
<a-button type="link" size="small" block >
|
||||
注册用户操作手册
|
||||
</a-button>
|
||||
</a>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-tab-pane>
|
||||
@ -96,7 +102,7 @@
|
||||
|
||||
<!-- 注册确认弹框 -->
|
||||
<a-modal v-model:open="modalVisible" title="选择所属组织" width="600px" :confirm-loading="loading"
|
||||
@ok="onRegister" @cancel="handleModalCancel" :maskClosable="false">
|
||||
@ok="onRegister" @cancel="handleModalCancel" :maskClosable="false">
|
||||
<a-form :model="organizationData" :rules="organizationRules" layout="horizontal"
|
||||
ref="organizationFormRef" :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }">
|
||||
|
||||
@ -445,10 +451,10 @@ const handleSendSms = async () => {
|
||||
}
|
||||
|
||||
try {
|
||||
const res:any = await sendSmsCode(registerData.phone, 1); // type=1 表示注册
|
||||
if (res.code == 1) {
|
||||
return;
|
||||
}
|
||||
const res: any = await sendSmsCode(registerData.phone, 1); // type=1 表示注册
|
||||
if (res.code == 1) {
|
||||
return;
|
||||
}
|
||||
message.success("验证码已发送");
|
||||
|
||||
// 启动60秒倒计时
|
||||
@ -838,4 +844,5 @@ const filterOption = (inputValue: string, option: any) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
}</style>
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -87,16 +87,16 @@ const searchList: any = computed(() => [
|
||||
allowClear: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
width: 120,
|
||||
type: "Select",
|
||||
name: "status",
|
||||
label: "数据状态",
|
||||
fieldProps: {
|
||||
// allowClear: true,
|
||||
},
|
||||
options: props.guoyuStatus,
|
||||
},
|
||||
// {
|
||||
// width: 120,
|
||||
// type: "Select",
|
||||
// name: "status",
|
||||
// label: "数据状态",
|
||||
// fieldProps: {
|
||||
// // allowClear: true,
|
||||
// },
|
||||
// options: props.guoyuStatus,
|
||||
// },
|
||||
{
|
||||
span: 12,
|
||||
type: "RangePicker",
|
||||
|
||||
@ -349,13 +349,13 @@ const handleSearchFinish = (values: any) => {
|
||||
field: "strdt",
|
||||
operator: "gte",
|
||||
dataType: "date",
|
||||
value: values.strdt[0],
|
||||
value: values.strdt[0] + ' 00:00:00',
|
||||
},
|
||||
{
|
||||
field: "strdt",
|
||||
operator: "lte",
|
||||
dataType: "date",
|
||||
value: values.strdt[1],
|
||||
value: values.strdt[1] + ' 23:59:59',
|
||||
},
|
||||
values.direction && {
|
||||
field: "direction",
|
||||
@ -363,11 +363,11 @@ const handleSearchFinish = (values: any) => {
|
||||
dataType: "string",
|
||||
value: values.direction,
|
||||
},
|
||||
values.status && {
|
||||
{
|
||||
field: "status",
|
||||
operator: "eq",
|
||||
dataType: "string",
|
||||
value: values.status,
|
||||
value: 'APPROVED',
|
||||
},
|
||||
values.stcd && {
|
||||
field: "stcd",
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="guoYuSheShiShuJuTianBao-search">
|
||||
<BasicSearch ref="basicSearchRef" :searchList="searchList" :initial-values="initSearchData" :zhujianfujian="'fu'" @reset="handleReset"
|
||||
@finish="onSearchFinish" @values-change="onValuesChange">
|
||||
<BasicSearch ref="basicSearchRef" :searchList="searchList" :initial-values="initSearchData" :zhujianfujian="'fu'"
|
||||
@reset="handleReset" @finish="onSearchFinish" @values-change="onValuesChange">
|
||||
<template #ftp="{ onChange }">
|
||||
<fishSearch v-model="localTypeDate" width="200px" @update:modelValue="onChange" />
|
||||
</template>
|
||||
<template #actions>
|
||||
<a-tooltip title="手动新增" >
|
||||
<a-button v-hasPerm="['sjtb:import-add']" @click="props.handleAdd" type="primary">
|
||||
<a-tooltip title="手动新增">
|
||||
<a-button v-hasPerm="['sjtb:import-add']" @click="props.handleAdd" type="primary">
|
||||
手动新增
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
@ -24,17 +24,17 @@
|
||||
<template #icon>
|
||||
<SaveOutlined />
|
||||
</template>
|
||||
提交数据
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip title="全部提交">
|
||||
<a-button v-hasPerm="['sjtb:import-add']" @click="props.allSubmitBtn" :disabled="batchData.length === 0">
|
||||
<template #icon>
|
||||
提交数据
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
<a-tooltip title="全部提交">
|
||||
<a-button v-hasPerm="['sjtb:import-add']" @click="props.allSubmitBtn" :disabled="batchData.length === 0">
|
||||
<template #icon>
|
||||
<SaveOutlined />
|
||||
</template>
|
||||
全部提交
|
||||
</a-button>
|
||||
</a-tooltip> -->
|
||||
全部提交
|
||||
</a-button>
|
||||
</a-tooltip> -->
|
||||
|
||||
<!-- <a-tooltip title="批量审批">
|
||||
<a-button v-hasPerm="['sjtb:edit-review']" @click="props.successBtn" :disabled="batchData.length === 0">
|
||||
@ -67,7 +67,9 @@
|
||||
</a-tooltip>
|
||||
<a-tooltip title="操作手册下载">
|
||||
<a-button>
|
||||
操作手册下载
|
||||
<a href="/file/过鱼设施数据填报操作手册.docx" download="过鱼设施数据填报操作手册.docx">
|
||||
操作手册下载
|
||||
</a>
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
@ -95,7 +97,7 @@ interface Props {
|
||||
importBtn: () => void;
|
||||
batchDelBtn: () => void;
|
||||
submitBtn: () => void;
|
||||
allSubmitBtn:()=> void;
|
||||
allSubmitBtn: () => void;
|
||||
successBtn: () => void;
|
||||
batchData: any[];
|
||||
handleAdd: () => void;
|
||||
|
||||
@ -779,13 +779,13 @@ const handleSearchFinish = (values: any) => {
|
||||
field: "strdt",
|
||||
operator: "gte",
|
||||
dataType: "date",
|
||||
value: values.strdt[0],
|
||||
value: values.strdt[0] + ' 00:00:00',
|
||||
},
|
||||
{
|
||||
field: "strdt",
|
||||
operator: "lte",
|
||||
dataType: "date",
|
||||
value: values.strdt[1],
|
||||
value: values.strdt[1] + ' 23:59:59',
|
||||
},
|
||||
values.direction && {
|
||||
field: "direction",
|
||||
|
||||
@ -40,8 +40,8 @@ const initSearchData = {
|
||||
ftp: null,
|
||||
direction: null,
|
||||
strdt: [
|
||||
dayjs().subtract(1, "month").startOf("month").format("YYYY-MM-DD HH:mm:ss"),
|
||||
dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
|
||||
dayjs().subtract(1, "month").startOf("month").format("YYYY-MM-DD"),
|
||||
dayjs().endOf("day").format("YYYY-MM-DD"),
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="shengPiJiLu-page">
|
||||
<!-- 搜索区域组件,具体 props 需根据实际子组件调整 -->
|
||||
<GuoYuSheShiShuJuTianBaoSearch @search-finish="handleSearchFinish" @reset="handleReset"
|
||||
:selected-count="selectedRows.length" @batch-approve="handleBatchApprove" />
|
||||
:selected-count="selectedRows.length" @batch-approve="handleBatchApprove" @batch-reject="handleBatchReject" />
|
||||
<!-- 主表格 -->
|
||||
<BasicTable ref="tableRef" :columns="columns" :list-url="queryPageList" :search-params="computedSearchParams"
|
||||
:scroll-y="500" :enable-row-selection="true" @selection-change="handleSelectionChange">
|
||||
@ -165,13 +165,27 @@
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
<!-- 批量驳回弹框 -->
|
||||
<a-modal v-model:open="batchRejectVisible" title="批量驳回确认" :confirm-loading="batchRejectLoading"
|
||||
@ok="handleBatchRejectConfirm" @cancel="handleBatchRejectCancel" width="600px">
|
||||
<a-form :model="batchRejectForm">
|
||||
<a-form-item label="选中记录数">
|
||||
<span>{{ selectedRows.length }} 条</span>
|
||||
</a-form-item>
|
||||
<a-form-item label="驳回原因" required>
|
||||
<a-textarea v-model:value="batchRejectForm.rejectReason" :rows="4" placeholder="请输入驳回原因(必填)"
|
||||
:maxlength="500" show-count />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, onMounted, h, computed, nextTick } from 'vue';
|
||||
import dayjs from "dayjs";
|
||||
import { queryPageList, getApprovalLogList, getApprovalChangeLogList, batchApproveByApprovalId } from '@/api/shengPiJiLu';
|
||||
import { queryPageList, getApprovalLogList, getApprovalChangeLogList, batchApproveByApprovalId, batchReject } from '@/api/shengPiJiLu';
|
||||
import { Tag, message } from "ant-design-vue";
|
||||
import { LeftOutlined, RightOutlined } from "@ant-design/icons-vue";
|
||||
import BasicTable from "@/components/BasicTable/index.vue";
|
||||
@ -489,13 +503,13 @@ const handleDetailSearchFinish = (values: any) => {
|
||||
field: "strdt",
|
||||
operator: "gte",
|
||||
dataType: "date",
|
||||
value: values.strdt[0],
|
||||
value: values.strdt[0] + " 00:00:00",
|
||||
},
|
||||
values.strdt && {
|
||||
field: "strdt",
|
||||
operator: "lte",
|
||||
dataType: "date",
|
||||
value: values.strdt[1],
|
||||
value: values.strdt[1] + " 23:59:59",
|
||||
},
|
||||
values.direction && {
|
||||
field: "direction",
|
||||
@ -558,7 +572,7 @@ const handleShowDetail = (record: any) => {
|
||||
field: "strdt",
|
||||
operator: "lte",
|
||||
dataType: "date",
|
||||
value: dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
|
||||
value: dayjs().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
|
||||
},
|
||||
approvalId.value && {
|
||||
field: "approvalId", // 字段名
|
||||
@ -804,6 +818,13 @@ const batchApproveForm = ref({
|
||||
});
|
||||
const selectedRows = ref<any[]>([]);
|
||||
|
||||
// 批量驳回相关状态
|
||||
const batchRejectVisible = ref(false);
|
||||
const batchRejectLoading = ref(false);
|
||||
const batchRejectForm = ref({
|
||||
rejectReason: ''
|
||||
});
|
||||
|
||||
// 监听表格选中变化
|
||||
const handleSelectionChange = (rows: any[], data: any) => {
|
||||
selectedRows.value = data;
|
||||
@ -875,6 +896,69 @@ const handleBatchApproveCancel = () => {
|
||||
batchApproveForm.value.approveComment = '';
|
||||
};
|
||||
|
||||
// 打开批量驳回弹框
|
||||
const handleBatchReject = () => {
|
||||
if (selectedRows.value.length === 0) {
|
||||
message.warning('请至少选择一条记录');
|
||||
return;
|
||||
}
|
||||
batchRejectForm.value.rejectReason = '';
|
||||
batchRejectVisible.value = true;
|
||||
};
|
||||
|
||||
// 确认批量驳回
|
||||
const handleBatchRejectConfirm = async () => {
|
||||
// 验证驳回原因
|
||||
if (!batchRejectForm.value.rejectReason || batchRejectForm.value.rejectReason.trim() === '') {
|
||||
message.warning('请填写驳回原因');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否有非 PENDING 状态的记录
|
||||
const hasNonPendingRecord = selectedRows.value.some(row => row.status !== 'PENDING');
|
||||
if (hasNonPendingRecord) {
|
||||
message.warning('当前选中的数据中含有非待审批状态的记录,无法驳回。');
|
||||
return;
|
||||
}
|
||||
|
||||
batchRejectLoading.value = true;
|
||||
try {
|
||||
// 获取选中行的主键ID作为 approvalIds
|
||||
const approvalIds = selectedRows.value.map(row => row.id).filter(id => id);
|
||||
|
||||
if (approvalIds.length === 0) {
|
||||
message.warning('选中的记录缺少有效的ID');
|
||||
batchRejectLoading.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const res: any = await batchReject({
|
||||
approvalIds,
|
||||
rejectReason: batchRejectForm.value.rejectReason
|
||||
});
|
||||
if (res.code == '0') {
|
||||
message.success('批量驳回成功');
|
||||
batchRejectVisible.value = false;
|
||||
batchRejectForm.value.rejectReason = '';
|
||||
// 清空选中状态
|
||||
tableRef.value?.clearSelection();
|
||||
// 刷新表格(保持当前搜索条件)
|
||||
handleSearchFinish(searchData.value);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// message.error('批量驳回失败,请稍后重试');
|
||||
} finally {
|
||||
batchRejectLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 取消批量驳回
|
||||
const handleBatchRejectCancel = () => {
|
||||
batchRejectVisible.value = false;
|
||||
batchRejectForm.value.rejectReason = '';
|
||||
};
|
||||
|
||||
// 搜索相关数据
|
||||
const searchData = ref<any>({
|
||||
hbrvcd: 'all',
|
||||
|
||||
@ -12,6 +12,15 @@
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
|
||||
<a-tooltip title="批量驳回">
|
||||
<a-button :disabled="selectedCount === 0" @click="$emit('batch-reject')">
|
||||
<template #icon>
|
||||
<CloseCircleOutlined />
|
||||
</template>
|
||||
批量驳回
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
|
||||
</template>
|
||||
</BasicSearch>
|
||||
</div>
|
||||
@ -23,6 +32,7 @@ import BasicSearch from "@/components/BasicSearch/index.vue"; // 确保路径正
|
||||
import { getDictItemsByCode } from '@/api/dict';
|
||||
import {
|
||||
CheckSquareOutlined,
|
||||
CloseCircleOutlined,
|
||||
} from "@ant-design/icons-vue";
|
||||
// --- Props & Emits ---
|
||||
interface Props {
|
||||
@ -37,6 +47,7 @@ const emit = defineEmits<{
|
||||
(e: "reset", values: any): void;
|
||||
(e: "searchFinish", values: any): void;
|
||||
(e: "batch-approve"): void;
|
||||
(e: "batch-reject"): void;
|
||||
}>();
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user