8
0
duy 9 месяцев назад
Родитель
Сommit
d4361ca43a

+ 161 - 71
src/views/project/list/adjust-excel.vue

@@ -1,146 +1,236 @@
 <template>
-    <hc-drawer v-model="isShow" ui="hc-project-list-adjust-excel-drawer" to-id="hc-layout-box" is-close @close="drawerClose">
+    <hc-drawer
+        v-model="isShow"
+        ui="hc-project-list-adjust-excel-drawer"
+        to-id="hc-layout-box"
+        is-close
+        @close="drawerClose"
+    >
         <hc-page-split :fold="false" :options="splitOptions">
             <template #left>
-                <hc-card :title="`【调整表单】${dataInfo.tableName}`">
-                    <hc-table-form ref="excelRef" :html="excelHtml" @tap="excelClick" />
+                <hc-card
+                    :title="`【调整表单】${
+                        type == 2 ? dataInfo.title : dataInfo.tableName
+                    }`"
+                >
+                    <hc-table-form
+                        ref="excelRef"
+                        :html="excelHtml"
+                        @tap="excelClick"
+                    />
                 </hc-card>
             </template>
             <hc-card ui="hc-project-list-adjust-excel-card" scrollbar>
                 <template #header>
                     <el-segmented v-model="tabsKey" :options="tabsProps" />
                 </template>
-                <HcSetInput v-if="tabsKey === 'tab1'" ref="setInputRef" :info="dataInfo" @finish="getDataApi" />
-                <HcSetEVisa v-if="tabsKey === 'tab2'" ref="setEVisaRef" :info="dataInfo" @finish="getDataApi" />
-                <HcSetFormula v-if="tabsKey === 'tab3'" ref="setFormulaRef" :info="dataInfo" @finish="getDataApi" />
-                <HcSetDefault v-if="tabsKey === 'tab4'" ref="setDefaultRef" :info="dataInfo" @finish="getDataApi" />
-                <HcSetPrompt v-if="tabsKey === 'tab5'" ref="setPromptRef" :info="dataInfo" @finish="getDataApi" />
+                <HcSetInput
+                    v-if="tabsKey === 'tab1'"
+                    ref="setInputRef"
+                    :info="dataInfo"
+                    @finish="getDataApi"
+                />
+                <HcSetEVisa
+                    v-if="tabsKey === 'tab2'"
+                    ref="setEVisaRef"
+                    :info="dataInfo"
+                    @finish="getDataApi"
+                    :type="type"
+                />
+                <HcSetFormula
+                    v-if="tabsKey === 'tab3'"
+                    ref="setFormulaRef"
+                    :info="dataInfo"
+                    @finish="getDataApi"
+                />
+                <HcSetDefault
+                    v-if="tabsKey === 'tab4'"
+                    ref="setDefaultRef"
+                    :info="dataInfo"
+                    @finish="getDataApi"
+                    :type="2"
+                />
+                <HcSetPrompt
+                    v-if="tabsKey === 'tab5'"
+                    ref="setPromptRef"
+                    :info="dataInfo"
+                    @finish="getDataApi"
+                    :type="2"
+                />
             </hc-card>
         </hc-page-split>
     </hc-drawer>
 </template>
 
 <script setup>
-import { ref, watch } from 'vue'
-import { getObjValue, isNullES } from 'js-fast-way'
-import HcSetInput from './adjust-excel/set-input.vue'
-import HcSetEVisa from './adjust-excel/set-e-visa.vue'
-import HcSetFormula from './adjust-excel/set-formula.vue'
-import HcSetDefault from './adjust-excel/set-default.vue'
-import HcSetPrompt from './adjust-excel/set-prompt.vue'
-import excelApi from '~api/exctab/exceltab'
+import { ref, watch } from "vue";
+import { getObjValue, isNullES } from "js-fast-way";
+import HcSetInput from "./adjust-excel/set-input.vue";
+import HcSetEVisa from "./adjust-excel/set-e-visa.vue";
+import HcSetFormula from "./adjust-excel/set-formula.vue";
+import HcSetDefault from "./adjust-excel/set-default.vue";
+import HcSetPrompt from "./adjust-excel/set-prompt.vue";
+import excelApi from "~api/exctab/exceltab";
 
 const props = defineProps({
     info: {
         type: Object,
         default: () => ({}),
     },
-})
+    type: {
+        type: [String, Number],
+        default: "", //默认没有,独立表单库类型为2
+    },
+});
 
 //事件
-const emit = defineEmits(['close'])
+const emit = defineEmits(["close"]);
 
 //双向绑定
-const isShow = defineModel('modelValue', {
+const isShow = defineModel("modelValue", {
     default: false,
-})
+});
 
 //监听数据
-const dataInfo = ref(props.info)
-watch(() => props.info, (data) => {
-    dataInfo.value = getObjValue(data)
-}, { immediate: true, deep: true })
+const dataInfo = ref(props.info);
+const type = ref(props.type);
+watch(
+    () => [props.info, props.type],
+    ([data, tpe]) => {
+        dataInfo.value = getObjValue(data);
+
+        type.value = tpe;
+    },
+    { immediate: true, deep: true }
+);
 
 //监听显示
 watch(isShow, (val) => {
-    if (val) getDataApi()
-})
+    if (val) getDataApi();
+});
 
 //页面分割
-const splitOptions = { sizes: [70, 30], snapOffset: 0, minSize: [300, 300] }
+const splitOptions = { sizes: [70, 30], snapOffset: 0, minSize: [300, 300] };
 
 //选项卡
-const tabsKey = ref('tab1')
+const tabsKey = ref("tab1");
 const tabsProps = [
-    { label: '输入框', value: 'tab1' },
-    { label: '电签位置', value: 'tab2' },
-    { label: '公式条件', value: 'tab3' },
-    { label: '默认信息', value: 'tab4' },
-    { label: '提示信息', value: 'tab5' },
-]
+    { label: "输入框", value: "tab1" },
+    { label: "电签位置", value: "tab2" },
+    { label: "公式条件", value: "tab3" },
+    { label: "默认信息", value: "tab4" },
+    { label: "提示信息", value: "tab5" },
+];
 
 //处理相关数据
-const excelRef = ref(null)
-const excelHtml = ref('')
+const excelRef = ref(null);
+const excelHtml = ref("");
 const getDataApi = async () => {
-    const { pkeyId, excelId } = getObjValue(dataInfo.value)
-    if (isNullES(pkeyId) || isNullES(excelId)) {
-        window?.$message.warning('表单值异常,请联系管理员')
-        return
+    const { pkeyId, excelId, primaryKeyId, excelIds } = getObjValue(
+        dataInfo.value
+    );
+    if (type.value !== 2) {
+        if (isNullES(pkeyId) || isNullES(excelId)) {
+            tableFormLoading.value = false;
+            window?.$message.warning("表单值异常,请联系管理员");
+            return;
+        }
+    } else {
+        if (isNullES(primaryKeyId) || isNullES(excelIds)) {
+            tableFormLoading.value = false;
+            window?.$message.warning("表单值异常,请联系管理员");
+            return;
+        }
     }
-    const { data } = await excelApi.getExcelHtml({ pkeyId })
-    excelHtml.value = data || ''
-}
+    const { data } = await excelApi.getExcelHtml({
+        pkeyId: pkeyId ? pkeyId : primaryKeyId,
+    });
+    excelHtml.value = data || "";
+};
 
 //ref
-const setInputRef = ref(null)
-const setEVisaRef = ref(null)
-const setFormulaRef = ref(null)
-const setDefaultRef = ref(null)
-const setPromptRef = ref(null)
+const setInputRef = ref(null);
+const setEVisaRef = ref(null);
+const setFormulaRef = ref(null);
+const setDefaultRef = ref(null);
+const setPromptRef = ref(null);
 
 //框框被点击
 const keys = [
-    'type', 'key', 'tr', 'td', 'index', 'x1', 'y1', 'x2', 'y2', 'name', 'text', 'rows', 'format', 'tip',
-    'weighing', 'label', 'value', 'src', 'val', 'contractid', 'pkeyid', 'objs', 'range', 'def', 'max',
-]
+    "type",
+    "key",
+    "tr",
+    "td",
+    "index",
+    "x1",
+    "y1",
+    "x2",
+    "y2",
+    "name",
+    "text",
+    "rows",
+    "format",
+    "tip",
+    "weighing",
+    "label",
+    "value",
+    "src",
+    "val",
+    "contractid",
+    "pkeyid",
+    "objs",
+    "range",
+    "def",
+    "max",
+];
 const excelClick = async (item) => {
-    const dom = item?.target
-    let obj = { zdom: item }
+    const dom = item?.target;
+    let obj = { zdom: item };
     for (let i = 0; i < keys.length; i++) {
-        obj[keys[i]] = await getAttribute(dom, keys[i])
+        obj[keys[i]] = await getAttribute(dom, keys[i]);
     }
-    if (tabsKey.value === 'tab1') {
+    if (tabsKey.value === "tab1") {
         //设置输入框
-        setInputRef.value?.setDomData(obj)
-    } else if (tabsKey.value === 'tab2') {
+        setInputRef.value?.setDomData(obj);
+    } else if (tabsKey.value === "tab2") {
         //电签
-        setEVisaRef.value?.setDomData(obj)
-    } else if (tabsKey.value === 'tab4') {
+        setEVisaRef.value?.setDomData(obj);
+    } else if (tabsKey.value === "tab4") {
         //默认信息
-        setDefaultRef.value?.setDomData(obj)
-    } else if (tabsKey.value === 'tab5') {
+        setDefaultRef.value?.setDomData(obj);
+    } else if (tabsKey.value === "tab5") {
         //提示信息
-        setPromptRef.value?.setDomData(obj)
+        setPromptRef.value?.setDomData(obj);
     }
-}
+};
 
 //获取属性
 const getAttribute = async (dom, key) => {
     try {
-        return dom?.getAttribute(`data-${key}`)
+        return dom?.getAttribute(`data-${key}`);
     } catch (e) {
-        return null
+        return null;
     }
-}
+};
 
 //关闭抽屉
 const drawerClose = () => {
-    isShow.value = false
-    emit('close')
-}
+    isShow.value = false;
+    emit("close");
+};
 </script>
 
 <style lang="scss">
 .el-overlay .el-drawer.hc-project-list-adjust-excel-drawer {
-    background-color: #F1F5F8;
+    background-color: #f1f5f8;
     .hc-table-form-data-item {
         padding: 0;
     }
     .hc-table-form-data-item .hc-excel-table-form {
         background: #e4e7eb;
     }
-    .el-card.hc-card-box.hc-new-card-box.hc-project-list-adjust-excel-card .el-scrollbar__bar.is-vertical {
+    .el-card.hc-card-box.hc-new-card-box.hc-project-list-adjust-excel-card
+        .el-scrollbar__bar.is-vertical {
         right: -8px;
     }
 }

+ 109 - 63
src/views/project/list/adjust-excel/set-default.vue

@@ -1,21 +1,53 @@
 <template>
     <div class="hc-project-list-adjust-excel-set-default">
-        <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto">
+        <el-form
+            ref="formRef"
+            :model="formModel"
+            :rules="formRules"
+            label-position="left"
+            label-width="auto"
+        >
             <el-form-item label="元素坐标:" prop="colName">
-                <el-input v-model="formModel.colName" placeholder="请点击左侧表单" disabled />
+                <el-input
+                    v-model="formModel.colName"
+                    placeholder="请点击左侧表单"
+                    disabled
+                />
             </el-form-item>
             <el-form-item label="默认信息:" prop="textId">
-                <el-input v-model="formModel.textId" :autosize="{ minRows: 5, maxRows: 5 }" type="textarea" placeholder="请填写默认信息" />
+                <el-input
+                    v-model="formModel.textId"
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    type="textarea"
+                    placeholder="请填写默认信息"
+                />
             </el-form-item>
         </el-form>
         <div class="action-btn-box mb-40px mt-10px text-center">
-            <el-button type="success" :loading="submitLoading" @click="dialogSubmit">保存数据</el-button>
-            <el-button type="info" style="margin-left: 50px" @click="resetFormClick">重置</el-button>
+            <el-button
+                type="success"
+                :loading="submitLoading"
+                @click="dialogSubmit"
+                >保存数据</el-button
+            >
+            <el-button
+                type="info"
+                style="margin-left: 50px"
+                @click="resetFormClick"
+                >重置</el-button
+            >
         </div>
         <hc-card-item title="已配数据:">
-            <hc-table :column="tableColumn" :datas="tableData" :is-current-row="false" :is-index="false">
+            <hc-table
+                :column="tableColumn"
+                :datas="tableData"
+                :is-current-row="false"
+                :is-index="false"
+            >
                 <template #action="{ row }">
-                    <el-link type="danger" @click="rowDelClick(row)">删除</el-link>
+                    <el-link type="danger" @click="rowDelClick(row)"
+                        >删除</el-link
+                    >
                 </template>
             </hc-table>
         </hc-card-item>
@@ -23,112 +55,126 @@
 </template>
 
 <script setup>
-import { onMounted, ref, watch } from 'vue'
-import { HcDelMsg } from 'hc-vue3-ui'
-import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
-import mainApi from '~api/project/tree'
+import { onMounted, ref, watch } from "vue";
+import { HcDelMsg } from "hc-vue3-ui";
+import { formValidate, getArrValue, getObjValue } from "js-fast-way";
+import mainApi from "~api/project/tree";
 
 const props = defineProps({
     info: {
         type: Object,
         default: () => ({}),
     },
-})
+    type: {
+        type: [String, Number],
+        default: "", //默认没有,独立表单库类型为2
+    },
+});
 
 //事件
-const emit = defineEmits(['finish'])
+const emit = defineEmits(["finish"]);
 
 //监听数据
-const dataInfo = ref(props.info)
-watch(() => props.info, (data) => {
-    dataInfo.value = getObjValue(data)
-}, { deep: true })
+const dataInfo = ref(props.info);
+const type = ref(props.type);
+watch(
+    () => [props.info, props.type],
+    ([data, tpe]) => {
+        dataInfo.value = getObjValue(data);
+
+        type.value = tpe;
+    },
+    { immediate: true, deep: true }
+);
 
 //渲染完成
 onMounted(() => {
-    formModel.value = {}
-    getSigList()
-})
+    formModel.value = {};
+    getSigList();
+});
 
 //基础表单
-const formRef = ref(null)
-const formModel = ref({})
+const formRef = ref(null);
+const formModel = ref({});
 const formRules = {
-    colName: { required: true, trigger: 'change', message: '请先获取元素坐标' },
-    textId: { required: true, trigger: 'change', message: '请填写默认信息' },
-}
+    colName: { required: true, trigger: "change", message: "请先获取元素坐标" },
+    textId: { required: true, trigger: "change", message: "请填写默认信息" },
+};
 
 //数据表格
 const tableColumn = [
-    { key: 'colName', name: '元素位置' },
-    { key: 'sigRoleName', name: '默认值' },
-    { key: 'action', name: '操作', align: 'center', width: 100 },
-]
-const tableData = ref([])
+    { key: "colName", name: "元素位置" },
+    { key: "sigRoleName", name: "默认值" },
+    { key: "action", name: "操作", align: "center", width: 100 },
+];
+const tableData = ref([]);
 //获取数据
 const getSigList = async () => {
-    const { pkeyId } = dataInfo.value
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     const { data } = await mainApi.getSigList({
         current: 0,
         size: 99999,
         type: 4,
-        tabId: pkeyId,
-    })
-    tableData.value = getArrValue(data?.records)
-}
+        tabId: type.value == 2 ? primaryKeyId : pkeyId,
+    });
+    tableData.value = getArrValue(data?.records);
+};
 
 //删除数据
 const rowDelClick = (row) => {
     HcDelMsg(async (resolve) => {
-        const { pkeyId } = dataInfo.value
-        const { isRes } = await mainApi.remove(row.id, pkeyId)
-        resolve() //关闭弹窗的回调
-        if (!isRes) return
-        getSigList().then()
-    })
-}
+        const { pkeyId, primaryKeyId } = dataInfo.value;
+        const { isRes } = await mainApi.remove(
+            row.id,
+            type.value == 2 ? primaryKeyId : pkeyId
+        );
+        resolve(); //关闭弹窗的回调
+        if (!isRes) return;
+        getSigList().then();
+    });
+};
 
 //提交
-const submitLoading = ref(false)
+const submitLoading = ref(false);
 const dialogSubmit = async () => {
-    const isForm = await formValidate(formRef.value)
-    if (!isForm) return false
-    submitLoading.value = true
-    const { isRes } = await mainApi.saveDdefual(formModel.value)
-    submitLoading.value = false
-    if (!isRes) return
-    window.$message.success('操作成功')
-    emit('finish')
-    getSigList().then()
-}
+    const isForm = await formValidate(formRef.value);
+    if (!isForm) return false;
+    submitLoading.value = true;
+    const { isRes } = await mainApi.saveDdefual(formModel.value);
+    submitLoading.value = false;
+    if (!isRes) return;
+    window.$message.success("操作成功");
+    emit("finish");
+    getSigList().then();
+};
 
 //重置表单
 const resetFormClick = () => {
-    formModel.value = { type: '4' }
-}
+    formModel.value = { type: "4" };
+};
 
 //设置dom数据
 const setDomData = (item) => {
-    const { pkeyId } = dataInfo.value
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     formModel.value = {
-        type: '4',
+        type: "4",
         colName: item.text,
         colKey: item.key,
-        tableId: pkeyId,
+        tableId: type.value == 2 ? primaryKeyId : pkeyId,
         trIndex: item.tr,
         tdIndex: item.td,
-        textId: item.def || '',
-    }
-}
+        textId: item.def || "",
+    };
+};
 
 //导出函数
 defineExpose({
     setDomData,
-})
+});
 </script>
 
 <style scoped lang="scss">
-.hc-project-list-adjust-excel-set-default :deep(.hc-card-item-box){
+.hc-project-list-adjust-excel-set-default :deep(.hc-card-item-box) {
     padding: 6px 14px 14px;
     .hc-card-item-header {
         color: #101010;

+ 363 - 203
src/views/project/list/adjust-excel/set-e-visa.vue

@@ -1,62 +1,187 @@
 <template>
     <div class="hc-project-list-adjust-excel-set-e-visa">
-        <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto">
+        <el-form
+            ref="formRef"
+            :model="formModel"
+            :rules="formRules"
+            label-position="left"
+            label-width="auto"
+        >
             <el-form-item label="元素坐标:" prop="colName">
-                <el-input v-model="formModel.colName" placeholder="请点击左侧表单" disabled />
+                <el-input
+                    v-model="formModel.colName"
+                    placeholder="请点击左侧表单"
+                    disabled
+                />
             </el-form-item>
             <el-form-item label="证书类型:" prop="type">
-                <el-select v-model="formModel.type" filterable block placeholder="请选择证书类型" @change="signTypeChang">
+                <el-select
+                    v-model="formModel.type"
+                    filterable
+                    block
+                    placeholder="请选择证书类型"
+                    @change="signTypeChang"
+                >
                     <el-option label="个人证书" :value="2" />
                     <el-option label="企业证书" :value="6" />
                 </el-select>
             </el-form-item>
-            <el-form-item v-if="formModel.type === 2" label="所属方:" prop="roleType">
-                <el-select v-model="formModel.roleType" filterable block placeholder="请选择所属方" @change="getRoleData">
-                    <el-option v-for="item in roleType" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item
+                v-if="formModel.type === 2"
+                label="所属方:"
+                prop="roleType"
+            >
+                <el-select
+                    v-model="formModel.roleType"
+                    filterable
+                    block
+                    placeholder="请选择所属方"
+                    @change="getRoleData"
+                >
+                    <el-option
+                        v-for="item in roleType"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    />
                 </el-select>
             </el-form-item>
-            <el-form-item v-if="formModel.type === 2" label="签字角色:" prop="sigRoleId">
-                <el-select v-model="formModel.sigRoleId" :disabled="isNullES(formModel.roleType)" filterable block placeholder="请选择签字角色">
-                    <el-option v-for="item in roleData" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item
+                v-if="formModel.type === 2"
+                label="签字角色:"
+                prop="sigRoleId"
+            >
+                <el-select
+                    v-model="formModel.sigRoleId"
+                    :disabled="isNullES(formModel.roleType)"
+                    filterable
+                    block
+                    placeholder="请选择签字角色"
+                >
+                    <el-option
+                        v-for="item in roleData"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    />
                 </el-select>
             </el-form-item>
             <el-form-item v-if="formModel.type === 2" label="签字时间:">
-                <el-checkbox v-model="formModel.timeState" :true-value="1" :false-value="2">是否需要获取签字时间</el-checkbox>
+                <el-checkbox
+                    v-model="formModel.timeState"
+                    :true-value="1"
+                    :false-value="2"
+                    >是否需要获取签字时间</el-checkbox
+                >
             </el-form-item>
-            <el-form-item v-if="formModel.timeState === 1" label="时间元素:" prop="timeName" class="time-name-form-item">
-                <el-input v-model="formModel.timeName" placeholder="请点击后,再在左边选择元素" @focus="timeElementFocus">
+            <el-form-item
+                v-if="formModel.timeState === 1"
+                label="时间元素:"
+                prop="timeName"
+                class="time-name-form-item"
+            >
+                <el-input
+                    v-model="formModel.timeName"
+                    placeholder="请点击后,再在左边选择元素"
+                    @focus="timeElementFocus"
+                >
                     <template #append>
-                        <el-button type="primary" :disabled="!isTimeElement" @click="timeElementFinish">完成</el-button>
+                        <el-button
+                            type="primary"
+                            :disabled="!isTimeElement"
+                            @click="timeElementFinish"
+                            >完成</el-button
+                        >
                     </template>
                 </el-input>
             </el-form-item>
-            <el-form-item v-if="formModel.type === 6" label="签章类型:" prop="sigRoleId">
-                <el-select v-model="formModel.sigRoleId" filterable block placeholder="请选择签章类型">
-                    <el-option v-for="item in signData" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
+            <el-form-item
+                v-if="formModel.type === 6"
+                label="签章类型:"
+                prop="sigRoleId"
+            >
+                <el-select
+                    v-model="formModel.sigRoleId"
+                    filterable
+                    block
+                    placeholder="请选择签章类型"
+                >
+                    <el-option
+                        v-for="item in signData"
+                        :key="item.dictKey"
+                        :label="item.dictValue"
+                        :value="item.dictKey"
+                    />
                 </el-select>
             </el-form-item>
             <el-form-item label="偏移位X:" prop="pyzbx">
-                <el-input v-model="formModel.pyzbx" type="number" placeholder="横坐标,负代表左移,正代表右移,偏移量50大概等于一厘米" />
+                <el-input
+                    v-model="formModel.pyzbx"
+                    type="number"
+                    placeholder="横坐标,负代表左移,正代表右移,偏移量50大概等于一厘米"
+                />
             </el-form-item>
             <el-form-item label="偏移位Y:" prop="pyzby">
-                <el-input v-model="formModel.pyzby" type="number" placeholder="纵坐标,负代表下移,正代表上移,偏移量50大概等于一厘米" />
+                <el-input
+                    v-model="formModel.pyzby"
+                    type="number"
+                    placeholder="纵坐标,负代表下移,正代表上移,偏移量50大概等于一厘米"
+                />
             </el-form-item>
         </el-form>
         <div class="action-btn-box mb-40px mt-10px text-center">
-            <el-button v-if="isEditMode" type="success" @click="saveListClick">保存数据</el-button>
-            <el-button v-if="isEditMode" type="info" style="margin-left: 50px" @click="cancelListClick">取消</el-button>
-            <el-button v-else type="primary" @click="addToListClick">添加到列表</el-button>
-            <el-button type="warning" style="margin-left: 50px" @click="getPriwbsPdf">预览表</el-button>
+            <el-button v-if="isEditMode" type="success" @click="saveListClick"
+                >保存数据</el-button
+            >
+            <el-button
+                v-if="isEditMode"
+                type="info"
+                style="margin-left: 50px"
+                @click="cancelListClick"
+                >取消</el-button
+            >
+            <el-button v-else type="primary" @click="addToListClick"
+                >添加到列表</el-button
+            >
+            <el-button
+                type="warning"
+                style="margin-left: 50px"
+                @click="getPriwbsPdf"
+                >预览表</el-button
+            >
         </div>
         <hc-card-item title="已配数据:">
             <template #extra>
-                <el-button type="primary" size="small" :loading="submitLoading" @click="dialogSubmit">保存入库</el-button>
+                <el-button
+                    type="primary"
+                    size="small"
+                    :loading="submitLoading"
+                    @click="dialogSubmit"
+                    >保存入库</el-button
+                >
             </template>
-            <hc-table :column="tableColumn" :datas="tableData" :is-current-row="false" :is-index="false">
+            <hc-table
+                :column="tableColumn"
+                :datas="tableData"
+                :is-current-row="false"
+                :is-index="false"
+            >
                 <template #action="{ row, index }">
-                    <el-link v-if="row.isEditMode" type="success" @click="saveListClick">保存</el-link>
-                    <el-link v-else type="primary" @click="rowEditClick(row, index)">编辑</el-link>
-                    <el-link type="danger" @click="rowDelClick(row, index)">删除</el-link>
+                    <el-link
+                        v-if="row.isEditMode"
+                        type="success"
+                        @click="saveListClick"
+                        >保存</el-link
+                    >
+                    <el-link
+                        v-else
+                        type="primary"
+                        @click="rowEditClick(row, index)"
+                        >编辑</el-link
+                    >
+                    <el-link type="danger" @click="rowDelClick(row, index)"
+                        >删除</el-link
+                    >
                 </template>
             </hc-table>
         </hc-card-item>
@@ -64,319 +189,349 @@
 </template>
 
 <script setup>
-import { onMounted, ref, watch } from 'vue'
-import { HcDelMsg } from 'hc-vue3-ui'
-import { deepClone, formValidate, getArrValue, getObjValue, isNullES, newWindow } from 'js-fast-way'
-import mainApi from '~api/project/tree'
+import { onMounted, ref, watch } from "vue";
+import { HcDelMsg } from "hc-vue3-ui";
+import {
+    deepClone,
+    formValidate,
+    getArrValue,
+    getObjValue,
+    isNullES,
+    newWindow,
+} from "js-fast-way";
+import mainApi from "~api/project/tree";
 
 const props = defineProps({
     info: {
         type: Object,
         default: () => ({}),
     },
-})
+    type: {
+        type: [String, Number],
+        default: "", //默认没有,独立表单库类型为2
+    },
+});
 
 //事件
-const emit = defineEmits(['finish'])
+const emit = defineEmits(["finish"]);
 
 //监听数据
-const dataInfo = ref(props.info)
-watch(() => props.info, (data) => {
-    dataInfo.value = getObjValue(data)
-}, { deep: true })
+const dataInfo = ref(props.info);
+const type = ref(props.type);
+watch(
+    () => [props.info, props.type],
+    ([data, tpe]) => {
+        dataInfo.value = getObjValue(data);
 
+        type.value = tpe;
+    },
+    { immediate: true, deep: true }
+);
 //渲染完成
 onMounted(() => {
-    getSigList()
-    getRoleTypeData()
-    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 }
-})
+    getSigList();
+    getRoleTypeData();
+    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 };
+});
 
 //获取数据
 const getSigList = async () => {
-    const { pkeyId, excelId } = dataInfo.value
+    const { pkeyId, excelId, primaryKeyId, excelIds } = dataInfo.value;
     const { data } = await mainApi.getSigList({
         current: 0,
         size: 99999,
         type: 2,
-        tabId: pkeyId,
-        excelId: excelId,
-    })
-    tableData.value = getArrValue(data?.records)
-}
+        tabId: type.value == 2 ? primaryKeyId : pkeyId,
+        excelId: type.value == 2 ? excelIds : excelId,
+    });
+    tableData.value = getArrValue(data?.records);
+};
 
 //获取所属方
-const roleType = ref([])
+const roleType = ref([]);
 const getRoleTypeData = async () => {
-    const { data } = await mainApi.getRoleType()
-    roleType.value = getArrValue(data)
-}
+    const { data } = await mainApi.getRoleType();
+    roleType.value = getArrValue(data);
+};
 
 //获取签字角色
-const roleData = ref([])
+const roleData = ref([]);
 const getRoleData = async () => {
-    formModel.value.sigRoleId = ''
-    const { roleType } = formModel.value
+    formModel.value.sigRoleId = "";
+    const { roleType } = formModel.value;
     if (isNullES(roleType)) {
-        roleData.value = []
-        return
+        roleData.value = [];
+        return;
     }
-    const { data } = await mainApi.getRoleInfoByParentId({ ParentId: roleType })
-    roleData.value = getArrValue(data)
-}
+    const { data } = await mainApi.getRoleInfoByParentId({
+        ParentId: roleType,
+    });
+    roleData.value = getArrValue(data);
+};
 
 //获取签章类型
-const signData = ref([])
+const signData = ref([]);
 const getSignData = async () => {
-    const { data } = await mainApi.findPfxType({ typeOrStatus: 'pfx_type' })
-    signData.value = getArrValue(data)
-}
+    const { data } = await mainApi.findPfxType({ typeOrStatus: "pfx_type" });
+    signData.value = getArrValue(data);
+};
 
 //证书类型
 const signTypeChang = () => {
-    const { type } = formModel.value
+    const { type } = formModel.value;
     if (type === 6) {
-        getSignData()
+        getSignData();
     }
-    formModel.value.sigRoleId = ''
-}
+    formModel.value.sigRoleId = "";
+};
 
 //时间元素
-const isTimeElement = ref(false)
+const isTimeElement = ref(false);
 const timeElementFocus = () => {
-    isTimeElement.value = true
-}
+    isTimeElement.value = true;
+};
 const timeElementFinish = () => {
-    isTimeElement.value = false
-}
+    isTimeElement.value = false;
+};
 
 //基础表单
-const formRef = ref(null)
-const formModel = ref({})
+const formRef = ref(null);
+const formModel = ref({});
 const formRules = {
     colName: {
         validator: (rule, value, callback) => {
             if (isNullES(value)) {
-                callback(new Error('请先获取元素坐标'))
-            } else if (value === '警告') {
-                callback(new Error('警告框不能配置电签'))
+                callback(new Error("请先获取元素坐标"));
+            } else if (value === "警告") {
+                callback(new Error("警告框不能配置电签"));
             } else {
-                callback()
+                callback();
             }
         },
         required: true,
-        trigger: 'change',
+        trigger: "change",
     },
-    type: { required: true, trigger: 'change', message: '请选择证书类型' },
-    roleType: { required: true, trigger: 'change', message: '请选择所属方' },
+    type: { required: true, trigger: "change", message: "请选择证书类型" },
+    roleType: { required: true, trigger: "change", message: "请选择所属方" },
     sigRoleId: {
         validator: (rule, value, callback) => {
-            const { type } = formModel.value
+            const { type } = formModel.value;
             if (type === 2 && isNullES(value)) {
-                callback(new Error('请选择签字角色'))
+                callback(new Error("请选择签字角色"));
             } else if (type === 6 && isNullES(value)) {
-                callback(new Error('请选择签章类型'))
+                callback(new Error("请选择签章类型"));
             } else {
-                callback()
+                callback();
             }
         },
         required: true,
-        trigger: 'change',
+        trigger: "change",
     },
     timeName: {
         validator: (rule, value, callback) => {
-            const { timeState } = formModel.value
+            const { timeState } = formModel.value;
             if (timeState === 1 && isNullES(value)) {
-                callback(new Error('请选择时间元素'))
+                callback(new Error("请选择时间元素"));
             } else {
-                callback()
+                callback();
             }
         },
         required: true,
-        trigger: 'change',
+        trigger: "change",
     },
-}
+};
 
 //数据表格
 const tableColumn = [
-    { key: 'colName', name: '元素位置' },
-    { key: 'sigRoleName', name: '签字岗位' },
-    { key: 'timeName', name: '签字时间' },
-    { key: 'pyzbx', name: '偏移X' },
-    { key: 'pyzby', name: '偏移Y' },
-    { key: 'action', name: '操作', align: 'center', width: 100, fixed: 'right' },
-]
-const tableData = ref([])
+    { key: "colName", name: "元素位置" },
+    { key: "sigRoleName", name: "签字岗位" },
+    { key: "timeName", name: "签字时间" },
+    { key: "pyzbx", name: "偏移X" },
+    { key: "pyzby", name: "偏移Y" },
+    {
+        key: "action",
+        name: "操作",
+        align: "center",
+        width: 100,
+        fixed: "right",
+    },
+];
+const tableData = ref([]);
 
 //编辑数据
-const isEditMode = ref(false)
+const isEditMode = ref(false);
 const rowEditClick = async (row, index) => {
     if (isEditMode.value) {
-        window.$message.warning('当前已有数据在编辑,请先完成或取消')
-        return
+        window.$message.warning("当前已有数据在编辑,请先完成或取消");
+        return;
     }
-    let sigRoleId = '', rowType = 2
+    let sigRoleId = "",
+        rowType = 2;
     if (isNullES(row.id)) {
-        const obj = deepClone(row)
-        rowType = obj.type
-        sigRoleId = obj.sigRoleId
-        formModel.value = deepClone(row)
-        formModel.value.isIndex = index
+        const obj = deepClone(row);
+        rowType = obj.type;
+        sigRoleId = obj.sigRoleId;
+        formModel.value = deepClone(row);
+        formModel.value.isIndex = index;
     } else {
-        const { pkeyId } = dataInfo.value
+        const { pkeyId, primaryKeyId } = dataInfo.value;
         const { data } = await mainApi.getSignDetail({
             id: row.id,
-            tabId: pkeyId,
-        })
-        const res = getObjValue(data)
-        const obj = deepClone(res)
-        obj.roleType = obj.parentRoleId
-        rowType = res.type
-        sigRoleId = res.sigRoleId
-        formModel.value = obj
-        formModel.value.isIndex = index
+            tabId: type.value == 2 ? primaryKeyId : pkeyId,
+        });
+        const res = getObjValue(data);
+        const obj = deepClone(res);
+        obj.roleType = obj.parentRoleId;
+        rowType = res.type;
+        sigRoleId = res.sigRoleId;
+        formModel.value = obj;
+        formModel.value.isIndex = index;
     }
     if (rowType === 2) {
-        await getRoleTypeData()
-        await getRoleData()
+        await getRoleTypeData();
+        await getRoleData();
     } else {
-        await getSignData()
+        await getSignData();
     }
-    formModel.value.sigRoleId = sigRoleId
-    row.isEditMode = true
-    isEditMode.value = true
-}
+    formModel.value.sigRoleId = sigRoleId;
+    row.isEditMode = true;
+    isEditMode.value = true;
+};
 
 //取消修改
 const cancelListClick = () => {
-    const { isIndex } = formModel.value
-    tableData.value[isIndex].isEditMode = false
-    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 }
-    isEditMode.value = false
-}
+    const { isIndex } = formModel.value;
+    tableData.value[isIndex].isEditMode = false;
+    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 };
+    isEditMode.value = false;
+};
 
 //统一验证
 const formValidatorData = async () => {
-    const isForm = await formValidate(formRef.value)
-    if (!isForm) return false
-    const form = deepClone(formModel.value)
-    const table = tableData.value
+    const isForm = await formValidate(formRef.value);
+    if (!isForm) return false;
+    const form = deepClone(formModel.value);
+    const table = tableData.value;
     //已配数据
-    let isValidator = true
+    let isValidator = true;
     for (let i = 0; i < table.length; i++) {
         // 位置只能添加一个
         if (table[i].colName === form.colName) {
-            window.$message.warning('位置只能配置一个电签')
-            isValidator = form
-            break
+            window.$message.warning("位置只能配置一个电签");
+            isValidator = form;
+            break;
         }
     }
-    if (!isValidator) return false
+    if (!isValidator) return false;
     //获取签字角色
-    let sigRoleName = ''
+    let sigRoleName = "";
     if (form.type === 2) {
-        const info = roleData.value.find(item=> item.value === form.sigRoleId)
-        sigRoleName = isNullES(info) ? '' : info.label || ''
+        const info = roleData.value.find(
+            (item) => item.value === form.sigRoleId
+        );
+        sigRoleName = isNullES(info) ? "" : info.label || "";
     } else if (form.type === 6) {
-        const info = signData.value.find(item=> item.dictKey === form.sigRoleId)
-        sigRoleName = isNullES(info) ? '' : info.dictValue || ''
+        const info = signData.value.find(
+            (item) => item.dictKey === form.sigRoleId
+        );
+        sigRoleName = isNullES(info) ? "" : info.dictValue || "";
     }
-    formModel.value.sigRoleName = sigRoleName
-    formModel.value.timeState = form.timeState || 2
-    return true
-}
+    formModel.value.sigRoleName = sigRoleName;
+    formModel.value.timeState = form.timeState || 2;
+    return true;
+};
 
 //添加到列表
 const addToListClick = async () => {
-    const isForm = await formValidatorData()
-    if (!isForm) return false
-    const form = deepClone(formModel.value)
-    tableData.value.push(form)
-    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 }
-}
+    const isForm = await formValidatorData();
+    if (!isForm) return false;
+    const form = deepClone(formModel.value);
+    tableData.value.push(form);
+    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 };
+};
 
 //保存数据
 const saveListClick = async () => {
-    const isForm = await formValidatorData()
-    if (!isForm) return false
-    const form = deepClone(formModel.value)
-    form.isEditMode = false
-    tableData.value[form.isIndex] = form
-    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 }
-    isEditMode.value = false
-}
+    const isForm = await formValidatorData();
+    if (!isForm) return false;
+    const form = deepClone(formModel.value);
+    form.isEditMode = false;
+    tableData.value[form.isIndex] = form;
+    formModel.value = { type: 2, pyzbx: 0, pyzby: 0, timeState: 2 };
+    isEditMode.value = false;
+};
 
 //删除数据
 const rowDelClick = (row, index) => {
     HcDelMsg(async (resolve) => {
         if (isNullES(row.id)) {
-            tableData.value.splice(index, 1)
-            resolve() //关闭弹窗的回调
-            return
+            tableData.value.splice(index, 1);
+            resolve(); //关闭弹窗的回调
+            return;
         }
-        const { pkeyId } = dataInfo.value
-        const { isRes } = await mainApi.remove(row.id, pkeyId)
+        const { pkeyId } = dataInfo.value;
+        const { isRes } = await mainApi.remove(row.id, pkeyId);
         if (!isRes) {
-            resolve() //关闭弹窗的回调
-            return
+            resolve(); //关闭弹窗的回调
+            return;
         }
-        tableData.value.splice(index, 1)
-        resolve() //关闭弹窗的回调
-    })
-}
+        tableData.value.splice(index, 1);
+        resolve(); //关闭弹窗的回调
+    });
+};
 
 //预览pdf
 const getPriwbsPdf = async () => {
-    const { pkeyId } = dataInfo.value
-    const { data } = await mainApi.getPriwbsPdf(pkeyId)
+    const { pkeyId } = dataInfo.value;
+    const { data } = await mainApi.getPriwbsPdf(pkeyId);
     if (isNullES(data)) {
-        window.$message.warning('暂无预览数据')
-        return
+        window.$message.warning("暂无预览数据");
+        return;
     }
-    newWindow(data)
-}
+    newWindow(data);
+};
 
 //提交
-const submitLoading = ref(false)
+const submitLoading = ref(false);
 const dialogSubmit = async () => {
-    const table = tableData.value
+    const table = tableData.value;
     if (table.length <= 0) {
-        window.$message.warning('请先添加数据')
-        return
+        window.$message.warning("请先添加数据");
+        return;
     }
-    submitLoading.value = true
-    const { pkeyId } = dataInfo.value
+    submitLoading.value = true;
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     const { isRes } = await mainApi.saveSig({
         dataInfo: table,
-        tabId: pkeyId,
-    })
-    submitLoading.value = false
-    if (!isRes) return
-    window.$message.success('操作成功')
-    emit('finish')
-}
+        tabId: type.value == 2 ? primaryKeyId : pkeyId,
+    });
+    submitLoading.value = false;
+    if (!isRes) return;
+    window.$message.success("操作成功");
+    emit("finish");
+};
 
 //设置dom数据
 const setDomData = (item) => {
     if (isTimeElement.value) {
-        formModel.value.timeName = item.text
-        formModel.value.timeColKey = item.key
+        formModel.value.timeName = item.text;
+        formModel.value.timeColKey = item.key;
     } else {
-        const { pkeyId } = dataInfo.value
-        formModel.value.colName = item.text
-        formModel.value.colKey = item.key
-        formModel.value.tabId = pkeyId
+        const { pkeyId, primaryKeyId } = dataInfo.value;
+        formModel.value.colName = item.text;
+        formModel.value.colKey = item.key;
+        formModel.value.tabId = type.value == 2 ? primaryKeyId : pkeyId;
     }
-}
+};
 
 //导出函数
 defineExpose({
     setDomData,
-})
+});
 </script>
 
 <style scoped lang="scss">
-.hc-project-list-adjust-excel-set-e-visa :deep(.hc-card-item-box){
+.hc-project-list-adjust-excel-set-e-visa :deep(.hc-card-item-box) {
     padding: 6px 14px 14px;
     .hc-card-item-header {
         color: #101010;
@@ -384,12 +539,17 @@ defineExpose({
         font-weight: unset;
     }
 }
-.hc-project-list-adjust-excel-set-e-visa :deep(.time-name-form-item) .el-form-item__content .el-input .el-input-group__append {
+.hc-project-list-adjust-excel-set-e-visa
+    :deep(.time-name-form-item)
+    .el-form-item__content
+    .el-input
+    .el-input-group__append {
     .el-button {
         background-color: var(--el-button-bg-color);
         border-color: var(--el-button-border-color);
         color: var(--el-button-text-color);
-        border-radius: 0 var(--el-border-radius-base) var(--el-border-radius-base) 0;
+        border-radius: 0 var(--el-border-radius-base)
+            var(--el-border-radius-base) 0;
     }
     .el-button.is-disabled {
         background-color: var(--el-button-disabled-bg-color);

+ 288 - 175
src/views/project/list/adjust-excel/set-input.vue

@@ -1,25 +1,60 @@
 <template>
     <div class="hc-project-list-adjust-excel-set-input">
-        <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto">
+        <el-form
+            ref="formRef"
+            :model="formModel"
+            :rules="formRules"
+            label-position="left"
+            label-width="auto"
+        >
             <el-form-item label="元素坐标:" prop="name">
-                <el-input v-model="formModel.name" placeholder="请点击左侧表单" disabled />
+                <el-input
+                    v-model="formModel.name"
+                    placeholder="请点击左侧表单"
+                    disabled
+                />
             </el-form-item>
             <el-form-item label="文本格式:" prop="textId">
-                <el-select v-model="formModel.textId" filterable block placeholder="请选择文本格式">
-                    <el-option v-for="item in sysTextType" :key="item.value" :label="item.label" :value="item.value" />
+                <el-select
+                    v-model="formModel.textId"
+                    filterable
+                    block
+                    placeholder="请选择文本格式"
+                >
+                    <el-option
+                        v-for="item in sysTextType"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    />
                 </el-select>
             </el-form-item>
-            <el-row v-if="formModel.textId === 'date' || formModel.textId === 'daterange'" :gutter="20">
+            <el-row
+                v-if="
+                    formModel.textId === 'date' ||
+                    formModel.textId === 'daterange'
+                "
+                :gutter="20"
+            >
                 <el-col :span="18">
                     <el-form-item label="日期格式:" prop="date">
                         <el-checkbox-group v-model="formModel.date">
-                            <el-checkbox v-for="item in yearList" :key="item.value" :value="item.value">{{ item.label }}</el-checkbox>
+                            <el-checkbox
+                                v-for="item in yearList"
+                                :key="item.value"
+                                :value="item.value"
+                                >{{ item.label }}</el-checkbox
+                            >
                         </el-checkbox-group>
                     </el-form-item>
                 </el-col>
                 <el-col :span="6">
                     <el-form-item label="" prop="divide_y">
-                        <el-select v-model="formModel.divide_y" block placeholder="选择分隔符">
+                        <el-select
+                            v-model="formModel.divide_y"
+                            block
+                            placeholder="选择分隔符"
+                        >
                             <el-option label="文本" value="文本" />
                             <el-option label="-" value="-" />
                             <el-option label="/" value="/" />
@@ -27,17 +62,32 @@
                     </el-form-item>
                 </el-col>
             </el-row>
-            <el-row v-if="formModel.textId === 'date' || formModel.textId === 'daterange'" :gutter="20">
+            <el-row
+                v-if="
+                    formModel.textId === 'date' ||
+                    formModel.textId === 'daterange'
+                "
+                :gutter="20"
+            >
                 <el-col :span="18">
                     <el-form-item label="时间格式:" prop="time">
                         <el-checkbox-group v-model="formModel.time">
-                            <el-checkbox v-for="item in timeList" :key="item.value" :value="item.value">{{ item.label }}</el-checkbox>
+                            <el-checkbox
+                                v-for="item in timeList"
+                                :key="item.value"
+                                :value="item.value"
+                                >{{ item.label }}</el-checkbox
+                            >
                         </el-checkbox-group>
                     </el-form-item>
                 </el-col>
                 <el-col :span="6">
                     <el-form-item label="" prop="divide_h">
-                        <el-select v-model="formModel.divide_h" block placeholder="选择分隔符">
+                        <el-select
+                            v-model="formModel.divide_h"
+                            block
+                            placeholder="选择分隔符"
+                        >
                             <el-option label="文本" value="文本" />
                             <el-option label=":" value=":" />
                             <el-option label="/" value="/" />
@@ -45,29 +95,56 @@
                     </el-form-item>
                 </el-col>
             </el-row>
-            <el-form-item v-if="formModel.textId === 'daterange'" label="中间分隔符:" prop="divide_c">
-                <el-select v-model="formModel.divide_c" block placeholder="选择中间分隔符">
+            <el-form-item
+                v-if="formModel.textId === 'daterange'"
+                label="中间分隔符:"
+                prop="divide_c"
+            >
+                <el-select
+                    v-model="formModel.divide_c"
+                    block
+                    placeholder="选择中间分隔符"
+                >
                     <el-option label="至" value="至" />
                     <el-option label="-" value="-" />
                     <el-option label="~" value="~" />
                 </el-select>
             </el-form-item>
         </el-form>
-        <hc-card-item v-if="['select', 'radio', 'checkbox', 'selectBox'].indexOf(formModel.textId) !== -1" title="相关数据:">
+        <hc-card-item
+            v-if="
+                ['select', 'radio', 'checkbox', 'selectBox'].indexOf(
+                    formModel.textId
+                ) !== -1
+            "
+            title="相关数据:"
+        >
             <template #extra>
-                <el-button type="primary" size="small" @click="addTableData">新增</el-button>
+                <el-button type="primary" size="small" @click="addTableData"
+                    >新增</el-button
+                >
             </template>
-            <hc-table :column="tableColumn" :datas="tableData" :is-current-row="false">
+            <hc-table
+                :column="tableColumn"
+                :datas="tableData"
+                :is-current-row="false"
+            >
                 <template #dictValue="{ row }">
                     <hc-table-input v-model="row.dictValue" />
                 </template>
                 <template #action="{ index }">
-                    <el-link type="danger" @click="rowDelClick(index)">删除</el-link>
+                    <el-link type="danger" @click="rowDelClick(index)"
+                        >删除</el-link
+                    >
                 </template>
             </hc-table>
         </hc-card-item>
         <div class="action-btn-box mt-30px text-center">
-            <el-button type="primary" :loading="submitLoading" @click="dialogSubmit">
+            <el-button
+                type="primary"
+                :loading="submitLoading"
+                @click="dialogSubmit"
+            >
                 <hc-icon name="save" />
                 <span>保存设置</span>
             </el-button>
@@ -76,279 +153,315 @@
 </template>
 
 <script setup>
-import { onMounted, ref, watch } from 'vue'
-import { deepClone, formValidate, getObjValue, isNullES } from 'js-fast-way'
-import { getDictionaryData } from '~uti/tools'
-import mainApi from '~api/project/tree'
+import { onMounted, ref, watch } from "vue";
+import { deepClone, formValidate, getObjValue, isNullES } from "js-fast-way";
+import { getDictionaryData } from "~uti/tools";
+import mainApi from "~api/project/tree";
 
 const props = defineProps({
     info: {
         type: Object,
         default: () => ({}),
     },
-})
+});
 
 //事件
-const emit = defineEmits(['finish'])
+const emit = defineEmits(["finish"]);
 
 //监听数据
-const dataInfo = ref(props.info)
-watch(() => props.info, (data) => {
-    dataInfo.value = getObjValue(data)
-}, { immediate: true, deep: true })
+const dataInfo = ref(props.info);
+watch(
+    () => props.info,
+    (data) => {
+        dataInfo.value = getObjValue(data);
+    },
+    { immediate: true, deep: true }
+);
 
 //渲染完成
 onMounted(() => {
-    getDataApi()
-})
+    getDataApi();
+});
 
 //获取数据
-const sysTextType = ref([])
+const sysTextType = ref([]);
 const getDataApi = async () => {
-    sysTextType.value = await getDictionaryData('sys_text_type')
-}
+    sysTextType.value = await getDictionaryData("sys_text_type");
+};
 
 //年月日,时分秒
-const yearList = [{ label:'年', value:'YYYY', sort: 1 }, { label:'月', value:'MM', sort: 2 }, { label:'日', value:'DD', sort: 3 }]
-const timeList = [{ label:'时', value:'HH', sort: 4 }, { label:'分', value:'mm', sort: 5 }, { label:'秒', value:'ss', sort: 6 }]
+const yearList = [
+    { label: "年", value: "YYYY", sort: 1 },
+    { label: "月", value: "MM", sort: 2 },
+    { label: "日", value: "DD", sort: 3 },
+];
+const timeList = [
+    { label: "时", value: "HH", sort: 4 },
+    { label: "分", value: "mm", sort: 5 },
+    { label: "秒", value: "ss", sort: 6 },
+];
 
 //基础表单
-const formRef = ref(null)
+const formRef = ref(null);
 const formModel = ref({
-    date: ['YYYY', 'MM', 'DD'],
-    divide_y: '文本',
-    time: ['HH', 'mm', 'ss'],
-    divide_h: '文本',
-    divide_c: '至',
-})
+    date: ["YYYY", "MM", "DD"],
+    divide_y: "文本",
+    time: ["HH", "mm", "ss"],
+    divide_h: "文本",
+    divide_c: "至",
+});
 const formRules = {
-    name: { required: true, trigger: 'blur', message: '请先获取元素坐标' },
-    textId: { required: true, trigger: 'blur', message: '请选择文本格式' },
+    name: { required: true, trigger: "blur", message: "请先获取元素坐标" },
+    textId: { required: true, trigger: "blur", message: "请选择文本格式" },
     //date: { required: true, trigger: 'blur', message: '请选择日期格式' },
-    divide_y: { required: true, trigger: 'blur', message: '请选择日期分割' },
+    divide_y: { required: true, trigger: "blur", message: "请选择日期分割" },
     //time: { required: true, trigger: 'blur', message: '请选择时间格式' },
-    divide_h: { required: true, trigger: 'blur', message: '请选择时间分割' },
-    divide_c: { required: true, trigger: 'blur', message: '请选择中间分隔符' },
-}
+    divide_h: { required: true, trigger: "blur", message: "请选择时间分割" },
+    divide_c: { required: true, trigger: "blur", message: "请选择中间分隔符" },
+};
 
 //数据表格
 const tableColumn = [
-    { key: 'dictValue', name: '默认值' },
-    { key: 'action', name: '操作', align: 'center', width: 70 },
-]
-const tableData = ref([{}])
+    { key: "dictValue", name: "默认值" },
+    { key: "action", name: "操作", align: "center", width: 70 },
+];
+const tableData = ref([{}]);
 
 //新增数据
 const addTableData = () => {
-    tableData.value.push({})
-}
+    tableData.value.push({});
+};
 
 //删除数据
 const rowDelClick = (index) => {
-    tableData.value.splice(index, 1)
-}
+    tableData.value.splice(index, 1);
+};
 
 //提交
-const submitLoading = ref(false)
+const submitLoading = ref(false);
 const dialogSubmit = async () => {
-    const isForm = await formValidate(formRef.value)
-    if (!isForm) return false
-    submitLoading.value = true
-    const form = deepClone(formModel.value)
+    const isForm = await formValidate(formRef.value);
+    if (!isForm) return false;
+    submitLoading.value = true;
+    const form = deepClone(formModel.value);
     //如果日期存在
-    if (form.textId === 'date' || form.textId === 'daterange') {
+    if (form.textId === "date" || form.textId === "daterange") {
         if (form.date.length <= 0 && form.time.length <= 0) {
-            window.$message.warning('日期或时间,至少要选择一个')
-            submitLoading.value = false
-            return
+            window.$message.warning("日期或时间,至少要选择一个");
+            submitLoading.value = false;
+            return;
         }
-        let dateFormat = []
+        let dateFormat = [];
         if (!isNullES(form.date) && form.date.length > 0) {
-            if (form.date.indexOf('YYYY') !== -1) {
-                dateFormat.push({ name: '年', value: 'YYYY' })
+            if (form.date.indexOf("YYYY") !== -1) {
+                dateFormat.push({ name: "年", value: "YYYY" });
             }
-            if (form.date.indexOf('MM') !== -1) {
-                dateFormat.push({ name: '月', value: 'MM' })
+            if (form.date.indexOf("MM") !== -1) {
+                dateFormat.push({ name: "月", value: "MM" });
             }
-            if (form.date.indexOf('DD') !== -1) {
-                dateFormat.push({ name: '日', value: 'DD' })
+            if (form.date.indexOf("DD") !== -1) {
+                dateFormat.push({ name: "日", value: "DD" });
             }
         }
         if (!isNullES(form.time) && form.time.length > 0) {
-            if (form.time.indexOf('HH') !== -1) {
-                dateFormat.push({ name: '时', value: 'HH' })
+            if (form.time.indexOf("HH") !== -1) {
+                dateFormat.push({ name: "时", value: "HH" });
             }
-            if (form.time.indexOf('mm') !== -1) {
-                dateFormat.push({ name: '分', value: 'mm' })
+            if (form.time.indexOf("mm") !== -1) {
+                dateFormat.push({ name: "分", value: "mm" });
             }
-            if (form.time.indexOf('ss') !== -1) {
-                dateFormat.push({ name: '秒', value: 'ss' })
+            if (form.time.indexOf("ss") !== -1) {
+                dateFormat.push({ name: "秒", value: "ss" });
             }
         }
         if (!isNullES(form.date) && !isNullES(form.time)) {
             if (!isNullES(form.divide_y)) {
-                dateFormat.push({ name: 'divide_y', value: form.divide_y })
+                dateFormat.push({ name: "divide_y", value: form.divide_y });
             }
             if (!isNullES(form.divide_h)) {
-                dateFormat.push({ name: 'divide_h', value: form.divide_h })
+                dateFormat.push({ name: "divide_h", value: form.divide_h });
             }
             if (!isNullES(form.divide_c)) {
-                dateFormat.push({ name: 'divide_c', value: form.divide_c })
+                dateFormat.push({ name: "divide_c", value: form.divide_c });
             }
         }
         if (dateFormat.length > 0) {
-            form.dateFormat = dateFormat
+            form.dateFormat = dateFormat;
         }
     }
     //下拉框等数组数据
-    if (['select', 'radio', 'checkbox', 'selectBox'].indexOf(form.textId) !== -1) {
+    if (
+        ["select", "radio", "checkbox", "selectBox"].indexOf(form.textId) !== -1
+    ) {
         if (tableData.value.length <= 0) {
-            window.$message.warning('请先新增要选择的数据')
-            submitLoading.value = false
-            return
+            window.$message.warning("请先新增要选择的数据");
+            submitLoading.value = false;
+            return;
         }
-        form.textInfo = tableData.value
+        form.textInfo = tableData.value;
     }
-    const { isRes } = await mainApi.saveTextInfo([form])
-    submitLoading.value = false
-    if (!isRes) return
-    window.$message.success('操作成功')
-    emit('finish')
-}
+    const { isRes } = await mainApi.saveTextInfo([form]);
+    submitLoading.value = false;
+    if (!isRes) return;
+    window.$message.success("操作成功");
+    emit("finish");
+};
 
 //设置dom数据
 const typeObj = {
-    text: 'input',
-    select: 'select',
-    multiple_select: 'selectBox',
-    textarea: 'textarea',
-    checkbox_group: 'checkbox',
-    form_checkbox: 'checkbox',
-    checkbox: 'checkbox',
-    radio_group: 'radio',
-    radio: 'radio',
-    date: 'date',
-    time: 'date',
-    datetime: 'date',
-    datetimerange: 'daterange',
-    dap_site_data: 'searchSelect',
-    strength_search: 'strengthSearch',
-    upload: 'img',
-    echart: 'echart',
-}
+    text: "input",
+    select: "select",
+    multiple_select: "selectBox",
+    textarea: "textarea",
+    checkbox_group: "checkbox",
+    form_checkbox: "checkbox",
+    checkbox: "checkbox",
+    radio_group: "radio",
+    radio: "radio",
+    date: "date",
+    time: "date",
+    datetime: "date",
+    datetimerange: "daterange",
+    dap_site_data: "searchSelect",
+    strength_search: "strengthSearch",
+    upload: "img",
+    echart: "echart",
+};
 const setDomData = (item) => {
-    const type = typeObj[item.type]
-    const { pkeyId } = dataInfo.value
+    const type = typeObj[item.type];
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     formModel.value = {
         name: item.text,
         key: item.key,
-        type: '1',
+        type: "1",
         trIndex: item.tr,
         tdIndex: item.td,
         textId: type,
-        tableId: pkeyId,
-    }
-    let newArr = []
-    if (type === 'selectBox' || type === 'select' || type === 'radio') {
+        tableId: pkeyId ? pkeyId : primaryKeyId,
+    };
+    let newArr = [];
+    if (type === "selectBox" || type === "select" || type === "radio") {
         //获取多选相关的数据
-        const dom = item?.zdom?.target
-        const child = dom.querySelectorAll('.hc-table-form-components-box')
+        const dom = item?.zdom?.target;
+        const child = dom.querySelectorAll(".hc-table-form-components-box");
         for (let i = 0; i < child.length; i++) {
-            const val = child[i]?.getAttribute('data-label')
-            newArr.push({ dictValue: val })
+            const val = child[i]?.getAttribute("data-label");
+            newArr.push({ dictValue: val });
         }
-    } else if (type === 'checkbox') {
+    } else if (type === "checkbox") {
         //获取多选框数据
-        const objs = isNullES(item.objs) ? [] : JSON.parse(item.objs)
+        const objs = isNullES(item.objs) ? [] : JSON.parse(item.objs);
         for (let i = 0; i < objs.length; i++) {
-            newArr.push({ dictValue: objs[i].name })
+            newArr.push({ dictValue: objs[i].name });
         }
     }
-    tableData.value = newArr
-    if (type === 'date' || type === 'daterange') {
+    tableData.value = newArr;
+    if (type === "date" || type === "daterange") {
         //分割日期时间
-        const arr = item?.format?.split(' ')
+        const arr = item?.format?.split(" ");
         //移除空值
-        const dateTimes = arr.filter(item => {
-            return !isNullES(item)
-        })
+        const dateTimes = arr.filter((item) => {
+            return !isNullES(item);
+        });
         //取相关数据
-        let date = '', time = ''
+        let date = "",
+            time = "";
         if (dateTimes.length >= 2) {
-            date = dateTimes[0]
-            time = dateTimes[1]
+            date = dateTimes[0];
+            time = dateTimes[1];
         } else {
             //要判断下,是日期还是时间
-            if (dateTimes[0].indexOf('Y') !== -1 || dateTimes[0].indexOf('y') !== -1) {
-                date = dateTimes[0]
-            } else if (dateTimes[0].indexOf('D') !== -1 || dateTimes[0].indexOf('d') !== -1) {
-                date = dateTimes[0]
-            } else if (dateTimes[0].indexOf('H') !== -1 || dateTimes[0].indexOf('h') !== -1) {
-                time = dateTimes[0]
-            } else if (dateTimes[0].indexOf('S') !== -1 || dateTimes[0].indexOf('s') !== -1) {
-                time = dateTimes[0]
+            if (
+                dateTimes[0].indexOf("Y") !== -1 ||
+                dateTimes[0].indexOf("y") !== -1
+            ) {
+                date = dateTimes[0];
+            } else if (
+                dateTimes[0].indexOf("D") !== -1 ||
+                dateTimes[0].indexOf("d") !== -1
+            ) {
+                date = dateTimes[0];
+            } else if (
+                dateTimes[0].indexOf("H") !== -1 ||
+                dateTimes[0].indexOf("h") !== -1
+            ) {
+                time = dateTimes[0];
+            } else if (
+                dateTimes[0].indexOf("S") !== -1 ||
+                dateTimes[0].indexOf("s") !== -1
+            ) {
+                time = dateTimes[0];
             }
         }
         //日期类型 YYYY年MM月DD日 YYYY-MM-DD  HH:mm:ss
-        let dates = [], times = []
+        let dates = [],
+            times = [];
         if (!isNullES(date)) {
-            if (date.indexOf('Y') !== -1 || date.indexOf('y') !== -1) {
-                dates.push('YYYY')
+            if (date.indexOf("Y") !== -1 || date.indexOf("y") !== -1) {
+                dates.push("YYYY");
             }
-            if (date.indexOf('M') !== -1 || date.indexOf('m') !== -1) {
-                dates.push('MM')
+            if (date.indexOf("M") !== -1 || date.indexOf("m") !== -1) {
+                dates.push("MM");
             }
-            if (date.indexOf('D') !== -1 || date.indexOf('d') !== -1) {
-                dates.push('DD')
+            if (date.indexOf("D") !== -1 || date.indexOf("d") !== -1) {
+                dates.push("DD");
             }
             //分隔符
-            if (date.indexOf('年') !== -1 || date.indexOf('月') !== -1 || date.indexOf('日') !== -1) {
-                formModel.value.divide_y = '文本'
-            } else if (date.indexOf('-') !== -1) {
-                formModel.value.divide_y = '-'
-            } else if (date.indexOf('/') !== -1) {
-                formModel.value.divide_y = '/'
+            if (
+                date.indexOf("年") !== -1 ||
+                date.indexOf("月") !== -1 ||
+                date.indexOf("日") !== -1
+            ) {
+                formModel.value.divide_y = "文本";
+            } else if (date.indexOf("-") !== -1) {
+                formModel.value.divide_y = "-";
+            } else if (date.indexOf("/") !== -1) {
+                formModel.value.divide_y = "/";
             } else {
-                formModel.value.divide_y = '文本'
+                formModel.value.divide_y = "文本";
             }
         }
         if (!isNullES(time)) {
-            if (time.indexOf('H') !== -1 || time.indexOf('h') !== -1) {
-                times.push('HH')
+            if (time.indexOf("H") !== -1 || time.indexOf("h") !== -1) {
+                times.push("HH");
             }
-            if (time.indexOf('M') !== -1 || time.indexOf('m') !== -1) {
-                times.push('mm')
+            if (time.indexOf("M") !== -1 || time.indexOf("m") !== -1) {
+                times.push("mm");
             }
-            if (time.indexOf('S') !== -1 || time.indexOf('s') !== -1) {
-                times.push('ss')
+            if (time.indexOf("S") !== -1 || time.indexOf("s") !== -1) {
+                times.push("ss");
             }
             //分隔符
-            if (time.indexOf('时') !== -1 || time.indexOf('分') !== -1 || time.indexOf('秒') !== -1) {
-                formModel.value.divide_h = '文本'
-            } else if (time.indexOf(':') !== -1) {
-                formModel.value.divide_h = ':'
-            } else if (time.indexOf('/') !== -1) {
-                formModel.value.divide_h = '/'
+            if (
+                time.indexOf("时") !== -1 ||
+                time.indexOf("分") !== -1 ||
+                time.indexOf("秒") !== -1
+            ) {
+                formModel.value.divide_h = "文本";
+            } else if (time.indexOf(":") !== -1) {
+                formModel.value.divide_h = ":";
+            } else if (time.indexOf("/") !== -1) {
+                formModel.value.divide_h = "/";
             } else {
-                formModel.value.divide_h = '文本'
+                formModel.value.divide_h = "文本";
             }
         }
-        formModel.value.date = dates
-        formModel.value.time = times
-        if (type === 'daterange') {
-            formModel.value.divide_c = item.range || '文本'
+        formModel.value.date = dates;
+        formModel.value.time = times;
+        if (type === "daterange") {
+            formModel.value.divide_c = item.range || "文本";
         }
     }
-}
+};
 
 //导出函数
 defineExpose({
     setDomData,
-})
+});
 </script>
 
 <style scoped lang="scss">
-.hc-project-list-adjust-excel-set-input :deep(.hc-card-item-box){
+.hc-project-list-adjust-excel-set-input :deep(.hc-card-item-box) {
     padding: 6px 14px 14px;
     .hc-card-item-header {
         color: #101010;

+ 109 - 63
src/views/project/list/adjust-excel/set-prompt.vue

@@ -1,21 +1,53 @@
 <template>
     <div class="hc-project-list-adjust-excel-set-default">
-        <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="left" label-width="auto">
+        <el-form
+            ref="formRef"
+            :model="formModel"
+            :rules="formRules"
+            label-position="left"
+            label-width="auto"
+        >
             <el-form-item label="元素坐标:" prop="colName">
-                <el-input v-model="formModel.colName" placeholder="请点击左侧表单" disabled />
+                <el-input
+                    v-model="formModel.colName"
+                    placeholder="请点击左侧表单"
+                    disabled
+                />
             </el-form-item>
             <el-form-item label="默认信息:" prop="textId">
-                <el-input v-model="formModel.textId" :autosize="{ minRows: 5, maxRows: 5 }" type="textarea" placeholder="请填写默认信息" />
+                <el-input
+                    v-model="formModel.textId"
+                    :autosize="{ minRows: 5, maxRows: 5 }"
+                    type="textarea"
+                    placeholder="请填写默认信息"
+                />
             </el-form-item>
         </el-form>
         <div class="action-btn-box mb-40px mt-10px text-center">
-            <el-button type="success" :loading="submitLoading" @click="dialogSubmit">保存数据</el-button>
-            <el-button type="info" style="margin-left: 50px" @click="resetFormClick">重置</el-button>
+            <el-button
+                type="success"
+                :loading="submitLoading"
+                @click="dialogSubmit"
+                >保存数据</el-button
+            >
+            <el-button
+                type="info"
+                style="margin-left: 50px"
+                @click="resetFormClick"
+                >重置</el-button
+            >
         </div>
         <hc-card-item title="已配数据:">
-            <hc-table :column="tableColumn" :datas="tableData" :is-current-row="false" :is-index="false">
+            <hc-table
+                :column="tableColumn"
+                :datas="tableData"
+                :is-current-row="false"
+                :is-index="false"
+            >
                 <template #action="{ row }">
-                    <el-link type="danger" @click="rowDelClick(row)">删除</el-link>
+                    <el-link type="danger" @click="rowDelClick(row)"
+                        >删除</el-link
+                    >
                 </template>
             </hc-table>
         </hc-card-item>
@@ -23,112 +55,126 @@
 </template>
 
 <script setup>
-import { onMounted, ref, watch } from 'vue'
-import { HcDelMsg } from 'hc-vue3-ui'
-import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
-import mainApi from '~api/project/tree'
+import { onMounted, ref, watch } from "vue";
+import { HcDelMsg } from "hc-vue3-ui";
+import { formValidate, getArrValue, getObjValue } from "js-fast-way";
+import mainApi from "~api/project/tree";
 
 const props = defineProps({
     info: {
         type: Object,
         default: () => ({}),
     },
-})
+    type: {
+        type: [String, Number],
+        default: "", //默认没有,独立表单库类型为2
+    },
+});
 
 //事件
-const emit = defineEmits(['finish'])
+const emit = defineEmits(["finish"]);
 
 //监听数据
-const dataInfo = ref(props.info)
-watch(() => props.info, (data) => {
-    dataInfo.value = getObjValue(data)
-}, { deep: true })
+const dataInfo = ref(props.info);
+const type = ref(props.type);
+watch(
+    () => [props.info, props.type],
+    ([data, tpe]) => {
+        dataInfo.value = getObjValue(data);
+
+        type.value = tpe;
+    },
+    { immediate: true, deep: true }
+);
 
 //渲染完成
 onMounted(() => {
-    formModel.value = {}
-    getSigList()
-})
+    formModel.value = {};
+    getSigList();
+});
 
 //基础表单
-const formRef = ref(null)
-const formModel = ref({})
+const formRef = ref(null);
+const formModel = ref({});
 const formRules = {
-    colName: { required: true, trigger: 'change', message: '请先获取元素坐标' },
-    textId: { required: true, trigger: 'change', message: '请填写默认信息' },
-}
+    colName: { required: true, trigger: "change", message: "请先获取元素坐标" },
+    textId: { required: true, trigger: "change", message: "请填写默认信息" },
+};
 
 //数据表格
 const tableColumn = [
-    { key: 'colName', name: '元素位置' },
-    { key: 'sigRoleName', name: '默认值' },
-    { key: 'action', name: '操作', align: 'center', width: 100 },
-]
-const tableData = ref([])
+    { key: "colName", name: "元素位置" },
+    { key: "sigRoleName", name: "默认值" },
+    { key: "action", name: "操作", align: "center", width: 100 },
+];
+const tableData = ref([]);
 //获取数据
 const getSigList = async () => {
-    const { pkeyId } = dataInfo.value
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     const { data } = await mainApi.getSigList({
         current: 0,
         size: 99999,
         type: 5,
-        tabId: pkeyId,
-    })
-    tableData.value = getArrValue(data?.records)
-}
+        tabId: type.value == 2 ? primaryKeyId : pkeyId,
+    });
+    tableData.value = getArrValue(data?.records);
+};
 
 //删除数据
 const rowDelClick = (row) => {
     HcDelMsg(async (resolve) => {
-        const { pkeyId } = dataInfo.value
-        const { isRes } = await mainApi.remove(row.id, pkeyId)
-        resolve() //关闭弹窗的回调
-        if (!isRes) return
-        getSigList().then()
-    })
-}
+        const { pkeyId, primaryKeyId } = dataInfo.value;
+        const { isRes } = await mainApi.remove(
+            row.id,
+            type.value == 2 ? primaryKeyId : pkeyId
+        );
+        resolve(); //关闭弹窗的回调
+        if (!isRes) return;
+        getSigList().then();
+    });
+};
 
 //提交
-const submitLoading = ref(false)
+const submitLoading = ref(false);
 const dialogSubmit = async () => {
-    const isForm = await formValidate(formRef.value)
-    if (!isForm) return false
-    submitLoading.value = true
-    const { isRes } = await mainApi.saveDdefual(formModel.value)
-    submitLoading.value = false
-    if (!isRes) return
-    window.$message.success('操作成功')
-    emit('finish')
-    getSigList().then()
-}
+    const isForm = await formValidate(formRef.value);
+    if (!isForm) return false;
+    submitLoading.value = true;
+    const { isRes } = await mainApi.saveDdefual(formModel.value);
+    submitLoading.value = false;
+    if (!isRes) return;
+    window.$message.success("操作成功");
+    emit("finish");
+    getSigList().then();
+};
 
 //重置表单
 const resetFormClick = () => {
-    formModel.value = { type: '5' }
-}
+    formModel.value = { type: "5" };
+};
 
 //设置dom数据
 const setDomData = (item) => {
-    const { pkeyId } = dataInfo.value
+    const { pkeyId, primaryKeyId } = dataInfo.value;
     formModel.value = {
-        type: '5',
+        type: "5",
         colName: item.text,
         colKey: item.key,
-        tableId: pkeyId,
+        tableId: type.value == 2 ? primaryKeyId : pkeyId,
         trIndex: item.tr,
         tdIndex: item.td,
-        textId: item.tip || '',
-    }
-}
+        textId: item.tip || "",
+    };
+};
 
 //导出函数
 defineExpose({
     setDomData,
-})
+});
 </script>
 
 <style scoped lang="scss">
-.hc-project-list-adjust-excel-set-default :deep(.hc-card-item-box){
+.hc-project-list-adjust-excel-set-default :deep(.hc-card-item-box) {
     padding: 6px 14px 14px;
     .hc-card-item-header {
         color: #101010;

+ 16 - 6
src/views/project/list/edit-element.vue

@@ -288,12 +288,22 @@ const excelRef = ref(null);
 const excelHtml = ref("");
 const tableFormLoading = ref(true);
 const getDataApi = async () => {
-    const { pkeyId, excelId, primaryKeyId } = getObjValue(dataInfo.value);
-    // if (isNullES(pkeyId) || isNullES(excelId)) {
-    //     tableFormLoading.value = false
-    //     window?.$message.warning('表单值异常,请联系管理员')
-    //     return
-    // }
+    const { pkeyId, excelId, primaryKeyId, excelIds } = getObjValue(
+        dataInfo.value
+    );
+    if (type.value !== 2) {
+        if (isNullES(pkeyId) || isNullES(excelId)) {
+            tableFormLoading.value = false;
+            window?.$message.warning("表单值异常,请联系管理员");
+            return;
+        }
+    } else {
+        if (isNullES(primaryKeyId) || isNullES(excelIds)) {
+            tableFormLoading.value = false;
+            window?.$message.warning("表单值异常,请联系管理员");
+            return;
+        }
+    }
 
     tableFormLoading.value = true;
     const { data } = await excelApi.getExcelHtml({

+ 51 - 3
src/views/project/list/independent/index.vue

@@ -55,12 +55,17 @@
                             >关联清表</el-link
                         >
                         <el-link
+                            v-loading="editElementLoading"
                             type="primary"
                             @click="editElement(row)"
                             :disabled="row.excelIds == -1"
                             >编辑元素</el-link
                         >
-                        <el-link type="primary" @click="adjustTable(row)"
+                        <el-link
+                            v-loading="adjustExcelLoading"
+                            type="primary"
+                            @click="adjustExcelClick(row)"
+                            :disabled="row.excelIds == -1"
                             >调整表单</el-link
                         >
                         <el-link type="primary" @click="rowFormulaClick(row)"
@@ -94,6 +99,13 @@
             :info="editElementInfo"
             :data="editElementData"
             :type="2"
+            @to-page="editElementToPage"
+        />
+        <!-- 调整表单 -->
+        <HcAdjustExcel
+            v-model="isAdjustExcelShow"
+            :info="adjustExcelInfo"
+            :type="2"
         />
     </hc-drawer>
 </template>
@@ -107,7 +119,7 @@ import excelApi from "~api/exctab/exceltab";
 import quteElePage from "./quteElePage.vue";
 import HcAssociationList from "../association-list.vue";
 import HcEditElement from "../edit-element.vue";
-
+import HcAdjustExcel from "../adjust-excel.vue";
 //事件
 const emit = defineEmits(["close"]);
 
@@ -288,7 +300,6 @@ const rowFormulaClick = (row) => {};
 const assignWbs = () => {};
 
 //编辑元素
-
 const isEditElementShow = ref(false);
 const editElementInfo = ref({});
 const editElementData = ref({});
@@ -310,7 +321,44 @@ const editElement = async (row) => {
     await nextTick();
     isEditElementShow.value = true;
 };
+//编辑元素里的跳转页面
+const editElementToPage = async (name) => {
+    const row = deepClone(editElementInfo.value);
+    //表单调整
+    if (name === "adjustment") {
+        adjustExcelInfo.value = deepClone(row);
+        await nextTick();
+        isAdjustExcelShow.value = true;
+    }
+    //公式配置
+    if (name === "formula") {
+        console.log("还没做");
+    }
+};
 
+//调整表单
+const isAdjustExcelShow = ref(false);
+const adjustExcelLoading = ref(false);
+const adjustExcelInfo = ref({});
+const adjustExcelClick = async (row) => {
+    const { primaryKeyId, excelIds } = row;
+    if (isNullES(primaryKeyId) || isNullES(excelIds)) {
+        window?.$message.warning("表单值异常,请联系管理员");
+        return;
+    }
+    adjustExcelLoading.value = true;
+    const { code, data } = await excelApi.getExcelHtml({
+        pkeyId: primaryKeyId,
+    });
+    if (code !== 200 || isNullES(data)) {
+        adjustExcelLoading.value = false;
+        window?.$message.warning("表单异常,请联系管理员");
+        return;
+    }
+    adjustExcelInfo.value = deepClone(row);
+    adjustExcelLoading.value = false;
+    isAdjustExcelShow.value = true;
+};
 //关闭抽屉
 const drawerClose = () => {
     isShow.value = false;