2025-6-19会议内容更改

This commit is contained in:
wangxk 2025-06-20 18:05:23 +08:00
parent 722526d468
commit 8363862c8d
7 changed files with 252 additions and 154 deletions

View File

@ -40,3 +40,11 @@ export function addSdproject(queryParams:any) {
params: queryParams
});
}
//检查项目下有无节点
export function selectNodesById(queryParams:any) {
return request({
url: '/specialDocument/sd_nodes/selectNodesById',
method: 'post',
params: queryParams
});
}

View File

@ -48,3 +48,11 @@ export function confirmDeleteTask(queryParams: any) {
params: queryParams
});
}
//试验任务是否可修改
export function selectTsNodesById(queryParams: any) {
return request({
url: '/experimentalData/ts-nodes/selectTsNodesById',
method: 'post',
params: queryParams
});
}

View File

@ -8,26 +8,42 @@ export default {
import { onMounted, ref } from "vue";
import { ElMessage, ElMessageBox } from 'element-plus'
import Page from '@/components/Pagination/page.vue'
import { projectPage, addSdproject, updateSdproject, deleteSdprojectById, deleteSdprojectByIds } from "@/api/project";
import { projectPage, addSdproject, updateSdproject, deleteSdprojectById, deleteSdprojectByIds, selectNodesById } from "@/api/project";
import { storagesBytype } from "@/api/storage";
import { getDict } from '@/api/dict'
import { id } from "element-plus/es/locale";
import { debug } from "console";
//
const tableData: any = ref([{}, {}]);
const tableData: any = ref([]);
//
const queryParams: any = ref({
current: 1,
size: 20,
projectType: '',
projectName: '',
description: ''
description: '',
attributeContentJson:'',
});
const total = ref(0);
//
const loading = ref(false)
//
function getdata() {
formitemarr.value.length = 0
loading.value = true
if (result2.value.length > 0) {
// attributeContent
queryParams.value.attributeContentJson = [];
result2.value.forEach((item: any) => {
// 访
queryParams.value.attributeContentJson.push({
[item.code]: queryParams.value[item.code]?queryParams.value[item.code]:''
});
});
if( queryParams.value.attributeContentJson.length > 0){
queryParams.value.attributeContentJson = encodeURIComponent(JSON.stringify(queryParams.value.attributeContentJson))
}
}
projectPage(queryParams.value).then((res: any) => {
loading.value = false
tableData.value = res.data.records
@ -35,6 +51,7 @@ function getdata() {
queryParams.value.size = res.data.size
total.value = res.data.total
let arr = []
// result2.value.length = 0
tableData.value.forEach((item: any) => {
if (item.projectProps) {
arr = JSON.parse(item.projectProps)
@ -42,9 +59,23 @@ function getdata() {
arr = []
}
item.projectProps = arr
});
console.log(tableData.value)
result2.value = arr
// debugger
if (item.projectProps.length > 0) {
item.projectProps.forEach((items: any) => {
item[items.code] = items.data
})
}
});
if (tableData.value[0].projectProps && tableData.value[0].projectProps.length > 0) {
tableData.value[0].projectProps.forEach((item: any) => {
formitemarr.value.push({ name: item.name, data: '', code: item.code })
})
}
})
}
//
const dictType = ref([])
@ -53,7 +84,7 @@ function getDictOne() {
getDict({ dictcode: 'zxxmlx' }).then((res: any) => {
dictType.value = res.data
})
storagesBytype({type:'local'}).then((res: any) => {
storagesBytype({ type: 'local' }).then((res: any) => {
storagesarr.value = res.data
})
}
@ -72,9 +103,11 @@ function addproject() {
projectProps: "",//
projectTime: "",//
projectType: ""//
, localStorageId: ""
, localStorageId: "",
attributeContentJson:'',
}
formitemarr.value.length = 0
shidou.value = false
// formitemarr.value.length = 0
}
//
function editproject(row: any) {
@ -82,6 +115,13 @@ function editproject(row: any) {
frame.value = true
projectForme.value = JSON.parse(JSON.stringify(row))
formitemarr.value = projectForme.value.projectProps
selectNodes(row)
}
const shidou = ref(false)
function selectNodes(row: any) {
selectNodesById({ projectId: row.id }).then((res: any) => {
shidou.value = res.data
})
}
//
function delproject(row: any) {
@ -200,7 +240,7 @@ const moderules = ref({
projectType: [{ required: true, message: "请选择项目类型", trigger: "change" }],
projectName: [{ required: true, message: "请输入项目名称", trigger: "blur" }],
projectTime: [{ type: 'date', required: true, message: "请选择项目启动时间", trigger: "change" }],
localStorageId:[{ required: true, message: "请选择存储空间", trigger: "change" }]
localStorageId: [{ required: true, message: "请选择存储空间", trigger: "change" }]
});
onMounted(() => {
getdata()
@ -244,7 +284,7 @@ function labledsure() {
return
}
generateUniqueId
formitemarr.value.push({ name: dataname.value, data: '', id: generateUniqueId(8) })
formitemarr.value.push({ name: dataname.value, data: '', code: generateUniqueId(8) })
labledone.value = false
}
function generateUniqueId(length: any) {
@ -265,23 +305,7 @@ function generateUniqueId(length: any) {
function dellable(index: any) {
formitemarr.value.splice(index, 1)
}
let result1 =ref([])
let result2 =ref([])
const attloading = ref(false)
const attbute = ref(false)
function attribute(input: any) {
result2.value = input
result1.value.length = 0
let inoutarr = JSON.parse(JSON.stringify(input))
result1.value = [inoutarr.reduce((acc:any, item:any) => {
acc[item.id] = item.data;
return acc;
}, {})];
attbute.value = true
}
function attributeclose(){
attbute.value = false
}
let result2 = ref([])
</script>
<template>
@ -289,16 +313,19 @@ function attributeclose(){
<div class="record-box">
<div class="sou_title">
<div class="sou_title_left">
<el-input style="margin-right: 10px ;" v-model="queryParams.projectName" clearable
<el-input style="margin:5px 10px 5px 0px;width: 180px;" v-model="queryParams.projectName" clearable
@change="getdata()" placeholder="项目名称"></el-input>
<el-select v-model="queryParams.projectType" placeholder="项目类型" style="margin-right: 10px ;"
<el-select v-model="queryParams.projectType" placeholder="项目类型" style="margin:5px 10px 5px 0px;width: 180px;"
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
<el-input style="margin:5px 10px 5px 0px;width: 180px;" v-model="queryParams.description" clearable
@change="getdata()" placeholder="项目描述"></el-input>
<!-- <el-input style="margin-right: 10px ;" v-model="queryParams.projectType" clearable
<!-- <el-table-column v-for="item in result2" :prop="item.code" :label="item.name"></el-table-column> -->
<el-input v-for="item in result2" style="margin:5px 10px 5px 0px;width: 180px;" v-model="queryParams[item.code]"
clearable @change="getdata()" :placeholder="item.name"></el-input>
<!-- <el-input style="margin:5px 10px 5px 0px;" v-model="queryParams.projectType" clearable
@change="getdata()" placeholder="项目类型"></el-input> -->
<el-button type="primary" @click="getdata()">搜索</el-button>
@ -322,7 +349,7 @@ function attributeclose(){
</template>
</el-table-column>
<el-table-column prop="projectTime" label="项目启动时间" width="165" align="center"></el-table-column>
<el-table-column prop="description" label="项目描述">
<el-table-column prop="description" label="项目描述" min-width="400">
<template #default="scope">
<div class="ellipsis">
<span class="single-line-ellipsis">{{ scope.row.description }}</span>
@ -331,14 +358,8 @@ function attributeclose(){
</div>
</template>
</el-table-column>
<el-table-column prop="description" label="自定义属性" width="100">
<template #default="scope">
<div class="ellipsis1">
<img src="@/assets/MenuIcon/xqing.png" alt="" title="详情"
@click="attribute(scope.row.projectProps)" style="cursor: pointer;">
</div>
</template>
</el-table-column>
<el-table-column v-for="item in result2" :prop="item.code" :label="item.name"
width="180"></el-table-column>
<!-- <el-table-column prop="projectProps" label="项目信息"></el-table-column> -->
<!-- <el-table-column v-for="item in tableData.projectProps" :prop="item.data" :label="item.name" width="165" align="center"></el-table-column> -->
<el-table-column fixed="right" label="操作" width="80" align="center">
@ -384,10 +405,9 @@ function attributeclose(){
format="YYYY-MM-DD HH:mm:ss" style="width:100%;" value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</div>
<el-form-item label="存储空间绑定" prop="localStorageId" >
<el-select v-model="projectForme.localStorageId" clearable placeholder=" " :disabled="projectForme.id">
<el-option v-for="item in storagesarr" :key="item.id" :label="item.name"
:value="item.id" />
<el-form-item label="存储空间绑定" prop="localStorageId">
<el-select v-model="projectForme.localStorageId" clearable placeholder=" " :disabled="shidou">
<el-option v-for="item in storagesarr" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label=" 项目描述">
@ -425,17 +445,7 @@ function attributeclose(){
</el-scrollbar>
</div>
</el-dialog>
<el-dialog :title="'自定义属性详情'" v-model="attbute" width="1200px" :before-close="attributeclose" top="30px" draggable
:close-on-click-modal="false" destroy-on-close>
<el-table v-if="result2.length > 0" v-loading="attloading" :data="result1"
:header-cell-style="{ background: 'rgb(250 250 250)', color: '#383838', height: '50px' }"
style="width: 100%; height: calc(30vh);margin-bottom: 20px;" border>
<el-table-column v-for="item in result2" :prop="item.id" :label="item.name" ></el-table-column>
</el-table>
<div v-else style="width: 100%;height: 285px;display: flex;align-items: center;justify-content: center;border: 1px solid #ebeef5;">
<el-empty description="暂无数据" />
</div>
</el-dialog>
</div>
</template>
@ -486,14 +496,15 @@ function attributeclose(){
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
// align-items: center;
margin-bottom: 10px;
.sou_title_left {
width: 50%;
width: 72%;
display: flex;
align-items: center;
justify-content: space-between;
// justify-content: space-between;
flex-wrap: wrap;
}
}

View File

@ -9,7 +9,7 @@ import { onMounted, ref } from "vue";
import { ElMessage, ElMessageBox } from 'element-plus'
import { getDict } from '@/api/dict'
import Page from '@/components/Pagination/page.vue'
import { storage, storagesPage, storage2, storagestorageId,storagesBytype } from "@/api/storage";
import { storage, storagesPage, storage2, storagestorageId, storagesBytype } from "@/api/storage";
//
const tableData: any = ref([]);
//
@ -48,6 +48,7 @@ const title = ref("")
const frame = ref(false)
//
function addproject() {
storeContent.value = ''
frame.value = true
title.value = "新增储存源"
projectForme.value = {
@ -63,7 +64,17 @@ function addproject() {
}
}
//
const storeContent = ref('')
function editproject(row: any) {
if (row.storeContent) {
ElMessage.warning('已有项目绑定该存储空间,请先解除关联!')
return
}
if (row.storeContent) {
storeContent.value = row.storeContent
} else {
storeContent.value = ''
}
storage2({ id: row.id }).then((res: any) => {
projectForme.value.name = res.data.name
projectForme.value.key = res.data.key
@ -93,7 +104,7 @@ function delproject(row: any) {
}
)
.then(() => {
if(row.storeContent){
if (row.storeContent) {
ElMessage.warning('已有项目绑定该存储空间,请先解除关联!')
return
}
@ -215,14 +226,27 @@ function typeName(arr: any, itemCode: any) {
const logqing = ref(false)
const logTxt = ref('')
function Loglist(row: any) {
title.value = row.name+'_存储内容'
title.value = row.name + '_存储内容'
logqing.value = true
logTxt.value = row.storeContent
}
function handleClose1() {
logqing.value = false
}
function comparePercentage(percentStr: any) {
//
if (!percentStr.spaceOccupancyRatio) {
percentStr.resar = false
return percentStr.spaceOccupancyRatio;
}
const percent = parseFloat(percentStr.spaceOccupancyRatio.replace('%', ''));
if (percent > 80 || percent == 80) {
percentStr.resar = true
}
return percentStr.spaceOccupancyRatio;
}
</script>
<template>
@ -250,23 +274,40 @@ function handleClose1() {
style="width: 100%; height: calc(100vh - 275px);margin-bottom: 20px;" border>
<el-table-column type="selection" width="40" />
<!-- <el-table-column type="index" label="序号" width="70" align="center"></el-table-column> -->
<el-table-column prop="name" label="存储空间名称" width="200"></el-table-column>
<el-table-column prop="type" label="存储策略" width="100">
<el-table-column prop="name" label="存储空间名称" width="200">
<template #default="scope">
<span>{{ typeName(dictType, scope.row.type) }}</span>
<span :style="{ color: scope.row.resar ? 'red' : '', 'font-size': scope.row.resar ? '16px' : '' }">{{
scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="type" label="存储策略" width="100">
<template #default="scope">
<span :style="{ color: scope.row.resar ? 'red' : '', 'font-size': scope.row.resar ? '16px' : '' }">{{
typeName(dictType, scope.row.type) }}</span>
</template>
</el-table-column>
<el-table-column prop="valueData" label="存储路径" width="200">
<template #default="scope">
<span :style="{ color: scope.row.resar ? 'red' : '', 'font-size': scope.row.resar ? '16px' : '' }">{{
scope.row.valueData }}</span>
</template>
</el-table-column>
<el-table-column prop="valueData" label="存储路径" width="200"></el-table-column>
<el-table-column prop="storeContent" label="存储内容">
<template #default="scope">
<div class="ellipsis">
<span class="single-line-ellipsis">{{ scope.row.storeContent }}</span>
<span :style="{ color: scope.row.resar ? 'red' : '', 'font-size': scope.row.resar ? '16px' : '' }"
class="single-line-ellipsis">{{ scope.row.storeContent }}</span>
<img src="@/assets/MenuIcon/xqing.png" alt="" title="详情" @click="Loglist(scope.row)"
style="cursor: pointer;">
</div>
</template>
</el-table-column>
<el-table-column prop="spaceOccupancyRatio" label="存储空间占用比例" width="140"></el-table-column>
<el-table-column prop="spaceOccupancyRatio" label="存储空间占用比例" width="140">
<template #default="scope">
<span :style="{ color: scope.row.resar ? 'red' : '', 'font-size': scope.row.resar ? '16px' : '' }">{{
comparePercentage(scope.row) }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="80" align="center">
<template #default="scope">
<span
@ -288,34 +329,34 @@ function handleClose1() {
<el-form ref="ruleFormRef" :model="projectForme" :rules="moderules" label-width="auto" class="demo-ruleForm"
status-icon>
<el-form-item label=" 存储源名称" prop="name">
<el-input v-model="projectForme.name" />
<el-input v-model="projectForme.name" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" 存储源别名" prop="key">
<el-input v-model="projectForme.key" />
<el-input v-model="projectForme.key" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" 存储源备注" prop="remark">
<el-input v-model="projectForme.remark" />
<el-form-item label=" 存储源备注">
<el-input v-model="projectForme.remark" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" 存储策略" prop="type">
<el-select v-model="projectForme.type" placeholder=" " clearable>
<el-select v-model="projectForme.type" placeholder=" " :disabled="storeContent != ''" clearable>
<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=" 文件路径" prop="filePath" >
<el-input v-model="projectForme.filePath" />
<el-form-item v-if="projectForme.type" :label="projectForme.type == 'minio'?'宿主机挂载绝对路径':'存储空间绝对路径'" prop="filePath">
<el-input v-model="projectForme.filePath" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" AccessKey" prop="accessKey" v-if="projectForme.type == 'minio'">
<el-input v-model="projectForme.accessKey" />
<el-input v-model="projectForme.accessKey" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" SecretKey" prop="secretKey" v-if="projectForme.type == 'minio'">
<el-input v-model="projectForme.secretKey" />
<el-input v-model="projectForme.secretKey" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" 存储空间名称" prop="bucketName" v-if="projectForme.type == 'minio'">
<el-input v-model="projectForme.bucketName" />
<el-input v-model="projectForme.bucketName" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item label=" 服务地址" prop="endPoint" v-if="projectForme.type == 'minio'">
<el-input v-model="projectForme.endPoint" />
<el-input v-model="projectForme.endPoint" :disabled="storeContent != ''" />
</el-form-item>
<el-form-item>
<div style="width: 100%;display: flex;justify-content: end;margin-top: 20px;">

View File

@ -115,7 +115,7 @@ function getProject() {
projectId.value = projectArr.value[0].id
storageKey.value = projectArr.value[0].key
localStorageId.value = projectArr.value[0].localStorageId
taskName.value = projectArr.value[0].taskName
// taskName.value = projectArr.value[0].taskName
ws1 = new WebSocket(userStore.WebSocketUrl + '/websocket/' + 'taskId_' + projectId.value)
setupWebSocket()
gettreedata()
@ -170,6 +170,7 @@ function gettreedata() {
treeloading.value = false
if (treedata.value[0]) {
pathid.value = treedata.value[0].nodeId
nodename.value = res.data[0].nodeName
filepath.value = res.data[0].path + res.data[0].nodeName + '/'
nextTick(() => {
treeRef.value?.setCurrentKey(pathid.value);
@ -183,12 +184,15 @@ function gettreedata() {
})
}
const pathid = ref()
const nodename = 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()
nodename.value = data.nodeName
creatform.value.workPath = ''
}
//
const frame = ref(false)
@ -218,7 +222,8 @@ function addSubItem(row: any) {
projectForme.value.taskId = projectId.value
projectForme.value.parentId = row.nodeId
if (row.nodeId == '00') {
projectForme.value.path = '/' + taskName.value + '/'
const item = projectArr.value.find(item => item.id === projectId.value);
projectForme.value.path = '/' + item.taskName + '/'
} else {
projectForme.value.path = filepath.value
}
@ -877,12 +882,13 @@ function paste() {
newFileName: [],
rename: '',
type: '',
taskId:projectId.value
taskId:projectId.value,
nodeId: pathid.value
}
// debugger
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
repeatObj.type = '0'
copytable.value.length = 0
if (tableData.value.length > 0) {
tableData.value.forEach((item: any) => {
@ -992,7 +998,8 @@ function copycover(row: any) {
newFileName: [],
rename: '',
type: '',
taskId:projectId.value
taskId:projectId.value,
nodeId: pathid.value
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
@ -1068,7 +1075,8 @@ function copysomefile() {
newFileName: [],
rename: '',
type: '',
taskId:projectId.value
taskId:projectId.value,
nodeId: pathid.value
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
@ -1133,7 +1141,8 @@ async function submitrename(formEl: any) {
newFileName: [],
rename: '',
type: '',
taskId:projectId.value
taskId:projectId.value,
nodeId: pathid.value
}
repeatObj.newPath = creatform.value.workPath ? creatform.value.workPath : filepath.value
repeatObj.parentId = creatform.value.parentId ? creatform.value.parentId : '00'
@ -1226,7 +1235,6 @@ async function submitcreat(formEl: any) {
//
const patharr = ref([])
function pathclick(row: any, index: any) {
patharr.value.splice(index + 1)
creatform.value.parentId = row.id
creatform.value.workPath = convertArrayToPath1(patharr.value)
@ -1512,7 +1520,7 @@ function openMap(row: any) {
// }));
// }, 2000);
mapTrajectory.value = true
maptime.value = 1
maptime.value = 300
}
function mapClose() {
mapTrajectory.value = false
@ -1532,7 +1540,7 @@ const options = ref([
, id: 600
},
])
const maptime: any = ref(1)
const maptime: any = ref(300)
//
const qvehuan: any = ref(false)
const qvehuan1: any = ref(false)
@ -1650,9 +1658,9 @@ function repstring(row: any) {
:props="defaultProps" v-loading="treeloading" @node-click="handleNodeClick"
class="silderLeft-default" style="height: calc(100vh - 280px); overflow: auto;margin-top: 10px;">
<template #default="{ data }">
<span class="custom-tree-node">
<span class="custom-tree-node" >
<span class="text">{{ data.nodeName }}</span>
<span class="img_tree">
<span class="img_tree" v-if="nodename != '根节点'">
<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)"> -->
@ -1689,23 +1697,23 @@ function repstring(row: any) {
</div>
<div>
<!-- :disabled="pathid.value" -->
<el-button type="primary" :disabled="loading" @click="creatFile">创建文件/文件夹</el-button>
<el-button type="primary" :disabled="loading" @click="openFile">上传</el-button>
<el-button type="primary" @click="delprojectArr()" :disabled="tableIdarr.length == 0">删除</el-button>
<el-button type="primary" @click="xiafilemony()" :disabled="tableIdarr.length == 0">下载</el-button>
<el-button type="primary" :disabled="loading || nodename == '根节点'" @click="creatFile " >创建文件/文件夹</el-button>
<el-button type="primary" :disabled="loading|| nodename == '根节点'" @click="openFile">上传</el-button>
<el-button type="primary" @click="delprojectArr()" :disabled="tableIdarr.length == 0|| nodename == '根节点'">删除</el-button>
<el-button type="primary" @click="xiafilemony()" :disabled="tableIdarr.length == 0|| nodename == '根节点'">下载</el-button>
</div>
</div>
<div style="margin-bottom: 10px;">
<el-button type="primary" v-if="pasteing" @click="paste()">粘贴({{ copyarr.length }})</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0" @click="copyMove('copy')">复制</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0" @click="copyMove('move')">移动</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0" @click="zipFile(true)">压缩</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0|| nodename == '根节点'" @click="copyMove('copy')">复制</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0|| nodename == '根节点'" @click="copyMove('move')">移动</el-button>
<el-button type="primary" :disabled="tableIdarr.length == 0|| nodename == '根节点'" @click="zipFile(true)">压缩</el-button>
</div>
<el-table ref="filetableRef" v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"
:header-cell-style="{ background: 'rgb(250 250 250)', color: '#383838', height: '50px' }"
style="width: 100%; height: calc(66vh);margin-bottom: 20px;" border>
<el-table-column type="selection" width="40" />
<el-table-column type="selection" width="40" v-if=" nodename != '根节点'" />
<!-- <el-table-column type="index" label="序号" width="70" align="center"></el-table-column> -->
<el-table-column prop="fileName" label="文件名称" width="200">
<template #default="scope">
@ -1733,7 +1741,7 @@ function repstring(row: any) {
</el-table-column>
<el-table-column prop="uploader" width="80" label="上传人"></el-table-column>
<el-table-column prop="updateTime" width="170" label="修改日期"></el-table-column>
<el-table-column label="操作" width="140" align="center">
<el-table-column v-if=" nodename != '根节点'" label="操作" width="140" align="center">
<template #default="scope">
<span
style="display: flex;display: -webkit-flex;justify-content: space-between;-webkit-justify-content: space-between; ">

View File

@ -175,6 +175,7 @@ function backups() {
function getchayi() {
const ids = []
const params: any = {}
params.taskId = projectId.value
if (comparearr.value.length > 0) {
comparearr.value.forEach((item: any) => {
ids.push(item.id)
@ -182,7 +183,7 @@ function getchayi() {
params.id = ids.join(',')
} else {
params.nodeId = pathid.value
params.taskId = projectId.value
// params.taskId = projectId.value
}
compareLocalList(params).then((res: any) => {
localOnlyFiles.value = res.data
@ -673,7 +674,6 @@ const handleMenuClick = (action: string, type: any) => {
getlocaltree()
getminiotree()
}
})
break
case 'preview':

View File

@ -8,7 +8,7 @@ export default {
import { onMounted, ref } from "vue";
import { ElMessage, ElMessageBox } from 'element-plus'
import Page from '@/components/Pagination/page.vue'
import { tstaskPage, addtsTask, updatetsTask, deleteTsTaskById, deleteTsTaskByIds, confirmDeleteTask } from "@/api/testtask";
import { tstaskPage, addtsTask, updatetsTask, deleteTsTaskById, deleteTsTaskByIds, confirmDeleteTask,selectTsNodesById } from "@/api/testtask";
import { storagesBytype } from "@/api/storage";
import { getDict } from '@/api/dict'
//
@ -54,7 +54,25 @@ function getdata() {
queryParams.value.startDate = ''
queryParams.value.endDate = ''
}
formitemarr.value.length = 0
loading.value = true
if (result2.value.length > 0) {
// attributeContent
queryParams.value.attributeContentJson = [];
console.log(result2.value)
result2.value.forEach((item: any) => {
// 访
queryParams.value.attributeContentJson.push({
[item.code]: queryParams.value[item.code]?queryParams.value[item.code]:''
});
});
console.log( queryParams.value.attributeContentJson)
// debugger
if( queryParams.value.attributeContentJson.length > 0){
queryParams.value.attributeContentJson = encodeURIComponent(JSON.stringify(queryParams.value.attributeContentJson))
}
}
tstaskPage(queryParams.value).then((res: any) => {
loading.value = false
tableData.value = res.data.records
@ -62,6 +80,7 @@ function getdata() {
queryParams.value.size = res.data.size
total.value = res.data.total
let arr = []
// result2.value.length = 0
tableData.value.forEach((item: any) => {
if (item.taskProps) {
arr = JSON.parse(item.taskProps)
@ -69,7 +88,20 @@ function getdata() {
arr = []
}
item.taskProps = arr
result2.value = arr
// debugger
if (item.taskProps.length > 0) {
item.taskProps.forEach((items: any) => {
item[items.code] = items.data
})
}
});
if (tableData.value[0].taskProps && tableData.value[0].taskProps.length > 0) {
tableData.value[0].taskProps.forEach((item: any) => {
formitemarr.value.push({ name: item.name, data: '', code: item.code })
})
}
})
}
//
@ -97,7 +129,8 @@ function addproject() {
localStorageId: '',
backupStorageId: ''
}
formitemarr.value.length = 0
// formitemarr.value.length = 0
shidou.value = false
}
//
function editproject(row: any) {
@ -106,6 +139,14 @@ function editproject(row: any) {
projectForme.value.taskDate = [projectForme.value.taskStartdate, projectForme.value.taskEnddate]
title.value = "修改试验任务"
frame.value = true
formitemarr.value = projectForme.value.taskProps
selectNodes(row)
}
const shidou = ref(false)
function selectNodes(row: any) {
selectTsNodesById({ taskId: row.id }).then((res: any) => {
shidou.value = res.data
})
}
//
function delproject(row: any) {
@ -307,7 +348,7 @@ function labledsure() {
return
}
generateUniqueId
formitemarr.value.push({ name: dataname.value, data: '', id: generateUniqueId(8) })
formitemarr.value.push({ name: dataname.value, data: '', code: generateUniqueId(8) })
labledone.value = false
}
function generateUniqueId(length: any) {
@ -328,24 +369,8 @@ function generateUniqueId(length: any) {
function dellable(index: any) {
formitemarr.value.splice(index, 1)
}
let result1 = ref([])
let result2 = ref([])
const attloading = ref(false)
const attbute = ref(false)
function attribute(input: any) {
result2.value = input
result1.value.length = 0
let inoutarr = JSON.parse(JSON.stringify(input))
result1.value = [inoutarr.reduce((acc: any, item: any) => {
acc[item.id] = item.data;
return acc;
}, {})];
attbute.value = true
console.log(result1.value)
}
function attributeclose() {
attbute.value = false
}
</script>
<template>
@ -369,23 +394,24 @@ function attributeclose() {
<el-date-picker v-model="dataduan" type="daterange" range-separator="" @change="getdata()"
style="margin-right: 10px ;margin-bottom: 10px;" start-placeholder="开始时间"
end-placeholder="结束时间" />
<el-input style="margin-right: 10px ;width:180px;" v-model="queryParams.carrierName" clearable
<el-input style="margin-right: 10px ;width:200px;" v-model="queryParams.carrierName" clearable
@change="getdata()" placeholder="载机名称"></el-input>
<el-input style="margin-right: 10px ;width:180px;" v-model="queryParams.deviceCode" clearable
<el-input style="margin-right: 10px ;width:200px;" 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-input v-for="item in result2" style="margin:10px 10px 0px 0px;width:180px;" v-model="queryParams[item.code]"
clearable @change="getdata()" :placeholder="item.name"></el-input>
<el-button type="primary" @click="getdata()">搜索</el-button>
<el-button type="primary" style="margin-top: 10px;" @click="getdata()">搜索</el-button>
</div>
<div>
<el-button type="primary" @click="addproject()">新增</el-button>
<el-button type="primary" @click="delprojectArr()" :disabled="tableIdarr.length == 0">删除</el-button>
</div>
</div>
<el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange"
:header-cell-style="{ background: 'rgb(250 250 250)', color: '#383838', height: '50px' }"
style="width: 100%; height: calc(64vh);margin-bottom: 20px;" border>
@ -403,18 +429,11 @@ function attributeclose() {
scope.row.taskEnddate : '' }}</span>
</template>
</el-table-column>
<el-table-column prop="description" label="自定义属性" width="100">
<template #default="scope">
<div class="ellipsis1">
<img src="@/assets/MenuIcon/xqing.png" alt="" title="详情"
@click="attribute(scope.row.taskProps)" style="cursor: pointer;">
</div>
</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">
<template #default="scope">
<!-- <span>{{ scope.row.testDescribe }}</span> -->
@ -446,6 +465,8 @@ function attributeclose() {
</span>
</template>
</el-table-column>
<el-table-column v-for="item in result2" :prop="item.code" :label="item.name"
width="180"></el-table-column>
</el-table>
<Page :total="total" v-model:size="queryParams.size" v-model:current="queryParams.current"
@pagination="getdata()">
@ -478,22 +499,7 @@ function attributeclose() {
value-format="YYYY-MM-DD" />
</el-form-item>
</div>
<div style="width: 100%;display: flex;justify-content: space-between;align-items: center;">
<el-form-item label="本地存储空间" prop="localStorageId" style="width: 50%;">
<el-select v-model="projectForme.localStorageId" clearable placeholder=" "
:disabled="projectForme.id">
<el-option v-for="item in localarr" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="minio存储空间" prop="backupStorageId" style="width: 50%;margin-left: 15px;">
<el-select v-model="projectForme.backupStorageId" clearable placeholder=" "
:disabled="projectForme.id">
<el-option v-for="item in minioarr" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</div>
<div style="width: 100%;display: flex;justify-content: space-between;align-items: center;">
<el-form-item label="任务地点" prop="taskPlace" style="width: 50%;">
<el-input v-model="projectForme.taskPlace" maxlength="500" show-word-limit />
@ -520,6 +526,22 @@ function attributeclose() {
<el-form-item label="传感器描述">
<el-input v-model="projectForme.sensorDescribe" :rows="12" type="textarea" show-word-limit />
</el-form-item>
<div style="width: 100%;display: flex;justify-content: space-between;align-items: center;">
<el-form-item label="本地存储空间" prop="localStorageId" style="width: 50%;">
<el-select v-model="projectForme.localStorageId" clearable placeholder=" "
:disabled="shidou">
<el-option v-for="item in localarr" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="minio存储空间" prop="backupStorageId" style="width: 50%;margin-left: 15px;">
<el-select v-model="projectForme.backupStorageId" clearable placeholder=" "
:disabled="shidou">
<el-option v-for="item in minioarr" :key="item.id" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</div>
<!-- <el-form-item label="设备名称">
<el-input v-model="projectForme.deviceName" maxlength="40" show-word-limit />
</el-form-item> -->
@ -549,7 +571,7 @@ function attributeclose() {
<el-button type="primary" @click="labledsure()">确定</el-button>
</div>
</el-dialog>
<el-dialog :title="'自定义属性详情'" v-model="attbute" width="1200px" :before-close="attributeclose" top="30px"
<!-- <el-dialog :title="'自定义属性详情'" v-model="attbute" width="1200px" :before-close="attributeclose" top="30px"
draggable :close-on-click-modal="false" destroy-on-close>
<el-table v-if="result2.length > 0" v-loading="attloading" :data="result1"
:header-cell-style="{ background: 'rgb(250 250 250)', color: '#383838', height: '50px' }"
@ -560,7 +582,7 @@ function attributeclose() {
style="width: 100%;height: 285px;display: flex;align-items: center;justify-content: center;border: 1px solid #ebeef5;">
<el-empty description="暂无数据" />
</div>
</el-dialog>
</el-dialog> -->
<el-dialog :title="title" v-model="logqing" width="60%" :before-close="handleClose1" top="30px" draggable
:close-on-click-modal="false" destroy-on-close>
<div class="texlog">
@ -612,7 +634,7 @@ function attributeclose() {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
// align-items: center;
margin-bottom: 20px;
.sou_title_left {