This commit is contained in:
Yq 2025-03-27 14:42:03 +08:00
parent d38b23522e
commit b0993090e3
18 changed files with 3385 additions and 479 deletions

View File

@ -14,3 +14,35 @@ export const addOrUpdate=(pay)=>{
export const deleteitem=(pay)=>{
return $post(`/zhTeam/delete`,pay)
}
// 获取项目列表
export const recordList=(pay1,payload)=>{
return $post(`/zhTeam/list?pageNum=`+pay1.pageNum+`&pageSize=`+pay1.pageSize,payload)
}
// 获取项目列表
export const exportBasic=(pay)=>{
return $postBlob(`/zhTeam/exportBasic`,pay)
}
// 获取项目列表
export const importData=(pay)=>{
return $postBlob(`/zhTeam/importData`,pay)
}
// 获取项目列表
export const uploadFile=(pay)=>{
return $postBlob(`/zhFile/uploadFile`,pay)
}
// 获取项目列表
export const delFile=(pay)=>{
return $post(`/zhFile/delFile?id=`+pay)
}
// 获取项目列表
export const getOneObs=(pay)=>{
return $postBlob(`/zhFile/getOneObs?id=`+pay)
}
// 获取项目列表
export const listFile=(pay1,payload)=>{
return $post(`/zhFile/listFile?pageNum=`+pay1.pageNum+`&pageSize=`+pay1.pageSize,payload)
}

View File

@ -1143,3 +1143,7 @@ export const mergeApi=(payload)=>{
export const upload=(payload)=>{
return $post(`/zhUploadSlice/upload`,payload)
}
export const uploadFile=(payload)=>{
return $post(`/zhFile/uploadFile`,payload)
}

BIN
src/assets/images/eyes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
src/assets/images/gthz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1323,18 +1323,18 @@ export const dynamicRoutes = [
name: 'screenJj',
meta: {title: '技经看板', icon: 'time'}
},
{
path: 'test',
name: 'test',
component: () => import('@/views/test/index.vue'),
meta: {title: '测试', icon: 'time'}
},
{
path: 'testCopy',
name: 'testCopy',
component: () => import('@/views/test/testCopy.vue'),
meta: {title: '测试副本', icon: 'time'}
},
// {
// path: 'test',
// name: 'test',
// component: () => import('@/views/test/index.vue'),
// meta: {title: '测试', icon: 'time'}
// },
// {
// path: 'testCopy',
// name: 'testCopy',
// component: () => import('@/views/test/testCopy.vue'),
// meta: {title: '测试副本', icon: 'time'}
// },
]
},
]

View File

@ -3,6 +3,7 @@
<!-- <div class="close-icon" title="关闭" @click="close">-->
<!-- <span style="color:white;font-size:20px">x</span>-->
<!-- </div>-->
<vue-office-docx
v-if="['.doc', '.docx'].includes(extenson)"
:src="filePreviewUrl"
@ -49,7 +50,7 @@
class="img-contion"
v-if="['.jpg', '.jpeg', '.png'].includes(extenson)"
>
<img :src="filePreviewUrl" alt="" />
<img :src="filePreviewUrl" alt="" style="object-fit: contain;width:100%;height:100%;" />
</div>
</div>
</template>
@ -182,10 +183,10 @@ const renderPage = async (pdf, pageNum) => {
// const canvas = document.createElement('canvas');
const canvas = document.getElementById(`canvas-${pageNum}`);
const context = canvas.getContext('2d');
const viewport = page.getViewport({ scale: 1.5 }); //
canvas.height = viewport.height;
canvas.width = viewport.width;
console.log(page.getViewport,'getViewport')
const viewport = page.getViewport({ scale: .8,offsetX:-40}); //
canvas.height = '570';
canvas.width = '600';
//
await page.render({ canvasContext: context, viewport }).promise;
@ -286,6 +287,7 @@ defineExpose({
}
.pdf-page{
text-align: center;
overflow: scroll;
}
.close-icon {
position: fixed;
@ -311,11 +313,7 @@ defineExpose({
display: flex;
justify-content: center;
align-items: center;
.img {
width: 100%;
height: 100%;
object-fit: contain;
}
}
}
</style>

View File

@ -11,21 +11,14 @@
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-select
<el-input
v-model="selectName"
filterable
clearable
placeholder="请输入名称"
style="width: 500px"
>
<el-option
v-for="item in prjOptions"
:key="item.code"
:label="item.value"
:value="item.value"
/>
</el-select>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -46,8 +39,8 @@
<!-- <el-button type="primary">选取文件</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<el-button type="success" @click="openDia(0)" >上传前置审查资料</el-button>
<el-button type="primary" @click="openDia(1)" >上传销号佐证材料</el-button>
<!-- <el-button type="success" @click="openDia(0)">上传前置审查资料</el-button>-->
<!-- <el-button type="primary" @click="openDia(1)">上传销号佐证材料</el-button>-->
<!-- <el-button type="primary" @click="openDia(2)" >上传风险作业计划</el-button>-->
<!-- <el-button type="success" @click="isOpenDialog=true">物资上传</el-button>-->
<el-upload
@ -93,6 +86,7 @@
:key="item.code"
:label="item.value"
:value="item.code"
@click.native="setSelectItemUpload(item)"
/>
<!-- @click.native="setSelectItemUpload(item)"-->
@ -111,13 +105,13 @@
v-model="upLoadZynrName"
clearable
filterable
multiple
:disabled="diaDisabled"
:disabled="diaDisabled||zyzynrdis"
placeholder="请输入名称"
style="width: 400px"
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="8"
>
<!-- @click.native="setSelectItemZynr(item)"-->
@ -126,6 +120,7 @@
:key="item.code"
:label="item.value"
:value="item.code"
/>
</el-select>
</el-form-item>
@ -156,7 +151,7 @@
:auto-upload="false"
:on-exceed="handleExceed"
:on-change="handleFileChange"
accept=".xls,.xlsx,.zip,.doc,.docx"
accept=".xls,.xlsx,.doc,.docx,.png,.pdf"
:limit="1"
>
<!-- :on-change="handleFileChange"-->
@ -203,7 +198,8 @@
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="建管单位" align="center" prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="单位" width="180" align="center"
prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="现场名称" align="center" prop="siteName" :show-overflow-tooltip="true" width="300">
</el-table-column>
@ -229,11 +225,23 @@
</el-table-column>
<el-table-column label="状态" align="center" prop="cancelNumStatus" :show-overflow-tooltip="false" width="120"/>
<el-table-column label="操作" align="center"
width="150"
width="450"
fixed="right"
:show-overflow-tooltip="false" >
<template #default="scope">
<div style="display:flex;justify-content: center;">
<el-button
type="primary"
link
v-show="!(scope.row.preReviewMaterialsStatus!=''&&scope.row.preReviewMaterialsStatus!=null)"
@click="changeFun(scope.row,0,'newUp')"
>上传前置审查资料</el-button>
<el-button
type="primary"
link
v-show="(!(scope.row.cancelNumStatus!=''&&scope.row.cancelNumStatus!=null))&&scope.row.preReviewMaterialsStatus=='已许可'"
@click="changeFun(scope.row,1,'newUp')"
>上传销号佐证材料</el-button>
<el-button
type="primary"
link
@ -283,7 +291,7 @@ const submitUpload1 = () => {
.then(data => {
//
upload1.value.clearFiles();
ElMessage.success('上传成功')
ElMessage.success(data.msg)
file2.value=null
resetQuery()
}).then(res=>{
@ -405,20 +413,28 @@ const downmloadFile=(row,num)=>{
}
let isNewUp=ref(true)
let currentRow= ref({})
const changeFun=(row,pay)=>{
let zyzynrdis=ref(true)
const changeFun=(row,pay,op)=>{
console.log(row,'585')
currentRow.value=row
console.log(pay!==false,'pay!==false')
if(pay!==false){
isNewUp.value=false
}else {
if(op=='newUp'){
isNewUp.value=true
// if(pay!==false){
// isNewUp.value=false
// }else {
// isNewUp.value=true
// }
}else {
isNewUp.value=false
}
console.log(row)
console.log(upLoadZynrName,'000')
diaDisabled.value=true
openDia(pay)
upLoadname.value=row.id
upLoadZynrName.value=row.id
// upLoadZynrName.value=row.workContent.split(',')
// upLoadZynrName upLoadname
if(pay==0){
@ -426,8 +442,8 @@ const changeFun=(row,pay)=>{
"preReviewMaterialsId":row.preReviewMaterialsId, //id
"cancelNumId":'', //Id
}).then(res=>{
console.log(res)
upLoadZynrName.value=res.data.preReviewWorkContentId
console.log(res,'前置审查资料id')
console.log(upLoadZynrName,111)
})
}else if(pay==1){
@ -436,7 +452,7 @@ const changeFun=(row,pay)=>{
"cancelNumId":row.cancelNumId, //Id
}).then(res=>{
console.log(res)
upLoadZynrName.value=res.data.cancelNumWorkContentId
// upLoadZynrName.value=res.data.cancelNumWorkContentId
})
}
}
@ -476,7 +492,7 @@ const closeDialog=()=>{
upLoadname.value=''
qzscId.value=''
isNewUp.value=true
upLoadZynrName.value=[]
upLoadZynrName.value=''
upLoadOrName.value=''
diaDisabled.value=false
reDia.value=0
@ -678,9 +694,8 @@ const setSelectItem=(item)=>{
selectName.value=item.value
}
const setSelectItemUpload=(item)=>{
console.log(item)
selectItemUpload.value=JSON.parse(JSON.stringify(item))
upLoadname.value=item.value
console.log(upLoadZynrName,'upLoadZynrName')
upLoadZynrName.value=item.code
}
const setSelectItemZynr=(item)=>{
console.log(item,'作业内容')
@ -746,7 +761,7 @@ const submitUpload = () => {
const formData = new FormData();
formData.append('file', file.value);
formData.append('siteNameId', upLoadname.value);
formData.append('workContents', upLoadZynrName.value.join(','));
// formData.append('workContents', upLoadZynrName.value);
if(diaType.value==0){
formData.append('preReviewId', qzscId.value);
formData.append('preViewName', upLoadOrName.value);
@ -764,7 +779,7 @@ const submitUpload = () => {
value:''
}
upLoadname.value=''
upLoadZynrName.value=[]
upLoadZynrName.value=''
upLoadOrName.value=''
console.log('Success:', data);
//
@ -815,7 +830,7 @@ const submitUpload = () => {
value:''
}
upLoadname.value=''
upLoadZynrName.value=[]
upLoadZynrName.value=''
upLoadOrName.value=''
console.log('Success:', data);

View File

@ -11,21 +11,21 @@
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-select
<el-input
v-model="selectName"
filterable
clearable
placeholder="请输入名称"
style="width: 500px"
>
<el-option
v-for="item in prjOptions"
:key="item.code"
:label="item.value"
:value="item.value"
/>
</el-select>
<!-- <el-option-->
<!-- v-for="item in prjOptions"-->
<!-- :key="item.code"-->
<!-- :label="item.value"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- -->
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -105,7 +105,6 @@
v-model="upLoadZynrName"
clearable
filterable
multiple
:disabled="diaDisabled"
placeholder="请输入名称"
style="width: 400px"
@ -198,7 +197,7 @@
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="建管单位" align="center" prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="单位" width="180" align="center" prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="现场名称" align="center" prop="siteName" :show-overflow-tooltip="true" width="300">
</el-table-column>
@ -265,7 +264,9 @@
// import { list as recordList,reUploadDrawing,reUploadBudgetDrawing,prjInfoDrawingUploadList,
// prjInfoBudgetUploadList,prjInfoList as getPrjList,uploadDrawing as importCm ,
// uploadBudgetDrawing as importCm1,deleteInfo as deleteitem} from '@/api/jj/gctzgl'
import { list as recordList,listSiteName as getPrjList,listWorkContent as prjInfoDrawingUploadList,uploadPreReviewFile as importCm,uploadCancelNumFile as importCm1} from '@/api/qzxscxkyxh/index.js'
import { list as recordList,listSiteName as getPrjList,listWorkContent as prjInfoDrawingUploadList,
uploadPreReviewFile as importCm,
uploadCancelNumFile as importCm1} from '@/api/qzxscxkyxh/index.js'
import { getOne } from '@/api/jj/gctzgl.js'
// ,importCm,importCm1,deleteitem
@ -329,6 +330,7 @@ const approve=()=>{
spyj.value=''
checkedCities.value=[]
isOpenDialog.value=false
resetQuery()
})
}else if(diaType.value==1){
updateApproval({
@ -358,6 +360,7 @@ const approve=()=>{
spyj.value=''
checkedCities.value=[]
isOpenDialog.value=false
resetQuery()
})
}
@ -947,7 +950,7 @@ const submitUpload = () => {
formData.append('file', file.value);
formData.append('preReviewId', qzscId.value);
formData.append('siteNameId', upLoadname.value);
formData.append('workContents', upLoadZynrName.value.join(','));
formData.append('workContents', upLoadZynrName.value);
formData.append('preViewName', upLoadOrName.value);
// 使 fetch
if(diaType.value==0){

View File

@ -443,7 +443,7 @@ const submitUpload = () => {
console.log('Success:', data);
//
upload.value.clearFiles();
ElMessage.success('上传成功')
// ElMessage.success('')
file.value=null
selectItem.value.id=''
selectItem.value.name=''

View File

@ -0,0 +1,469 @@
<template>
<div style="padding: 20px">
<kanban pageTitle="2025年关键任务指标一览表">
<template v-slot:default>
<div class="search_box">
<div class="search_item">
<el-form :model="form" label-width="80px">
<el-form-item style="width: 500px;" label="单位">
<el-input v-model="form.fileName" placeholder="单位" ></el-input>
</el-form-item>
<el-form-item style="width: 500px;" label="指标">
<el-input v-model="form.zb" placeholder="请输入指标名称" ></el-input>
</el-form-item>
<el-form-item style="width: 370px;">
<el-button
@click="queryList"
icon="Search"
class="el-button--cyan"
size="mini"
>查询</el-button
>
<el-button
style="margin-right: 12px;"
@click="reset"
icon="Refresh"
type="default"
size="mini"
>重置</el-button
>
<div>
<!-- <el-upload-->
<!-- ref="upload"-->
<!-- action=""-->
<!-- :auto-upload="false"-->
<!-- :on-exceed="handleExceed"-->
<!-- :on-change="handleFileChange"-->
<!-- accept=".xls,.xlsx,.doc,.docx,.png,.pdf"-->
<!-- :limit="1"-->
<!-- >-->
<!-- &lt;!&ndash; :on-change="handleFileChange"&ndash;&gt;-->
<!-- -->
<!-- <template #trigger>-->
<!-- <el-button style="transform: translateY(4px)" type="primary" @click="submitUpload">上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<!-- <el-upload-->
<!-- ref="upload1"-->
<!-- action="#"-->
<!-- :http-request="submitUpload1"-->
<!-- :on-change="handleFileChange1"-->
<!-- accept=".xls,.xlsx"-->
<!-- :show-file-list="false"-->
<!-- :limit="1"-->
<!-- >-->
<!-- <template #trigger>-->
<!-- <el-button style="transform: translateY(-1px)" type="primary" @click="submitUpload">上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
</div>
<!-- <FileUpload ref="upload" title="上传文件" :fileType="['xls','xlsx','doc','docx','pdf'] " url="/zhFile/uploadFile?useScope=3&useScopeRemark=专项工作" :isShowTip="false" @reset="reset"></FileUpload>-->
</el-form-item>
</el-form>
</div>
</div>
</template>
</kanban>
<div style="padding: 20px;
box-shadow: 0px 0px 8px 1px rgba(180, 190, 199, 0.5);
overflow-x: auto;
border-radius: 6px;background-color: #fff;"
class="tableWrapCon">
<el-table v-loading="loading" :data="tableList"
:header-cell-style="{ background:'rgb(244, 249, 253)',border:'1px solid rgb(235, 238, 242,.5)' }">
<el-table-column label="序号" type="index" width="60" align="center">
<template #default="scope">
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="单位" width="" align="center"
prop="a" :show-overflow-tooltip="false"/>
<el-table-column label="指标" align="center" prop="b" :show-overflow-tooltip="true" width="300">
<template #default="scope">
<div style="position: relative"></div>
{{scope.row.b}}<img style="position: absolute;width: 18px;height: 18px;transform: translateY(5px)" src="@/assets/images/gthz.png">
</template>
</el-table-column>
<el-table-column label="完成数" width="" align="center" prop="c" :show-overflow-tooltip="true">
<template #default="scope">
<el-tooltip
popper-class="popperClass"
effect="light"
placement="top"
v-if="scope.$index==3||scope.$index==4"
>
<template #content>
<el-table :data="tableData1">
<el-table-column label="名称" align="center" prop="a1" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div @click="pp(scope)" style="position: relative;">
{{scope.row.c}}<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.c}} </div>
</template>
</el-table-column>
<el-table-column label="计划数" align="center" prop="d" :show-overflow-tooltip="false">
<template #default="scope">
<el-tooltip
popper-class="popperClass"
effect="light"
placement="top"
style="transform: translateX(120px)"
v-if="scope.$index==3||scope.$index==4"
>
<template #content>
<el-table :data="tableData1">
<el-table-column label="名称" align="center" prop="a1" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div @click="pp(scope)" style="position: relative">
{{scope.row.d}}<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.d}} </div>
</template>
</el-table-column>
<el-table-column label="完成率" align="center" prop="e" :show-overflow-tooltip="false">
<template #default="scope">
<el-tooltip
effect="light"
:popper-style="{transform: 'translateX(180px)'}"
placement="top-start"
v-if="(scope.row.a=='国网天津公司'&&scope.row.b=='电网建设质效')||
(scope.row.a=='国网经研院'&&scope.row.b=='项目评审支撑指教')"
>
<template #content>
<el-table :data="tableData2" v-if="scope.row.b=='电网建设质效'" >
<el-table-column label="名称" align="center" prop="a1" width="120" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
<el-table :data="tableData3" v-if="scope.row.b=='项目评审支撑指教'">
<el-table-column label="名称" align="center" prop="a1" width="120" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div style="position: relative">
{{scope.row.e}}
<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.e}} </div>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="pageNo"
v-model:limit="pageSize"
@pagination="getList"
/>
</div>
<FilePreview ref="filePreviewModel" :filePreviewUrl="url" @hideClose="close" :extenson="extenson" />
</div>
</template>
<script setup>
import kanban from "@/components/kanban";
import bTable from "@/components/bTable";
import { listFile,delFile,getOne,uploadFile as importCm1 } from "@/api/zx";
import {onMounted, ref} from "vue";
import {ElMessage} from "element-plus";
const { proxy } = getCurrentInstance()
const pp=(row)=>{
console.log(row)
}
onMounted(()=>{
// tableData1.value=[
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// ]
})
let tableData1=ref([
{a1:'基建',b1:'',c1:'',d1:''},
{a1:'组塔',b1:'',c1:'',d1:''},
{a1:'土建',b1:'',c1:'',d1:''},
{a1:'安装',b1:'',c1:'',d1:''},
])
let tableData2=ref([
{a1:'开工规模',b1:'',c1:'',d1:''},
{a1:'投产规模',b1:'',c1:'',d1:''},
{a1:'开工数量',b1:'',c1:'',d1:''},
{a1:'投产数量',b1:'',c1:'',d1:''},
{a1:'属地化任务',b1:'',c1:'',d1:''},
])
let tableData3=ref([
{a1:'完成项目评审',b1:'',c1:'',d1:''},
{a1:'完成项目内审',b1:'',c1:'',d1:''},
{a1:'重要支撑工作',b1:'',c1:'',d1:''},
])
const columns = [
{ label: "单位", prop: "a", width: "150px" },
{ label: "指标", prop: "b", itemWidth: "200px" },
{ label: "完成数", prop: "c", itemWidth: "200px" },
{ label: "计划数", prop: "d", itemWidth: "200px" },
{ label: "完成率", prop: "e", itemWidth: "200px" },
];
const table_buttons=['预览','下载','删除']
const form = ref({
fileName: "",
useScope:'13',
zb:''
});
const file1 = ref(null);
const handleFileChange1 = (fileObj) => {
console.log(fileObj)
file1.value = fileObj.raw;
};
let upload1=ref(null)
const submitUpload1 = () => {
const formData = new FormData();
formData.append('file', file1.value);
formData.append('useScope', 13);
formData.append('useScopeRemark', 13);
// 使 fetch
importCm1(formData).then(response => response)
.then(data => {
//
upload1.value.clearFiles();
ElMessage.success('上传成功')
file1.value=null
queryList()
}).then(res=>{
if(res.code==200){
ElMessage.success(res.msg)
}
})
return
};
const filePreviewModel=ref(null)
const pageNo = ref(1);
const pageSize = ref(10);
const tableList = ref([]);
const selectList = ref([]);
const totals = ref(0);
const extenson=ref('');
const url=ref('')
const queryList = () => {
// console.log(pageNo.value,pageSize.value,'ss')
// listFile({pageNum: pageNo.value,
// pageSize: pageSize.value},{
// fileName: form.value.fileName,
// useScope: 13
// }).then((res) => {
// tableList.value = res.rows;
// totals.value = res.total;
// });
tableList.value=[
{
a:'国网天津公司',
b:'电网建设质效',
c:'--',
d:'--',
e:'100%'
},
{
a:'国网建设公司',
b:'投产任务完成率',
c:'3',
d:'2',
e:'100%'
},
{
a:'国网建设公司',
b:'开工任务完成率',
c:'3',
d:'2',
e:'100%'
},
{
a:'天津送变电工程有限公司',
b:'电网建设质效',
c:'3',
d:'2',
e:'100%'
},
{
a:'三源公司',
b:'电网建设质效',
c:'3',
d:'2',
e:'100%'
},
{
a:'送变电',
b:'工程机械化施工率',
c:'3',
d:'2',
e:'100%'
},
{
a:'国网经研院',
b:'项目评审支撑指教',
c:'--',
d:'--',
e:'100%'
},
]
};
//
const deleted=(scope)=>{
delFile({id:scope.row.id}).then(res=>{
proxy.$modal.msgSuccess('删除成功');
queryList();
})
}
//
const preview=(scope)=>{
getOne({id:scope.row.id}).then(res=>{
extenson.value = '.' + scope.row.fileName.split('.').pop();
const blob = new Blob([res]);
url.value = window.URL.createObjectURL(blob);
filePreviewModel.value.open();
})
}
const close=()=>{
window.URL.revokeObjectURL(url.value);
}
//
const download = (scope) => {
//
getOne({ id: scope.row.id }).then((res) => {
//
if (res) {
// res Blob
const blob = new Blob([res]);
// URL Blob
const url = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement('a');
link.href = url;
link.download = scope.row.fileName || 'downloaded-file'; //
document.body.appendChild(link); // DOM
link.click(); //
document.body.removeChild(link); //
// URL
window.URL.revokeObjectURL(url);
} else {
console.error('File data is invalid or empty');
}
}).catch((error) => {
console.error('Error while fetching file:', error);
});
};
const reset = () => {
pageNo.value = 1;
pageSize.value = 10;
form.value = {
fileName: "",
useScope: "3",
zb:''
};
queryList();
};
queryList();
</script>
<style scoped lang="less">
/deep/ .el-input {
height: 38px;
}
/deep/.el-button {
height: 30px !important;
}
.search_box/deep/ .el-form-item__label {
font-weight: 500;
font-family: "Regular";
color: #607181;
padding: 0 0.625rem 0 0 !important;
// line-height: 2.1875rem;
line-height: 38px;
}
.search_box {
display: flex;
flex-direction: row;
align-items: center;
padding: 0px 10px;
height: 70px;
background-color: rgba(255, 255, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(242, 242, 242, 1);
border-radius: 0px;
.search_item {
flex: 4;
height: 120%;
display: flex;
align-items: center;
flex-direction: row;
}
/deep/.el-form-item {
margin-bottom: 0 !important;
}
/deep/.el-form {
width:100%;
height: 100%;
display: flex;
align-items: center;
flex-direction: row;
justify-content: space-between;
}
.search_button {
flex: 1;
display: flex;
align-items: center;
height: 100%;
.se {
background-color: #4ba8ff;
border: 0;
}
.re {
border: 0;
color: gray;
border: #cccccc 1px solid;
background-color: transparent;
}
}
}
.mainOfd{
height: 100%;
background: rgb(128, 128, 128);
padding: 0px;
position: absolute;
width: 100%;
}
</style>

View File

@ -11,20 +11,13 @@
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-select
<el-input
v-model="selectName"
filterable
placeholder="请输入名称"
style="width: 500px"
>
<el-option
v-for="item in prjOptions"
:key="item.code"
:label="item.value"
@click.native="setSelectItem(item)"
:value="item.value"
/>
</el-select>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -45,7 +38,7 @@
<!-- <el-button type="primary">选取文件</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<el-button type="success" @click="isOpenDialog=true">设计上传</el-button>
<el-button type="success" @click="getTemplate">下载模板</el-button>
<!-- <el-button type="success" @click="isOpenDialog=true">物资上传</el-button>-->
<el-upload
ref="upload1"
@ -134,33 +127,41 @@
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="工程名称" align="center" prop="projectDefinitionDescription" :show-overflow-tooltip="false"/>
<el-table-column label="工程编码" align="center" prop="projectDefinition" :show-overflow-tooltip="false"/>
<el-table-column label="更新时间" align="center" prop="updateTime" :show-overflow-tooltip="false"/>
<el-table-column label="操作" align="center"
width="500"
fixed="right"
:show-overflow-tooltip="false" >
<template #default="scope">
<div style="display:flex;justify-content: center;">
<el-button
type="primary"
link
@click="editFun(scope.row,1)"
>采购误差及进度详情</el-button>
<el-button
type="primary"
link
@click="editFun(scope.row,2)"
>采购明细详情</el-button>
<el-button
type="primary"
link
@click="saveFun(scope.row)"
>删除</el-button>
</div>
</template>
</el-table-column>
<el-table-column width="200" label="上报单位" align="center" prop="reportingUnit" :show-overflow-tooltip="false"/>
<el-table-column width="300" label="原集体企业名称" align="center" prop="originalCollectiveEnterpriseName" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="原集体企业属地(直接)管理单位" align="center" prop="originalCollectiveEnterpriseLocation" :show-overflow-tooltip="false"/>
<el-table-column width="400" label="工程名称" align="center" prop="projectName" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="工程类型(系统内、系统外)" align="center" prop="projectType" :show-overflow-tooltip="false"/>
<el-table-column width="300" label="发包单位" align="center" prop="contractingUnit" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="中标时间" align="center" prop="bidWinningDate" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="中标金额(万元)" align="center" prop="bidWinningAmount" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="开工日期" align="center" prop="startDate" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="竣工日期" align="center" prop="completionDate" :show-overflow-tooltip="false"/>
<el-table-column width="200" label="备注" align="center" prop="remarks" :show-overflow-tooltip="false"/>
<!-- <el-table-column label="操作" align="center"-->
<!-- width="500"-->
<!-- fixed="right"-->
<!-- :show-overflow-tooltip="false" >-->
<!-- <template #default="scope">-->
<!-- <div style="display:flex;justify-content: center;">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- link-->
<!-- @click="editFun(scope.row,1)"-->
<!-- >采购误差及进度详情</el-button>-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- link-->
<!-- @click="editFun(scope.row,2)"-->
<!-- >采购明细详情</el-button>-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- link-->
<!-- @click="saveFun(scope.row)"-->
<!-- >删除</el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total > 0"
@ -175,7 +176,8 @@
</template>
<script setup name="dataService">
import { recordList,getPrjList,importCm,importCm1,deleteitem } from '@/api/wzybz'
import { getPrjList,importCm,deleteitem } from '@/api/wzybz'
import { recordList,exportBasic,importData as importCm1} from '@/api/dw'
import {defineProps, onMounted, ref} from 'vue';
const { proxy } = getCurrentInstance();
@ -231,6 +233,19 @@ let rowOpenFun=(rowData) => {
//
const importData=()=>{
}
const getTemplate=()=>{
exportBasic().then(response=>{
console.log(response)
const file = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const url = URL.createObjectURL(file);
const link = document.createElement('a');
link.href = url;
let na=setName(props.pageType)
link.setAttribute('download', '模板'+'.xlsx'); //
document.body.appendChild(link);
link.click();
})
}
const setName=(payload)=>{
console.log(payload)
@ -344,7 +359,7 @@ let getList = () => {
pageSize:pageSize.value,
pageNum:pageNo.value,
},{
projectName: selectName.value,
reportingUnit: selectName.value,
}).then(res=>{
console.log(res)
loading.value = false

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,469 @@
<template>
<div style="padding: 20px">
<kanban pageTitle="2025年关键任务指标一览表">
<template v-slot:default>
<div class="search_box">
<div class="search_item">
<el-form :model="form" label-width="80px">
<el-form-item style="width: 500px;" label="单位">
<el-input v-model="form.fileName" placeholder="单位" ></el-input>
</el-form-item>
<el-form-item style="width: 500px;" label="指标">
<el-input v-model="form.zb" placeholder="请输入指标名称" ></el-input>
</el-form-item>
<el-form-item style="width: 370px;">
<el-button
@click="queryList"
icon="Search"
class="el-button--cyan"
size="mini"
>查询</el-button
>
<el-button
style="margin-right: 12px;"
@click="reset"
icon="Refresh"
type="default"
size="mini"
>重置</el-button
>
<div>
<!-- <el-upload-->
<!-- ref="upload"-->
<!-- action=""-->
<!-- :auto-upload="false"-->
<!-- :on-exceed="handleExceed"-->
<!-- :on-change="handleFileChange"-->
<!-- accept=".xls,.xlsx,.doc,.docx,.png,.pdf"-->
<!-- :limit="1"-->
<!-- >-->
<!-- &lt;!&ndash; :on-change="handleFileChange"&ndash;&gt;-->
<!-- -->
<!-- <template #trigger>-->
<!-- <el-button style="transform: translateY(4px)" type="primary" @click="submitUpload">上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<!-- <el-upload-->
<!-- ref="upload1"-->
<!-- action="#"-->
<!-- :http-request="submitUpload1"-->
<!-- :on-change="handleFileChange1"-->
<!-- accept=".xls,.xlsx"-->
<!-- :show-file-list="false"-->
<!-- :limit="1"-->
<!-- >-->
<!-- <template #trigger>-->
<!-- <el-button style="transform: translateY(-1px)" type="primary" @click="submitUpload">上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
</div>
<!-- <FileUpload ref="upload" title="上传文件" :fileType="['xls','xlsx','doc','docx','pdf'] " url="/zhFile/uploadFile?useScope=3&useScopeRemark=专项工作" :isShowTip="false" @reset="reset"></FileUpload>-->
</el-form-item>
</el-form>
</div>
</div>
</template>
</kanban>
<div style="padding: 20px;
box-shadow: 0px 0px 8px 1px rgba(180, 190, 199, 0.5);
overflow-x: auto;
border-radius: 6px;background-color: #fff;"
class="tableWrapCon">
<el-table v-loading="loading" :data="tableList"
:header-cell-style="{ background:'rgb(244, 249, 253)',border:'1px solid rgb(235, 238, 242,.5)' }">
<el-table-column label="序号" type="index" width="60" align="center">
<template #default="scope">
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="单位" width="" align="center"
prop="a" :show-overflow-tooltip="false"/>
<el-table-column label="指标" align="center" prop="b" :show-overflow-tooltip="true" width="300">
<template #default="scope">
<div style="position: relative"></div>
{{scope.row.b}}<img style="position: absolute;width: 18px;height: 18px;transform: translateY(5px)" src="@/assets/images/gthz.png">
</template>
</el-table-column>
<el-table-column label="完成数" width="" align="center" prop="c" :show-overflow-tooltip="true">
<template #default="scope">
<el-tooltip
popper-class="popperClass"
effect="light"
placement="top"
v-if="scope.$index==3||scope.$index==4"
>
<template #content>
<el-table :data="tableData1">
<el-table-column label="名称" align="center" prop="a1" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div @click="pp(scope)" style="position: relative;">
{{scope.row.c}}<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.c}} </div>
</template>
</el-table-column>
<el-table-column label="计划数" align="center" prop="d" :show-overflow-tooltip="false">
<template #default="scope">
<el-tooltip
popper-class="popperClass"
effect="light"
placement="top"
style="transform: translateX(120px)"
v-if="scope.$index==3||scope.$index==4"
>
<template #content>
<el-table :data="tableData1">
<el-table-column label="名称" align="center" prop="a1" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div @click="pp(scope)" style="position: relative">
{{scope.row.d}}<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.d}} </div>
</template>
</el-table-column>
<el-table-column label="完成率" align="center" prop="e" :show-overflow-tooltip="false">
<template #default="scope">
<el-tooltip
effect="light"
:popper-style="{transform: 'translateX(180px)'}"
placement="top-start"
v-if="(scope.row.a=='国网天津公司'&&scope.row.b=='电网建设质效')||
(scope.row.a=='国网经研院'&&scope.row.b=='项目评审支撑指教')"
>
<template #content>
<el-table :data="tableData2" v-if="scope.row.b=='电网建设质效'" >
<el-table-column label="名称" align="center" prop="a1" width="120" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
<el-table :data="tableData3" v-if="scope.row.b=='项目评审支撑指教'">
<el-table-column label="名称" align="center" prop="a1" width="120" :show-overflow-tooltip="false"/>
<el-table-column label="完成值" align="center" prop="b1" :show-overflow-tooltip="false"/>
<el-table-column label="计划值" align="center" prop="c1" :show-overflow-tooltip="false"/>
<el-table-column label="完成比" align="center" prop="d1" :show-overflow-tooltip="false"/>
</el-table>
</template>
<div style="position: relative">
{{scope.row.e}}
<img style="position: absolute;width: 13px;height: 13px;margin-left: 6px;transform: translateY(3px)" src="@/assets/images/eyes.png">
</div>
</el-tooltip>
<div v-else style="display: flex;justify-content: center">
{{scope.row.e}} </div>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="pageNo"
v-model:limit="pageSize"
@pagination="getList"
/>
</div>
<FilePreview ref="filePreviewModel" :filePreviewUrl="url" @hideClose="close" :extenson="extenson" />
</div>
</template>
<script setup>
import kanban from "@/components/kanban";
import bTable from "@/components/bTable";
import { listFile,delFile,getOne,uploadFile as importCm1 } from "@/api/zx";
import {onMounted, ref} from "vue";
import {ElMessage} from "element-plus";
const { proxy } = getCurrentInstance()
const pp=(row)=>{
console.log(row)
}
onMounted(()=>{
// tableData1.value=[
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// {a:'',b:'',c:'',d:''},
// ]
})
let tableData1=ref([
{a1:'基建',b1:'',c1:'',d1:''},
{a1:'组塔',b1:'',c1:'',d1:''},
{a1:'土建',b1:'',c1:'',d1:''},
{a1:'安装',b1:'',c1:'',d1:''},
])
let tableData2=ref([
{a1:'开工规模',b1:'',c1:'',d1:''},
{a1:'投产规模',b1:'',c1:'',d1:''},
{a1:'开工数量',b1:'',c1:'',d1:''},
{a1:'投产数量',b1:'',c1:'',d1:''},
{a1:'属地化任务',b1:'',c1:'',d1:''},
])
let tableData3=ref([
{a1:'完成项目评审',b1:'',c1:'',d1:''},
{a1:'完成项目内审',b1:'',c1:'',d1:''},
{a1:'重要支撑工作',b1:'',c1:'',d1:''},
])
const columns = [
{ label: "单位", prop: "a", width: "150px" },
{ label: "指标", prop: "b", itemWidth: "200px" },
{ label: "完成数", prop: "c", itemWidth: "200px" },
{ label: "计划数", prop: "d", itemWidth: "200px" },
{ label: "完成率", prop: "e", itemWidth: "200px" },
];
const table_buttons=['预览','下载','删除']
const form = ref({
fileName: "",
useScope:'13',
zb:''
});
const file1 = ref(null);
const handleFileChange1 = (fileObj) => {
console.log(fileObj)
file1.value = fileObj.raw;
};
let upload1=ref(null)
const submitUpload1 = () => {
const formData = new FormData();
formData.append('file', file1.value);
formData.append('useScope', 13);
formData.append('useScopeRemark', 13);
// 使 fetch
importCm1(formData).then(response => response)
.then(data => {
//
upload1.value.clearFiles();
ElMessage.success('上传成功')
file1.value=null
queryList()
}).then(res=>{
if(res.code==200){
ElMessage.success(res.msg)
}
})
return
};
const filePreviewModel=ref(null)
const pageNo = ref(1);
const pageSize = ref(10);
const tableList = ref([]);
const selectList = ref([]);
const totals = ref(0);
const extenson=ref('');
const url=ref('')
const queryList = () => {
// console.log(pageNo.value,pageSize.value,'ss')
// listFile({pageNum: pageNo.value,
// pageSize: pageSize.value},{
// fileName: form.value.fileName,
// useScope: 13
// }).then((res) => {
// tableList.value = res.rows;
// totals.value = res.total;
// });
tableList.value=[
{
a:'国网天津公司',
b:'电网建设质效',
c:'--',
d:'--',
e:'100%'
},
{
a:'国网建设公司',
b:'投产任务完成率',
c:'3',
d:'2',
e:'100%'
},
{
a:'国网建设公司',
b:'开工任务完成率',
c:'3',
d:'2',
e:'100%'
},
{
a:'天津送变电工程有限公司',
b:'电网建设质效',
c:'3',
d:'2',
e:'100%'
},
{
a:'三源公司',
b:'电网建设质效',
c:'3',
d:'2',
e:'100%'
},
{
a:'送变电',
b:'工程机械化施工率',
c:'3',
d:'2',
e:'100%'
},
{
a:'国网经研院',
b:'项目评审支撑指教',
c:'--',
d:'--',
e:'100%'
},
]
};
//
const deleted=(scope)=>{
delFile({id:scope.row.id}).then(res=>{
proxy.$modal.msgSuccess('删除成功');
queryList();
})
}
//
const preview=(scope)=>{
getOne({id:scope.row.id}).then(res=>{
extenson.value = '.' + scope.row.fileName.split('.').pop();
const blob = new Blob([res]);
url.value = window.URL.createObjectURL(blob);
filePreviewModel.value.open();
})
}
const close=()=>{
window.URL.revokeObjectURL(url.value);
}
//
const download = (scope) => {
//
getOne({ id: scope.row.id }).then((res) => {
//
if (res) {
// res Blob
const blob = new Blob([res]);
// URL Blob
const url = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement('a');
link.href = url;
link.download = scope.row.fileName || 'downloaded-file'; //
document.body.appendChild(link); // DOM
link.click(); //
document.body.removeChild(link); //
// URL
window.URL.revokeObjectURL(url);
} else {
console.error('File data is invalid or empty');
}
}).catch((error) => {
console.error('Error while fetching file:', error);
});
};
const reset = () => {
pageNo.value = 1;
pageSize.value = 10;
form.value = {
fileName: "",
useScope: "3",
zb:''
};
queryList();
};
queryList();
</script>
<style scoped lang="less">
/deep/ .el-input {
height: 38px;
}
/deep/.el-button {
height: 30px !important;
}
.search_box/deep/ .el-form-item__label {
font-weight: 500;
font-family: "Regular";
color: #607181;
padding: 0 0.625rem 0 0 !important;
// line-height: 2.1875rem;
line-height: 38px;
}
.search_box {
display: flex;
flex-direction: row;
align-items: center;
padding: 0px 10px;
height: 70px;
background-color: rgba(255, 255, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(242, 242, 242, 1);
border-radius: 0px;
.search_item {
flex: 4;
height: 120%;
display: flex;
align-items: center;
flex-direction: row;
}
/deep/.el-form-item {
margin-bottom: 0 !important;
}
/deep/.el-form {
width:100%;
height: 100%;
display: flex;
align-items: center;
flex-direction: row;
justify-content: space-between;
}
.search_button {
flex: 1;
display: flex;
align-items: center;
height: 100%;
.se {
background-color: #4ba8ff;
border: 0;
}
.re {
border: 0;
color: gray;
border: #cccccc 1px solid;
background-color: transparent;
}
}
}
.mainOfd{
height: 100%;
background: rgb(128, 128, 128);
padding: 0px;
position: absolute;
width: 100%;
}
</style>

294
src/views/pages/jh/jhzb.vue Normal file
View File

@ -0,0 +1,294 @@
<template>
<div style="padding: 20px">
<kanban pageTitle="计划周报">
<template v-slot:default>
<div class="search_box">
<div class="search_item">
<el-form :model="form" label-width="80px">
<el-form-item style="width: 500px;" label="文件名称">
<el-input v-model="form.fileName" placeholder="请输入文件名称" ></el-input>
</el-form-item>
<el-form-item style="width: 370px;">
<el-button
@click="queryList"
icon="Search"
class="el-button--cyan"
size="mini"
>查询</el-button
>
<el-button
style="margin-right: 12px;"
@click="reset"
icon="Refresh"
type="default"
size="mini"
>重置</el-button
>
<div>
<!-- <el-upload-->
<!-- ref="upload"-->
<!-- action=""-->
<!-- :auto-upload="false"-->
<!-- :on-exceed="handleExceed"-->
<!-- :on-change="handleFileChange"-->
<!-- accept=".xls,.xlsx,.doc,.docx,.png,.pdf"-->
<!-- :limit="1"-->
<!-- >-->
<!-- &lt;!&ndash; :on-change="handleFileChange"&ndash;&gt;-->
<!-- -->
<!-- <template #trigger>-->
<!-- <el-button style="transform: translateY(4px)" type="primary" @click="submitUpload">上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<el-upload
ref="upload1"
action="#"
:http-request="submitUpload1"
:on-change="handleFileChange1"
accept=".xls,.xlsx"
:show-file-list="false"
:limit="1"
>
<template #trigger>
<el-button style="transform: translateY(-1px)" type="primary" @click="submitUpload">上传</el-button>
</template>
</el-upload>
</div>
<!-- <FileUpload ref="upload" title="上传文件" :fileType="['xls','xlsx','doc','docx','pdf'] " url="/zhFile/uploadFile?useScope=3&useScopeRemark=专项工作" :isShowTip="false" @reset="reset"></FileUpload>-->
</el-form-item>
</el-form>
</div>
</div>
</template>
</kanban>
<div
style="
padding: 20px;
box-shadow: 0px 0px 8px 1px rgba(180, 190, 199, 0.5);
border-radius: 6px;
background-color: #fff;
"
>
<b-table
:tableData="tableList"
:buttons="table_buttons"
:column="columns"
@delete="deleted"
@lPreview="preview"
@lDownload="download"
:page-no="pageNo"
:page-size="pageSize"
></b-table>
<pagination
v-show="totals > 0"
:total="totals"
v-model:page="pageNo"
v-model:limit="pageSize"
@pagination="queryList"
/>
</div>
<FilePreview ref="filePreviewModel" :filePreviewUrl="url" @hideClose="close" :extenson="extenson" />
</div>
</template>
<script setup>
import kanban from "@/components/kanban";
import bTable from "@/components/bTable";
import { listFile,delFile,getOne,uploadFile as importCm1 } from "@/api/zx";
import {ref} from "vue";
import {ElMessage} from "element-plus";
const { proxy } = getCurrentInstance()
const columns = [
{ label: "文件名称", prop: "fileName", width: "150px" },
{ label: "上传时间", prop: "createTime", itemWidth: "200px" },
];
const table_buttons=['预览','下载','删除']
const form = ref({
fileName: "",
useScope:'13',
});
const file1 = ref(null);
const handleFileChange1 = (fileObj) => {
console.log(fileObj)
file1.value = fileObj.raw;
};
let upload1=ref(null)
const submitUpload1 = () => {
const formData = new FormData();
formData.append('file', file1.value);
formData.append('useScope', 13);
formData.append('useScopeRemark', 13);
// 使 fetch
importCm1(formData).then(response => response)
.then(data => {
//
upload1.value.clearFiles();
ElMessage.success('上传成功')
file1.value=null
queryList()
}).then(res=>{
if(res.code==200){
ElMessage.success(res.msg)
}
})
return
};
const filePreviewModel=ref(null)
const pageNo = ref(1);
const pageSize = ref(10);
const tableList = ref([]);
const selectList = ref([]);
const totals = ref(0);
const extenson=ref('');
const url=ref('')
const queryList = () => {
console.log(pageNo.value,pageSize.value,'ss')
listFile({pageNum: pageNo.value,
pageSize: pageSize.value},{
fileName: form.value.fileName,
useScope: 13
}).then((res) => {
tableList.value = res.rows;
totals.value = res.total;
});
};
//
const deleted=(scope)=>{
delFile({id:scope.row.id}).then(res=>{
proxy.$modal.msgSuccess('删除成功');
queryList();
})
}
//
const preview=(scope)=>{
getOne({id:scope.row.id}).then(res=>{
extenson.value = '.' + scope.row.fileName.split('.').pop();
const blob = new Blob([res]);
url.value = window.URL.createObjectURL(blob);
filePreviewModel.value.open();
})
}
const close=()=>{
window.URL.revokeObjectURL(url.value);
}
//
const download = (scope) => {
//
getOne({ id: scope.row.id }).then((res) => {
//
if (res) {
// res Blob
const blob = new Blob([res]);
// URL Blob
const url = window.URL.createObjectURL(blob);
// <a>
const link = document.createElement('a');
link.href = url;
link.download = scope.row.fileName || 'downloaded-file'; //
document.body.appendChild(link); // DOM
link.click(); //
document.body.removeChild(link); //
// URL
window.URL.revokeObjectURL(url);
} else {
console.error('File data is invalid or empty');
}
}).catch((error) => {
console.error('Error while fetching file:', error);
});
};
const reset = () => {
pageNo.value = 1;
pageSize.value = 10;
form.value = {
fileName: "",
useScope: "3",
};
queryList();
};
queryList();
</script>
<style scoped lang="less">
/deep/ .el-input {
height: 38px;
}
/deep/.el-button {
height: 30px !important;
}
.search_box/deep/ .el-form-item__label {
font-weight: 500;
font-family: "Regular";
color: #607181;
padding: 0 0.625rem 0 0 !important;
// line-height: 2.1875rem;
line-height: 38px;
}
.search_box {
display: flex;
flex-direction: row;
align-items: center;
padding: 0px 10px;
height: 70px;
background-color: rgba(255, 255, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(242, 242, 242, 1);
border-radius: 0px;
.search_item {
flex: 4;
height: 120%;
display: flex;
align-items: center;
flex-direction: row;
}
/deep/.el-form-item {
margin-bottom: 0 !important;
}
/deep/.el-form {
width:100%;
height: 100%;
display: flex;
align-items: center;
flex-direction: row;
justify-content: space-between;
}
.search_button {
flex: 1;
display: flex;
align-items: center;
height: 100%;
.se {
background-color: #4ba8ff;
border: 0;
}
.re {
border: 0;
color: gray;
border: #cccccc 1px solid;
background-color: transparent;
}
}
}
.mainOfd{
height: 100%;
background: rgb(128, 128, 128);
padding: 0px;
position: absolute;
width: 100%;
}
</style>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,67 +1,134 @@
<template>
<div class="tableWrap">
<el-form class="queryRef" ref="queryRef" :inline="true" style="position: relative;padding: 20px; box-shadow: 0px 0px 8px 1px rgba(180, 190, 199, 0.5);
<el-form class="queryRef" ref="queryRef"
label-width="140"
lable-position="left"
style="position: relative;padding: 20px; box-shadow: 0px 0px 8px 1px rgba(180, 190, 199, 0.5);
border-radius: 6px;background-color: #fff;margin-bottom: 20px">
<el-form-item label="工程名称:" prop="name" label-position="left" class="labelItem">
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-select
v-model="selectName"
filterable
placeholder="请输入名称"
style="width: 500px"
>
<el-option
v-for="item in prjOptions"
:key="item.code"
:label="item.value"
@click.native="setSelectItem(item)"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
<el-form-item class="ei" style="position: absolute;right: 0px">
<!-- <el-button type="primary" icon="UploadFilled" @click="importData">导入</el-button>-->
<!-- <el-upload-->
<!-- ref="upload"-->
<!-- action=""-->
<!-- :auto-upload="false"-->
<!-- :on-change="handleFileChange"-->
<!-- :before-upload="beforeUpload"-->
<!-- accept=".xls,.xlsx"-->
<!-- :show-file-list="false"-->
<!-- >-->
<!-- <template #trigger>-->
<!-- <el-button type="primary">选取文件</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
<!-- <el-button type="success" @click="openDia(0)">图纸上传</el-button>-->
<!-- <el-button type="primary" @click="openDia(1)">施工图预算上传</el-button>-->
<!-- <el-button type="success" @click="isOpenDialog=true">物资上传</el-button>-->
<!-- <el-upload-->
<!-- ref="upload1"-->
<!-- action="#"-->
<!-- :http-request="submitUpload1"-->
<!-- :on-change="handleFileChange1"-->
<!-- accept=".xls,.xlsx"-->
<!-- :show-file-list="false"-->
<!-- :limit="1"-->
<!-- >-->
<!-- <template #trigger>-->
<!-- <el-button type="primary" @click="isOpenDialog=true">施工图预算上传</el-button>-->
<!-- </template>-->
<!-- </el-upload>-->
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item label="工程名称:" prop="name" label-position="left" class="labelItem" >
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-select
v-model="selectName"
filterable
placeholder="请输入名称"
style="width: 300px"
>
<el-option
v-for="item in prjOptions"
:key="item.code"
:label="item.value"
@click.native="setSelectItem(item)"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="单位:" prop="name" label-position="left" class="labelItem" >
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-input
v-model="unitName"
filterable
placeholder="请输入名称"
style="width: 300px"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审批状态:" prop="name" label-position="left" class="labelItem" >
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-input
v-model="preStatus"
filterable
placeholder="请输入名称"
style="width: 300px"
>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="预算计划上传时间:" prop="name" label-position="left" class="labelItem" >
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-date-picker
v-model="planPreTime"
type="daterange"
value-format="YYYY-MM-DD"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5" :offset="3">
<el-form-item label="图纸计划上传时间:" prop="name" label-position="left" class="labelItem" >
<!-- <el-input-->
<!-- v-model="name"-->
<!-- placeholder="请输入名称"-->
<!-- clearable-->
<!-- style="width: 200px"-->
<!-- @keyup.enter="handleQuery"-->
<!-- />-->
<!-- -->
<el-date-picker
v-model="planTime"
type="daterange"
value-format="YYYY-MM-DD"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" :offset="3">
<el-form-item class="labelItem">
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- <el-dialog v-model="isOpenDialog" width="30vw" @close="closeDialog">-->
@ -127,16 +194,24 @@
<!-- -->
<!-- </el-dialog>-->
<el-dialog v-model="isOpenTimeLine" width="30vw" @close="closeTimeLine" :title="titleN" center>
<div style="height: 500px;overflow: scroll;position: relative">
<el-timeline>
<div style="height: 500px;overflow-y: auto;position: relative;">
<el-timeline style="height:380px;">
<el-timeline-item
v-for="(activity, index) in tzLine"
:key="index"
>
更新时间{{ activity.time }} &nbsp;&nbsp;&nbsp;文件名 <el-link @click="downloadFile(activity)" type="primary" style="border-bottom: 1px solid #0E9CFF">{{ activity.name }}</el-link> <br><br> {{ activity.person }} &nbsp;&nbsp;&nbsp;{{ activity.status }}
更新时间{{ activity.time }} &nbsp;&nbsp;&nbsp;
文件名 <el-link @click="downloadFile(activity)" type="primary" style="border-bottom: 1px solid #0E9CFF">{{ activity.name }}</el-link>
<span v-show="activity.upreason!=''&&activity.upreason!=null"><br><br>更新说明{{ activity.upreason }}</span>
<br><br> 审批人{{ activity.person }} &nbsp;&nbsp;&nbsp;审批状态{{ activity.status }}
<span v-show="activity.approvereason!=''&&activity.approvereason!=null"> <br><br>审批说明{{ activity.approvereason }}</span>
</el-timeline-item>
</el-timeline>
<div style="position: absolute;bottom:30px;display: flex;width: 80%;align-items: center"
v-show="titleN=='审批图纸'||titleN=='审批施工图预算'">
<div style="width: 20%" >审批说明</div><el-input v-model="spreason"></el-input>
</div>
</div>
<div v-if="editFunisTrue" style="display: flex;justify-content: flex-end">
<el-button type="primary" @click="approveH(1)">批准</el-button>
@ -148,29 +223,34 @@
overflow-x: auto;
border-radius: 6px;background-color: #fff;">
<el-table v-loading="loading" :data="tableData">
<el-table-column label="序号" type="index" width="50" align="center">
<el-table-column label="序号" type="index" width="50" align="center">
<template #default="scope">
<span>{{(pageNo - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="建管单位" align="center" prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="工程名称" align="center" prop="prjName" :show-overflow-tooltip="false"/>
<el-table-column label="图纸名称" align="center" prop="drawingName" :show-overflow-tooltip="true" width="300">
<el-table-column label="单位" width="220" align="center" prop="buildUnitName" :show-overflow-tooltip="false"/>
<el-table-column label="工程名称" width="280" align="center" prop="prjName" :show-overflow-tooltip="false"/>
<el-table-column label="图纸类型" width="280" align="center" prop="prjName" :show-overflow-tooltip="false"/>
<el-table-column label="出图内容" width="280" align="center" prop="prjName" :show-overflow-tooltip="false"/>
<el-table-column label="图纸计划上传时间" width="220" align="center" prop="drawingUpdateTime" :show-overflow-tooltip="false"/>
<el-table-column label="上传时间" width="220" align="center" prop="drawingUpdateTime" :show-overflow-tooltip="false"/>
<el-table-column label="图纸名称" align="center"
prop="drawingName" :show-overflow-tooltip="true" width="300">
<template #default="scope">
<el-link @click="downmloadFile(scope.row,0)" style="border-bottom: 1px solid #0E9CFF" type="primary">{{scope.row.drawingName}}</el-link>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="drawingUpdateTime" :show-overflow-tooltip="false"/>
<el-table-column label="图纸审批状态" align="center" prop="drawingApprovalStatus" :show-overflow-tooltip="false"/>
<el-table-column label="施工图预算" align="center" prop="budgetDrawingName" :show-overflow-tooltip="false">
<el-table-column label="图纸审批状态" width="220" align="center" prop="drawingApprovalStatus" :show-overflow-tooltip="false"/>
<el-table-column label="预算计划上传时间" width="220" align="center" prop="drawingApprovalStatus" :show-overflow-tooltip="false"/>
<el-table-column label="上传时间" width="220" align="center" prop="budgetDrawingUpdateTime"
:show-overflow-tooltip="false"/>
<el-table-column label="施工图预算" width="220" align="center" prop="budgetDrawingName" :show-overflow-tooltip="false">
<template #default="scope">
<el-link @click="downmloadFile(scope.row,1)" style="border-bottom: 1px solid #0E9CFF" type="primary">{{scope.row.budgetDrawingName}}</el-link>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="budgetDrawingUpdateTime" :show-overflow-tooltip="false"/>
<el-table-column label="预算审批状态" align="center" prop="budgetDrawingApprovalStatus" :show-overflow-tooltip="false" width="120"/>
<el-table-column label="操作" align="center"
width="400"
@ -219,7 +299,7 @@ import { approve,list as recordList,reUploadDrawing,reUploadBudgetDrawing,
// ,importCm,importCm1,deleteitem
import {defineProps, onMounted, ref} from 'vue';
const { proxy } = getCurrentInstance();
let spreason=ref('')
const props = defineProps({
pageType: String,
moduleName: String,
@ -272,13 +352,31 @@ const downmloadFile=(row,num)=>{
}
).then(res=>{
console.log(res)
tzLine.value=res.data.map(item=>({
time:item.drawingUpdateTime,
name:item.drawingName,
person:item.drawingUpdateUserName,
status:item.drawingApprovalStatus,
fileId:item.drawingFileId
}))
console.log(statusApprove.value,'statusApprove')
console.log(statusApprove.value!='')
if(statusApprove.value!==''){
tzLine.value=[res.data.map(item=>({
time:item.drawingUpdateTime,
name:item.drawingName,
person:item.drawingUpdateUserName,
status:item.drawingApprovalStatus,
fileId:item.drawingFileId,
upreason:item.drawingApprovalUpdateReason,
approvereason:item.drawingApprovalReason,
}))[0]]
console.log(tzLine.value,'进来了')
}else {
tzLine.value=res.data.map(item=>({
time:item.drawingUpdateTime,
name:item.drawingName,
person:item.drawingUpdateUserName,
status:item.drawingApprovalStatus,
fileId:item.drawingFileId,
upreason:item.drawingApprovalUpdateReason,
approvereason:item.drawingApprovalReason,
})).reverse()
}
})
}else {
historyList(
@ -287,14 +385,33 @@ const downmloadFile=(row,num)=>{
"budgetDrawingFileId":row.budgetDrawingFileId
}
).then(res=>{
console.log(statusApprove.value,'statusApprove')
console.log(res)
tzLine.value=res.data.map(item=>({
time:item.budgetDrawingUpdateTime,
name:item.budgetDrawingName,
person:item.budgetDrawingUpdateUserName,
status:item.budgetDrawingApprovalStatus,
fileId:item.budgetDrawingFileId
}))
if(statusApprove.value!==''){
tzLine.value=[(
res.data.map(item=>({
time:item.drawingUpdateTime,
name:item.drawingName,
person:item.drawingUpdateUserName,
status:item.drawingApprovalStatus,
fileId:item.drawingFileId,
upreason:item.drawingApprovalUpdateReason,
approvereason:item.drawingApprovalReason,
}))[0]
)]
}else {
tzLine.value=res.data.map(item=>({
time:item.budgetDrawingUpdateTime,
name:item.budgetDrawingName,
person:item.budgetDrawingUpdateUserName,
status:item.budgetDrawingApprovalStatus,
fileId:item.budgetDrawingFileId,
upreason:item.budgetDrawingApprovalUpdateReason,
approvereason:item.budgetDrawingApprovalReason,
})).reverse()
}
})
}
//
@ -346,7 +463,14 @@ let tableData = ref([])
let total = ref(0)
let pageNo = ref(1)
let pageSize = ref(10)
let selectName = ref('')
let unitName = ref('')
let planTime = ref([])
let planPreTime = ref([])
let preStatus = ref('')
let upLoadname=ref ('')
let isOpenDialog =ref(false)
let isOpenTimeLine =ref(false)
@ -367,6 +491,8 @@ const closeTimeLine=()=>{
editFunisTrue.value=false
clickType.value=''
statusApprove.value=''
titleN.value=''
spreason.value=''
}
import { useRoute,useRouter} from 'vue-router'
const router=useRouter()
@ -378,11 +504,12 @@ let editFunisTrue=ref(false)
const approveH=(pay)=>{
console.log(rowData.value,'approve')
if(statusApprove.value==0){
//
// budgetDrawingApprovalReason drawingApprovalReason
approve({
"prjCode":rowData.value.prjCode,
"drawingFileId":rowData.value.drawingFileId,
"drawingApprovalStatus":pay,
drawingApprovalReason:spreason.value
}).then(res=>{
console.log(res)
if(res.code==200){
@ -396,7 +523,8 @@ const approveH=(pay)=>{
approve({
"prjCode":rowData.value.prjCode,
"budgetDrawingFileId":rowData.value.budgetDrawingFileId,
"budgetDrawingApprovalStatus":pay
"budgetDrawingApprovalStatus":pay,
budgetDrawingApprovalReason:spreason.value
}).then(res=>{
console.log(res)
if(res.code==200){
@ -733,8 +861,6 @@ onMounted(()=>{
padding: 20px;
}
.queryRef{
display: flex;
align-items: center;
}
.labelItem {
display: flex;
@ -742,6 +868,13 @@ onMounted(()=>{
align-items: center;
height: 100%; /* 设置高度为父容器的高度 */
}
.labelItem1 {
/deep/.el-form-item__content{
width:150px!important;
background: red;
}
}
.el-upload {
display: inline-block;
}
@ -749,4 +882,5 @@ onMounted(()=>{
.el-button {
margin-right: 10px;
}
</style>

View File

@ -64,9 +64,9 @@ export default defineConfig(({ mode, command }) => {
// target: "http://192.168.3.210:20241",
//测试
// target: "http://192.168.133.127:20241",
// target: "http://192.168.133.127:20241",
target: "http://192.168.133.127:20241",
// 相斌
target: "http://192.168.3.33:20241",
// target: "http://192.168.3.33:20241",
changeOrigin: true,
// target: 'http://192.168.3.114:20241',//广瑞
rewrite: (p) => p.replace(/^\/sgtjzhzxsp-api/, '')