|
@@ -12,6 +12,7 @@
|
|
|
<hc-search-input
|
|
|
v-model="searchTreeName"
|
|
|
@search="searchTreeNameClick"
|
|
|
+ @clear="searchTreeNameClick"
|
|
|
>
|
|
|
<template #prepend>
|
|
|
<el-select
|
|
@@ -41,8 +42,9 @@
|
|
|
}}</span>
|
|
|
</template>
|
|
|
</hc-lazy-tree>
|
|
|
- <template v-if="isTreeMode === true">
|
|
|
+ <template v-if="isTreeMode === false">
|
|
|
<hc-data-tree
|
|
|
+ defaultExpandAll
|
|
|
ref="treeRef"
|
|
|
:h-props="treeProps"
|
|
|
tree-key="id"
|
|
@@ -51,7 +53,7 @@
|
|
|
>
|
|
|
<template #name="{ data }">
|
|
|
<span class="text-16px font-400">{{
|
|
|
- data.name
|
|
|
+ data.title
|
|
|
}}</span>
|
|
|
</template>
|
|
|
</hc-data-tree>
|
|
@@ -108,18 +110,18 @@
|
|
|
label-position="top"
|
|
|
label-width="auto"
|
|
|
>
|
|
|
- <el-form-item label="节点编号:">
|
|
|
+ <el-form-item label="节点名称:" prop="nodeName">
|
|
|
<el-input
|
|
|
- v-model="formModel.nodeCode"
|
|
|
+ v-model="formModel.nodeName"
|
|
|
clearable
|
|
|
- placeholder="请输入节点编号"
|
|
|
+ placeholder="请输入节点名称"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="节点名称:" prop="nodeName">
|
|
|
+ <el-form-item label="上级节点:">
|
|
|
<el-input
|
|
|
- v-model="formModel.nodeName"
|
|
|
+ v-model="formModel.parentName"
|
|
|
clearable
|
|
|
- placeholder="请输入节点名称"
|
|
|
+ disabled
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="节点类型:" prop="nodeType">
|
|
@@ -129,29 +131,125 @@
|
|
|
clearable
|
|
|
block
|
|
|
placeholder="请选择节点类型"
|
|
|
+ @change="nodeTypeChange"
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="item in meterUnitType"
|
|
|
+ v-for="item in majorDatatype"
|
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="工程类型:">
|
|
|
- <el-input
|
|
|
- v-model="formModel.engineeringTypeName"
|
|
|
- clearable
|
|
|
- placeholder="请输入工程类型"
|
|
|
- disabled
|
|
|
- />
|
|
|
+ <el-form-item
|
|
|
+ label="划分编号"
|
|
|
+ v-if="wbsType !== 2 && wbsType !== 5 && wbsType !== 3"
|
|
|
+ >
|
|
|
+ <el-input v-model="formModel.partitionCode"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="备注:">
|
|
|
- <el-input
|
|
|
- v-model="formModel.remarks"
|
|
|
- clearable
|
|
|
- placeholder="请输入备注"
|
|
|
- />
|
|
|
+
|
|
|
+ <el-form-item
|
|
|
+ label="唯一编码"
|
|
|
+ v-if="(wbsType !== 5) & (wbsType !== 3)"
|
|
|
+ >
|
|
|
+ <el-input v-model="formModel.uniqueCode"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <template v-if="formModel.nodeType == 6 && wbsType !== 3">
|
|
|
+ <el-form-item label="是否有混凝土">
|
|
|
+ <el-radio-group
|
|
|
+ v-model="formModel.isConcrete"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-radio :label="0" border>无</el-radio>
|
|
|
+ <el-radio :label="1" border>有</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否试验节点">
|
|
|
+ <el-radio-group
|
|
|
+ v-model="formModel.isExpernode"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-radio :label="0" border>否</el-radio>
|
|
|
+ <el-radio :label="1" border>是</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <el-form-item
|
|
|
+ label="内业资料类型"
|
|
|
+ prop="majorDataType"
|
|
|
+ v-if="wbsType !== 2 && (wbsType !== 5) & (wbsType !== 3)"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model="formModel.majorDataType"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in majorDataTypeList"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ label="勾选相关联试验"
|
|
|
+ prop="mixRatioTestIds"
|
|
|
+ v-if="wbsType === 2 && formModel.nodeType === 53"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ position: relative;
|
|
|
+ height: 300px;
|
|
|
+ border: 1px solid #dddfe6;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-scrollbar class="h-100p">
|
|
|
+ <div v-loading="testTreeLoad">
|
|
|
+ <el-tree
|
|
|
+ class="filter-tree"
|
|
|
+ :data="testTreeData"
|
|
|
+ :props="defaultProps"
|
|
|
+ :expand-on-click-node="false"
|
|
|
+ highlight-current
|
|
|
+ node-key="id"
|
|
|
+ ref="treeall"
|
|
|
+ show-checkbox
|
|
|
+ :default-checked-keys="mixRatioTestIds"
|
|
|
+ @check="TestTreeCheckChange"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="标准分类">
|
|
|
+ <el-select
|
|
|
+ v-model="formModel.standardType"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ @change="changeStandType"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in standardTypeOptions"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="单元名称">
|
|
|
+ <el-select
|
|
|
+ v-model="formModel.unitName"
|
|
|
+ placeholder="请选择"
|
|
|
+ class="w-100p"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in unitOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.dictValue"
|
|
|
+ :value="item.dictKey"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
@@ -203,6 +301,7 @@
|
|
|
import { nextTick, ref, watch } from "vue";
|
|
|
import { HcDelMsg } from "hc-vue3-ui";
|
|
|
import { getDictionaryData, getDictionaryName } from "~src/utils/tools";
|
|
|
+import { getDictionary } from "~api/other";
|
|
|
import {
|
|
|
arrToId,
|
|
|
deepClone,
|
|
@@ -212,6 +311,7 @@ import {
|
|
|
isNullES,
|
|
|
} from "js-fast-way";
|
|
|
import mainApi from "~api/wbs/tree";
|
|
|
+import { getChildList } from "~api/other";
|
|
|
|
|
|
const props = defineProps({
|
|
|
data: {
|
|
@@ -229,10 +329,13 @@ const isShow = defineModel("modelValue", {
|
|
|
|
|
|
//监听数据
|
|
|
const dataInfo = ref(props.data);
|
|
|
+const wbsType = ref(props.data.wbsType);
|
|
|
watch(
|
|
|
() => props.data,
|
|
|
(data) => {
|
|
|
dataInfo.value = data;
|
|
|
+ wbsType.value = data.wbsType;
|
|
|
+ console.log(wbsType.value, " wbsType.value");
|
|
|
},
|
|
|
{ immediate: true, deep: true }
|
|
|
);
|
|
@@ -243,10 +346,30 @@ watch(isShow, (val) => {
|
|
|
});
|
|
|
|
|
|
//处理相关数据
|
|
|
-const meterUnitType = ref([]);
|
|
|
+const majorDatatype = ref([]);
|
|
|
const getDataApi = async () => {
|
|
|
isTreeMode.value = true;
|
|
|
- meterUnitType.value = await getDictionaryData("meter_unit_type", true);
|
|
|
+ const type = wbsType.value;
|
|
|
+ console.log(wbsType.value, "wbsType.value");
|
|
|
+
|
|
|
+ if (majorDatatype.value.length > 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let code = "";
|
|
|
+ if (type === 5) {
|
|
|
+ code = "lar_node_type"; //征拆
|
|
|
+ } else if (type === 2) {
|
|
|
+ code = "trial_node_type"; //试验
|
|
|
+ } else if (type === 3) {
|
|
|
+ code = "meter_node_type"; //计量
|
|
|
+ } else {
|
|
|
+ {
|
|
|
+ code = "wbs_node_type"; //质检
|
|
|
+ }
|
|
|
+ }
|
|
|
+ majorDatatype.value = await getDictionaryData(code, false);
|
|
|
+ await getMajorList();
|
|
|
+ await geStandardTypeOptions();
|
|
|
};
|
|
|
//树搜索
|
|
|
const queryType = ref("1");
|
|
@@ -266,9 +389,66 @@ const getSearchData = async () => {
|
|
|
wbsId: id,
|
|
|
type: queryType.value,
|
|
|
queryValue: searchTreeName.value,
|
|
|
+ projectId: "",
|
|
|
});
|
|
|
treeData.value = data;
|
|
|
};
|
|
|
+//节点详情
|
|
|
+const getNodeDetail = async (data1, node) => {
|
|
|
+ let parentName = "";
|
|
|
+ if (node.parent.data) {
|
|
|
+ parentName = node.parent.data.title;
|
|
|
+ }
|
|
|
+ console.log(parentName, "parentName");
|
|
|
+
|
|
|
+ const { data } = await mainApi.getDetail(data1.id, node);
|
|
|
+ formModel.value = data;
|
|
|
+ formModel.value.parentName = parentName;
|
|
|
+};
|
|
|
+//内业资料类型
|
|
|
+const majorDataTypeList = ref([]);
|
|
|
+const getMajorList = async () => {
|
|
|
+ majorDataTypeList.value = await getDictionaryData("major_data_type", false);
|
|
|
+};
|
|
|
+//标砖分类类型
|
|
|
+const standardTypeOptions = ref([]);
|
|
|
+const geStandardTypeOptions = async () => {
|
|
|
+ const { data } = await getDictionary({
|
|
|
+ code: "classification",
|
|
|
+ });
|
|
|
+ standardTypeOptions.value = await getDictionaryData(
|
|
|
+ "classification",
|
|
|
+ false
|
|
|
+ );
|
|
|
+
|
|
|
+ standardTypeOptions.value.forEach((element) => {
|
|
|
+ // element.parentId=
|
|
|
+ data.forEach((ele) => {
|
|
|
+ if (ele.dictKey == element.value) {
|
|
|
+ element.id = ele.id;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ // 定义要过滤的 dictKey 值
|
|
|
+ const targetKeys = [1, 2, 3, 4];
|
|
|
+ // 过滤数组
|
|
|
+ standardTypeOptions.value = standardTypeOptions.value.filter((item) =>
|
|
|
+ targetKeys.includes(item.value)
|
|
|
+ );
|
|
|
+};
|
|
|
+//单元名称
|
|
|
+const unitOptions = ref([]);
|
|
|
+const changeStandType = async (val) => {
|
|
|
+ formModel.value.unitName = "";
|
|
|
+ let parentId = "";
|
|
|
+ standardTypeOptions.value.forEach((item) => {
|
|
|
+ if (item.value == val) {
|
|
|
+ parentId = item.id;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const { data } = await getChildList({ current: 1, size: 10000, parentId });
|
|
|
+ unitOptions.value = data;
|
|
|
+};
|
|
|
|
|
|
//树配置
|
|
|
const isTreeMode = ref(false);
|
|
@@ -310,7 +490,18 @@ const treeMenuDatas = [
|
|
|
{ icon: "arrow-up-down", label: "排序节点", key: "rank" },
|
|
|
{ icon: "delete-bin", label: "删除节点", key: "del" },
|
|
|
];
|
|
|
-
|
|
|
+const nodeTypeChange = (val) => {
|
|
|
+ // if (val === 53) {
|
|
|
+ // if (this.testTreeData.length > 0) {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // this.testTreeLoad = true;
|
|
|
+ // getAlltree(this.userInfo.tenant_id, 1, this.id).then((res) => {
|
|
|
+ // this.testTreeLoad = false;
|
|
|
+ // this.testTreeData = res.data.data;
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+};
|
|
|
//菜单被点击
|
|
|
const treeMenuClick = async ({ key, data, node }) => {
|
|
|
nodeInfo.value = data;
|
|
@@ -320,6 +511,9 @@ const treeMenuClick = async ({ key, data, node }) => {
|
|
|
isAddEditShow.value = true;
|
|
|
} else if (key === "edit") {
|
|
|
formModel.value = deepClone(data);
|
|
|
+ formModel.value.nodeName = formModel.value.title;
|
|
|
+
|
|
|
+ getNodeDetail(data, node);
|
|
|
await nextTick();
|
|
|
isAddEditShow.value = true;
|
|
|
} else if (key === "rank") {
|
|
@@ -340,12 +534,7 @@ const treeMenuClick = async ({ key, data, node }) => {
|
|
|
|
|
|
//树节点被点击
|
|
|
const nodeInfo = ref({});
|
|
|
-const treeNodeTap = ({ data }) => {
|
|
|
- const label = getDictionaryName(meterUnitType.value, data.nodeType);
|
|
|
- data.nodeTypeName = label ?? "-";
|
|
|
- nodeInfo.value = data;
|
|
|
- getTableData(data);
|
|
|
-};
|
|
|
+const treeNodeTap = ({ data, node }) => {};
|
|
|
|
|
|
//表格数据
|
|
|
const tableColumn = ref([
|
|
@@ -386,7 +575,7 @@ const addEditSubmit = async () => {
|
|
|
addEditLoading.value = true;
|
|
|
//处理表单
|
|
|
const form = formModel.value;
|
|
|
- form.nodeTypeName = getDictionaryName(meterUnitType.value, form.nodeType);
|
|
|
+ form.nodeTypeName = getDictionaryName(majorDatatype.value, form.nodeType);
|
|
|
//发起请求
|
|
|
let res;
|
|
|
if (isNullES(form.id)) {
|