duy 9 hónapja
szülő
commit
f02190f4ad

+ 1 - 1
src/api/modules/wbs/wbsforelement.js

@@ -65,7 +65,7 @@ export default {
     //删除元素
     async removeElement(form) {
         return HcApi({
-            url: "/apiapi/blade-manager/wbsFormElement/remove",
+            url: "/api/blade-manager/wbsFormElement/remove",
             method: "post",
             params: form,
         });

+ 10 - 3
src/views/desk/wbs/element-lib.vue

@@ -62,8 +62,9 @@
         </hc-body>
 
         <!-- 分配节点 -->
-        <!-- 关联公共WBS模板 -->
         <HcWebTemplate v-model="webTemplateShow" :info="webTemplateInfo" />
+        <!-- 编辑元素 -->
+        <editElement v-model="editElementShow" :info="editElementInfo" />
     </hc-drawer>
 </template>
 
@@ -72,7 +73,8 @@ import { ref, watch } from "vue";
 import { HcDelMsg } from "hc-vue3-ui";
 import { getArrValue, getObjValue, isNullES } from "js-fast-way";
 import mainApi from "~api/desk/wbs";
-import HcWebTemplate from "./web-temp.vue";
+import HcWebTemplate from "./element/web-temp.vue";
+import editElement from "./element/edit-element.vue";
 
 //事件
 const emit = defineEmits(["close"]);
@@ -182,7 +184,12 @@ const rowNodeClick = (row) => {
 const rowFormulaClick = (row) => {};
 
 //编辑元素
-const rowEditClick = (row) => {};
+const editElementShow = ref(false);
+const editElementInfo = ref({});
+const rowEditClick = (row) => {
+    editElementInfo.value = row;
+    editElementShow.value = true;
+};
 
 //关闭抽屉
 const drawerClose = () => {

+ 308 - 0
src/views/desk/wbs/element/edit-element.vue

@@ -0,0 +1,308 @@
+<template>
+    <hc-dialog
+        v-model="isShow"
+        is-footer-center
+        title="元素编辑"
+        @close="dialogClose"
+        @save="saveFormAndElementHandle"
+        widths="56rem"
+        :loading="submitLoading"
+        isTable
+    >
+        <hc-card-item>
+            <template #header>
+                <el-tooltip
+                    :visible="editVisible"
+                    effect="light"
+                    placement="bottom-start"
+                >
+                    <template #content>
+                        <div class="text-sm text-red">
+                            1.元素名称不能为空<br />
+                            2.数据类型不能为空<br />
+                            3.元素长度不能为空<br />
+                            4.编辑元素信息请谨慎操作<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
+                >
+            </template>
+            <hc-search-input
+                v-model="queryValue"
+                @search="getEditEleList"
+                class="w-100 mb-4"
+            />
+            <hc-table :column="tableColumn" :datas="editEleList">
+                <template #eName="{ row }">
+                    <hc-table-input v-model="row.eName" />
+                </template>
+                <template #eType="{ row }">
+                    <el-select
+                        v-model="row.eType"
+                        @change="setDefaultLength(row)"
+                        placeholder="请选择"
+                    >
+                        <el-option
+                            v-for="item in dataTypeList"
+                            :key="item.id"
+                            :label="item.label"
+                            :value="item.value"
+                        ></el-option>
+                    </el-select>
+                </template>
+                <template #eLength="{ row }">
+                    <hc-table-input v-model="row.eLength" />
+                </template>
+                <template #eAllowDeviation="{ row }">
+                    <div class="flex">
+                        <el-select
+                            v-model="row.allow"
+                            :popper-append-to-body="false"
+                            placeholder="请选择"
+                        >
+                            <el-option :key="1" label="-" value="-"></el-option>
+                            <el-option :key="2" label=">" value=">"></el-option>
+                            <el-option :key="3" label="<" value="<"></el-option>
+                            <el-option :key="4" label="≥" value="≥"></el-option>
+                            <el-option :key="5" label="≤" value="≤"></el-option>
+                            <el-option :key="6" label="±" value="±"></el-option>
+                            <el-option
+                                :key="7"
+                                label="【】"
+                                value="【】"
+                            ></el-option>
+                        </el-select>
+                        <hc-table-input v-model="row.deviation" />
+                    </div>
+                </template>
+                <template #eInspectionMethod="{ row }">
+                    <hc-table-input v-model="row.eInspectionMethod" />
+                </template>
+
+                <template #action="{ row, index }">
+                    <el-link
+                        type="danger"
+                        @click="rowDelClick(row, index)"
+                        v-if="row.id"
+                        >删除</el-link
+                    >
+                    <div v-else>
+                        <el-link
+                            type="primary"
+                            @click="addSaveClick(row, index)"
+                            :loading="addSaveLoading"
+                            >保存</el-link
+                        >
+                        <el-link
+                            type="danger"
+                            @click="rowDelClick(row, index)"
+                            :loading="rowDelLoading"
+                            >删除</el-link
+                        >
+                    </div>
+                </template>
+            </hc-table>
+        </hc-card-item>
+    </hc-dialog>
+</template>
+<script setup>
+import { ref, watch } from "vue";
+import { getDictionaryData } from "~src/utils/tools";
+import mainApi from "~api/wbs/wbsforelement";
+import treeApi from "~api/wbs/tree";
+
+import { getArrValue } from "js-fast-way";
+
+const props = defineProps({
+    info: {
+        type: Object,
+        default: () => {},
+    },
+});
+//事件
+const emit = defineEmits(["close"]);
+//双向绑定
+// eslint-disable-next-line no-undef
+const isShow = defineModel("modelValue", {
+    default: false,
+});
+//监听显示
+watch(isShow, (val) => {
+    if (val) {
+        getDataTypelist();
+        getEditEleList();
+    } else {
+        emit("close");
+    }
+});
+
+const info = ref(props.info);
+
+//监听数据
+watch(
+    () => [props.info],
+    ([infoData]) => {
+        info.value = infoData;
+    },
+    { deep: true }
+);
+
+const formModel = ref({});
+const editVisible = ref(false);
+const tableColumn = ref([
+    { key: "eName", name: "元素名称", width: 150 },
+    { key: "eType", name: "数据类型", width: 120 },
+    { key: "eLength", name: "长度" },
+    { key: "eAllowDeviation", name: "允许偏差值", width: 180 },
+    { key: "eInspectionMethod", name: "检查方法和频率" },
+    { key: "action", name: "操作", width: 80, align: "center" },
+]);
+const editEleList = ref([]);
+const queryValue = ref("");
+
+const getEditEleList = async () => {
+    const { data } = await treeApi.selectPrivateFormElements({
+        id: info.value?.id,
+        eName: queryValue.value || "",
+    });
+    editEleList.value = getArrValue(data);
+    const eleReg = /(-|>|<|≥|≤|±|【】)?([^≥≤±【】]*)/;
+    editEleList.value.forEach((element) => {
+        eleReg.exec(element.eAllowDeviation);
+        element.allow = RegExp.$1 ? RegExp.$1 : "";
+        element.deviation = RegExp.$2 ? RegExp.$2 : "";
+    });
+};
+const dataTypeList = ref([]);
+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 rowDelLoading = ref(false);
+const rowDelClick = async (row, index) => {
+    if (!row.id) {
+        editEleList.value.splice(index, 1);
+    } else {
+        HcDelMsg(async (resolve) => {
+            //发起请求
+            rowDelLoading.value = true;
+            const { isRes } = await mainApi.removeElement({
+                ids: row.id,
+                initTableName: info.value?.initTableName,
+                eKey: row.ekey,
+            });
+            resolve(); //关闭弹窗
+            if (!isRes) return;
+            window?.$message?.success("操作成功");
+            getEditEleList();
+        });
+    }
+};
+const addRowClick = () => {
+    editEleList.value.push({});
+};
+
+const addSaveLoading = ref(false);
+const addSaveClick = async (row) => {
+    if (!row.eName) {
+        window.$message.warning("请填写元素名称");
+        return;
+    }
+    if (!row.eType) {
+        window.$message.warning("请选择数据类型");
+        return;
+    }
+
+    row.eAllowDeviation =
+        (row.allow ? row.allow : "") + (row.deviation ? row.deviation : "");
+    row.fId = info.value.initTableId;
+    row.initTableName = info.value.initTableName;
+    if (!row.eLength) {
+        window.$message.warning("请填写长度");
+        return;
+    }
+    addSaveLoading.value = true;
+    const { error, code, data } = await mainApi.saveElement(row);
+    addSaveLoading.value = false;
+    if (!error && code === 200) {
+        window?.$message?.success("操作成功");
+        row.id = data.id;
+        row.ekey = data.ekey;
+    }
+};
+const submitLoading = ref(false);
+
+const saveFormAndElementHandle = async () => {
+    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.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;
+        const { error, code } = await mainApi.updateBatchElements(
+            editEleList.value,
+            info.value.initTableName
+        );
+        submitLoading.value = false;
+        if (!error && code === 200) {
+            window?.$message?.success("操作成功");
+            dialogClose();
+        }
+    } else {
+        window.$message.warning("请填写完整元素表信息");
+    }
+};
+//关闭弹窗
+const dialogClose = () => {
+    isShow.value = false;
+    emit("close");
+};
+</script>

+ 0 - 2
src/views/desk/wbs/web-temp.vue → src/views/desk/wbs/element/web-temp.vue

@@ -387,8 +387,6 @@ const tabsChange = async ({ key }) => {
     tabsKey.value = key;
     const form = getObjValue(dataInfo.value);
     const tree = getObjValue(nodeInfo.value);
-    console.log(form, "form");
-    console.log(tree, "tree");
 
     //默认表单数据
     formModel.value = {