数通智联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

233 lines
7.0 KiB

<!--
@ 作者: 鲁智强
@ 时间: 2023-08-15 11:34:38
@ 备注:
-->
<template>
<el-dialog :model-value="true" title="查看方案详情" @close="handleClose">
<el-table :data="tablea" border label-width="120px" class="demo-ruleForm" :span-method="objectSpanMethod" style="width:100%">
<el-table-column prop="dimensionname" label="考核维度"/>
<el-table-column prop="dimensionstandard" label="维度权重"/>
<el-table-column label="考核指标">
<template #default="scope">
<a v-if="scope.row.attribute == 1" style="color:#409eff" @click="cancelDialog(scope.row)">{{scope.row.targetname}}</a >
<a v-if="scope.row.attribute == 2">{{scope.row.targetname}}</a>
</template>
</el-table-column>
<el-table-column prop="Targetstandard" label="权重指标"/>
<el-table-column prop="content" label="说明"/>
<el-table-column prop="unit" label="单位"/>
<el-table-column prop="state" label="指标状态">
<template #default="scope">
<span v-if="scope.row.state== 1" class="el-tag">月</span>
<span v-if="scope.row.state== 2" class="el-tag el-tag--warning">季度</span>
<span v-if="scope.row.state== 3" class="el-tag el-tag--warning el-tag--light">年</span>
</template>
</el-table-column>
<el-table-column prop="cycle" label="周期">
<template #default="scope">
<span v-if="scope.row.cycle== 4" class="el-tag">使用</span>
<span v-if="scope.row.cycle== 5" class="el-tag">禁用</span>
<span v-if="scope.row.cycle== 6" class="el-tag">观察</span>
</template>
</el-table-column>
<el-table-column prop="cycle" label="频次"/>
<el-table-column fixed="right" label="执行人" width="200">
<template #default="{ row }">
<el-button type="primary" link @click="handleio(row)"><el-icon><View /></el-icon>查看</el-button>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="200">
<template #default="{ row }">
<el-button type="primary" link @click="handleErd(row)"><el-icon><EditPen /></el-icon>修改</el-button>
<el-button type="primary" link @click="handleDel(row)"><el-icon><Delete /></el-icon>删除</el-button>
</template>
</el-table-column>
</el-table>
<Xd v-if="data.xdPostBox" v-model="data.xdPostBox" :row-info="rowInfo"></Xd>
<Hyr v-if="data.hyrPostBox" v-model="data.hyrPostBox" :row-info="rowInfo"></Hyr>
<Ycy v-if="data.ycyPostBox" v-model="data.ycyPostBox" :row-info="rowInfo"></Ycy>
</el-dialog>
</template>
<script lang="ts" setup>
import { reactive } from "vue";
import {tarlist,addPostCont,addtarget,getgroupuser,addposttargetcont,search_orgpost,organdpost} from '@/api/opk/api'
import {editPostCont} from '@/api/opk/pulic/api'
import { ge_add } from '@/api/opk/news/api'
import {look_scheme} from '@/api/opk/opk/api'
import { create_scheme,ge_copy,del_scheme } from '@/api/opk/zxy/news/api'
import Xd from './xd.vue'
import Hyr from './hyr.vue'
import Ycy from './ycy.vue'
const isshow = ref(false)
const props= defineProps( {
title: {
type: String,
default: "",
},
ygPostBox: {
type: Boolean,
default: false,
},
rowInfo: {
type: Object,
default() {
return {};
},
},
arrayNum: {
type: Number,
default: 0,
},
});
const orgTreeProps ={
label: 'name',
}
const orgTreeProp = {
label:'title',
children:'children'
}
const data = reactive({
xdPostBox:false,
hyrPostBox:false,
ycyPostBox:false,
})
// eslint-disable-next-line vue/no-dupe-keys
const rowInfo = ref<any>({})
const emit = defineEmits(["update:ygPostBox","editRow","addRow"])
const formData = reactive({
deaprtname:"",
year:"",
asd:[] as string[],
})
const tablea = ref<any>([])
function ge_adds(){
const yui = props.rowInfo.key
look_scheme({id:yui})
.then((data) => {
tablea.value = data.data;
}).finally(()=>{
isshow.value = false
})
}
ge_adds()
// 关闭弹窗
const handleClose = ()=> {
emit("update:ygPostBox", false);
}
const handleio = (val:any)=>{
data.xdPostBox = true,
rowInfo.value = val
}
const handleErd = (val:any)=>{
data.hyrPostBox = true,
rowInfo.value = val
}
const handleDel = (val:any) => {
ElMessageBox.confirm("你确定删除这条信息吗?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
const delid = new String(val.id)
del_scheme({orgid:val.orgid,planversionkey:val.plantversion,targetid:val.targetid})
ge_adds()
})
}
const cancelDialog = (val:any)=>{
data.ycyPostBox=true,
rowInfo.value =val
}
// 合并
interface ObjInterface {
[key: string]: any; // 字段扩展声明
}
function tableRowMerge(
data: ObjInterface[],
rowName: string,
otherRowName?: string
) {
const idArray = [] as number[];
let idPos = 0;
for (let i = 0; i < data.length; i++) {
// 如果当 i == 0 说明数据是第一行, 需要重新赋值
if (i == 0) {
// idArray.push(1) 说明这一行数据被显示出来
idArray.push(1);
// idPos = 0 重置当前的计数器
idPos = 0;
}
// 说明不是从第一行开始遍历的
else {
if (otherRowName) {
//主行之外的 另一行合并
if (
data[i][rowName] == data[i - 1][rowName] &&
data[i][otherRowName] == data[i - 1][otherRowName]
) {
// 如果相同就需要将 idArray 的数据自加
idArray[idPos] += 1;
// 同时需要将 idArray push一个0 表示下一行不用显示
idArray.push(0);
}
// 说明 当前的数据和上一行的指定数据不同
else {
// idArray.push(1) 说明当前一行的数据需要显示
idArray.push(1);
// 重新给计数器赋值
idPos = i;
}
} else {
// 判断当前的指定数据是否和之前的指定数据值相同
if (data[i][rowName] == data[i - 1][rowName]) {
// 如果相同就需要将 idArray 的数据自加
idArray[idPos] += 1;
// 同时需要将 idArray push一个0 表示下一行不用显示
idArray.push(0);
}
// 说明 当前的数据和上一行的指定数据不同
else {
// idArray.push(1) 说明当前一行的数据需要显示
idArray.push(1);
// 重新给计数器赋值
idPos = i;
}
}
}
}
return idArray;
}
let rowMergeArr = [] as number[];
/**
* @description 合并行
*/
interface SpanMethodProps {
row: User;
column: TableColumnCtx<PriceTableItem>;
rowIndex: number;
columnIndex: number;
}
const objectSpanMethod = ({
row,
column,
rowIndex,
columnIndex
}: SpanMethodProps) => {
// level列
if (columnIndex === 1) {
// rowMergeArr[rowIndex] 取出当前存放行的合并状态
const rowSpan = rowMergeArr[rowIndex];
// 判断当前的 列是否需要显示
return {
rowspan: rowSpan,
colspan: 0
};
}
};
onMounted(()=>{
Object.assign(formData,props.rowInfo);
rowMergeArr = tableRowMerge(tablea, 'dimensionname');// 主列的行合并
})
</script>