浏览代码

审批流程配置-页面开发(第一版)

jingbb 2 月之前
父节点
当前提交
c17ccb82f8

+ 91 - 0
src/views/system/approvalProcessConfig/approvalProcessConfigForm.api.ts

@@ -0,0 +1,91 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/baseCode/baseApproverSet/list',
+  save='/baseCode/baseApproverSet/add',
+  edit='/baseCode/baseApproverSet/edit',
+  deleteOne = '/baseCode/baseApproverSet/delete',
+  deleteBatch = '/baseCode/baseApproverSet/deleteBatch',
+  importExcel = '/baseCode/baseApproverSet/importExcel',
+  exportXls = '/baseCode/baseApproverSet/exportXls',
+  queryDataById = '/baseCode/baseApproverSet/queryById',
+  querySonList = '/baseCode/baseApproverSet/queryBaseApproverSetInfoByMainId',
+  salemanOption = 'sys/user/list'
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+
+/**
+ * 查询子表数据
+ * @param params
+ */
+export const querySonTable = (id) => defHttp.get({url: Api.querySonList, params:{ id }});
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) =>
+  defHttp.get({url: Api.list, params});
+
+/**
+ * 分类列表接口
+ * @param params
+ */
+export const ClassList = (params) =>
+  defHttp.get({url: Api.classList, params});
+
+
+
+/**
+ * 删除单个
+ */
+export const deleteOne = (params,handleSuccess) => {
+  return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
+    handleSuccess();
+  });
+}
+/**
+ * 批量删除
+ * @param params
+ */
+export const batchDelete = (params, handleSuccess) => {
+  createConfirm({
+    iconType: 'warning',
+    title: '确认删除',
+    content: '是否删除选中数据',
+    okText: '确认',
+    cancelText: '取消',
+    onOk: () => {
+      return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
+        handleSuccess();
+      });
+    }
+  });
+}
+/**
+ * 保存或者更新
+ * @param params
+ */
+export const saveOrUpdate = (params, isUpdate) => {
+  let url = isUpdate ? Api.edit : Api.save;
+  return defHttp.post({url: url, params});
+}
+
+/**
+* 根据id查询数据
+* @param params
+*/
+export const queryDataById = (id) => defHttp.get({url: Api.queryDataById, params:{ id }});
+//获取业务员下拉框
+export const SaleManOption = (params) => defHttp.get({ url: Api.salemanOption, params });

+ 89 - 0
src/views/system/approvalProcessConfig/approvalProcessConfigForm.data.ts

@@ -0,0 +1,89 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+   {
+    title: '表单名称(table name)',
+    align:"center",
+    dataIndex: 'tableName'
+   },     
+   {
+    title: '是否启用(status)',
+    align:"center",
+    dataIndex: 'status'
+   },
+   {
+    title: '描述(customer)',
+    align:"center",
+    dataIndex: 'customerName'
+   }
+];
+
+//子表表格配置
+export const SonTableColumns: JVxeColumn[] = [
+    {
+      title: '审批人(approver)',
+      key: 'approverId',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+      validateRules: [{ required: true}],
+    },
+    {
+      title: '次序(indexNum)',
+      key: 'indexNum',
+      type: JVxeTypes.inputNumber,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+      validateRules: [{ required: true}],
+    },
+    {
+      title: '执行条件(execution)',
+      key: 'execution',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '是否启用(status)',
+      key: 'status',
+      type: JVxeTypes.select,
+      dictCode: 'yes_or_no',
+      stringToNumber: true,
+      placeholder: '请输入${title}',
+      defaultValue:'1',
+    },
+    {
+      title: '仅查看(isView)',
+      key: 'isView',
+      type: JVxeTypes.select,
+      placeholder: '请输入${title}',
+      dictCode: 'yes_or_no',
+      stringToNumber: true,
+      defaultValue:'1',
+    },
+    {
+      title: '审批说明(describe)',
+      key: 'describe',
+      type: JVxeTypes.input,
+      placeholder: '请输入${title}',
+      defaultValue:'',
+    },
+    {
+      title: '操作(operation)',
+      key: 'action',
+      width:"400px",
+      // 固定在右侧
+      fixed: 'right',
+      // 对齐方式为居中
+      align: 'center',
+      // 组件类型定义为【插槽】
+      type: JVxeTypes.slot,
+      // slot 的名称,对应 v-slot 冒号后面和等号前面的内容
+      slotName: 'action',
+    },
+  ]

+ 290 - 0
src/views/system/approvalProcessConfig/approvalProcessConfigList.vue

@@ -0,0 +1,290 @@
+<template>
+    <div class="p-2">
+      <!--查询区域-->
+      <div class="jeecg-basic-table-form-container">
+        <a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
+          <a-row :gutter="24">
+            <a-col :lg="8">
+              <a-form-item name="billDate">
+                <template #label><span title="表单名称(bill date)">单据日期(bill date)</span></template>
+                <a-range-picker value-format="YYYY-MM-DD" v-model:value="queryParam.billDate" class="query-group-cust" />
+              </a-form-item>
+            </a-col>
+            <template v-if="toggleSearchStatus">
+             
+            </template>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+                <a-col :lg="6">
+                  <a-button type="primary" preIcon="ant-design:search-outlined" @click="reload">查询</a-button>
+                  <a-button preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
+                  <a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
+                    {{ toggleSearchStatus ? '收起' : '展开' }}
+                    <Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
+                  </a>
+                </a-col>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!--引用表格-->
+      <BasicTable @register="registerTable" :rowSelection="rowSelection" size="small">
+        <!--插槽:table标题-->
+        <template #tableTitle>
+          <a-button type="primary" v-auth="'saleCode:sale_order:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增(add)</a-button>
+          <a-button type="primary" v-auth="'saleCode:sale_order:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
+            导出(export)</a-button
+          >
+          <a-dropdown v-if="selectedRowKeys.length > 0">
+            <template #overlay>
+              <a-menu>
+                <a-menu-item key="1" @click="batchHandleDelete" v-auth="'saleCode:sale_order_form:deleteBatch'">
+                  <Icon icon="ant-design:delete-outlined" />
+                  删除(delete)
+                </a-menu-item>
+              </a-menu>
+            </template>
+            <a-button v-auth="'saleCode:sale_order:delete'"
+              >批量操作
+              <Icon icon="mdi:chevron-down" />
+            </a-button>
+          </a-dropdown>
+        </template>
+        <!--操作栏-->
+        <template #action="{ record }">
+          <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
+        </template>
+        <!--字段回显插槽-->
+        <template #bodyCell="{ column, record, index, text }"> </template>
+        <template #viewFile="props">
+        </template>
+      </BasicTable>
+      <!-- 表单区域 -->
+      <approvalProcessConfigModal @register="registerModal" @success="handleSuccess" />
+    </div>
+  </template>
+  
+  <script lang="ts" name="saleCode-saleInquiryForm" setup>
+    import { ref, reactive, computed, unref, onMounted } from 'vue';
+    import { BasicTable, useTable, TableAction } from '/@/components/Table';
+    import { useListPage } from '/@/hooks/system/useListPage';
+    import { useModal } from '/@/components/Modal';
+    import approvalProcessConfigModal from './components/approvalProcessConfigModal.vue';
+    import { columns} from './approvalProcessConfigForm.data';
+    import {list,deleteOne,batchDelete, getImportUrl, getExportUrl,} from './approvalProcessConfigForm.api';
+    import { cloneDeep } from 'lodash-es';
+    import { JDictSelectTag, ApiSelect, JInput,JSelect } from '/@/components/Form';
+    import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue';
+    import { message } from 'ant-design-vue';
+    const formRef = ref();
+    const queryParam = reactive<any>({});
+    //注册model
+    const [registerModal, { openModal }] = useModal();
+    //注册table数据
+    const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
+      tableProps: {
+        title: '审批流程配置',
+        api: list,
+        columns,
+        canResize: false,
+        useSearchForm: false,
+        actionColumn: {
+          width: 300,
+          fixed: 'right',
+        },
+        scroll: {
+          x: '1200px',
+          y:'calc(100vh - 400px)',
+        },
+        beforeFetch: async (params) => {
+          let rangerQuery = await setRangeQuery();
+          return Object.assign(params, rangerQuery);
+        },
+      },
+      exportConfig: {
+        name: '审批流程配置',
+        url: getExportUrl,
+        params: queryParam,
+      },
+      importConfig: {
+        url: getImportUrl,
+        success: handleSuccess,
+      },
+    });
+  
+    const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
+  
+    /**
+     * 高级查询事件
+     */
+    function handleSuperQuery(params) {
+      Object.keys(params).map((k) => {
+        queryParam[k] = params[k];
+      });
+      reload();
+    }
+  
+    /**
+     * 新增事件
+     */
+    function handleAdd() {
+      openModal(true, {
+        isUpdate: false,
+        showFooter: true,
+        isRevise: false,
+      });
+    }
+    /**
+     * 编辑事件
+     */
+    function handleEdit(record: Recordable) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+        showFooter: true,
+        isRevise: false,
+      });
+    }
+    /**
+     * 详情
+     */
+    function handleDetail(record: Recordable) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+        showFooter: false,
+      });
+    }
+    /**
+     * 删除事件
+     */
+    async function handleDelete(record) {
+      await deleteOne({ id: record.id }, handleSuccess);
+    }
+    /**
+     * 批量删除事件
+     */
+    async function batchHandleDelete() {
+      await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
+    }
+    /**
+     * 成功回调
+     */
+    function handleSuccess() {
+      (selectedRowKeys.value = []) && reload();
+    }
+    /**
+     * 操作栏
+     */
+    function getTableAction(record) {
+      return [
+        {
+          label: '编辑(edit)',
+          onClick: handleEdit.bind(null, record),
+          auth: 'saleCode:sale_order:edit',
+          ifShow: record.submit == '0' || !record.submit,
+        },
+      ];
+    }
+    /**
+     * 下拉操作栏
+     */
+    function getDropDownAction(record) {
+      return [
+        {
+          label: '详情(detail)',
+          onClick: handleDetail.bind(null, record),
+        },
+        {
+          label: '删除(delete)',
+          popConfirm: {
+            title: '是否确认删除',
+            confirm: handleDelete.bind(null, record),
+            placement: 'topLeft',
+          },
+          auth: 'saleCode:sale_order:delete',
+          ifShow: record.submit == '0' || !record.submit,
+        },
+      ];
+    }
+  
+    /* ----------------------以下为原生查询需要添加的-------------------------- */
+    const toggleSearchStatus = ref<boolean>(false);
+    const labelCol = reactive({
+      xs: 24,
+      sm: 9,
+    });
+    const wrapperCol = reactive({
+      xs: 24,
+      sm: 15,
+    });
+    const labelCol1 = reactive({
+      xs: 24,
+      sm: 12,
+    });
+    const wrapperCol1 = reactive({
+      xs: 24,
+      sm: 12,
+    });
+    /**
+     * 重置
+     */
+    function searchReset() {
+      formRef.value.resetFields();
+      selectedRowKeys.value = [];
+      //刷新数据
+      reload();
+    }
+  
+    let rangeField = 'billDate,';
+  
+    /**
+     * 设置范围查询条件
+     */
+    async function setRangeQuery() {
+      let queryParamClone = cloneDeep(queryParam);
+      if (rangeField) {
+        let fieldsValue = rangeField.split(',');
+        fieldsValue.forEach((item) => {
+          if (queryParamClone[item]) {
+            let range = queryParamClone[item];
+            queryParamClone[item + '_begin'] = range[0];
+            queryParamClone[item + '_end'] = range[1];
+            delete queryParamClone[item];
+          } else {
+            queryParamClone[item + '_begin'] = '';
+            queryParamClone[item + '_end'] = '';
+          }
+        });
+      }
+      return queryParamClone;
+    }
+  </script>
+  <style lang="less" scoped>
+    .jeecg-basic-table-form-container {
+      padding: 0;
+      .table-page-search-submitButtons {
+        display: block;
+        margin-bottom: 8px;
+        white-space: nowrap;
+      }
+      .query-group-cust {
+        min-width: 100px !important;
+      }
+      .query-group-split-cust {
+        width: 30px;
+        display: inline-block;
+        text-align: center;
+      }
+      .ant-form-item:not(.ant-form-item-with-help) {
+        margin-bottom: 8px;
+        height: 32px;
+      }
+      :deep(.ant-picker),
+      :deep(.ant-input-number) {
+        width: 100%;
+      }
+    }
+  </style>
+  

+ 285 - 0
src/views/system/approvalProcessConfig/components/approvalProcessConfigForm.vue

@@ -0,0 +1,285 @@
+<template>
+  <a-spin :spinning="loading">
+    <JFormContainer :disabled="disabled">
+      <template #detail>
+        <a-form v-bind="formItemLayout" name="approvalProcessConfigForm" ref="formRef">
+          <a-row>
+            <a-col :span="12">
+              <a-form-item
+                label="表单(tableId)"
+                v-bind="validateInfos.tableId"
+                id="approvalProcessConfigForm-tableId"
+                name="tableId"
+                :labelCol="formItemLayout.labelCol1"
+                :wrapperCol="formItemLayout.wrapperCol1"
+              >
+                <a-input v-model:value="formData.tableId" placeholder="" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item label="是否启用(status)" v-bind="validateInfos.status" id="approvalProcessConfigForm-status" name="status">
+                <JDictSelectTag
+                  v-model:value="formData.status"
+                  placeholder="请选择"
+                  dictCode="yes_or_no"
+                  style="width: 100%"
+                  stringToNumber
+                />
+              </a-form-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-item
+                label="描述(tableName)"
+                v-bind="validateInfos.tableName"
+                id="approvalProcessConfigForm-tableName"
+                name="tableName"
+              >
+                <a-input v-model:value="formData.tableName" placeholder="请输入" allow-clear AutoComplete="off" />
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </template>
+    </JFormContainer>
+
+    <!-- 子表单区域 -->
+    <a-tabs v-model:activeKey="activeKey" animated style="padding: 24px; padding-top: 0px">
+      <a-tab-pane tab="审批流程配置" key="approvalProcessConfigForm" :forceRender="true">
+        <!-- <a-button type="primary" style="margin-right: 1%; margin-bottom: 1%" @click="selectDeliveryList">
+          增行(select delevery notice)</a-button> -->
+        <j-vxe-table
+          :keep-source="true"
+          resizable
+          toolbar
+          ref="approvalProcessConfigFormTableRef"
+          :loading="approvalProcessConfigFormTable.loading"
+          :columns="approvalProcessConfigFormTable.columns"
+          :dataSource="approvalProcessConfigFormTable.dataSource"
+          :maxHeight="340"
+          :disabled="disabled"
+          :rowNumber="true"
+          :rowSelection="true"
+          asyncRemove
+        >
+          <template #action="props">
+            <a-popconfirm title="确定删除吗?" @confirm="handleDelete1(props)">
+              <a>删除(delete)</a>
+            </a-popconfirm>
+          </template>
+        </j-vxe-table>
+      </a-tab-pane>
+    </a-tabs>
+  </a-spin>
+</template>
+
+<script lang="ts">
+  import { defineComponent, ref, reactive, computed, toRaw, onMounted } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
+  import {querySonTable,queryDataById,saveOrUpdate, queryDeliverDataById} from '..approvalProcessConfigForm.api';
+  import { JVxeTable } from '/@/components/jeecg/JVxeTable';
+  import { SonTableColumns } from '../approvalProcessConfigForm.data';
+  import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
+  import { JDictSelectTag, JSelectMultiple } from '/@/components/Form';
+  import { ApiSelect } from '/@/components/Form/index';
+  import { Form, message } from 'ant-design-vue';
+  const useForm = Form.useForm;
+  export default defineComponent({
+    name: 'SaleInvoiceForm',
+    components: {
+      JVxeTable,
+      JFormContainer,
+      JDictSelectTag,
+      JSelectMultiple,
+      ApiSelect,
+    },
+    props: {
+      formDisabled: {
+        type: Boolean,
+        default: false,
+      },
+      formData: { type: Object, default: () => {} },
+      formBpm: { type: Boolean, default: true },
+    },
+    emits: ['success'],
+    setup(props, { emit }) {
+      const loading = ref(false);
+      const formRef = ref();
+      const approvalProcessConfigFormTableRef = ref();
+      const approvalProcessConfigFormTable = reactive<Record<string, any>>({
+        loading: false,
+        columns: SonTableColumns,
+        dataSource: [],
+      });
+      const activeKey = ref('approvalProcessConfigForm');
+      const formData = reactive<Record<string, any>>({
+        id: '',
+        status: 1,
+        tableName:'',
+        tableId:''
+      });
+
+      //表单验证
+      const validatorRules = reactive({
+        tableId: [
+          { required: true, message: '请输入' }
+        ],
+        status: [
+          { required: true, message: '请选择' }
+        ],
+      });
+      const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
+      const dbData = {};
+      const formItemLayout = {
+        labelCol: { xs: { span: 24 }, sm: { span: 8 } },
+        wrapperCol: { xs: { span: 24 }, sm: { span: 13 } },
+        labelCol1: { xs: { span: 24 }, sm: { span: 8 } },
+        wrapperCol1: { xs: { span: 24 }, sm: { span: 13 } },
+      };
+
+      // 表单禁用
+      const disabled = computed(() => {
+        if (props.formBpm === true) {
+          if (props.formData.disabled === false) {
+            return false;
+          } else {
+            return true;
+          }
+        }
+        return props.formDisabled;
+      });
+
+      //新增方法
+      function add() {
+        resetFields();
+        approvalProcessConfigFormTable.dataSource = [];
+        activeKey.value = 'approvalProcessConfigForm';
+      }
+      //编辑方法
+      async function edit(row) {
+        //主表数据
+        await queryMainData(row.id);
+        //子表数据
+        const approvalProcessConfigFormDataList = await querySonTable(row['id']);
+        approvalProcessConfigFormTable.dataSource = [...approvalProcessConfigFormDataList];
+      }
+      //获取主表
+      async function queryMainData(id) {
+        const row = await queryDataById(id);
+        resetFields();
+        const tmpData = {};
+        Object.keys(formData).forEach((key) => {
+          if (row.hasOwnProperty(key)) {
+            tmpData[key] = row[key];
+          }
+        });
+        //赋值
+        Object.assign(formData, tmpData);
+      }
+
+      const { getSubFormAndTableData, transformData } = useValidateAntFormAndTable(activeKey, {
+        baseApproverSetInfo: approvalProcessConfigFormTableRef,
+      });
+      //获取表单信息
+      async function getFormData() {
+        try {
+          // 触发表单验证
+          await validate();
+        } catch ({ errorFields }) {
+          if (errorFields) {
+            const firstField = errorFields[0];
+            if (firstField) {
+              formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+            }
+          }
+          return Promise.reject(errorFields);
+        }
+        return transformData(toRaw(formData));
+      }
+      //保存
+      async function submitForm() {
+        approvalProcessConfigFormTableRef.value!.validateTable().then(async (errMap) =>  {
+            if (errMap) {
+              console.log('表单验证未通过:', { errMap });
+            } else {
+              const mainData = await getFormData();
+              const subData = await getSubFormAndTableData();
+              const values = Object.assign({}, dbData, mainData, subData);
+              console.log('表单提交数据', values);
+              const isUpdate = values.id ? true : false;
+              await saveOrUpdate(values, isUpdate);
+              //关闭弹窗
+              emit('success');
+            }
+          })
+      }
+
+      function setFieldsValue(values) {
+        if (values) {
+          Object.keys(values).map((k) => {
+            formData[k] = values[k];
+          });
+        }
+      }
+
+      /**
+       * 值改变事件触发-树控件回调
+       * @param key
+       * @param value
+       */
+      function handleFormChange(key, value) {
+        formData[key] = value;
+      }
+      //产品明细-删除行
+      async function handleDelete1(prop) {
+        var xTable = approvalProcessConfigFormTableRef.value!.getXTable();
+        var newArray = [...xTable.data];
+        newArray.splice(prop.rowIndex, 1);
+        approvalProcessConfigFormTable.dataSource = newArray;
+      }
+      return {
+        approvalProcessConfigFormTableRef,
+        approvalProcessConfigFormTable,
+        validatorRules,
+        validateInfos,
+        activeKey,
+        loading,
+        formData,
+        setFieldsValue,
+        handleFormChange,
+        formItemLayout,
+        disabled,
+        getFormData,
+        submitForm,
+        add,
+        edit,
+        formRef,
+        handleDelete1
+      };
+    },
+  });
+</script>
+<style lang="less" scoped>
+  /** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+  /deep/.vxe-table--body-wrapper {
+    height: 100% !important;
+  }
+  /deep/.ant-modal-body {
+    padding: 24px !important;
+  }
+
+  /deep/.ant-form-item {
+    margin-bottom: 8px !important;
+  }
+  /deep/.vxe-cell--valid-error-msg{
+    color: white !important;
+    background-color: white !important;
+  }
+</style>

+ 67 - 0
src/views/system/approvalProcessConfig/components/approvalProcessConfigModal.vue

@@ -0,0 +1,67 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="95%" @ok="handleSubmit" :maskClosable="false">
+    <approvalProcessConfigForm ref="formComponent" :formDisabled="formDisabled" :formBpm="false" @success="submitSuccess"></approvalProcessConfigForm>
+  </BasicModal>
+</template>
+
+<script lang="ts">
+  import { ref, unref } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import approvalProcessConfigForm from './approvalProcessConfigForm.vue';
+
+  export default {
+    name: "approvalProcessConfigModal",
+    components:{
+      BasicModal,
+      approvalProcessConfigForm
+    },
+    emits:['register','success'],
+    setup(_p, {emit}){
+      const formComponent = ref()
+      const isUpdate = ref(true);
+      const formDisabled = ref(false);
+      const title = ref('')
+
+      //表单赋值
+      const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        setModalProps({confirmLoading: false,showCancelBtn:data?.showFooter,showOkBtn:data?.showFooter});
+        isUpdate.value = !!data?.isUpdate;
+        formDisabled.value = !data?.showFooter;
+        title.value = data?.isUpdate ? (unref(formDisabled) ? '详情' : '编辑') : '新增';
+        if (unref(isUpdate)) {
+          formComponent.value.edit(data.record)
+        }else{
+          formComponent.value.add()
+        }
+      });
+
+      function handleSubmit() {
+        formComponent.value.submitForm();
+      }
+
+      function submitSuccess(){
+        emit('success');
+        closeModal();
+      }
+
+      return {
+        registerModal,
+        title,
+        formComponent,
+        formDisabled,
+        handleSubmit,
+        submitSuccess,
+      }
+    }
+  }
+</script>
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>