123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- <template>
- <Dialog v-model="show" type="xl" title="任务跟踪列表" hide-footer>
- <transition name="fade">
- <div v-show="showSearch" class="mb-[20px]">
- <el-form ref="queryFormRef" :model="queryParams">
- <el-row :gutter="20">
- <!-- 第一行 -->
- <el-col :span="6">
- <el-form-item label="任务ID" prop="task_id">
- <el-input v-model="queryParams.task_id" placeholder="请输入任务ID" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="事件代码" prop="event_code">
- <el-input v-model="queryParams.event_code" placeholder="请输入事件代码" clearable />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="排序依据" prop="sortBy">
- <el-select v-model="queryParams.sortBy" placeholder="选择排序依据" clearable>
- <el-option label="创建时间" value="creation_time"></el-option>
- <el-option label="更新时间" value="update_time"></el-option>
- <el-option label="任务ID" value="task_id"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="排序顺序" prop="sortOrder">
- <el-select v-model="queryParams.sortOrder" placeholder="选择排序顺序" clearable>
- <el-option label="升序" value="asc"></el-option>
- <el-option label="降序" value="desc"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20" class="mt-[10px]">
- <el-col :span="6">
- <div class="flex">
- <div class="common-btn-primary" @click="handleQuery">搜索</div>
- <div class="common-btn" @click="resetQuery">重置</div>
- </div>
- </el-col>
- </el-row>
- </el-form>
- </div>
- </transition>
- <!-- 表格组件 -->
- <div class="common-table">
- <div class="table-header">
- <div class="td">任务ID</div>
- <div class="td">单位名称</div>
- <div class="td">任务描述</div>
- <div class="td">登记人</div>
- <div class="td">创建时间</div>
- <div class="td">更新时间</div>
- <div class="td">处理状态</div>
- <div class="td">操作</div>
- </div>
- <div v-for="(item, index) in taskList" :key="index" class="tr">
- <div class="td">{{ item.task_id }}</div>
- <div class="td">{{ item.unit_name }}</div>
- <div class="td">{{ item.task_description }}</div>
- <div class="td">{{ item.registrar }}</div>
- <div class="td">{{ formatDateTime(item.creation_time) }}</div>
- <div class="td">{{ formatDateTime(item.update_time) }}</div>
- <div class="td">{{ item.processing_status }}</div>
- <div class="td">
- <div>更新</div>
- </div>
- </div>
- </div>
- <div class="footer">
- <pagination
- v-show="total > 0"
- v-model:page="queryParams.page"
- v-model:limit="queryParams.page_size"
- :total="total"
- layout="total, prev, pager, next"
- @pagination="getList"
- />
- </div>
- </Dialog>
- </template>
- <script lang="ts" setup>
- import { ref, reactive, toRefs, onMounted } from 'vue';
- import { selectTask } from '@/api/emergencyCommandMap/JointDuty';
- const taskList = ref([]);
- const total = ref(0);
- const queryParams = reactive({
- page: 1,
- page_size: 10,
- task_id: '',
- event_code: '',
- sortBy: '',
- sortOrder: ''
- });
- const getList = () => {
- if (props.eventId) {
- queryParams.event_code = props.eventId; // 使用 eventId
- }
- selectTask(queryParams).then((res) => {
- if (res.code === 200) {
- taskList.value = res.data;
- total.value = res.total;
- }
- });
- };
- const formatDateTime = (dateTimeString: string) => {
- const date = new Date(dateTimeString);
- return date.toLocaleString();
- };
- const handleQuery = () => {
- queryParams.page = 1;
- getList();
- };
- const resetQuery = () => {
- Object.assign(queryParams, {
- page: 1,
- page_size: 10,
- task_id: '',
- event_code: '',
- sortBy: '',
- sortOrder: ''
- });
- getList();
- };
- const handleSelectionChange = (selection) => {
- ids.value = selection.map((item) => item.eventId);
- selectedRow.value = selection.length === 1 ? selection[0] : null;
- single.value = selection.length != 1;
- multiple.value = !selection.length;
- };
- const eventEditDialogState = reactive({
- show: false,
- title: ''
- });
- const eventDetailsState = reactive({
- show: false,
- title: ''
- });
- //查看事件详情
- const handleView = (row) => {
- // 查看事件详情逻辑
- eventId.value = row.event_id;
- eventDetailsState.title = '查看事件';
- eventDetailsState.show = true;
- };
- // 关闭事件
- const closeDialogState = reactive({
- show: false,
- form: {
- eventId: '',
- deaths: '',
- injuries: '',
- missing: '',
- fileNames: []
- }
- });
- const handleClose = (row) => {
- if (row) {
- console.log(row);
- closeDialogState.form.eventId = row.event_id;
- closeDialogState.form.deaths = row.deaths;
- closeDialogState.form.injuries = row.injuries;
- closeDialogState.form.missing = row.missing;
- closeDialogState.show = true;
- }
- };
- const handleCloseEventDialog = (b) => {
- console.log('handleCloseEventDialog', b);
- };
- const props = defineProps<{
- modelValue?: boolean;
- title?: string;
- height?: string;
- eventId?: string;
- }>();
- const emit = defineEmits(['update:modelValue']);
- let show = ref(false);
- // 你可以在这里使用 props.eventId,例如在 fetchData 函数中:
- const fetchData = async () => {
- if (props.eventId) {
- try {
- const res = await selectTask({ event_code: props.eventId });
- // 处理 res ...
- } catch (error) {
- console.error('请求任务数据失败:', error);
- }
- }
- };
- watch(
- () => props.modelValue,
- (newValue) => {
- show.value = newValue;
- if (newValue) {
- getList();
- }
- },
- {
- immediate: true
- }
- );
- // 关闭弹窗
- const closeDialog = () => {
- show.value = false;
- emit('update:modelValue', false);
- };
- </script>
- <style lang="scss" scoped>
- .dialog-wrap {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
- z-index: 2000;
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- .overlay {
- background-color: rgba(0, 0, 0, 0.5);
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: -1;
- cursor: pointer;
- }
- .dialog {
- width: 5000px;
- height: 2000px;
- margin: 0 auto;
- background-color: #fff;
- border-radius: 20px;
- }
- }
- .dialog {
- padding: 0 50px;
- .dialog-header {
- width: 100%;
- height: 150px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- .icon-close {
- cursor: pointer;
- }
- }
- }
- .footer {
- height: 64px;
- display: flex;
- justify-content: flex-end;
- margin-bottom: 30px;
- .pagination-container {
- height: 64px;
- margin: 0;
- }
- :deep(.el-pagination__total) {
- color: #a7ccdf;
- font-size: 32px;
- }
- :deep(.el-pagination) {
- .btn-next,
- .btn-prev {
- background-color: transparent;
- border: none;
- .el-icon {
- font-size: 22px;
- color: #a7ccdf;
- }
- }
- .btn-prev:disabled,
- .btn-next:disabled {
- background-color: transparent;
- border: none;
- }
- .el-pager li {
- width: 64px;
- height: 64px;
- line-height: 64px;
- text-align: center;
- font-size: 32px;
- color: #a7ccdf;
- background-color: #0e3064;
- border: 1px solid #0c57a7;
- margin: 0 6px;
- &:hover {
- background-color: #038dff;
- border: 1px solid #038dff;
- }
- }
- .el-pager li.is-active {
- background-color: #038dff;
- border: 1px solid #038dff;
- }
- }
- }
- .flex {
- display: flex;
- align-items: flex-start;
- }
- </style>
|