Kaynağa Gözat

编辑wbs节点修改

duy 10 ay önce
ebeveyn
işleme
28b520dd42
2 değiştirilmiş dosya ile 290 ekleme ve 82 silme
  1. 69 50
      src/api/modules/other.js
  2. 221 32
      src/views/desk/wbs/drawer-wbs.vue

+ 69 - 50
src/api/modules/other.js

@@ -1,69 +1,88 @@
-import { HcApi } from '../request/index'
+import { HcApi } from "../request/index";
 
 //用户配置保存
-export const getClinetAll = () => HcApi({
-    url: '/api/blade-system/client/getClinetAll',
-    method: 'get',
-    params: {},
-})
+export const getClinetAll = () =>
+    HcApi({
+        url: "/api/blade-system/client/getClinetAll",
+        method: "get",
+        params: {},
+    });
 
 //用户配置保存
-export const userConfigSave = (form) => HcApi({
-    url: '/api/blade-business/defaultConfig/saveOrUpdate',
-    method: 'post',
-    data: form,
-})
+export const userConfigSave = (form) =>
+    HcApi({
+        url: "/api/blade-business/defaultConfig/saveOrUpdate",
+        method: "post",
+        data: form,
+    });
 
 //用户配置详情
-export const userConfigInfo = (form = {}) => HcApi({
-    url: '/api/blade-business/defaultConfig/detail',
-    method: 'get',
-    params: form,
-})
+export const userConfigInfo = (form = {}) =>
+    HcApi({
+        url: "/api/blade-business/defaultConfig/detail",
+        method: "get",
+        params: form,
+    });
 
 //获取类型
-export const getDictionary = (form) => HcApi({
-    url: '/api/blade-system/dict/dictionary',
-    method: 'get',
-    params: form,
-})
+export const getDictionary = (form) =>
+    HcApi({
+        url: "/api/blade-system/dict/dictionary",
+        method: "get",
+        params: form,
+    });
 
 //获取类型
-export const getBizDictionary = (form) => HcApi({
-    url: '/api/blade-system/dict-biz/dictionary',
-    method: 'get',
-    params: form,
-})
-
+export const getBizDictionary = (form) =>
+    HcApi({
+        url: "/api/blade-system/dict-biz/dictionary",
+        method: "get",
+        params: form,
+    });
+//获取字典的子级数据
+export const getChildList = (form) =>
+    HcApi({
+        url: "/api/blade-system/dict/child-list",
+        method: "get",
+        params: form,
+    });
 //获取用户列表
-export const getContractUserList = (form) => HcApi({
-    url: '/api/blade-manager/contractInfo/get-contract-userList',
-    method: 'get',
-    params: form,
-})
+export const getContractUserList = (form) =>
+    HcApi({
+        url: "/api/blade-manager/contractInfo/get-contract-userList",
+        method: "get",
+        params: form,
+    });
 
 //获取租户详情
-export const getTenantDetail = (id) => HcApi({
-    url: '/api/blade-system/tenant/detail',
-    method: 'get',
-    params: { tenantId: id },
-}, true)
+export const getTenantDetail = (id) =>
+    HcApi(
+        {
+            url: "/api/blade-system/tenant/detail",
+            method: "get",
+            params: { tenantId: id },
+        },
+        true
+    );
 
 //获取更新信息
-export const getVersionJson = () => HcApi({
-    url: 'version.json?time=' + new Date().getTime(),
-    method: 'get',
-})
+export const getVersionJson = () =>
+    HcApi({
+        url: "version.json?time=" + new Date().getTime(),
+        method: "get",
+    });
 
 //获取项目下的合同段信息
-export const getContractInfo = (form) => HcApi({
-    url: '/api/blade-manager/contractInfo/get-contractInfo',
-    method: 'get',
-    params: form,
-})
+export const getContractInfo = (form) =>
+    HcApi({
+        url: "/api/blade-manager/contractInfo/get-contractInfo",
+        method: "get",
+        params: form,
+    });
 
 //获取图标文件
-export const getRemixicon = () => HcApi({
-    url: 'plugins/remixicon/remixicon.css?time=' + new Date().getTime(),
-    method: 'get',
-})
+export const getRemixicon = () =>
+    HcApi({
+        url: "plugins/remixicon/remixicon.css?time=" + new Date().getTime(),
+        method: "get",
+    });

+ 221 - 32
src/views/desk/wbs/drawer-wbs.vue

@@ -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)) {