123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525 |
- <template>
- <hc-dialog
- v-model="isShow"
- is-footer-center
- title=" 节点参数"
- widths="56rem"
- :loading="submitLoading"
- @close="dialogClose"
- @save="saveElementHandle"
- >
- <hc-card-item>
- <template #extra>
- <el-button size="small" type="primary" @click="addRowClick">
- 新增
- </el-button>
- <el-button
- size="small"
- type="warning"
- :loading="refreshLoad"
- @click="refreshNode"
- >
- 刷新
- </el-button>
- <el-button
- size="small"
- type="success"
- @click="setParamNameClick"
- >
- 设置参数名称
- </el-button>
- </template>
- <hc-table
- :column="tableColumn"
- :datas="tableData"
- :loading="tableLoading"
- >
- <template #name="{ row, index }">
- <el-select
- v-model="row.k"
- placeholder="请选择"
- filterable
- block
- >
- <el-option
- v-for="item in nameList"
- :key="item.k"
- :label="item.name"
- :value="item.k"
- />
- </el-select>
- </template>
- <template #v="{ row, index }">
- <hc-table-input v-model="row.v" />
- </template>
- <template #remark="{ row, index }">
- <hc-table-input v-model="row.remark" />
- </template>
- <template #action="{ row, index }">
- <el-link type="warning" @click="linkElement(row)">
- 关联元素
- </el-link>
- <el-link type="danger" @click="delRowClick(index, row)">
- 删除
- </el-link>
- </template>
- </hc-table>
- </hc-card-item>
- <!-- 设置参数名称 -->
- <hc-dialog
- v-model="setNameShow"
- is-footer-center
- title=" 设置参数名称"
- widths="56rem"
- :loading="setNameLoading"
- @close="nameClosedialogClose"
- @save="saveNameHandle"
- >
- <hc-card-item>
- <template #extra>
- <el-button
- size="small"
- type="primary"
- @click="addNameRowClick"
- >
- 新增
- </el-button>
- </template>
- <hc-table
- :column="nameTableColumn"
- :datas="nameTableData"
- :loading="nameTableLoading"
- >
- <template #name="{ row, index }">
- <hc-table-input v-model="row.name" />
- </template>
- <template #k="{ row, index }">
- <hc-table-input v-model="row.k" />
- </template>
- <template #remark="{ row, index }">
- <hc-table-input v-model="row.remark" />
- </template>
- <template #action="{ row, index }">
- <el-link type="danger" @click="delNameClick(row, index)">
- 删除
- </el-link>
- </template>
- </hc-table>
- </hc-card-item>
- </hc-dialog>
- <!-- 关联元素 -->
- <hc-dialog
- v-model="linkParamShow"
- title=" 节点参数设置-关联元素"
- widths="56rem"
- :footer="false"
- @close="linkParamdialogClose"
- >
- <hc-card-item>
- <hc-table
- :column="linkTableColumn"
- :datas="linkTableData"
- :loading="linkTableLoading"
- >
- <template #action="{ row, index }">
- <el-link
- v-if="!row.mappingId"
- type="primary"
- @click="chooseClick(row, index)"
- >
- 选择元素
- </el-link>
- <el-link
- v-else
- type="danger"
- :loading="delLinkLoading"
- @click="delLinkClick(row, index)"
- >
- 删除关联
- </el-link>
- </template>
- </hc-table>
- </hc-card-item>
- </hc-dialog>
- <!-- 选择关联元素 -->
- <hc-dialog
- v-model="chooseLinkShow"
- title=" 选择关联元素"
- widths="56rem"
- :loading="saveLoading"
- @close="linkShowClose"
- @save="saveLink"
- >
- <hc-card-item>
- <hc-search-input
- v-model="queryValue"
- class="mb-4"
- @search="searchClick"
- @clear="searchClick"
- />
- <hc-table
- :column="chooseLinkTableColumn"
- :datas="chooseLinkTableData"
- :loading="chooselinkTableLoading"
- >
- <template #action="{ row, index }">
- <el-checkbox
- v-model="row.checked"
- @change="(value) => linkEleCheck(value, index)"
- />
- </template>
- </hc-table>
- </hc-card-item>
- </hc-dialog>
- </hc-dialog>
- </template>
- <script setup>
- import { ref, watch } from 'vue'
- import mainWbsApi from '~api/wbs/wbsforelement'
- import mainApi from '~api/wbs/tree'
- import { getArrValue } from 'js-fast-way'
- import { HcDelMsg } from 'hc-vue3-ui'
- const props = defineProps({
- nodeId: {
- type: String,
- default: '',
- },
- projectId: {
- type: String,
- default: '',
- },
- scopeType: {
- type: [String, Number],
- default: '',
- },
- nodeInfo: {
- type: Object,
- default: () => {},
- },
- })
- //事件
- const emit = defineEmits(['close'])
- //双向绑定
- // eslint-disable-next-line no-undef
- const isShow = defineModel('modelValue', {
- default: false,
- })
- //监听显示
- watch(isShow, (val) => {
- if (val) {
- getTableData()
- getNameList()
- } else {
- emit('close')
- }
- })
- const nodeId = ref(props.nodeId)
- const projectId = ref(props.projectId)
- const scopeType = ref(props.scopeType)
- const nodeInfo = ref(props.nodeInfo)
- const delIds = ref([])
- //监听数据
- watch(
- () => [props.nodeId, props.projectId, props.scopeType, props.nodeInfo],
- ([tid, pid, stype, ninfo]) => {
- nodeId.value = tid
- projectId.value = pid
- scopeType.value = stype
- nodeInfo.value = ninfo
- },
- { deep: true },
- )
- //关闭弹窗
- const dialogClose = () => {
- isShow.value = false
- emit('close')
- }
- const submitLoading = ref(false)
- const saveElementHandle = async () => {
- let pid = nodeInfo.value.primaryKeyId
- ? nodeInfo.value.primaryKeyId
- : nodeInfo.value.pKeyId
- let tag = true
- tableData.value.forEach((val) => {
- if (!val.k | !val.v) {
- return (tag = false)
- }
- for (let i = 0; i < nameList.value.length; i++) {
- if (nameList.value[i].k == val.k) {
- val.name = nameList.value[i].name
- return
- }
- }
- })
- if (tag) {
- submitLoading.value = true
- const { error, code, data } = await mainApi.saveOrUpdateBatch({
- scopeType: scopeType.value,
- projectId: projectId.value,
- nodeId: projectId.value ? pid : nodeId.value,
- wps: tableData.value,
- type: 1,
- delIds: delIds.value,
- })
- submitLoading.value = false
- //判断状态
- if (!error && code === 200) {
- window.$message.success('设置参数节点成功')
- delIds.value = []
- getTableData()
- }
- } else {
- window.$message.warning('请填写所有的参数名称和参数值KEY')
- }
- }
- const tableColumn = [
- { key: 'name', name: '参数名称', align: 'center' },
- { key: 'v', name: '参数值KEY', align: 'center' },
- { key: 'remark', name: '描述', align: 'center' },
- { key: 'action', name: '操作', align: 'center' },
- ]
- const tableLoading = ref(false)
- const tableData = ref([])
- const getTableData = async () => {
- let pid = nodeInfo.value.primaryKeyId
- ? nodeInfo.value.primaryKeyId
- : nodeInfo.value.pKeyId
- tableLoading.value = true
- const { data } = await mainApi.parameters({
- wbsId: projectId.value ? pid : nodeId.value,
- })
- tableData.value = getArrValue(data)
- tableLoading.value = false
- }
- const nameList = ref([])
- const getNameList = async () => {
- const { data } = await mainApi.keymap({})
- nameList.value = getArrValue(data)
- }
- const addRowClick = () => {
- let pid = nodeInfo.value.primaryKeyId
- ? nodeInfo.value.primaryKeyId
- : nodeInfo.value.pKeyId
- tableData.value.unshift({
- k: '',
- v: '',
- remark: '',
- nodeId: projectId.value ? pid : nodeId.value,
- type: 1,
- })
- }
- const delRowClick = (index, row) => {
- delIds.value.push(row.id)
- tableData.value.splice(index, 1)
- }
- //设置节点参数名称
- const setNameShow = ref(false)
- const nameTableData = ref([])
- const setParamNameClick = async () => {
- setNameShow.value = true
- await getNameList()
- nameTableData.value = [...nameList.value]
- }
- const nameClosedialogClose = () => {}
- const setNameLoading = ref(false)
- const saveNameHandle = async () => {
- //设置参数名称中的保存按钮
- if (nameTableData.value.length) {
- let tag = true
- nameTableData.value.forEach((val) => {
- if (!val.name || !val.k) {
- return (tag = false)
- }
- })
- if (tag) {
- setNameLoading.value = true
- const { error, code, data } = await mainApi.saveOrUpdateBatch({
- scopeType: scopeType.value,
- nodeId: nodeId.value,
- projectId: projectId.value,
- wps: nameTableData.value,
- type: 0,
- delIds: delIds.value,
- })
- setNameLoading.value = false
- //判断状态
- if (!error && code === 200) {
- window.$message.success('操作成功')
- setNameShow.value = false
- delIds.value = []
- getNameList()
- getTableData()
- }
- } else {
- window.$message.warning('请填写所有的参数名称和参数值KEY')
- }
- } else {
- window.$message.warning('请先添加参数')
- }
- }
- const nameTableColumn = [
- { key: 'name', name: '参数名称', align: 'center' },
- { key: 'k', name: '参数值KEY', align: 'center' },
- { key: 'remark', name: '描述', align: 'center' },
- { key: 'action', name: '操作', align: 'center' },
- ]
- const nameTableLoading = ref(false)
- const addNameRowClick = () => {
- nameTableData.value.unshift({
- name: '',
- remark: '',
- k: '',
- type: 0,
- nodeId: nodeId.value,
- })
- }
- const delNameClick = (row, index) => {
- delIds.value.push(row.id)
- nameTableData.value.splice(index, 1)
- }
- //关联元素
- const linkTableColumn = [
- { key: 'tableName', name: '元素表名', align: 'center' },
- { key: 'elementName', name: '关联元素字段', align: 'center' },
- { key: 'action', name: '操作', align: 'center' },
- ]
- const linkTableData = ref([])
- const linkTableLoading = ref(false)
- const curParam = ref({})
- const linkParamShow = ref(false)
- const getLinkTableData = async () => {
- const { error, code, data } = await mainApi.getParamElements({
- nodeId: nodeId.value,
- projectId: projectId.value,
- paramId: curParam.value.id,
- scopeType: scopeType.value,
- })
- //判断状态
- if (!error && code === 200) {
- linkTableData.value = getArrValue(data)
- }
- }
- const linkElement = async (row) => {
- if (!row.id) {
- window.$message.warning('请先保存数据,再点击关联元素')
- } else {
- curParam.value = row
- linkParamShow.value = true
- getLinkTableData(row)
- }
- }
- const linkParamdialogClose = () => {
- linkParamShow.value = false
- }
- //选择元素
- const chooseLinkShow = ref(false)
- const chooseLinkTableData = ref([])
- const chooselinkTableLoading = ref(false)
- const getChooseData = async (id) => {
- let pid = nodeInfo.value.primaryKeyId
- ? nodeInfo.value.primaryKeyId
- : nodeInfo.value.pKeyId
- chooselinkTableLoading.value = true
- const { error, code, data } = await mainApi.selectFormElements({
- nodeId: projectId.value ? pid : nodeId.value,
- id: id,
- type: projectId.value ? 3 : 5,
- })
- chooselinkTableLoading.value = false
- //判断状态
- if (!error && code === 200) {
- chooseLinkTableData.value = getArrValue(data)
- }
- }
- const chooseId = ref('')
- const chooseClick = (row) => {
- chooseLinkShow.value = true
- chooseId.value = row.id
- getChooseData(row.id)
- }
- const linkShowClose = () => {}
- const chooseLinkTableColumn = [
- { key: 'eName', name: '元素名', align: 'center' },
- { key: 'action', name: '操作', align: 'center' },
- ]
- const queryValue = ref('')
- const searchClick = () => {
- if (queryValue.value.length > 0) {
- chooseLinkTableData.value = chooseLinkTableData.value.filter((ele) => {
- return ele.eName.indexOf(queryValue.value) > -1
- })
- } else {
- getChooseData(chooseId.value)
- }
- }
- const linkEleCheck = (value, index) => {
- if (value) {
- chooseLinkTableData.value.forEach((ele, i) => {
- if (i != index) {
- ele.checked = false
- }
- })
- }
- }
- const saveLoading = ref(false)
- const saveLink = async () => {
- let target = {}
- chooseLinkTableData.value.forEach((ele) => {
- if (ele.checked === true) {
- target = { elementId: ele.id, paramId: curParam.value.id }
- }
- })
- saveLoading.value = true
- const { error, code, data, msg } = await mainApi.specifiedParamElements(
- target,
- )
- saveLoading.value = false
- //判断状态
- if (!error && code === 200) {
- window.$message.success(msg)
- chooseLinkShow.value = false
- getLinkTableData()
- }
- }
- const delLinkLoading = ref(false)
- const delLinkClick = (row) => {
- HcDelMsg(async (resolve) => {
- //发起请求
- delLinkLoading.value = true
- const { isRes } = await mainApi.delParamElements(row)
- resolve() //关闭弹窗
- if (!isRes) return
- window.$message.success('删除成功')
- getLinkTableData()
- })
- }
- //刷新
- const refreshLoad = ref(false)
- const refreshNode = async () => {
- refreshLoad.value = true
- const { error, code, data, msg } = await mainApi.refrehPram({
- type: projectId.value ? 1 : 0,
- nodeId: nodeId.value,
- projectId: projectId.value,
- })
- refreshLoad.value = false
- //判断状态
- if (!error && code === 200) {
- window.$message.success(msg)
- }
- }
- </script>
|