Browse Source

wbs编辑修改

duy 10 months ago
parent
commit
2d80b19b79

+ 20 - 0
src/api/modules/wbs/wbsforelement.js

@@ -0,0 +1,20 @@
+import { HcApi } from "../../request/index";
+
+export default {
+    async updateBatchElements(list, initTableName) {
+        return HcApi({
+            url:
+                "/api/blade-manager/wbsTree/update-batch-elements?initTableName=" +
+                initTableName,
+            method: "post",
+            data: list,
+        });
+    },
+    async saveFormAndElement(form) {
+        return HcApi({
+            url: "/api/blade-manager/wbsTree/save-table-element",
+            method: "post",
+            data: form,
+        });
+    },
+};

+ 185 - 21
src/views/desk/wbs/create-new-excel.vue

@@ -4,7 +4,9 @@
         is-footer-center
         title="创建新的元素表"
         @close="dialogClose"
-        widths="1200px"
+        @save="saveFormAndElementHandle"
+        widths="56rem"
+        :loading="submitLoading"
     >
         <el-form
             ref="formRef"
@@ -15,7 +17,7 @@
         >
             <el-row :gutter="60">
                 <el-col :span="12">
-                    <el-form-item label="表名">
+                    <el-form-item label="表名" prop="tableName">
                         <el-input v-model="formModel.tableName" />
                     </el-form-item>
                 </el-col>
@@ -64,14 +66,37 @@
         </el-form>
         <hc-card-item>
             <template #header>
-                <div class="text-sm text-red">编辑元素信息(请谨慎操作)</div>
+                <el-tooltip
+                    :visible="editVisible"
+                    effect="light"
+                    placement="bottom-start"
+                >
+                    <template #content>
+                        <div class="text-sm text-red">
+                            1.元素名称不能为空<br />
+                            2.数据类型不能为空<br />
+                            3.元素长度不能为空<br />
+                        </div>
+                    </template>
+                    <el-button
+                        type="danger"
+                        @mouseenter="editVisible = true"
+                        @mouseleave="editVisible = false"
+                    >
+                        <HcIcon name="question" />
+                        <span>编辑说明</span>
+                    </el-button>
+                </el-tooltip>
             </template>
             <template #extra>
+                <el-button size="small" type="success" @click="addRowClick"
+                    >新增</el-button
+                >
                 <el-button size="small" type="primary">快捷导入</el-button>
                 <el-button size="small" type="warning">下载导入模板</el-button>
             </template>
 
-            <hc-table :column="tableColumn" :datas="tableData">
+            <hc-table :column="tableColumn" :datas="editEleList">
                 <template #eName="{ row }">
                     <hc-table-input v-model="row.eName" />
                 </template>
@@ -84,8 +109,8 @@
                         <el-option
                             v-for="item in dataTypeList"
                             :key="item.id"
-                            :label="item.dictValue"
-                            :value="item.dictKey"
+                            :label="item.label"
+                            :value="item.value"
                         ></el-option>
                     </el-select>
                 </template>
@@ -117,12 +142,29 @@
                 <template #eInspectionMethod="{ row }">
                     <hc-table-input v-model="row.eInspectionMethod" />
                 </template>
+                <template #action="{ row, index }">
+                    <el-link type="danger" @click="rowDelClick(row, index)"
+                        >删除</el-link
+                    >
+                </template>
             </hc-table>
         </hc-card-item>
     </hc-dialog>
 </template>
 <script setup>
 import { ref, watch } from "vue";
+import { getDictionaryData, getDictionaryName } from "~src/utils/tools";
+import mainApi from "~api/wbs/wbsforelement";
+import { useAppStore } from "~src/store";
+import {
+    deepClone,
+    formValidate,
+    getArrValue,
+    isNullES,
+    getObjValue,
+} from "js-fast-way";
+const store = useAppStore();
+const userInfo = ref(store.getUserInfo);
 const props = defineProps({
     ownerTypeList: {
         type: Array,
@@ -132,6 +174,14 @@ const props = defineProps({
         type: Array,
         default: () => [],
     },
+    wid: {
+        type: [String, Number],
+        default: "",
+    },
+    node: {
+        type: Object,
+        default: () => {},
+    },
 });
 //事件
 const emit = defineEmits(["close"]);
@@ -143,20 +193,23 @@ const isShow = defineModel("modelValue", {
 //监听显示
 watch(isShow, (val) => {
     if (val) {
-        // getDataInfo();
-        // geStandardTypeOptions();
+        getDataTypelist();
     } else {
         emit("close");
     }
 });
-const ownerTypeList = ref([]);
-const tableTypelist = ref([]);
+const ownerTypeList = ref(props.ownerTypeList);
+const tableTypelist = ref(props.tableTypelist);
+const wbsId = ref(props.wid);
+const node = ref(props.node);
 //监听数据
 watch(
-    () => [props.ownerTypeList, props.tableTypelist],
-    ([own, table]) => {
+    () => [props.ownerTypeList, props.tableTypelist, props.wid, props.node],
+    ([own, table, wbsid, nodeInfo]) => {
         ownerTypeList.value = own;
         tableTypelist.value = table;
+        wbsId.value = wbsid;
+        node.value = nodeInfo;
     },
     { deep: true }
 );
@@ -178,22 +231,133 @@ const formRules = {
         trigger: "blur",
         message: "请选择所属方",
     },
+    wid: {
+        type: [String, Number],
+        default: "",
+    },
 };
+
+const curEleTable = ref({});
 const formModel = ref({});
+const editVisible = ref(false);
 const tableColumn = [
-    { key: "eName", name: "元素名称" },
-    { key: "eType", name: "数据类型" },
+    { key: "eName", name: "元素名称", width: 150 },
+    { key: "eType", name: "数据类型", width: 120 },
     { key: "eLength", name: "长度" },
-    { key: "eAllowDeviation", name: "允许偏差值" },
+    { key: "eAllowDeviation", name: "允许偏差值", width: 180 },
     { key: "eInspectionMethod", name: "检查方法和频率" },
-    { key: "action", name: "操作", width: 100 },
+    { key: "action", name: "操作", width: 80, align: "center" },
 ];
-const tableData = ref([
-    { name: "名称1", text: "文本1", color: "red" },
-    { name: "名称2", text: "文本2", color: "blue" },
-]);
+const editEleList = ref([]);
 const dataTypeList = ref([]);
-const setDefaultLength = () => {};
+const getDataTypelist = async () => {
+    if (dataTypeList.value.length > 1) {
+        return;
+    }
+    dataTypeList.value = await getDictionaryData("data_type", false);
+};
+const setDefaultLength = (row) => {
+    const dataTypeDefaultMap = {
+        1: 250, //字符串
+        2: 50, //整数
+        3: 50, //小数
+        4: 50, //日期
+        5: 50, //数值
+        6: 50, //签名
+        7: 100, //文件
+    };
+    row.eLength = dataTypeDefaultMap[row.eType];
+};
+const rowDelClick = (row, index) => {
+    editEleList.value.splice(index, 1);
+};
+const addRowClick = () => {
+    editEleList.value.push({});
+};
+const submitLoading = ref(false);
+const editSubmitClick = async () => {
+    const formRes = await formValidate(formRef.value);
+    if (!formRes) return false;
+    for (let i = 0; i < editEleList.value.length; i++) {
+        if (!editEleList.value[i].id) {
+            window.$message.warning("请先将新增的元素点击保存");
+            return;
+        }
+        if (!editEleList.value[i].eName) {
+            window.$message.warning("请填写第" + (i + 1) + "条元素名称");
+            return;
+        }
+        if (!editEleList.value[i].eType) {
+            window.$message.warning("请选择第" + (i + 1) + "条数据类型");
+            return;
+        }
+        if (!editEleList[i].value.eLength) {
+            window.$message.warning("请填写第" + (i + 1) + "条数据长度");
+            return;
+        }
+    }
+    if (editEleList.value.length > 0) {
+        editEleList.value.forEach((element) => {
+            element.eAllowDeviation =
+                (element.allow ? element.allow : "") +
+                (element.deviation ? element.deviation : "");
+        });
+        submitLoading.value = true;
+        const { error, code } = await mainApi.updateBatchElements(
+            editEleList.value,
+            curEleTable.value.initTableName
+        );
+        submitLoading.value = false;
+        if (!error && code === 200) {
+            window?.$message?.success("操作成功");
+            dialogClose();
+        }
+    } else {
+        window.$message.warning("请填写完整元素表信息");
+    }
+};
+const saveFormAndElementHandle = async () => {
+    const formRes = await formValidate(formRef.value);
+    if (!formRes) return false;
+    formModel.value.wbsId = wbsId.value;
+    formModel.value.tenantId = userInfo.value.tenant_id;
+    formModel.value.nodeType = -1;
+    formModel.value.type = 2; //	'1'节点 '2'表
+    formModel.value.parentId = node.value.id;
+    for (let i = 0; i < editEleList.value.length; i++) {
+        if (!editEleList.value[i].eName) {
+            window.$message.warning("请填写第" + (i + 1) + "条元素名称");
+            return;
+        }
+        if (!editEleList.value[i].eType) {
+            window.$message.warning("请选择第" + (i + 1) + "条数据类型");
+            return;
+        }
+        if (!editEleList.value[i].eLength) {
+            window.$message.warning("请填写第" + (i + 1) + "条数据长度");
+            return;
+        }
+    }
+    if (editEleList.value.length > 0) {
+        editEleList.value.forEach((element) => {
+            element.eAllowDeviation =
+                (element.allow ? element.allow : "") +
+                (element.deviation ? element.deviation : "");
+        });
+        submitLoading.value = true;
+        formModel.value.elementList = editEleList;
+        const { error, code } = await mainApi.saveFormAndElement(
+            formModel.value
+        );
+        submitLoading.value = false;
+        if (!error && code === 200) {
+            window?.$message?.success("操作成功");
+            dialogClose();
+        }
+    } else {
+        window.$message.warning("请填写完整元素表信息");
+    }
+};
 //关闭弹窗
 const dialogClose = () => {
     isShow.value = false;

+ 3 - 5
src/views/desk/wbs/drawer-wbs.vue

@@ -200,6 +200,8 @@
         <createNewExcel
             v-model="isCreateShow"
             @close="createClose"
+            :node="nodeDetail"
+            :wid="dataInfo.id"
             :tableTypelist="tableTypelist"
             :ownerTypeList="ownerTypeList"
         ></createNewExcel>
@@ -502,12 +504,8 @@ const getOwnerTypelist = async () => {
 
 //新增、编辑节点
 const isAddEditShow = ref(false);
-const formRef = ref(null);
+
 const formModel = ref({});
-const formRules = {
-    nodeName: { required: true, trigger: "blur", message: "请输入节点名称" },
-    nodeType: { required: true, trigger: "blur", message: "请选择节点类型" },
-};
 
 //新增、编辑节点提交