3 changed files with 261 additions and 5 deletions
@ -0,0 +1,243 @@ |
|||||
|
<!-- |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2025-04-23 16:03:59 |
||||
|
@ 备注: 矩阵数据处理 |
||||
|
--> |
||||
|
<script lang="ts" setup> |
||||
|
import { |
||||
|
searchMatrix, |
||||
|
matrixCont, |
||||
|
martixFieldStruct, |
||||
|
matrixInfo, |
||||
|
} from "@/api/matrixapi/type"; |
||||
|
import { getMatrixList, getMatrixField } from "@/api/matrixapi/index"; |
||||
|
|
||||
|
const props = defineProps({ |
||||
|
data: { |
||||
|
type: Object, |
||||
|
default: () => { |
||||
|
return { |
||||
|
matrixid: 0, |
||||
|
matrixName: "", |
||||
|
factorid: 0, |
||||
|
factorName: "", |
||||
|
outcomeid: 0, |
||||
|
outcomeName: "", |
||||
|
list: [], |
||||
|
}; |
||||
|
}, |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
const emits = defineEmits(["update:data"]); //父级元素 |
||||
|
const infor = computed({ |
||||
|
get: () => props.data, |
||||
|
set: (val) => { |
||||
|
emits("update:data", val); |
||||
|
}, |
||||
|
}); |
||||
|
//搜索矩阵参数 |
||||
|
const searchArchiveQuery = reactive<searchMatrix>({ |
||||
|
page: 1, |
||||
|
pagesize: 10, |
||||
|
}); |
||||
|
const total = ref(0); //总记录数 |
||||
|
const farstId = ref<number>(0); |
||||
|
const loading = ref(true); |
||||
|
const loadingVal = ref(true); |
||||
|
const matrixContList = ref<matrixCont[]>(); |
||||
|
const factorList = ref<martixFieldStruct[]>(); |
||||
|
const outcomeList = ref<martixFieldStruct[]>(); |
||||
|
/** |
||||
|
* 获取矩阵列表 |
||||
|
*/ |
||||
|
const searchMatrixList = () => { |
||||
|
loading.value = true; |
||||
|
getMatrixList(searchArchiveQuery) |
||||
|
.then(({ data }) => { |
||||
|
console.log("获取矩阵列表->", data); |
||||
|
matrixContList.value = data.list; |
||||
|
total.value = data.total; |
||||
|
if (data.list.length > 0) { |
||||
|
farstId.value = data.list[0].id * 1; |
||||
|
} |
||||
|
}) |
||||
|
.finally(() => { |
||||
|
loading.value = false; |
||||
|
if (infor.value.matrix.matrixid != 0) { |
||||
|
gainMatrixNeed(infor.value.matrix.matrixid); |
||||
|
} else { |
||||
|
infor.value.matrix.matrixid = farstId.value; |
||||
|
gainMatrixNeed(farstId.value); |
||||
|
} |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
//获取矩阵相关字段 |
||||
|
const gainMatrixNeed = (val: any) => { |
||||
|
loadingVal.value = true; |
||||
|
getMatrixField({ id: val * 1 }) |
||||
|
.then(({ data }) => { |
||||
|
console.log("监听数据---->", data); |
||||
|
factorList.value = data.factor; |
||||
|
outcomeList.value = data.outcome; |
||||
|
if (data.factor.length > 0) { |
||||
|
if (infor.value.matrix.factorid == 0) { |
||||
|
infor.value.matrix.factorid = data.factor[0].id * 1; |
||||
|
infor.value.matrix.factorName = data.factor[0].name; |
||||
|
} |
||||
|
} |
||||
|
if (data.outcome.length > 0) { |
||||
|
if (infor.value.matrix.outcomeid == 0) { |
||||
|
infor.value.matrix.outcomeid = data.outcome[0].id * 1; |
||||
|
infor.value.matrix.outcomeName = data.outcome[0].name; |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
.finally(() => { |
||||
|
loadingVal.value = false; |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
//选择矩阵 |
||||
|
const pickmatirval = (val: matrixCont) => { |
||||
|
infor.value.matrix.matrixid = val.id * 1; |
||||
|
infor.value.matrix.matrixName = val.name; |
||||
|
infor.value.matrix.list = []; |
||||
|
// emits("change", matrixIsClick); |
||||
|
gainMatrixNeed(val.id * 1); |
||||
|
}; |
||||
|
onMounted(() => { |
||||
|
console.log("初始数据加载---->", infor); |
||||
|
searchMatrixList(); |
||||
|
}); |
||||
|
/** |
||||
|
@ 作者: 秦东 |
||||
|
@ 时间: 2025-04-23 13:22:57 |
||||
|
@ 功能: 判断当前选择的内容 |
||||
|
*/ |
||||
|
const judgeIsTrue = (val: number) => { |
||||
|
let isTrue = false; |
||||
|
if (infor.value.matrix.list && infor.value.matrix.list.length > 0) { |
||||
|
infor.value.matrix.list.forEach((item: any) => { |
||||
|
if (item.outcomeid == val) { |
||||
|
isTrue = true; |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
return isTrue; |
||||
|
}; |
||||
|
|
||||
|
//选择矩阵值 |
||||
|
const pickval = (val: martixFieldStruct) => { |
||||
|
infor.value.matrix.outcomeid = val.id * 1; |
||||
|
infor.value.matrix.outcomeName = val.name; |
||||
|
let isAdd = true; |
||||
|
infor.value.matrix.list.forEach((item: any, index: number) => { |
||||
|
if (item.outcomeid == val.id * 1) { |
||||
|
isAdd = false; |
||||
|
infor.value.matrix.list.splice(index, 1); |
||||
|
} |
||||
|
}); |
||||
|
if (isAdd) { |
||||
|
infor.value.matrix.list.push({ |
||||
|
outcomeid: val.id * 1, |
||||
|
outcomeName: val.name, |
||||
|
}); |
||||
|
} |
||||
|
// emits("change", infor.value.matrix); |
||||
|
}; |
||||
|
</script> |
||||
|
<template> |
||||
|
<div> |
||||
|
<el-divider content-position="left">矩阵选项</el-divider> |
||||
|
<el-descriptions |
||||
|
title="" |
||||
|
direction="vertical" |
||||
|
:column="2" |
||||
|
:size="size" |
||||
|
border |
||||
|
class="suojin" |
||||
|
> |
||||
|
<el-descriptions-item label="可用矩阵" width="50%"> |
||||
|
<el-row v-loading="loading"> |
||||
|
<el-col :span="24" class="materBody"> |
||||
|
<ul> |
||||
|
<li |
||||
|
v-for="item in matrixContList" |
||||
|
:key="item.id" |
||||
|
:class="infor.matrix.matrixid == item.id ? 'active' : ''" |
||||
|
@click="pickmatirval(item)" |
||||
|
> |
||||
|
<el-text class="mx-1">{{ item.name }}</el-text> |
||||
|
<el-text class="mx-1">{{ item.orgname }}</el-text> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</el-col> |
||||
|
<el-col :span="24"> |
||||
|
<el-pagination |
||||
|
v-model:total="total" |
||||
|
v-model:current-page="searchArchiveQuery.page" |
||||
|
small |
||||
|
layout="prev, pager, next" |
||||
|
:page-size="searchArchiveQuery.pagesize" |
||||
|
:pager-count="5" |
||||
|
/> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-descriptions-item> |
||||
|
<el-descriptions-item label="矩阵选项" width="50%"> |
||||
|
<el-row v-loading="loadingVal"> |
||||
|
<el-col :span="24"> |
||||
|
<el-select |
||||
|
v-model="infor.matrix.factorid" |
||||
|
filterable |
||||
|
placeholder="Select" |
||||
|
style="width: 100%" |
||||
|
@change="pickSelect" |
||||
|
> |
||||
|
<el-option :key="0" label="请选择" :value="0" /> |
||||
|
<el-option |
||||
|
v-for="item in factorList" |
||||
|
:key="item.id" |
||||
|
:label="item.name" |
||||
|
:value="item.id" |
||||
|
/> |
||||
|
</el-select> |
||||
|
</el-col> |
||||
|
<el-col :span="24" class="materBody"> |
||||
|
<ul> |
||||
|
<li |
||||
|
v-for="item in outcomeList" |
||||
|
:key="item.id" |
||||
|
:class="judgeIsTrue(item.id) ? 'active' : ''" |
||||
|
@click="pickval(item)" |
||||
|
> |
||||
|
<el-text class="mx-1">{{ item.name }}</el-text> |
||||
|
<el-text class="mx-1">{{}}{{item.pinyin}}</el-text> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-descriptions-item> |
||||
|
</el-descriptions> |
||||
|
</div> |
||||
|
</template> |
||||
|
<style lang="scss" scoped> |
||||
|
.materBody { |
||||
|
padding: 5px 0 5px 0; |
||||
|
|
||||
|
li { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
li.active span { |
||||
|
color: #409eff; |
||||
|
} |
||||
|
} |
||||
|
.suojin { |
||||
|
padding: 0px 20px; |
||||
|
} |
||||
|
</style> |
||||
Loading…
Reference in new issue