Commit d203b03e by cwy

0406

parent 3f78e4f1
...@@ -21,6 +21,13 @@ export function excelFileApi() { ...@@ -21,6 +21,13 @@ export function excelFileApi() {
data, data,
}); });
}, },
multipleExportFile: (data) => {
return request({
url: '/api/multipleExportFile',
method: 'post',
data,
});
},
}; };
} }
......
...@@ -84,41 +84,6 @@ export function systemApi() { ...@@ -84,41 +84,6 @@ export function systemApi() {
data data
}); });
}, },
bedList: (params) => {
return request({
url: '/bed/list',
method: 'get',
params:params
});
},
disableBed: (data) => {
return request({
url: '/bed/disable',
method: 'post',
data
});
},
enableBed: (data) => {
return request({
url: '/bed/enable',
method: 'post',
data
});
},
hideBed: (data) => {
return request({
url: '/bed/hidden',
method: 'post',
data
});
},
showBed: (data) => {
return request({
url: '/bed/display',
method: 'post',
data
});
},
}; };
} }
......
...@@ -46,6 +46,7 @@ export const useUserInfo = defineStore('userInfo', { ...@@ -46,6 +46,7 @@ export const useUserInfo = defineStore('userInfo', {
async setVersion() { async setVersion() {
const versions = await this.getVersionInfo(); const versions = await this.getVersionInfo();
this.versions = versions; this.versions = versions;
Session.set('resource_address',this.versions.resource_address)
}, },
async getVersionInfo() { async getVersionInfo() {
......
import { Session } from '/@/utils/storage';
export function getHost() { export function getHost() {
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
return '/dev' return '/dev'
...@@ -11,4 +12,15 @@ export function getUploadUrl() { ...@@ -11,4 +12,15 @@ export function getUploadUrl() {
} else { } else {
return '/data-collect-api/api/upload/picture' return '/data-collect-api/api/upload/picture'
} }
}
export function getServerUrl() {
if (process.env.NODE_ENV === 'development') {
return '/dev/api'
} else {
return '/data-collect-api/api'
}
}
export function getServerPublic() {
return Session.get('resource_address');
} }
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
<el-select v-model="state.apiListParam.norm_id" placeholder="请选择指标" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;"> <el-select v-model="state.apiListParam.norm_id" placeholder="请选择子任务" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;">
<el-option v-for="(item, index) in state.normList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.normList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
ref="multipleTableRef"> ref="multipleTableRef">
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column> <el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center"> <el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
<span style="color: #409EFF;">{{scope.row.taskInfo.name}}</span> <span style="color: #409EFF;">{{scope.row.userInfo.name}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center"> <el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center">
</el-table-column> </el-table-column>
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
<el-select v-model="state.apiListParam.norm_id" placeholder="请选择指标" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;"> <el-select v-model="state.apiListParam.norm_id" placeholder="请选择子任务" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;">
<el-option v-for="(item, index) in state.normList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.normList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
ref="multipleTableRef"> ref="multipleTableRef">
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column> <el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center"> <el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
<span style="color: #409EFF;">{{scope.row.taskInfo.name}}</span> <span style="color: #409EFF;">{{scope.row.userInfo.name}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center"> <el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center">
</el-table-column> </el-table-column>
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<el-option v-for="(item, index) in state.userList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.userList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
<el-select v-model="state.apiListParam.norm_id" placeholder="请选择指标" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;"> <el-select v-model="state.apiListParam.norm_id" placeholder="请选择子任务" size="default" @change="searchChange" clearable filterable style="width:300px;margin-right: 20px;">
<el-option v-for="(item, index) in state.normList" :key="index" :label="item.name" <el-option v-for="(item, index) in state.normList" :key="index" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
...@@ -26,17 +26,17 @@ ...@@ -26,17 +26,17 @@
<div class="page-main" v-loading="state.tableData.loading" ref="pageMain"> <div class="page-main" v-loading="state.tableData.loading" ref="pageMain">
<el-card shadow="hover" style="height:100%;"> <el-card shadow="hover" style="height:100%;">
<el-button size="default" type="danger" @click="settlementIndicators" style="margin-bottom: 10px;">结算</el-button> <el-button size="default" type="danger" @click="settlementIndicators" style="margin-bottom: 10px;">结算</el-button>
<el-table :data="state.tableData.data" style="width: 100%" :height="state.tableHeight" <el-table :data="state.tableData.data" :row-key="(row) => row.id" style="width: 100%" :height="state.tableHeight"
ref="multipleTableRef" @selection-change="tableSelection"> ref="multipleTableRef" @selection-change="tableSelection">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column> <el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center"> <el-table-column prop="userInfo.name" label="领取用户" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
<span style="color: #409EFF;">{{scope.row.taskInfo.name}}</span> <span style="color: #409EFF;">{{scope.row.userInfo.name}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskInfo.name" label="任务名称" show-overflow-tooltip align="center">
</el-table-column>
<el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="taskInfo.unit" label="单位" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center"> <el-table-column prop="norm_list_info.name" label="指标名称" show-overflow-tooltip align="center">
</el-table-column> </el-table-column>
......
...@@ -25,9 +25,9 @@ ...@@ -25,9 +25,9 @@
<div class="page-main" v-loading="state.tableData.loading" ref="pageMain"> <div class="page-main" v-loading="state.tableData.loading" ref="pageMain">
<el-card shadow="hover" style="height:100%;"> <el-card shadow="hover" style="height:100%;">
<el-button size="default" type="danger" @click="batchSelection" style="margin-bottom: 10px;">领取</el-button> <el-button size="default" type="danger" @click="batchSelection" style="margin-bottom: 10px;">领取</el-button>
<el-table :data="state.tableData.data" style="width: 100%" :height="state.tableHeight" <el-table :data="state.tableData.data" :row-key="(row) => row.id" style="width: 100%" :height="state.tableHeight"
ref="multipleTableRef" @selection-change="tableSelection"> ref="multipleTableRef" @selection-change="tableSelection">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column> <el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="taskPackageInfo.name" label="任务名称1" show-overflow-tooltip align="center"> <el-table-column prop="taskPackageInfo.name" label="任务名称1" show-overflow-tooltip align="center">
</el-table-column> </el-table-column>
......
<template>
<div class="system-menu-container">
<div class="breadcrumb-box">
<Breadcrumb />
</div>
<div class="header-search flex space-between">
<div>
<el-select v-model="state.apiData.search_task_id" placeholder="请选择任务" size="default" @change="searchChange" clearable filterable style="width:200px;margin-right: 20px;">
<el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name"
:value="item.id"></el-option>
</el-select>
<!-- <el-input class="search-item" placeholder="请输入子任务名称" v-model="state.apiData.name" size="default"
style="width: 220px;" clearable @change="searchChange()">
</el-input>
<el-button size="default" type="primary" @click="searchChange()" >查询</el-button>
<el-button size="default" @click="reset()" >重置</el-button> -->
</div>
</div>
<div class="page-main" v-loading="state.tableData.loading" ref="pageMain">
<el-card shadow="hover" style="height:100%;">
<el-button size="default" type="danger" @click="multipleExports" style="margin-bottom: 10px;">导出</el-button>
<el-table :scrollbar-always-on="true" :row-key="(row) => row.id" :data="state.tableData.data" style="width: 100%" :height="state.tableHeight" @selection-change="tableSelection"
ref="multipleTableRef">
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column v-for="column in state.columns" :key="column.prop" :label="column.label" :prop="column.prop" :width="column.width" show-overflow-tooltip align="center">
<template #default="scope">
<span v-if="scope.row[column.prop] =='' || scope.row[column.prop] ==null || scope.row[column.prop] ==undefined">--</span>
<span v-else>{{scope.row[column.prop]}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right" align="center">
<template #default="scope">
<el-button size="small" type="primary" @click="details(scope.row.id)">查看详情</el-button>
<el-button size="small" type="warning" @click="exportFile(scope.row.id)">导出数据</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-box">
<el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="mt15"
:pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="state.apiData.page" background
v-model:page-size="state.apiData.limit" layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total">
</el-pagination>
</div>
<DetailDialog ref="DetailDialogRef" @refresh="getList()" />
<AddDialog ref="AddDialogRef" @refresh="getList()" />
<EditDialog ref="EditDialogRef" @refresh="getList()" />
<ImporDialog ref="ImporDialogRef" @refresh="getList()" />
</el-card>
</div>
</div>
</template>
<script setup name="taskPackage-list">
import { getCurrentInstance } from 'vue';
import { normApi } from '/@/api/norm/index';
import { taskPackageApi } from '/@/api/taskPackage/index';
import { excelFileApi } from '/@/api/excelFile/index';
import { ElMessageBox, ElMessage } from 'element-plus';
// 引入组件
const Breadcrumb = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/breadcrumb.vue'));
const AddDialog = defineAsyncComponent(() => import('/@/views/norm/list/dialog.vue'));
const DetailDialog = defineAsyncComponent(() => import('/@/views/norm/list/details.vue'));
const EditDialog = defineAsyncComponent(() => import('/@/views/norm/list/edit.vue'));
const ImporDialog = defineAsyncComponent(() => import('/@/views/norm/list/impor.vue'));
const router = useRouter();
// 定义变量内容
const AddDialogRef = ref()
const DetailDialogRef = ref()
const EditDialogRef = ref()
const ImporDialogRef = ref()
const multipleTableRef = ref()
const state = reactive({
apiData: {
page: 1,
limit: 10,
name: '',
task_id:'',
search_task_id:'',
},
tableData: {
data: [],
loading: false,
total: 0
},
tableHeight: '30vh',
isHide:false,
taskList:[],
Ids:[],
columns:[],
collectsTableData:[],
collectsColumns:[],
});
// 获取任务列表
const getTaskList = () => {
taskPackageApi().taskPackageList({page:-1,limit:-1}).then(res => {
state.taskList = res.data
})
}
// 页面加载时
onMounted(() => {
// getDepatment()
if(router.currentRoute.value.query.task_id){
state.apiData.task_id = router.currentRoute.value.query.task_id
state.isHide = true // 如果有任务ID才允许发布
}
getList()
getTaskList()
state.tableHeight = getCurrentInstance().refs.pageMain.offsetHeight - 120 - 32 + "px";
});
const searchChange = () => {
state.apiData.page = 1
getList()
}
// 分页改变
const onHandleSizeChange = (val) => {
state.apiData.limit = val;
getList();
};
const onHandleCurrentChange = (val) => {
state.apiData.page = val;
getList();
};
// 获取列表
const getList = () => {
state.tableData.loading = true
normApi().normList(state.apiData).then(res => {
let listAll = res.data.data
// state.tableData.data = res.data.data
state.tableData.total = res.data.total
state.tableData.loading = false
let customTitle = []; // 自定义标题
if(listAll){
let arr = [
{ label:'ID', prop: 'id'},
{ label:'任务名称', prop: 'task_info.name',width:120},
{ label:'单位名称', prop: 'task_info.unit',width:180},
{ label:'子任务名称', prop: 'name',width:180},
{ label:'难度等级', prop: 'level',width:180},
{ label:'参考信源', prop: 'refer',width:180},
{ label:'参考指南', prop: 'guide',width:180},
{ label:'单价', prop: 'price',width:180},
{ label:'优先级', prop: 'sort',width:180},
{ label:'发布时间', prop: 'created_at',width:180},
{ label:'领取进度', prop: 'receivedQuantity',width:180},
{ label:'完成进度', prop: 'collectsQuantity',width:180},
{ label:'操作', prop: 'cao',width:280},
];
state.columns = arr;
let sign = 0;
listAll.forEach(function(item, index, arr) {
let list = {
'id':item.id,
'task_info.name': item.taskPackageInfo.name,
'task_info.unit': item.taskPackageInfo.unit,
'name': item.name,
'level': item.level,
'refer':item.refer,
'guide':item.guide,
'price':item.price,
'sort':item.sort,
'created_at':item.created_at,
'receivedQuantity': item.receivedQuantity,
'collectsQuantity': item.collectsQuantity,
'cao': 'cao',
}
item.custom.forEach(function(items, indexs, arrs) {
if(items.user_filled==0){
let vlues = customTitle.map(itemsss => itemsss.label).indexOf(items.extend_name)
if(vlues == -1){
customTitle.push( { label: items.extend_name, index: 'extend_value'+sign })
state.columns.push( { label: items.extend_name, prop: 'extend_value'+sign,width:180 })
list['extend_value'+sign] =items.extend_value;
sign++;
}else{
list[customTitle[vlues]['index']] =items.extend_value;
}
}
});
// state.columns.push({ label: '操作', width="200", prop: ''})
// list[customTitle[vlues]['index']] =items.extend_value;
// state.columns.push( { label: '操作' })
state.tableData.data.push(list);
});
console.log(customTitle)
}
}).catch(() => {
state.tableData.loading = false
})
}
// 多选按钮
const tableSelection = (val) => {
if(val){
state.Ids = [];
val.forEach(item => {
state.Ids.push(item.id);
});
}
console.log(state.Ids)
}
// 详情弹窗
const details= (norm_id) => {
DetailDialogRef.value.openDialog(norm_id);
}
// 导出文件
const exportFile= (id) => {
let query = {id:id}
excelFileApi().normExportFile(query).then(res => {
if(res.data){
let url = res.data;
const iframe = document.createElement('iframe'); // 创建一个HTML 元素
iframe.style.display = 'none'; // 隐藏iframe 防止影响页面
iframe.style.height = 0; // 高度设置0 防止影响页面
iframe.src = url;// 下载链接
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求 // 5分钟之后删除
setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
ElMessage.success('导出成功,请点击下载列表查看!');
}else{
ElMessage.error('导出失败!');
}
}).catch(() => {
})
}
// 多选导出
const multipleExports= () => {
excelFileApi().multipleExportFile({ids:state.Ids}).then(res => {
excelFileApi().multipleExportFile({ids:state.Ids}).then(res => {
if(res.data){
let url = res.data;
const iframe = document.createElement('iframe'); // 创建一个HTML 元素
iframe.style.display = 'none'; // 隐藏iframe 防止影响页面
iframe.style.height = 0; // 高度设置0 防止影响页面
iframe.src = url;// 下载链接
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求 // 5分钟之后删除
setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
ElMessage.success('导出成功,请点击下载列表查看!');
}else{
ElMessage.error('导出失败!');
}
multipleTableRef.value.clearSelection();
getList();
}).catch(() => {
getList();
})
}).catch(() => {
getList();
})
}
</script>
<style lang="scss" scoped>
.page-main {
height: calc(100vh - 90px - 75px);
}
</style>
<template>
<div class="system-menu-container">
<div class="breadcrumb-box">
<Breadcrumb />
</div>
<div class="header-search flex space-between">
<div>
<el-select v-model="state.apiData.search_task_id" placeholder="请选择任务" size="default" @change="searchChange" clearable filterable style="width:200px;margin-right: 20px;">
<el-option v-for="(item, index) in state.taskList" :key="index" :label="item.name"
:value="item.id"></el-option>
</el-select>
<!-- <el-input class="search-item" placeholder="请输入子任务名称" v-model="state.apiData.name" size="default"
style="width: 220px;" clearable @change="searchChange()">
</el-input>
<el-button size="default" type="primary" @click="searchChange()" >查询</el-button>
<el-button size="default" @click="reset()" >重置</el-button> -->
</div>
</div>
<div class="page-main" v-loading="state.tableData.loading" ref="pageMain">
<el-card shadow="hover" style="height:100%;">
<el-button size="default" type="danger" @click="multipleExports" style="margin-bottom: 10px;">导出</el-button>
<el-table :scrollbar-always-on="true" :row-key="(row) => row.id" :data="state.tableData.data" style="width: 100%" :height="state.tableHeight" @selection-change="tableSelection"
ref="multipleTableRef">
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="taskPackageInfo.name" width="200"label="任务名称" show-overflow-tooltip align="center">
<template #default="scope">
<el-tag type='danger' effect="plain">{{scope.row.taskPackageInfo.name}}</el-tag>
</template>
</el-table-column>
<el-table-column prop="taskPackageInfo.unit" width="200"label="单位名称" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="name" label="子任务名称" width="200" show-overflow-tooltip align="center">
<template #default="scope">
<span @click="details(scope.row.id)">{{scope.row.name}}</span>
</template>
</el-table-column>
<el-table-column prop="level" label="难度等级" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="refer" label="参考信源" width="200" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="price" label="单价" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="sort" label="优先级" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="created_at" width="180" label="发布时间" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="receivedQuantity" width="200" label="领取进度" show-overflow-tooltip align="center">
<template #default="scope">
<span style="color:#409EFF" v-if="scope.row.type==1">--</span>
<span style="color:#409EFF" v-else>{{scope.row.receivedQuantity}}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="完成进度" width="200"show-overflow-tooltip align="center">
<template #default="scope">
<span style="color:#F56C6C" v-if="scope.row.type==1">--</span>
<span style="color:#F56C6C" v-else>{{scope.row.collectsQuantity}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" fixed="right" align="center">
<template #default="scope">
<el-button size="small" type="primary" @click="details(scope.row.id)">查看详情</el-button>
<el-button size="small" type="warning" @click="exportFile(scope.row.id)">导出数据</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-box">
<el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="mt15"
:pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="state.apiData.page" background
v-model:page-size="state.apiData.limit" layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total">
</el-pagination>
</div>
<DetailDialog ref="DetailDialogRef" @refresh="getList()" />
<AddDialog ref="AddDialogRef" @refresh="getList()" />
<EditDialog ref="EditDialogRef" @refresh="getList()" />
<ImporDialog ref="ImporDialogRef" @refresh="getList()" />
</el-card>
</div>
</div>
</template>
<script setup name="taskPackage-list">
import { getCurrentInstance } from 'vue';
import { normApi } from '/@/api/norm/index';
import { taskPackageApi } from '/@/api/taskPackage/index';
import { excelFileApi } from '/@/api/excelFile/index';
import { ElMessageBox, ElMessage } from 'element-plus';
// 引入组件
const Breadcrumb = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/breadcrumb.vue'));
const AddDialog = defineAsyncComponent(() => import('/@/views/norm/list/dialog.vue'));
const DetailDialog = defineAsyncComponent(() => import('/@/views/norm/list/details.vue'));
const EditDialog = defineAsyncComponent(() => import('/@/views/norm/list/edit.vue'));
const ImporDialog = defineAsyncComponent(() => import('/@/views/norm/list/impor.vue'));
const router = useRouter();
// 定义变量内容
const AddDialogRef = ref()
const DetailDialogRef = ref()
const EditDialogRef = ref()
const ImporDialogRef = ref()
const multipleTableRef = ref()
const state = reactive({
apiData: {
page: 1,
limit: 10,
name: '',
task_id:'',
search_task_id:'',
},
tableData: {
data: [],
loading: false,
total: 0
},
tableHeight: '30vh',
isHide:false,
taskList:[],
Ids:[],
});
// 获取任务列表
const getTaskList = () => {
taskPackageApi().taskPackageList({page:-1,limit:-1}).then(res => {
state.taskList = res.data
})
}
// 页面加载时
onMounted(() => {
// getDepatment()
if(router.currentRoute.value.query.task_id){
state.apiData.task_id = router.currentRoute.value.query.task_id
state.isHide = true // 如果有任务ID才允许发布
}
getList()
getTaskList()
state.tableHeight = getCurrentInstance().refs.pageMain.offsetHeight - 120 - 32 + "px";
});
const searchChange = () => {
state.apiData.page = 1
getList()
}
// 分页改变
const onHandleSizeChange = (val) => {
state.apiData.limit = val;
getList();
};
const onHandleCurrentChange = (val) => {
state.apiData.page = val;
getList();
};
/**
* 重置按钮
*/
const reset = () => {
state.apiData.page = 1
state.apiData.name = '';
state.apiData.search_task_id = '';
getList()
}
// 获取列表
const getList = () => {
state.tableData.loading = true
normApi().normList(state.apiData).then(res => {
state.tableData.loading = false
state.tableData.data = res.data.data
state.tableData.total = res.data.total
}).catch(() => {
state.tableData.loading = false
})
}
const tableSelection = (val) => {
if(val){
state.Ids = [];
val.forEach(item => {
state.Ids.push(item.id);
});
}
console.log(state.Ids)
}
/**
* 返回上一级页面
*/
const backToPreviousPage = () => {
// this.$router.push('/target')
router.go(-1);
}
// 发布指标弹窗
const release= () => {
AddDialogRef.value.openDialog();
}
// 详情弹窗
const details= (norm_id) => {
DetailDialogRef.value.openDialog(norm_id);
}
// 编辑弹窗
const edit= (norm_id) => {
EditDialogRef.value.openDialog(norm_id);
}
// 导入数据窗口
const importFile= () => {
ImporDialogRef.value.openDialog(state.apiData.task_id);
}
// 导出文件
const exportFile= (id) => {
let query = {id:id}
excelFileApi().normExportFile(query).then(res => {
if(res.data){
let url = res.data;
const iframe = document.createElement('iframe'); // 创建一个HTML 元素
iframe.style.display = 'none'; // 隐藏iframe 防止影响页面
iframe.style.height = 0; // 高度设置0 防止影响页面
iframe.src = url;// 下载链接
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求 // 5分钟之后删除
setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
ElMessage.success('导出成功,请点击下载列表查看!');
}else{
ElMessage.error('导出失败!');
}
}).catch(() => {
})
}
// 多选导出
const multipleExports= () => {
excelFileApi().multipleExportFile({ids:state.Ids}).then(res => {
excelFileApi().multipleExportFile({ids:state.Ids}).then(res => {
if(res.data){
let url = res.data;
const iframe = document.createElement('iframe'); // 创建一个HTML 元素
iframe.style.display = 'none'; // 隐藏iframe 防止影响页面
iframe.style.height = 0; // 高度设置0 防止影响页面
iframe.src = url;// 下载链接
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求 // 5分钟之后删除
setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
ElMessage.success('导出成功,请点击下载列表查看!');
}else{
ElMessage.error('导出失败!');
}
multipleTableRef.value.clearSelection();
getList();
}).catch(() => {
getList();
})
}).catch(() => {
getList();
})
}
</script>
<style lang="scss" scoped>
.page-main {
height: calc(100vh - 90px - 75px);
}
</style>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<el-input type="textarea" v-model="state.formItem.addItem.refer" placeholder="请输入参考信源" clearable :disabled="true"></el-input> <el-input type="textarea" v-model="state.formItem.addItem.refer" placeholder="请输入参考信源" clearable :disabled="true"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="price" prop="price"> <el-form-item label="price" prop="price">
<el-input v-model="state.formItem.addItem.price" placeholder="请输入单价" clearable :disabled="true"></el-input> <el-input-number v-model="state.formItem.addItem.price" :precision="2" :step="0.1" :max="10" placeholder="请输入单价" :disabled="true"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="参考指南" prop="guide"> <el-form-item label="参考指南" prop="guide">
<el-input type="textarea" v-model="state.formItem.addItem.guide" placeholder="请输入参考指南" clearable :disabled="true"></el-input> <el-input type="textarea" v-model="state.formItem.addItem.guide" placeholder="请输入参考指南" clearable :disabled="true"></el-input>
......
...@@ -18,15 +18,17 @@ ...@@ -18,15 +18,17 @@
</div> </div>
<div> <div>
<el-button size="default" type="primary" @click="release()" v-if="state.isHide">发布子任务</el-button> <el-button size="default" type="primary" @click="release()" v-if="state.isHide">发布子任务</el-button>
<el-button size="default" type="danger" @click="importFile()" v-if="state.isHide">导入数据</el-button>
<el-button @click="backToPreviousPage">返回页面</el-button> <el-button @click="backToPreviousPage">返回页面</el-button>
</div> </div>
</div> </div>
<div class="page-main" v-loading="state.tableData.loading" ref="pageMain"> <div class="page-main" v-loading="state.tableData.loading" ref="pageMain">
<el-card shadow="hover" style="height:100%;"> <el-card shadow="hover" style="height:100%;">
<el-button size="default" type="danger" @click="multipleExports" style="margin-bottom: 10px;">导出文件</el-button>
<el-table :data="state.tableData.data" style="width: 100%" :height="state.tableHeight" <el-table :scrollbar-always-on="true" @selection-change="tableSelection" :row-key="(row) => row.id" :data="state.tableData.data" style="width: 100%" :height="state.tableHeight"
ref="multipleTableRef"> ref="multipleTableRef">
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column> <el-table-column label="序号" type="index" width="100" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="taskPackageInfo.name" label="任务名称" show-overflow-tooltip align="center"> <el-table-column prop="taskPackageInfo.name" label="任务名称" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
...@@ -46,19 +48,20 @@ ...@@ -46,19 +48,20 @@
<el-table-column prop="created_at" width="180" label="发布时间" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="created_at" width="180" label="发布时间" show-overflow-tooltip align="center"></el-table-column>
<el-table-column prop="receivedQuantity" label="领取进度" show-overflow-tooltip align="center"> <el-table-column prop="receivedQuantity" label="领取进度" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
<span style="color:#409EFF">{{scope.row.receivedQuantity}}</span> <span style="color:#409EFF" v-if="scope.row.type==1">--</span>
<span style="color:#409EFF" v-else>{{scope.row.receivedQuantity}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="完成进度" show-overflow-tooltip align="center"> <el-table-column prop="name" label="完成进度" show-overflow-tooltip align="center">
<template #default="scope"> <template #default="scope">
<span style="color:#F56C6C">{{scope.row.collectsQuantity}}</span> <span style="color:#F56C6C" v-if="scope.row.type==1">--</span>
<span style="color:#F56C6C" v-else>{{scope.row.collectsQuantity}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="380" fixed="right" align="center"> <el-table-column label="操作" width="380" fixed="right" align="center">
<template #default="scope"> <template #default="scope">
<el-button size="small" type="primary" @click="details(scope.row.id)">查看详情</el-button> <el-button size="small" type="primary" @click="details(scope.row.id)">查看详情</el-button>
<el-button size="small" @click="edit(scope.row.id)">修改子任务</el-button> <el-button size="small" @click="edit(scope.row.id)">修改子任务</el-button>
<el-button size="small" type="danger" @click="importFile(scope.row.id)">导入数据</el-button>
<el-button size="small" type="warning" @click="exportFile(scope.row.id)">导出数据</el-button> <el-button size="small" type="warning" @click="exportFile(scope.row.id)">导出数据</el-button>
</template> </template>
</el-table-column> </el-table-column>
...@@ -100,6 +103,7 @@ const AddDialogRef = ref() ...@@ -100,6 +103,7 @@ const AddDialogRef = ref()
const DetailDialogRef = ref() const DetailDialogRef = ref()
const EditDialogRef = ref() const EditDialogRef = ref()
const ImporDialogRef = ref() const ImporDialogRef = ref()
const multipleTableRef = ref()
const state = reactive({ const state = reactive({
apiData: { apiData: {
...@@ -117,6 +121,7 @@ const state = reactive({ ...@@ -117,6 +121,7 @@ const state = reactive({
tableHeight: '30vh', tableHeight: '30vh',
isHide:false, isHide:false,
taskList:[], taskList:[],
Ids:[],
}); });
// 获取任务列表 // 获取任务列表
const getTaskList = () => { const getTaskList = () => {
...@@ -175,6 +180,16 @@ const getList = () => { ...@@ -175,6 +180,16 @@ const getList = () => {
} }
const tableSelection = (val) => {
if(val){
state.Ids = [];
val.forEach(item => {
state.Ids.push(item.id);
});
}
console.log(state.Ids)
}
/** /**
* 返回上一级页面 * 返回上一级页面
*/ */
...@@ -199,8 +214,8 @@ const edit= (norm_id) => { ...@@ -199,8 +214,8 @@ const edit= (norm_id) => {
} }
// 导入数据窗口 // 导入数据窗口
const importFile= (norm_id) => { const importFile= () => {
ImporDialogRef.value.openDialog(norm_id); ImporDialogRef.value.openDialog(state.apiData.task_id);
} }
// 导出文件 // 导出文件
...@@ -223,7 +238,27 @@ const exportFile= (id) => { ...@@ -223,7 +238,27 @@ const exportFile= (id) => {
}).catch(() => { }).catch(() => {
}) })
} }
// 多选导出文件
const multipleExports= () => {
excelFileApi().multipleExportFile({ids:state.Ids}).then(res => {
if(res.data){
let url = res.data;
const iframe = document.createElement('iframe'); // 创建一个HTML 元素
iframe.style.display = 'none'; // 隐藏iframe 防止影响页面
iframe.style.height = 0; // 高度设置0 防止影响页面
iframe.src = url;// 下载链接
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求 // 5分钟之后删除
setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000);
ElMessage.success('导出成功,请点击下载列表查看!');
}else{
ElMessage.error('导出失败!');
}
multipleTableRef.value.clearSelection();
getList();
}).catch(() => {
getList();
})
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -34,7 +34,7 @@ const viteConfig = defineConfig((mode) => { ...@@ -34,7 +34,7 @@ const viteConfig = defineConfig((mode) => {
host: '0.0.0.0', host: '0.0.0.0',
port: env.VITE_PORT, port: env.VITE_PORT,
open: env.VITE_OPEN, open: env.VITE_OPEN,
hmr: true, hmr: true,
proxy: { proxy: {
'/dev': { '/dev': {
target: 'http://gcspider.raisound.com:81/data-collect-api-dev', target: 'http://gcspider.raisound.com:81/data-collect-api-dev',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment