缺陷bug修改

This commit is contained in:
wangxk 2025-05-23 13:39:29 +08:00
parent 0d8b64e47e
commit 7c7fd001dd
9 changed files with 400 additions and 200 deletions

View File

@ -50,6 +50,7 @@
"jsencrypt": "^3.3.2",
"jspdf": "^2.5.1",
"leaflet": "^1.9.4",
"mammoth": "^1.9.0",
"marked": "^4.0.17",
"minimatch": "^5.1.0",
"monaco-editor": "^0.36.1",

View File

@ -201,5 +201,23 @@ export function batchModify(params:any){
method:'post',
data:params,
})
}
//试验数据扫描接口通过试验任务ID
export function testDataScanById(params:any){
return request ({
url:'/experimentalData/ts-nodes/testDataScanById',
method:'post',
params:params,
})
}
//获取异步信息
export function obtaintestData(params:any){
return request ({
url:'/experimentalData/ts-nodes/obtaintestData',
method:'post',
params:params,
})
}

View File

@ -77,4 +77,28 @@ export function deleteFilesByIds(queryParams:any) {
method: 'post',
params:queryParams
});
}
//专项文档管理扫描接口通过所属项目ID
export function specialScanById(queryParams:any) {
return request({
url: '/specialDocument/sd_nodes/specialScanById',
method: 'post',
params:queryParams
});
}
//专项文档管理文档上传接口通过所属项目ID
export function documentUploadById(queryParams:any) {
return request({
url: '/specialDocument/sd_nodes/documentUploadById',
method: 'post',
params:queryParams
});
}
//获取异步信息
export function obtainInformationAsync(queryParams:any) {
return request({
url: '/specialDocument/sd_nodes/obtainInformationAsync',
method: 'post',
params:queryParams
});
}

View File

@ -444,7 +444,7 @@ export default function useFileUpload() {
let s3UploadType = common.storageType.s3Type;
let onedriveUploadType = common.storageType.micrsoftType;
let storagea
if( param.storageKey === 'local'){
if( param.storageKey === 'local'||param.storageKey === 'sdlocal' ){
storagea = 'local'
}else if( param.storageKey === 'minio'){
storagea = 'minio'

View File

@ -12,7 +12,7 @@ import { Search } from '@element-plus/icons-vue'
import Page from '@/components/Pagination/page.vue';
import AudioPlayer from '@/components/file/preview/AudioPlayer.vue';
import { batchDeleteReq } from "@/api/file-operator";
import { projectList, getNodesTree, addNodes, updateNodes, deleteNodesById, getFilesPage, addFiles, updateFiles, deleteFilesById, deleteFilesByIds } from "@/api/document";
import { projectList, documentUploadById,obtainInformationAsync,getNodesTree, addNodes, updateNodes, deleteNodesById, getFilesPage, addFiles, updateFiles, deleteFilesById, deleteFilesByIds, specialScanById } from "@/api/document";
import ZUpload from '@/components/file/ZUpload.vue'
import useFileUpload from "@/components/file/file/useFileUpload";
import useHeaderStorageList from "@/components/header/useHeaderStorageList";
@ -40,6 +40,7 @@ const { currentStorageKey } = useHeaderStorageList();
const { openRow } = useFileData();
onMounted(() => {
getProject()
});
//
const vMove = {
@ -62,12 +63,15 @@ const vMove = {
//
const projectId = ref()
const projectArr = ref([])
const projectName = ref('')
//
function getProject() {
projectList().then((res: any) => {
projectArr.value = res.data
projectId.value = projectArr.value[0].id
gettreedata()
projectName.value = projectArr.value[0].projectName
// gettreedata()
tonstatus()
})
}
//
@ -81,14 +85,26 @@ const treeForm = ref({
projectId: '',
nodeName: '',
})
//
const buttonmsg = ref('扫描项目文档')
function scan() {
console.log('pathid.value')
specialScanById({ id: projectId.value }).then((res: any) => {
if (res.code == 0) {
tonstatus()
}
})
}
//
const treeRef = ref();
const filePath = ref('')
function gettreedata() {
treeloading.value = true
treeForm.value.projectId = projectId.value
getNodesTree(treeForm.value).then((res: any) => {
treedata.value = res.data
treeloading.value = false
filePath.value = res.data[0].path + res.data[0].nodeName +'/'
if (treedata.value[0]) {
pathid.value = treedata.value[0].id
nextTick(() => {
@ -104,6 +120,7 @@ function gettreedata() {
const pathid = ref()
function handleNodeClick(data: any, node: any) {
pathid.value = data.id
filePath.value = data.path + data.nodeName +'/'
getdata()
}
//
@ -136,10 +153,13 @@ function addSubItem(row: any) {
nodeName: "",//
}
projectForme.value.projectId = projectId.value
if (row.nodeType == '00') {
projectForme.value.parentId = '00'
projectForme.value.path = '/'+projectName.value+'/'
} else {
projectForme.value.parentId = row.id
projectForme.value.path = filePath.value
}
if (row.nodeType == '00') {
title.value = "添加子项目"
@ -229,7 +249,7 @@ function delSubItem(row: any) {
.then(() => {
treeloading.value = true
loading.value = true
deleteNodesById({ id: row.id }).then((res: any) => {
deleteNodesById({ id: row.id,path:row.path }).then((res: any) => {
if (res.code == 0) {
gettreedata()
ElMessage({
@ -295,8 +315,8 @@ const fileObj: any = ref({
const upfile = ref(false)
function openFile() {
title.value = "上传文件"
localStorage.setItem('filepath', findPathById(treedata.value, pathid.value));
localStorage.setItem('storageKey', JSON.stringify(['minio']));
localStorage.setItem('filepath', filePath.value);
localStorage.setItem('storageKey', JSON.stringify(['sdlocal']));
upfile.value = true
fileObj.value = {
projectId: '', //ID
@ -309,6 +329,23 @@ function openFile() {
}
judge.value = true
}
//
function upfileZip() {
title.value = "上传项目包并扫描"
localStorage.setItem('filepath', '/temporary');
localStorage.setItem('storageKey', JSON.stringify(['sdlocal']));
upfile.value = true
fileObj.value = {
projectId: '', //ID
nodeId: '', //ID
fileName: '', //
filePath: '', //
keywords: '', //
description: '', //
fileSize: '', //M
}
judge.value = false
}
//
const judge = ref(false)
function editfile(row: any, item: any) {
@ -346,11 +383,11 @@ function delfileOne(row: any) {
{
name: row.name,
password: "",
path: findPathById(treedata.value, pathid.value),
path: filePath.value,
type: "FILE"
}
],
storageKey: "minio"
storageKey: "sdlocal"
}
batchDeleteReq(JSON.stringify(parmas)).then((res) => {
})
@ -360,52 +397,62 @@ function bytesToMB(bytes: any) {
return bytes / Math.pow(1024, 2);
}
//
function submitfile() {
// console.log( )
if (fileObj.value.id) {
updateFiles(fileObj.value).then((res: any) => {
if (res.code == 0) {
closeDialog()
ElMessage.success('修改成功')
getdata()
function submitfile() {
if (localStorage.getItem('filepath') == '/temporary'){
documentUploadById({fileName:JSON.parse(localStorage.getItem('fileArr'))[0].name,id:projectId.value}).then((res:any)=>{
if(res.code == 0){
tonstatus()
upfile.value = false
}
})
} else {
let fileArr: any
if (localStorage.getItem('fileArr')) {
fileArr = JSON.parse(localStorage.getItem('fileArr'))
}else {
if (fileObj.value.id) {
updateFiles(fileObj.value).then((res: any) => {
if (res.code == 0) {
closeDialog()
ElMessage.success('修改成功')
getdata()
upfile.value = false
}
})
} else {
ElMessage.warning('请先选择文件')
return
}
let fileArr: any
if (localStorage.getItem('fileArr')) {
fileArr = JSON.parse(localStorage.getItem('fileArr'))
} else {
ElMessage.warning('请先选择文件')
return
}
let fileName = []
let fileSize = []
if (fileArr.length > 0) {
fileArr.forEach((item: any) => {
fileName.push(item.name)
fileSize.push(bytesToMB(item.size))
let fileName = []
let fileSize = []
if (fileArr.length > 0) {
fileArr.forEach((item: any) => {
fileName.push(item.name)
fileSize.push(bytesToMB(item.size))
})
}
fileObj.value.projectId = projectId.value
fileObj.value.nodeId = pathid.value
fileObj.value.filePath = filePath.value
fileObj.value.fileName = fileName.join(',')
fileObj.value.fileSize = fileSize.join(',')
addFiles(fileObj.value).then((res: any) => {
if (res.code == 0) {
closeDialog()
ElMessage.success('增加成功')
getdata()
upfile.value = false
localStorage.setItem('fileArr', '');
}
})
}
fileObj.value.projectId = projectId.value
fileObj.value.nodeId = pathid.value
fileObj.value.filePath = findPathById(treedata.value, pathid.value)
fileObj.value.fileName = fileName.join(',')
fileObj.value.fileSize = fileSize.join(',')
addFiles(fileObj.value).then((res: any) => {
if (res.code == 0) {
closeDialog()
ElMessage.success('增加成功')
getdata()
upfile.value = false
localStorage.setItem('fileArr', '');
}
})
}
}
//
function delfile(row: any) {
@ -518,32 +565,7 @@ const downloadFileUseIframeMode = (url: any) => {
iframe.remove();
}, 5 * 60 * 1000);
}
function findPathById(array: any, targetId: any) {
//
function recursiveSearch(items: any, target: any, path: any) {
for (let item of items) {
// name
let newPath = [...path, item.nodeName];
// idid
if (item.id === target) {
return newPath.join('/'); //
}
// children
if (item.children && item.children.length > 0) {
let result = recursiveSearch(item.children, target, newPath);
if (result) { // children
return result;
}
}
}
return null; // null
}
//
let patharr = recursiveSearch(array, targetId, [])
return '/' + patharr; //
}
// markdown viewer ,
const VMdPreview = defineAsyncComponent({
loader: () => {
@ -696,6 +718,34 @@ const fileIcon = (row: any) => {
// // keyof
// return Object.keys(FILE_ICONS).includes(fileExtension);
// };
const tonloading = ref(false)
const tonloading1 = ref(false)
const buttonmsg1 = ref('上传项目包并扫描')
function tonstatus(){
//sao
obtainInformationAsync({id:projectId.value,type:'0'}).then((res:any)=>{
if(res.msg == '1'){
tonloading.value = false
buttonmsg.value = '扫描项目文档'
}else{
tonloading.value = true
buttonmsg.value = '处理中...'
}
})
//chuan
obtainInformationAsync({id:projectId.value,type:'1'}).then((res:any)=>{
tonloading1.value
if(res.msg == '1'){
tonloading1.value = false
buttonmsg1.value = '上传项目包并扫描'
}else{
tonloading1.value = true
buttonmsg1.value = '处理中...'
}
})
gettreedata()
}
</script>
<template>
@ -715,12 +765,12 @@ const fileIcon = (row: any) => {
<el-tree ref="treeRef" node-key="id" :data="treedata" :highlight-current="true" :props="defaultProps"
v-loading="treeloading" @node-click="handleNodeClick"
:class="useAppStore().size === 'default' ? 'silderLeft-large' : 'silderLeft-default'"
style="height: calc(100vh - 280px); overflow: auto;margin-top: 10px;">
style="height: calc(67vh); overflow: auto;margin-top: 10px;">
<template #default="{ data }">
<span class="custom-tree-node">
<span class="text">{{ data.nodeName }}</span>
<span class="img_tree">
<img src="@/assets/project/xiu.png" alt="" title="编辑" @click="editSubItem(data)">
<!-- <img src="@/assets/project/xiu.png" alt="" title="编辑" @click="editSubItem(data)"> -->
<img src="@/assets/project/del.png" alt="" title="删除" @click="delSubItem(data)">
<img v-if="data.nodeType == '01'" src="@/assets/project/jia.png" alt="" title="添加课题"
@click="addSubItem(data)">
@ -732,6 +782,13 @@ const fileIcon = (row: any) => {
</span>
</template>
</el-tree>
<div>
<el-button type="primary" :loading="tonloading" @click="scan()" style="width: 100%;margin-bottom: 5px;">{{ buttonmsg
}}</el-button>
<el-button type="primary" :loading="tonloading1" @click="upfileZip()"
style="width: 100%;margin-left: 0px;">上传项目包并扫描</el-button>
</div>
</div>
<div class="moveBtn" v-move>
<div class="moveBtn-line"></div>
@ -797,12 +854,12 @@ const fileIcon = (row: any) => {
</Page>
</section>
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable :close-on-click-modal="false"
destroy-on-close>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="projectForme" :rules="moderules"
label-width="auto" class="demo-ruleForm" status-icon>
<el-form-item label="节点名称" prop="nodeName">
<el-input v-model="projectForme.nodeName" maxlength="40" show-word-limit />
<el-input v-model="projectForme.nodeName" maxlength="40" show-word-limit :disabled="projectForme.id" />
</el-form-item>
<el-form-item>
<div style="width: 100%;display: flex;justify-content: end;">
@ -812,9 +869,9 @@ const fileIcon = (row: any) => {
</el-form-item>
</el-form>
</el-dialog>
<el-dialog :title="title" v-model="upfile" width="50%" :before-close="fileClose" top="30px" draggable
<el-dialog :title="title" v-model="upfile" width="50%" :before-close="fileClose" top="30px" draggable :close-on-click-modal="false"
destroy-on-close>
<el-scrollbar :height="!fileObj.id ? '400px' : ''">
<el-scrollbar :height="judge ? '400px' : ''">
<el-form ref="ruleFormRef" style="max-width: 100%" :model="fileObj" :rules="moderqqqules"
label-width="auto" class="demo-ruleForm" status-icon>
<el-form-item v-if="!fileObj.id" label="文件:" prop="taskCode">
@ -842,11 +899,11 @@ const fileIcon = (row: any) => {
</el-dialog>
<!-- 组件预览 -->
<!-- 视频播放器 -->
<el-dialog draggable class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<video-player v-if="dialogVideoVisible" ref="videoPlayer" />
</el-dialog>
<!-- 文本编辑器 -->
<el-dialog draggable class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
<el-dialog draggable :close-on-click-modal="false" class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
:title="filePreview.fileName" v-model="dialogTextVisible">
<TextViewer :file-name="filePreview.fileName" :file-url="filePreview.url"
v-if="dialogTextVisible && filePreview.fileName.indexOf('.md') === -1" />
@ -855,18 +912,18 @@ const fileIcon = (row: any) => {
</el-dialog>
<!-- pdf 在线预览 -->
<el-dialog draggable class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<PdfViewer :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialogPdfVisible" />
</el-dialog>
<!-- office 在线预览 -->
<el-dialog draggable class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
<el-dialog draggable :close-on-click-modal="false" class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
:title="filePreview.fileName" v-model="dialogOfficeVisible">
<OfficeViewer :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialogOfficeVisible" />
</el-dialog>
<!-- 3d 在线预览 -->
<el-dialog draggable class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<Three3dPreview :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialog3dVisible" />
</el-dialog>
<!-- 音频播放器 -->
@ -965,7 +1022,7 @@ const fileIcon = (row: any) => {
.img_tree {
display: flex;
width: 20%;
width: 13%;
align-items: center;
justify-content: space-between;

View File

@ -18,7 +18,7 @@ const queryParams: any = ref({
size: 20,
projectType: '',
projectName: '',
projectCode: ''
description: ''
});
const total = ref(0);
//
@ -194,15 +194,16 @@ function typeName(arr:any,itemCode:any){
<div class="record-box">
<div class="sou_title">
<div class="sou_title_left">
<el-input style="margin-right: 10px ;" v-model="queryParams.projectCode" clearable
@change="getdata()" placeholder="项目编号"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.projectName" clearable
@change="getdata()" placeholder="项目名称"></el-input>
<el-select v-model="queryParams.projectType" placeholder="项目类型" style="margin-right: 10px ;" clearable @change="getdata()" >
<el-option v-for="item in dictType" :key="item.itemcode" :label="item.dictname" :value="item.itemcode" />
</el-select>
<el-input style="margin-right: 10px ;" v-model="queryParams.description" clearable
@change="getdata()" placeholder="项目描述"></el-input>
<!-- <el-input style="margin-right: 10px ;" v-model="queryParams.projectType" clearable
@change="getdata()" placeholder="项目类型"></el-input> -->
<el-input style="margin-right: 10px ;" v-model="queryParams.projectName" clearable
@change="getdata()" placeholder="项目名称"></el-input>
<el-button type="primary" @click="getdata()">搜索</el-button>
</div>
<div>
@ -224,7 +225,7 @@ function typeName(arr:any,itemCode:any){
</template>
</el-table-column>
<el-table-column prop="description" label="项目描述"></el-table-column>
<el-table-column prop="projectProps" label="项目信息"></el-table-column>
<!-- <el-table-column prop="projectProps" label="项目信息"></el-table-column> -->
<el-table-column prop="projectTime" label="项目启动时间" width="165" align="center"></el-table-column>
<el-table-column fixed="right" label="操作" width="80" align="center">
<template #default="scope">
@ -242,29 +243,26 @@ function typeName(arr:any,itemCode:any){
@pagination="getdata()">
</Page>
</div>
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable :close-on-click-modal="false"
destroy-on-close>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="projectForme" :rules="moderules"
label-width="auto" class="demo-ruleForm" status-icon>
<el-form-item label=" 项目编号" prop="projectCode">
<el-input v-model="projectForme.projectCode" maxlength="40" show-word-limit />
<el-form-item label=" 项目编号" >
<el-input v-model="projectForme.projectCode" maxlength="40" show-word-limit disabled />
</el-form-item>
<el-form-item label=" 项目名称" prop="projectName">
<el-input v-model="projectForme.projectName" maxlength="40" show-word-limit :disabled="projectForme.id" />
</el-form-item>
<el-form-item label=" 项目类型" prop="projectType">
<el-select v-model="projectForme.projectType" clearable placeholder=" " style="margin-right: 10px ;" @change="getdata()" >
<el-select v-model="projectForme.projectType" clearable placeholder=" " @change="getdata()" >
<el-option v-for="item in dictType" :key="item.itemcode" :label="item.dictname" :value="item.itemcode" />
</el-select>
<!-- <el-input v-model="projectForme.projectType" /> -->
</el-form-item>
<el-form-item label=" 项目名称" prop="projectName">
<el-input v-model="projectForme.projectName" maxlength="40" show-word-limit />
</el-form-item>
<el-form-item label=" 项目描述">
<el-input v-model="projectForme.description" :rows="2" type="textarea" maxlength="400" show-word-limit />
<el-input v-model="projectForme.description" :rows="2" type="textarea" show-word-limit />
</el-form-item>
<el-form-item label=" 项目信息">
<el-input v-model="projectForme.projectProps" :rows="2" type="textarea" maxlength="400" show-word-limit />
</el-form-item>
<el-form-item label=" 项目启动时间" prop="projectTime">
<el-form-item label=" 项目启动时间">
<el-date-picker v-model="projectForme.projectTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%;" value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>

View File

@ -13,7 +13,7 @@ import { ElMessageBox, ElMessage, ElMain } from "element-plus";
import Page from '@/components/Pagination/page.vue';
import AudioPlayer from '@/components/file/preview/AudioPlayer.vue';
import { batchDeleteReq } from "@/api/file-operator";
import { tstaskList, getTsNodesTree, addTsNodes, updateTsNodes, deleteTsNodesById, tsFilesPage, addTsFiles, updateTsFiles, deleteTsFilesById, listTsFiles, deleteTsFilesByIds, compress, Decompression, compare, downloadToLocal, uploadToBackup, addTsFile, list, moveFileFolder, copyFileFolder, startSimpleNavi, stopSimpleNavi } from "@/api/datamanagement";
import { tstaskList, obtaintestData,getTsNodesTree, addTsNodes, updateTsNodes, deleteTsNodesById, tsFilesPage, addTsFiles,testDataScanById, updateTsFiles, deleteTsFilesById, listTsFiles, deleteTsFilesByIds, compress, Decompression, compare, downloadToLocal, uploadToBackup, addTsFile, list, moveFileFolder, copyFileFolder, startSimpleNavi, stopSimpleNavi } from "@/api/datamanagement";
import ZUpload from '@/components/file/ZUpload.vue'
import useFileUpload from "@/components/file/file/useFileUpload";
import useHeaderStorageList from "@/components/header/useHeaderStorageList";
@ -75,12 +75,36 @@ const vMove = {
//
const projectId = ref()
const projectArr = ref([])
const taskName = ref('')
//
function getProject() {
tstaskList().then((res: any) => {
projectArr.value = res.data
projectId.value = projectArr.value[0].id
taskName.value = projectArr.value[0].taskName
gettreedata()
tonstatus()
})
}
//
function scan() {
testDataScanById({id:projectId.value}).then((res:any)=>{
tonstatus()
})
}
const tonloading = ref(false)
const buttonmsg = ref('扫描实验数据')
function tonstatus(){
//sao
obtaintestData({id:projectId.value}).then((res:any)=>{
if(res.msg == '1'){
tonloading.value = false
buttonmsg.value = '扫描实验数据'
}else{
tonloading.value = true
buttonmsg.value = '处理中...'
}
})
}
//
@ -96,6 +120,7 @@ const treeForm = ref({
})
//
const treeRef = ref();
const filepath = ref('')
function gettreedata() {
treeloading.value = true
treeForm.value.taskId = projectId.value
@ -104,6 +129,7 @@ function gettreedata() {
treeloading.value = false
if (treedata.value[0]) {
pathid.value = treedata.value[0].nodeId
filepath.value = res.data[0].path + res.data[0].nodeName +'/'
nextTick(() => {
treeRef.value?.setCurrentKey(pathid.value);
});
@ -117,6 +143,7 @@ function gettreedata() {
const pathid = ref()
function handleNodeClick(data: any, node: any) {
pathid.value = data.nodeId
filepath.value = data.path + data.nodeName +'/'
creatform.value.parentId = ''
patharr.value.length = 0
getdata()
@ -148,6 +175,12 @@ function addSubItem(row: any) {
}
projectForme.value.taskId = projectId.value
projectForme.value.parentId = row.nodeId
if(row.nodeId == '00'){
projectForme.value.path = '/'+taskName.value+'/'
}else{
projectForme.value.path = filepath.value
}
title.value = "添加子节点"
}
//
@ -210,7 +243,7 @@ function delSubItem(row: any) {
)
.then(() => {
loading.value = true
deleteTsNodesById({ id: row.nodeId }).then((res: any) => {
deleteTsNodesById({ id: row.nodeId,path:row.path }).then((res: any) => {
if (res.code == 0) {
gettreedata()
ElMessage({
@ -278,7 +311,7 @@ const fileObj: any = ref({
const upfile = ref(false)
function openFile() {
title.value = "上传文件"
localStorage.setItem('filepath', creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/');
localStorage.setItem('filepath', creatform.value.workPath ? creatform.value.workPath : filepath.value);
localStorage.setItem('storageKey', JSON.stringify(['local']));
upfile.value = true
fileObj.value = {
@ -321,7 +354,7 @@ function delfileOne(row: any) {
{
name: row.name,
password: "",
path: creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/',
path: creatform.value.workPath ? creatform.value.workPath : filepath.value,
type: "FILE"
}
],
@ -336,10 +369,7 @@ function bytesToMB(bytes: any) {
}
//
function submitfile() {
// console.log( )
if (fileObj.value.id) {
fileObj.value.workPath = '/' + pathid.value + fileObj.value.workPath
updateTsFiles(fileObj.value).then((res: any) => {
if (res.code == 0) {
closeDialog()
@ -370,7 +400,7 @@ function submitfile() {
}
fileObj.value.taskId = projectId.value
fileObj.value.nodeId = pathid.value
fileObj.value.workPath = creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/'
fileObj.value.workPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
fileObj.value.fileName = fileName.join(',')
fileObj.value.fileSize = fileSize.join(',')
fileObj.value.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
@ -488,6 +518,10 @@ function xiafilemony() {
}
)
.then(() => {
if( tableIdarr.value.some(item => item.type === 'FOLDER')){
ElMessage.warning('请勿选择文件夹')
return
}
tableIdarr.value.forEach((item: any) => {
if (item.url) {
downloadFileUseIframeMode(item.url);
@ -667,7 +701,7 @@ function getFileSuffix(name: any) {
function openNode(row: any) {
loading.value = true
creatform.value.parentId = row.id
creatform.value.workPath = '/' + pathid.value + row.workPath + row.fileName + '/'
creatform.value.workPath = row.workPath + row.fileName + '/'
patharr.value.push({ fileName: row.fileName, id: row.id })
getdata()
}
@ -786,7 +820,7 @@ function paste() {
rename: '',
type: '',
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/'
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
repeatObj.type = '0'
@ -804,7 +838,7 @@ function paste() {
//
copyarr.value.forEach((items: any) => {
repeatObj.oldpaths = '/' + pathid.value + items.workPath
repeatObj.oldpaths = items.workPath
repeatObj.newFileName.push(items.fileName)
})
repeatObj.newFileName = repeatObj.newFileName.join(',')
@ -835,7 +869,7 @@ function paste() {
const arr2Ids = new Set(copytable.value.map(item => item.id));
norepeat = copyarr.value.filter(item => !arr2Ids.has(item.id));
norepeat.forEach((items: any) => {
repeatObj.oldpaths = '/' + pathid.value + items.workPath
repeatObj.oldpaths = items.workPath
repeatObj.newFileName.push(items.fileName)
})
repeatObj.newFileName = repeatObj.newFileName.join(',')
@ -899,10 +933,10 @@ function copycover(row: any) {
rename: '',
type: '',
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/'
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
repeatObj.type = '0'
repeatObj.oldpaths = '/' + pathid.value + row.workPath
repeatObj.oldpaths = row.workPath
repeatObj.newFileName.push(row.fileName)
repeatObj.newFileName = repeatObj.newFileName.join(',')
if (copytype.value == "move") {
@ -974,11 +1008,11 @@ function copysomefile() {
rename: '',
type: '',
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/'
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
repeatObj.type = '0'
copyhandArr.value.forEach((items: any) => {
repeatObj.oldpaths = '/' + pathid.value + items.workPath
repeatObj.oldpaths = items.workPath
repeatObj.newFileName.push(items.fileName)
})
repeatObj.newFileName = repeatObj.newFileName.join(',')
@ -1038,10 +1072,10 @@ async function submitrename(formEl: any) {
rename: '',
type: '',
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : '/' + pathid.value + '/'
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
repeatObj.type = '1'
repeatObj.oldpaths = '/' + pathid.value + rowarr.value.workPath
repeatObj.oldpaths = rowarr.value.workPath
repeatObj.rename = (renameobj.value.fileName)
repeatObj.newFileName.push(rowarr.value.fileName)
repeatObj.newFileName = repeatObj.newFileName.join(',')
@ -1114,7 +1148,7 @@ async function submitcreat(formEl: any) {
if (creatform.value.workPath) {
creatObj.value.workPath = creatform.value.workPath
} else {
creatObj.value.workPath = '/' + pathid.value + '/'
creatObj.value.workPath = filepath.value
}
addTsFile(creatObj.value).then((res: any) => {
if (res.code == 0) {
@ -1132,7 +1166,7 @@ function pathclick(row: any, index: any) {
patharr.value.splice(index + 1)
creatform.value.parentId = row.id
creatform.value.workPath = '/' + pathid.value + convertArrayToPath1(patharr.value)
creatform.value.workPath = convertArrayToPath1(patharr.value)
getdata()
}
//
@ -1199,7 +1233,7 @@ async function submitzip(formEl: any) {
zipObj.value.parentId = zipParentid.value
getdata()
zipfiles.value = false
zipObj.value.compressedPath = '/' + pathid.value + zipObj.value.compressedPath
zipObj.value.compressedPath = zipObj.value.compressedPath
compress(zipObj.value).then((res: any) => {
if (res.code == 0) {
zipfiles.value = false
@ -1211,7 +1245,7 @@ async function submitzip(formEl: any) {
})
} else {
Decompression({ id: jiezip.value.id, parentId: zipParentid.value, decompressionPath: '/' + pathid.value + zipObj.value.compressedPath }).then((res: any) => {
Decompression({ id: jiezip.value.id, parentId: zipParentid.value, decompressionPath: zipObj.value.compressedPath }).then((res: any) => {
if (res.code == 0) {
ElMessage.success('解压成功')
getdata()
@ -1242,23 +1276,24 @@ const jiepatharr: any = ref([])
function gettsfiles() {
filetsobj.value.nodeId = pathid.value
filetsobj.value.taskId = projectId.value
filetsobj.value.path = '/' + pathid.value + filetsobj.value.path
filetsobj.value.path = filetsobj.value.path
listTsFiles(filetsobj.value).then((res: any) => {
listFilesarr.value = res.data
if (res.data[0]) {
jieFilearr.value = res.data[0]
jiepatharr.value = convertPathToArray(jieFilearr.value.workPath)
jiepatharr.value = convertPathToArray(JSON.parse(JSON.stringify(jieFilearr.value.workPath)))
creatform.value.parentId = res.data[0].parentId
creatform.value.workPath = '/' + pathid.value + jieFilearr.value.workPath
creatform.value.workPath = jieFilearr.value.workPath
}
})
}
function openfiles(row: any) {
debugger
filetsobj.value.path = row.workPath + row.fileName + '/'
jieFilearr.value.workPath = filetsobj.value.path
jiepatharr.value = convertPathToArray(jieFilearr.value.workPath)
creatform.value.workPath = '/' + pathid.value + jieFilearr.value.workPath
jiepatharr.value = convertPathToArray(JSON.parse(JSON.stringify(jieFilearr.value.workPath)))
creatform.value.workPath = jieFilearr.value.workPath
zipParentid.value = row.id
creatform.value.parentId = row.id
filetsobj.value.id = ''
@ -1281,7 +1316,6 @@ function fileSelection(row: any) {
jieFilearr.value = row[0]
}
function pathFile(index: any) {
jiepatharr.value.splice(index + 1)
filetsobj.value.path = convertArrayToPath(jiepatharr.value)
gettsfiles()
@ -1326,6 +1360,7 @@ function generateRandomName() {
}
//
function convertPathToArray(fullPath: string): string[] {
// debugger
// 1.
const trimmedPath = fullPath.replace(/^\/+|\/+$/g, '')
@ -1334,17 +1369,16 @@ function convertPathToArray(fullPath: string): string[] {
}
//
function convertArrayToPath(segments: string[]): string {
// debugger
//
if (segments.length === 0) return '/'
if (segments.length === 0) return filepath.value
//
return '/' + segments.filter(Boolean).join('/') + '/'
}
function convertArrayToPath1(segments: string[]): string {
//
if (segments.length === 0) return '/'
if (segments.length === 0) return filepath.value
//
@ -1559,7 +1593,7 @@ function texexceltClose() {
<span class="custom-tree-node">
<span class="text">{{ data.nodeName }}</span>
<span class="img_tree">
<img src="@/assets/project/xiu.png" alt="" title="编辑" @click="editSubItem(data)">
<!-- <img src="@/assets/project/xiu.png" alt="" title="编辑" @click="editSubItem(data)"> -->
<img src="@/assets/project/del.png" alt="" title="删除" @click="delSubItem(data)">
<!-- <img src="@/assets/images/chayi.png" alt="" title="差异性对比" @click="opendifference(data)"> -->
<img src="@/assets/project/jia.png" alt="" title="添加子项目" @click="addSubItem(data)">
@ -1567,6 +1601,7 @@ function texexceltClose() {
</span>
</template>
</el-tree>
<el-button type="primary" @click="scan()" style="width: 100%;" :loading="tonloading" >{{ buttonmsg }}</el-button>
</div>
<div class="moveBtn" v-move>
<div class="moveBtn-line"></div>
@ -1646,7 +1681,7 @@ function texexceltClose() {
title="修改" style="cursor: pointer;">
<img v-if="scope.row.type == 'ZIP'" src="@/assets/images/jieyasuo.png" alt=""
@click="decompression(scope.row)" title="解压" style="cursor: pointer;">
<img src="@/assets/MenuIcon/xia1.png" alt="" @click="xiafile(scope.row)" title="下载"
<img src="@/assets/MenuIcon/xia1.png" alt="" @click="xiafile(scope.row)" v-if="scope.row.type != 'FOLDER'" title="下载"
style="cursor: pointer;">
<img src="@/assets/MenuIcon/lbcz_sc.png" alt="" @click="delfile(scope.row)" title="删除"
style="cursor: pointer;">
@ -1659,7 +1694,7 @@ function texexceltClose() {
</Page>
</section>
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable :close-on-click-modal="false"
destroy-on-close>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="projectForme" :rules="moderules"
label-width="auto" class="demo-ruleForm" status-icon>
@ -1674,7 +1709,7 @@ function texexceltClose() {
</el-form-item>
</el-form>
</el-dialog>
<el-dialog :title="title" v-model="upfile" width="50%" :before-close="fileClose" top="30px" draggable
<el-dialog :title="title" :close-on-click-modal="false" v-model="upfile" width="50%" :before-close="fileClose" top="30px" draggable
destroy-on-close>
<el-scrollbar :height="!fileObj.id ? '400px' : ''">
<el-form ref="ruleFormRef" style="max-width: 100%" :model="fileObj" :rules="modelarules"
@ -1702,7 +1737,7 @@ function texexceltClose() {
<el-button @click="fileClose">取消</el-button>
</div>
</el-dialog>
<el-dialog title="创建文件/文件夹" v-model="creat" width="30%" :before-close="creatClose" top="30px" draggable
<el-dialog :close-on-click-modal="false" title="创建文件/文件夹" v-model="creat" width="30%" :before-close="creatClose" top="30px" draggable
destroy-on-close>
<el-form ref="creatFormRef" style="max-width: 100%" :model="creatObj" :rules="creatrules" label-width="auto"
class="demo-ruleForm" status-icon>
@ -1725,7 +1760,7 @@ function texexceltClose() {
</el-dialog>
<!-- 复制粘贴弹框 -->
<el-dialog title="重命名或覆盖" v-model="copyjudge" width="60%" :before-close="copyClose" top="30px" draggable
<el-dialog :close-on-click-modal="false" title="重命名或覆盖" v-model="copyjudge" width="60%" :before-close="copyClose" top="30px" draggable
destroy-on-close>
<div style="display: flex;justify-content: end;"><el-button :disabled="copyhandArr.length == 0"
type="primary" style="margin-bottom: 20px;" @click="copysomefile">覆盖({{ copyhandArr.length
@ -1751,7 +1786,7 @@ function texexceltClose() {
</el-table-column>
</el-table>
</el-dialog>
<el-dialog title="重命名" v-model="rename" width="30%" :before-close="RenameClose" top="30px" draggable
<el-dialog :close-on-click-modal="false" title="重命名" v-model="rename" width="30%" :before-close="RenameClose" top="30px" draggable
destroy-on-close>
<el-form ref="renameFormRef" style="max-width: 100%" :model="renameobj" :rules="renameRules"
label-width="auto" class="demo-ruleForm" status-icon>
@ -1766,7 +1801,7 @@ function texexceltClose() {
</el-form-item>
</el-form>
</el-dialog>
<el-dialog :title="title" v-model="zipfiles" width="30%" :before-close="zipClose" top="30px" draggable
<el-dialog :close-on-click-modal="false" :title="title" v-model="zipfiles" width="30%" :before-close="zipClose" top="30px" draggable
destroy-on-close>
<el-form ref="zipFormRef" style="max-width: 100%" :model="zipObj" :rules="ziprules" label-width="auto"
class="demo-ruleForm" status-icon>
@ -1787,7 +1822,7 @@ function texexceltClose() {
<template #prepend>
<el-popover :visible="visible" placement="right" :width="400" trigger="click">
<template #reference>
<el-icon style="cursor: pointer;" @click="visible = !visible, pathFile(-1)">
<el-icon style="cursor: pointer;" @click="visible = !visible">
<Folder />
</el-icon>
</template>
@ -1840,7 +1875,7 @@ function texexceltClose() {
</el-form>
</el-dialog>
<!-- 差异性对比 -->
<el-dialog title="差异性对比" v-model="difference" width="60%" :before-close="differenceClose" top="30px" draggable
<el-dialog :close-on-click-modal="false" title="差异性对比" v-model="difference" width="60%" :before-close="differenceClose" top="30px" draggable
destroy-on-close>
<div class="chabox" v-loading="diffloding">
<div class="chabox_border">
@ -1932,11 +1967,11 @@ function texexceltClose() {
</el-dialog>
<!-- 组件预览 -->
<!-- 视频播放器 -->
<el-dialog draggable class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<el-dialog :close-on-click-modal="false" draggable class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<video-player v-if="dialogVideoVisible" ref="videoPlayer" />
</el-dialog>
<!-- 文本编辑器 -->
<el-dialog draggable class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
<el-dialog :close-on-click-modal="false" draggable class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
:title="filePreview.fileName" v-model="dialogTextVisible">
<TextViewer :file-name="filePreview.fileName" :file-url="filePreview.url"
v-if="dialogTextVisible && filePreview.fileName.indexOf('.md') === -1" />
@ -1945,31 +1980,31 @@ function texexceltClose() {
</el-dialog>
<!-- pdf 在线预览 -->
<el-dialog draggable class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<el-dialog :close-on-click-modal="false" draggable class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<PdfViewer :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialogPdfVisible" />
</el-dialog>
<!-- office 在线预览 -->
<el-dialog draggable class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
<el-dialog :close-on-click-modal="false" draggable class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
:title="filePreview.fileName" v-model="dialogOfficeVisible">
<OfficeViewer :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialogOfficeVisible" />
</el-dialog>
<!-- 3d 在线预览 -->
<el-dialog draggable class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<el-dialog :close-on-click-modal="false" draggable class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<Three3dPreview :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialog3dVisible" />
</el-dialog>
<!-- 音频播放器 -->
<AudioPlayer></AudioPlayer>
<Viewfile v-if="isViewfile" :showTime="true" :title="title1" :url="ViewfileUrl" :type="fileType"
@update="CloseView" />
<el-dialog :title="title" v-model="textedit" :before-close="textClose" top="30px" draggable width="60%"
<el-dialog :close-on-click-modal="false" :title="title" v-model="textedit" :before-close="textClose" top="30px" draggable width="60%"
destroy-on-close>
<textEdit :rowId="rowId" :fileUrl="fileUrl1" />
<!-- <txtexl :file-url="fileUrl" /> -->
</el-dialog>
<el-dialog :title="title" v-model="textedit1" :before-close="texexceltClose" top="30px" draggable width="60%"
<el-dialog :close-on-click-modal="false" :title="title" v-model="textedit1" :before-close="texexceltClose" top="30px" draggable width="60%"
destroy-on-close>
<txtexl :file-url="fileUrl" :rowId="rowId" />
</el-dialog>
@ -2065,7 +2100,7 @@ function texexceltClose() {
.img_tree {
display: flex;
width: 28%;
width: 13%;
align-items: center;
justify-content: space-between;

View File

@ -1130,7 +1130,7 @@ const tabs = ref(1)
</div>
</div>
<!-- 文件差异性对比 -->
<el-dialog title="差异批量处理" v-model="differential" width="50%" :before-close="diffClose" top="30px"
<el-dialog title="差异批量处理" v-model="differential" width="50%" :before-close="diffClose" top="30px" :close-on-click-modal="false"
draggable destroy-on-close>
<div class="tabbs_all">
<div @click="tabs = 1" :class="tabs == 1 ? 'tabbs_box1' : 'tabbs_box'">新增文件</div>
@ -1268,11 +1268,11 @@ const tabs = ref(1)
</el-dialog>
<!-- 组件预览 -->
<!-- 视频播放器 -->
<el-dialog draggable class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-video-dialog" :destroy-on-close="true" v-model="dialogVideoVisible">
<video-player v-if="dialogVideoVisible" ref="videoPlayer" />
</el-dialog>
<!-- 文本编辑器 -->
<el-dialog draggable class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
<el-dialog draggable :close-on-click-modal="false" class="zfile-text-dialog zfile-dialog-mini-close" :destroy-on-close="true"
:title="filePreview.fileName" v-model="dialogTextVisible">
<TextViewer :file-name="filePreview.fileName" :file-url="filePreview.url"
v-if="dialogTextVisible && filePreview.fileName.indexOf('.md') === -1" />
@ -1281,19 +1281,19 @@ const tabs = ref(1)
</el-dialog>
<!-- pdf 在线预览 -->
<el-dialog draggable class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-pdf-dialog" :title="filePreview.fileName" v-model="dialogPdfVisible">
<PdfViewer :file-name="filePreview.fileName" :file-url="filePreview.url" v-if="dialogPdfVisible" />
</el-dialog>
<!-- office 在线预览 -->
<el-dialog draggable class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
<el-dialog draggable :close-on-click-modal="false" class="zfile-office-dialog zfile-dialog-mini-close zfile-dialog-hidden-title"
:title="filePreview.fileName" v-model="dialogOfficeVisible">
<OfficeViewer :file-name="filePreview.fileName" :file-url="filePreview.url"
v-if="dialogOfficeVisible" />
</el-dialog>
<!-- 3d 在线预览 -->
<el-dialog draggable class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<el-dialog draggable :close-on-click-modal="false" class="zfile-3d-dialog" :title="filePreview.fileName" v-model="dialog3dVisible">
<Three3dPreview :file-name="filePreview.fileName" :file-url="filePreview.url"
v-if="dialog3dVisible" />
</el-dialog>
@ -1301,12 +1301,12 @@ const tabs = ref(1)
<AudioPlayer></AudioPlayer>
<Viewfile v-if="isViewfile" :showTime="true" :title="title1" :url="ViewfileUrl" :type="fileType"
@update="CloseView" />
<el-dialog :title="title" v-model="textedit" :before-close="textClose" top="30px" draggable width="60%"
<el-dialog :title="title" v-model="textedit" :before-close="textClose" top="30px" draggable :close-on-click-modal="false" width="60%"
destroy-on-close>
<textEdit :rowId="rowId" :fileUrl="fileUrl1" />
<!-- </el-scrollbar> -->
</el-dialog>
<el-dialog :title="title" v-model="textedit1" :before-close="texexceltClose" top="30px" draggable
<el-dialog :title="title" v-model="textedit1" :before-close="texexceltClose" top="30px" draggable :close-on-click-modal="false"
width="60%" destroy-on-close>
<txtexl :file-url="fileUrl" :rowId="rowId" />
</el-dialog>

View File

@ -9,7 +9,7 @@ import { onMounted, ref } from "vue";
import { ElMessage, ElMessageBox } from 'element-plus'
import Page from '@/components/Pagination/page.vue'
import { tstaskPage, addtsTask, updatetsTask, deleteTsTaskById, deleteTsTaskByIds } from "@/api/testtask";
import { getDict } from '@/api/dict'
//
const tableData: any = ref([]);
//
@ -42,14 +42,14 @@ const loading = ref(false)
//
function getdata() {
loading.value = true
if (dataduan.value && dataduan.value.length > 0 ) {
if (dataduan.value && dataduan.value.length > 0) {
const dataArr = []
dataduan.value.forEach((item: any) => {
dataArr.push(zhuandata(item))
})
queryParams.value.startDate = dataArr[0]
queryParams.value.endDate = dataArr[1]
}else{
} else {
queryParams.value.startDate = ''
queryParams.value.endDate = ''
}
@ -79,12 +79,16 @@ function addproject() {
carrierName: "",//
deviceName: "",//
taskCode: "",//
deviceCode: ""//
deviceCode: "",//
taskType: "",
testDescribe: "",//
sensorDescribe: "",//
}
}
//
function editproject(row: any) {
projectForme.value = JSON.parse(JSON.stringify(row))
projectForme.value.taskDate = [projectForme.value.taskStartdate, projectForme.value.taskEnddate]
title.value = "修改试验任务"
frame.value = true
}
@ -124,7 +128,7 @@ function delprojectArr() {
ids.push(item.id)
})
ElMessageBox.confirm(
'您确定要删除这些项目及其中的节点和文件吗?',
'您确定要删除这些项目及其中的节点和文件吗?',
'警告',
{
confirmButtonText: '确定',
@ -164,12 +168,22 @@ const projectForme: any = ref({
deviceName: "",//
taskCode: "",//
deviceCode: ""//
, taskType: "",
testDescribe: "",//
sensorDescribe: "",//
})
//
async function submitForm(formEl: any) {
if (!formEl) return
await formEl.validate((valid: any, fields: any) => {
if (valid) {
if (projectForme.value.taskDate.length > 0) {
projectForme.value.taskStartdate = projectForme.value.taskDate[0]
projectForme.value.taskEnddate = projectForme.value.taskDate[1]
} else {
projectForme.value.taskStartdate = ''
projectForme.value.taskEnddate = ''
}
if (projectForme.value.id) {
updatetsTask(projectForme.value).then((res: any) => {
if (res.code == 0) {
@ -193,13 +207,31 @@ async function submitForm(formEl: any) {
}
//
const moderules = ref({
taskName: [{ required: true, message: "请输入任务名称", trigger: "blur" }],
taskCode: [{ required: true, message: "请输入任务编号", trigger: "blur" }]
taskType: [{ required: true, message: "请选择任务类型", trigger: "change" }],
taskDate: [{ required: true, message: "请选择任务时间", trigger: "change" }],
taskPlace: [{ required: true, message: "请输入任务地点", trigger: "blur" }],
});
onMounted(() => {
getdata()
getDictOne()
});
//
const dictType = ref([])
function getDictOne() {
getDict({ dictcode: 'taskType' }).then((res: any) => {
dictType.value = res.data
})
}
//
function typeName(arr: any, itemCode: any) {
let nameone: any
arr.forEach((item: any) => {
if (item.itemcode == itemCode) {
nameone = item.dictname
}
});
return nameone
}
</script>
@ -208,18 +240,29 @@ onMounted(() => {
<div class="record-box">
<div class="sou_title">
<div class="sou_title_left">
<el-input style="margin-right: 10px ;" v-model="queryParams.taskName" clearable @change="getdata()"
<el-input style="margin-right: 10px ;width:80px;margin-bottom: 10px;" v-model="queryParams.taskCode" clearable @change="getdata()"
placeholder="任务编号"></el-input>
<el-input style="margin-right: 10px ;width:180px;margin-bottom: 10px;" v-model="queryParams.taskName" clearable @change="getdata()"
placeholder="任务名称"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.taskPlace" clearable @change="getdata()"
<el-select style="margin-right: 10px ;width:180px;margin-bottom: 10px;" v-model="queryParams.taskType" clearable placeholder="任务类型" @change="getdata()">
<el-option v-for="item in dictType" :key="item.itemcode" :label="item.dictname"
:value="item.itemcode" />
</el-select>
<el-input style="margin-right: 10px ;width:180px;margin-bottom: 10px;" v-model="queryParams.taskPlace" clearable @change="getdata()"
placeholder="任务地点"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.taskPerson" clearable
<el-input style="margin-right: 10px ;width:180px;margin-bottom: 10px;" v-model="queryParams.taskPerson" clearable
@change="getdata()" placeholder="任务人员"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.carrierType" clearable
@change="getdata()" placeholder="载体类型"></el-input>
<el-input style="margin-right: 10px ;" v-model="queryParams.deviceCode" clearable
@change="getdata()" placeholder="任务设备"></el-input>
<el-date-picker v-model="dataduan" type="daterange" range-separator="" @change="getdata()"
style="width: 200%;margin-right: 10px ;" start-placeholder="开始时间" end-placeholder="结束时间" />
style="margin-right: 10px ;margin-bottom: 10px;" start-placeholder="开始时间" end-placeholder="结束时间" />
<el-input style="margin-right: 10px ;width:180px;" v-model="queryParams.carrierName" clearable
@change="getdata()" placeholder="载机名称"></el-input>
<el-input style="margin-right: 10px ;width:180px;" v-model="queryParams.deviceCode" clearable
@change="getdata()" placeholder="设备代号_编号"></el-input>
<el-input style="margin-right: 10px ;width:380px;" v-model="queryParams.testDescribe" clearable
@change="getdata()" placeholder="试验描述"></el-input>
<el-input style="margin-right: 10px ;width:380px;" v-model="queryParams.sensorDescribe" clearable
@change="getdata()" placeholder="传感器描述"></el-input>
<el-button type="primary" @click="getdata()">搜索</el-button>
</div>
<div>
@ -230,17 +273,27 @@ onMounted(() => {
<el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"
:header-cell-style="{ background: 'rgb(250 250 250)', height: '50px' }"
style="width: 100%; height: calc(100vh - 275px);margin-bottom: 20px;" border>
style="width: 100%; height: calc(64vh);margin-bottom: 20px;" border>
<el-table-column type="selection" width="40" />
<el-table-column prop="taskCode" label="任务编号" width="90"></el-table-column>
<el-table-column prop="taskName" label="任务名称" width="120"></el-table-column>
<el-table-column prop="carrierType" label="载体类型" width="90"></el-table-column>
<el-table-column prop="carrierName" label="载体名称" width="120"></el-table-column>
<el-table-column prop="deviceCode" label="设备编号" width="90"></el-table-column>
<el-table-column prop="deviceName" label="设备名称" width="120"></el-table-column>
<el-table-column prop="taskDate" label="任务开始时间" width="170" align="center"></el-table-column>
<el-table-column prop="taskPlace" label="任务地点"></el-table-column>
<el-table-column prop="taskPerson" label="任务人员"></el-table-column>
<el-table-column prop="taskName" label="任务名称" width="600"></el-table-column>
<el-table-column prop="taskType" label="任务类型" width="120">
<template #default="scope">
<span>{{ typeName(dictType, scope.row.taskType) }}</span>
</template>
</el-table-column>
<el-table-column prop="taskDate" label="任务时间" width="320" align="center">
<template #default="scope">
<span>{{ scope.row.taskStartdate && scope.row.taskEnddate ? scope.row.taskStartdate + '-' +
scope.row.taskEnddate : '' }}</span>
</template>
</el-table-column>
<el-table-column prop="taskPlace" label="任务地点" width="180"></el-table-column>
<el-table-column prop="taskPerson" label="任务人员" width="280"></el-table-column>
<el-table-column prop="carrierName" label="载机名称" width="180"></el-table-column>
<el-table-column prop="deviceCode" label="设备代号_编号" width="180"></el-table-column>
<el-table-column prop="testDescribe" label="实验描述" width="320"></el-table-column>
<el-table-column prop="sensorDescribe" label="传感器描述" width="320"></el-table-column>
<el-table-column fixed="right" label="操作" width="80" align="center">
<template #default="scope">
<span
@ -257,39 +310,52 @@ onMounted(() => {
@pagination="getdata()">
</Page>
</div>
<el-dialog :title="title" v-model="frame" width="30%" :before-close="handleClose" top="30px" draggable
<el-dialog :title="title" v-model="frame" width="35%" :before-close="handleClose" top="30px" draggable :close-on-click-modal="false"
destroy-on-close>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="projectForme" :rules="moderules"
<el-form ref="ruleFormRef" style="max-width:100%" :model="projectForme" :rules="moderules"
label-width="auto" class="demo-ruleForm" status-icon>
<el-form-item label="任务编号" prop="taskCode">
<el-input v-model="projectForme.taskCode" maxlength="40" show-word-limit />
<el-form-item label="任务编号">
<el-input v-model="projectForme.taskCode" maxlength="40" show-word-limit disabled />
</el-form-item>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="projectForme.taskName" maxlength="40" show-word-limit />
<el-form-item label="任务名称">
<el-input v-model="projectForme.taskName" show-word-limit disabled />
</el-form-item>
<el-form-item label="任务时间">
<!-- <el-input v-model="projectForme.taskDate" /> -->
<el-date-picker v-model="projectForme.taskDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%;" value-format="YYYY-MM-DD HH:mm:ss" />
<el-form-item label="任务类型" prop="taskType">
<el-select v-model="projectForme.taskType" clearable placeholder=" " @change="getdata()">
<el-option v-for="item in dictType" :key="item.itemcode" :label="item.dictname"
:value="item.itemcode" />
</el-select>
</el-form-item>
<el-form-item label="任务地点">
<el-form-item label="任务时间" prop="taskDate">
<el-date-picker v-model="projectForme.taskDate" type="daterange" range-separator="-"
start-placeholder="开始时间" end-placeholder="结束时间" format="YYYY-MM-DD" style="width:100%;"
value-format="YYYY-MM-DD" />
</el-form-item>
<el-form-item label="任务地点" prop="taskPlace">
<el-input v-model="projectForme.taskPlace" maxlength="500" show-word-limit />
</el-form-item>
<el-form-item label="任务人员">
<el-input v-model="projectForme.taskPerson" maxlength="500" show-word-limit/>
<el-input v-model="projectForme.taskPerson" maxlength="500" show-word-limit />
</el-form-item>
<el-form-item label="载体类型">
<!-- <el-form-item label="载体类型">
<el-input v-model="projectForme.carrierType" maxlength="200" show-word-limit />
</el-form-item>
<el-form-item label="载名称">
</el-form-item> -->
<el-form-item label="载名称">
<el-input v-model="projectForme.carrierName" maxlength="40" show-word-limit />
</el-form-item>
<el-form-item label="设备编号">
<el-form-item label="设备代号_编号">
<el-input v-model="projectForme.deviceCode" maxlength="40" show-word-limit />
</el-form-item>
<el-form-item label="设备名称">
<el-input v-model="projectForme.deviceName" maxlength="40" show-word-limit />
<el-form-item label="实验描述">
<el-input v-model="projectForme.testDescribe" show-word-limit />
</el-form-item>
<el-form-item label="传感器描述">
<el-input v-model="projectForme.sensorDescribe" show-word-limit />
</el-form-item>
<!-- <el-form-item label="设备名称">
<el-input v-model="projectForme.deviceName" maxlength="40" show-word-limit />
</el-form-item> -->
<el-form-item>
<div style="width: 100%;display: flex;justify-content: end;">
<el-button type="primary" @click="submitForm(ruleFormRef)">确定</el-button>
@ -323,7 +389,8 @@ onMounted(() => {
width: 80%;
display: flex;
align-items: center;
justify-content: space-between;
// justify-content: space-between;
flex-wrap: wrap;
}
}