yuansh 1 周之前
父節點
當前提交
4aede23c81

+ 64 - 0
src/views/baseCode/SerialPattern/SerialPattern.api.ts

@@ -0,0 +1,64 @@
+import {defHttp} from '/@/utils/http/axios';
+import { useMessage } from "/@/hooks/web/useMessage";
+
+const { createConfirm } = useMessage();
+
+enum Api {
+  list = '/cuspCode/serialPattern/list',
+  save='/cuspCode/serialPattern/add',
+  edit='/cuspCode/serialPattern/edit',
+  deleteOne = '/cuspCode/serialPattern/delete',
+  deleteBatch = '/cuspCode/serialPattern/deleteBatch',
+  importExcel = '/cuspCode/serialPattern/importExcel',
+  exportXls = '/cuspCode/serialPattern/exportXls',
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 列表接口
+ * @param params
+ */
+export const list = (params) =>
+  defHttp.get({url: Api.list, 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});
+}

+ 111 - 0
src/views/baseCode/SerialPattern/SerialPattern.data.ts

@@ -0,0 +1,111 @@
+import {BasicColumn} from '/@/components/Table';
+import {FormSchema} from '/@/components/Table';
+import { rules} from '/@/utils/helper/validator';
+import { render } from '/@/utils/common/renderUtils';
+import { getWeekMonthQuarterYear } from '/@/utils';
+//列表数据
+export const columns: BasicColumn[] = [
+   {
+    title: '表格名称',
+    align:"center",
+    dataIndex: 'tableName'
+   },
+   {
+    title: '字段名称',
+    align:"center",
+    dataIndex: 'fieldName'
+   },
+   {
+    title: '编号模式',
+    align:"center",
+    dataIndex: 'serialPattern'
+   },
+   {
+    title: '描述',
+    align:"center",
+    dataIndex: 'description'
+   }
+];
+//查询数据
+export const searchFormSchema: FormSchema[] = [
+	{
+      label: "名称",
+      field: 'tableName',
+      component: 'Input',
+      //colProps: {span: 6},
+ 	},
+	{
+      label: "字段名称",
+      field: 'fieldName',
+      component: 'Input',
+      //colProps: {span: 6},
+ 	},
+	{
+      label: "编号模式",
+      field: 'serialPattern',
+      component: 'Input',
+      //colProps: {span: 6},
+ 	},
+];
+//表单数据
+export const formSchema: FormSchema[] = [
+  {
+    label: '字段所属表格名称',
+    field: 'tableName',
+    component: 'Input',
+    dynamicRules: ({model,schema}) => {
+          return [
+                 { required: true, message: '请输入字段所属表格名称!'},
+          ];
+     },
+  },
+  {
+    label: '字段名称',
+    field: 'fieldName',
+    component: 'Input',
+    dynamicRules: ({model,schema}) => {
+          return [
+                 { required: true, message: '请输入字段名称!'},
+          ];
+     },
+  },
+  {
+    label: '编号模式',
+    field: 'serialPattern',
+    component: 'Input',
+    dynamicRules: ({model,schema}) => {
+          return [
+                 { required: true, message: '请输入编号模式'},
+          ];
+     },
+  },
+  {
+    label: '描述',
+    field: 'description',
+    component: 'Input',
+  },
+	// TODO 主键隐藏字段,目前写死为ID
+	{
+	  label: '',
+	  field: 'id',
+	  component: 'Input',
+	  show: false
+	},
+];
+
+// 高级查询数据
+export const superQuerySchema = {
+  tableName: {title: '表格名称',order: 0,view: 'text', type: 'string',},
+  fieldName: {title: '字段名称',order: 1,view: 'text', type: 'string',},
+  serialPattern: {title: '编号模式',order: 2,view: 'text', type: 'string',},
+  description: {title: '描述',order: 3,view: 'text', type: 'string',},
+};
+
+/**
+* 流程表单调用这个方法获取formSchema
+* @param param
+*/
+export function getBpmFormSchema(_formData): FormSchema[]{
+  // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
+  return formSchema;
+}

+ 190 - 0
src/views/baseCode/SerialPattern/SerialPatternList.vue

@@ -0,0 +1,190 @@
+<template>
+  <div>
+    <!--引用表格-->
+   <BasicTable @register="registerTable" :rowSelection="rowSelection">
+     <!--插槽:table标题-->
+      <template #tableTitle>
+          <a-button type="primary" v-auth="'cuspCode:serial_pattern:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
+          <a-button  type="primary" v-auth="'cuspCode:serial_pattern:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
+          <j-upload-button type="primary" v-auth="'cuspCode:serial_pattern:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+          <a-dropdown v-if="selectedRowKeys.length > 0">
+              <template #overlay>
+                <a-menu>
+                  <a-menu-item key="1" @click="batchHandleDelete">
+                    <Icon icon="ant-design:delete-outlined"></Icon>
+                    删除
+                  </a-menu-item>
+                </a-menu>
+              </template>
+              <a-button v-auth="'cuspCode:serial_pattern:deleteBatch'">批量操作
+                <Icon icon="mdi:chevron-down"></Icon>
+              </a-button>
+        </a-dropdown>
+        <!-- 高级查询 -->
+        <super-query :config="superQueryConfig" @search="handleSuperQuery" />
+      </template>
+       <!--操作栏-->
+      <template #action="{ record }">
+        <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
+      </template>
+      <!--字段回显插槽-->
+      <template v-slot:bodyCell="{ column, record, index, text }">
+      </template>
+    </BasicTable>
+    <!-- 表单区域 -->
+    <SerialPatternModal @register="registerModal" @success="handleSuccess"></SerialPatternModal>
+  </div>
+</template>
+
+<script lang="ts" name="cuspCode-serialPattern" setup>
+  import {ref, reactive, computed, unref} from 'vue';
+  import {BasicTable, useTable, TableAction} from '/@/components/Table';
+  import {useModal} from '/@/components/Modal';
+  import { useListPage } from '/@/hooks/system/useListPage'
+  import SerialPatternModal from './components/SerialPatternModal.vue'
+  import {columns, searchFormSchema, superQuerySchema} from './SerialPattern.data';
+  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './SerialPattern.api';
+  import { downloadFile } from '/@/utils/common/renderUtils';
+  import { useUserStore } from '/@/store/modules/user';
+  const queryParam = reactive<any>({});
+  const checkedKeys = ref<Array<string | number>>([]);
+  const userStore = useUserStore();
+  //注册model
+  const [registerModal, {openModal}] = useModal();
+  //注册table数据
+  const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
+      tableProps:{
+           title: 'serial_pattern',
+           api: list,
+           columns,
+           canResize:false,
+           formConfig: {
+              //labelWidth: 120,
+              schemas: searchFormSchema,
+              autoSubmitOnEnter:true,
+              showAdvancedButton:true,
+              fieldMapToNumber: [
+              ],
+              fieldMapToTime: [
+              ],
+            },
+           actionColumn: {
+               width: 120,
+               fixed:'right'
+            },
+            beforeFetch: (params) => {
+              return Object.assign(params, queryParam);
+            },
+      },
+       exportConfig: {
+            name:"serial_pattern",
+            url: getExportUrl,
+            params: queryParam,
+          },
+          importConfig: {
+            url: getImportUrl,
+            success: handleSuccess
+          },
+  })
+
+  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
+
+  // 高级查询配置
+  const superQueryConfig = reactive(superQuerySchema);
+
+  /**
+   * 高级查询事件
+   */
+  function handleSuperQuery(params) {
+    Object.keys(params).map((k) => {
+      queryParam[k] = params[k];
+    });
+    reload();
+  }
+   /**
+    * 新增事件
+    */
+  function handleAdd() {
+     openModal(true, {
+       isUpdate: false,
+       showFooter: true,
+     });
+  }
+   /**
+    * 编辑事件
+    */
+  function handleEdit(record: Recordable) {
+     openModal(true, {
+       record,
+       isUpdate: true,
+       showFooter: true,
+     });
+   }
+   /**
+    * 详情
+   */
+  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: '编辑',
+           onClick: handleEdit.bind(null, record),
+           auth: 'cuspCode:serial_pattern:edit'
+         }
+       ]
+   }
+     /**
+        * 下拉操作栏
+        */
+  function getDropDownAction(record){
+       return [
+         {
+           label: '详情',
+           onClick: handleDetail.bind(null, record),
+         }, {
+           label: '删除',
+           popConfirm: {
+             title: '是否确认删除',
+             confirm: handleDelete.bind(null, record),
+             placement: 'topLeft',
+           },
+           auth: 'cuspCode:serial_pattern:delete'
+         }
+       ]
+   }
+
+
+</script>
+
+<style lang="less" scoped>
+  :deep(.ant-picker),:deep(.ant-input-number){
+    width: 100%;
+  }
+</style>

+ 70 - 0
src/views/baseCode/SerialPattern/components/SerialPatternForm.vue

@@ -0,0 +1,70 @@
+<template>
+    <div style="min-height: 400px">
+        <BasicForm @register="registerForm"></BasicForm>
+        <div style="width: 100%;text-align: center" v-if="!formDisabled">
+            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">提 交</a-button>
+        </div>
+    </div>
+</template>
+
+<script lang="ts">
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {computed, defineComponent} from 'vue';
+    import {defHttp} from '/@/utils/http/axios';
+    import { propTypes } from '/@/utils/propTypes';
+    import {getBpmFormSchema} from '../SerialPattern.data';
+    import {saveOrUpdate} from '../SerialPattern.api';
+    
+    export default defineComponent({
+        name: "SerialPatternForm",
+        components:{
+            BasicForm
+        },
+        props:{
+            formData: propTypes.object.def({}),
+            formBpm: propTypes.bool.def(true),
+        },
+        setup(props){
+            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
+                labelWidth: 150,
+                schemas: getBpmFormSchema(props.formData),
+                showActionButtonGroup: false,
+                baseColProps: {span: 24}
+            });
+
+            const formDisabled = computed(()=>{
+                if(props.formData.disabled === false){
+                    return false;
+                }
+                return true;
+            });
+
+            let formData = {};
+            const queryByIdUrl = '/cuspCode/serialPattern/queryById';
+            async function initFormData(){
+                let params = {id: props.formData.dataId};
+                const data = await defHttp.get({url: queryByIdUrl, params});
+                formData = {...data}
+                //设置表单的值
+                await setFieldsValue(formData);
+                //默认是禁用
+                await setProps({disabled: formDisabled.value})
+            }
+
+            async function submitForm() {
+                let data = getFieldsValue();
+                let params = Object.assign({}, formData, data);
+                console.log('表单数据', params)
+                await saveOrUpdate(params, true)
+            }
+
+            initFormData();
+            
+            return {
+                registerForm,
+                formDisabled,
+                submitForm,
+            }
+        }
+    });
+</script>

+ 76 - 0
src/views/baseCode/SerialPattern/components/SerialPatternModal.vue

@@ -0,0 +1,76 @@
+<template>
+  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
+      <BasicForm @register="registerForm" name="SerialPatternForm" />
+  </BasicModal>
+</template>
+
+<script lang="ts" setup>
+    import {ref, computed, unref} from 'vue';
+    import {BasicModal, useModalInner} from '/@/components/Modal';
+    import {BasicForm, useForm} from '/@/components/Form/index';
+    import {formSchema} from '../SerialPattern.data';
+    import {saveOrUpdate} from '../SerialPattern.api';
+    // Emits声明
+    const emit = defineEmits(['register','success']);
+    const isUpdate = ref(true);
+    const isDetail = ref(false);
+    //表单配置
+    const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
+        labelWidth: 150,
+        schemas: formSchema,
+        showActionButtonGroup: false,
+        baseColProps: {span: 24}
+    });
+    //表单赋值
+    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
+        //重置表单
+        await resetFields();
+        setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
+        isUpdate.value = !!data?.isUpdate;
+        isDetail.value = !!data?.showFooter;
+        if (unref(isUpdate)) {
+            //表单赋值
+            await setFieldsValue({
+                ...data.record,
+            });
+        }
+        // 隐藏底部时禁用整个表单
+       setProps({ disabled: !data?.showFooter })
+    });
+    //设置标题
+    const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
+    //表单提交事件
+    async function handleSubmit(v) {
+        try {
+            let values = await validate();
+            setModalProps({confirmLoading: true});
+            //提交表单
+            await saveOrUpdate(values, isUpdate.value);
+            //关闭弹窗
+            closeModal();
+            //刷新列表
+            emit('success');
+        } catch ({ errorFields }) {
+           if (errorFields) {
+             const firstField = errorFields[0];
+             if (firstField) {
+               scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
+             }
+           }
+           return Promise.reject(errorFields);
+        } finally {
+            setModalProps({confirmLoading: false});
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+	/** 时间和数字输入框样式 */
+  :deep(.ant-input-number) {
+    width: 100%;
+  }
+
+  :deep(.ant-calendar-picker) {
+    width: 100%;
+  }
+</style>

+ 12 - 4
src/views/cuspCode/Intermediator/CuspIntermediator.api.ts

@@ -1,4 +1,4 @@
-import {defHttp} from '/@/utils/http/axios';
+import { defHttp } from '/@/utils/http/axios';
 import { useMessage } from "/@/hooks/web/useMessage";
 
 const { createConfirm } = useMessage();
@@ -12,33 +12,39 @@ enum Api {
   importExcel = '/cuspCode/cuspIntermediator/importExcel',
   exportXls = '/cuspCode/cuspIntermediator/exportXls',
 }
+
 /**
  * 导出api
  * @param params
  */
 export const getExportUrl = Api.exportXls;
+
 /**
  * 导入api
  */
 export const getImportUrl = Api.importExcel;
+
 /**
  * 列表接口
  * @param params
  */
-export const list = (params) =>
-  defHttp.get({url: Api.list, params});
+export const list = (params) => defHttp.get({ url: Api.list, params });
 
 /**
  * 删除单个
+ * @param params
+ * @param handleSuccess
  */
 export const deleteOne = (params,handleSuccess) => {
   return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
     handleSuccess();
   });
 }
+
 /**
  * 批量删除
  * @param params
+ * @param handleSuccess
  */
 export const batchDelete = (params, handleSuccess) => {
   createConfirm({
@@ -54,11 +60,13 @@ export const batchDelete = (params, handleSuccess) => {
     }
   });
 }
+
 /**
  * 保存或者更新
  * @param params
+ * @param isUpdate
  */
 export const saveOrUpdate = (params, isUpdate) => {
   let url = isUpdate ? Api.edit : Api.save;
-  return defHttp.post({url: url, params});
+  return defHttp.post({ url: url, params }, { isTransformResponse: false });
 }

+ 46 - 179
src/views/cuspCode/Intermediator/CuspIntermediator.data.ts

@@ -5,213 +5,80 @@ import { render } from '/@/utils/common/renderUtils';
 import { getWeekMonthQuarterYear } from '/@/utils';
 //列表数据
 export const columns: BasicColumn[] = [
-   {
+  {
     title: '状态(1-启用,0-停用)',
-    align:"center",
+    align: "center",
     dataIndex: 'status_dictText'
-   },
-   {
-    title: '编码',
-    align:"center",
-    dataIndex: 'code'
-   },
-   {
-    title: '名称',
-    align:"center",
-    dataIndex: 'name'
-   },
-   {
-    title: '简称',
-    align:"center",
-    dataIndex: 'abbreviation'
-   },
-   {
-    title: '税号',
-    align:"center",
-    dataIndex: 'dutyParagraph'
-   },
-   {
-    title: '法人',
-    align:"center",
-    dataIndex: 'legalPerson'
-   },
-   {
-    title: '联系人',
-    align:"center",
-    dataIndex: 'contacts'
-   },
-   {
-    title: '联系电话',
-    align:"center",
-    dataIndex: 'phone'
-   },
-   {
-    title: '办公地址',
-    align:"center",
-    dataIndex: 'address'
-   },
-   {
-    title: '邮箱',
-    align:"center",
-    dataIndex: 'email'
-   },
-   {
-    title: '国家',
-    align:"center",
-    dataIndex: 'country'
-   },
-   {
-    title: '备注',
-    align:"center",
-    dataIndex: 'notes'
-   },
-];
-//查询数据
-export const searchFormSchema: FormSchema[] = [
-	{
-      label: "编码",
-      field: 'code',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "名称",
-      field: 'name',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "简称",
-      field: 'abbreviation',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "税号",
-      field: 'dutyParagraph',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "法人",
-      field: 'legalPerson',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "联系人",
-      field: 'contacts',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "联系电话",
-      field: 'phone',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-	{
-      label: "国家",
-      field: 'country',
-      component: 'Input',
-      //colProps: {span: 6},
- 	},
-];
-//表单数据
-export const formSchema: FormSchema[] = [
-  {
-    label: '状态(1-启用,0-停用)',
-    field: 'status',
-    component: 'JDictSelectTag',
-    componentProps:{
-        dictCode:""
-     },
   },
   {
-    label: '编码',
-    field: 'code',
-    component: 'Input',
+    title: '编码',
+    align: "center",
+    dataIndex: 'code'
   },
   {
-    label: '名称',
-    field: 'name',
-    component: 'Input',
+    title: '名称',
+    align: "center",
+    dataIndex: 'name'
   },
   {
-    label: '简称',
-    field: 'abbreviation',
-    component: 'Input',
+    title: '简称',
+    align: "center",
+    dataIndex: 'abbreviation'
   },
   {
-    label: '税号',
-    field: 'dutyParagraph',
-    component: 'Input',
+    title: '税号',
+    align: "center",
+    dataIndex: 'dutyParagraph'
   },
   {
-    label: '法人',
-    field: 'legalPerson',
-    component: 'Input',
+    title: '法人',
+    align: "center",
+    dataIndex: 'legalPerson'
   },
   {
-    label: '联系人',
-    field: 'contacts',
-    component: 'Input',
+    title: '联系人',
+    align: "center",
+    dataIndex: 'contacts'
   },
   {
-    label: '联系电话',
-    field: 'phone',
-    component: 'Input',
+    title: '联系电话',
+    align: "center",
+    dataIndex: 'phone'
   },
   {
-    label: '办公地址',
-    field: 'address',
-    component: 'Input',
+    title: '办公地址',
+    align: "center",
+    dataIndex: 'address'
   },
   {
-    label: '邮箱',
-    field: 'email',
-    component: 'Input',
+    title: '邮箱',
+    align: "center",
+    dataIndex: 'email'
   },
   {
-    label: '国家',
-    field: 'country',
-    component: 'Input',
+    title: '国家',
+    align: "center",
+    dataIndex: 'country'
   },
   {
-    label: '备注',
-    field: 'notes',
-    component: 'Input',
+    title: '备注',
+    align: "center",
+    dataIndex: 'notes'
   },
-	// TODO 主键隐藏字段,目前写死为ID
-	{
-	  label: '',
-	  field: 'id',
-	  component: 'Input',
-	  show: false
-	},
 ];
 
 // 高级查询数据
 export const superQuerySchema = {
   status: {title: '状态(1-启用,0-停用)',order: 0,view: 'number', type: 'number',dictCode: '',},
-  code: {title: '编码',order: 2,view: 'text', type: 'string',},
-  name: {title: '名称',order: 3,view: 'text', type: 'string',},
-  abbreviation: {title: '简称',order: 4,view: 'text', type: 'string',},
-  dutyParagraph: {title: '税号',order: 5,view: 'text', type: 'string',},
-  legalPerson: {title: '法人',order: 6,view: 'text', type: 'string',},
-  contacts: {title: '联系人',order: 7,view: 'text', type: 'string',},
-  phone: {title: '联系电话',order: 8,view: 'text', type: 'string',},
-  address: {title: '办公地址',order: 9,view: 'text', type: 'string',},
-  email: {title: '邮箱',order: 10,view: 'text', type: 'string',},
-  country: {title: '国家',order: 11,view: 'text', type: 'string',},
-  notes: {title: '备注',order: 12,view: 'text', type: 'string',},
+  code: {title: '编码',order: 1,view: 'text', type: 'string',},
+  name: {title: '名称',order: 2,view: 'text', type: 'string',},
+  abbreviation: {title: '简称',order: 3,view: 'text', type: 'string',},
+  dutyParagraph: {title: '税号',order: 4,view: 'text', type: 'string',},
+  legalPerson: {title: '法人',order: 5,view: 'text', type: 'string',},
+  contacts: {title: '联系人',order: 6,view: 'text', type: 'string',},
+  phone: {title: '联系电话',order: 7,view: 'text', type: 'string',},
+  address: {title: '办公地址',order: 8,view: 'text', type: 'string',},
+  email: {title: '邮箱',order: 9,view: 'text', type: 'string',},
+  country: {title: '国家',order: 10,view: 'text', type: 'string',},
+  notes: {title: '备注',order: 11,view: 'text', type: 'string',},
 };
-
-/**
-* 流程表单调用这个方法获取formSchema
-* @param param
-*/
-export function getBpmFormSchema(_formData): FormSchema[]{
-  // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
-  return formSchema;
-}

+ 247 - 140
src/views/cuspCode/Intermediator/CuspIntermediatorList.vue

@@ -1,93 +1,161 @@
 <template>
-  <div>
+  <div class="p-2">
+    <!--查询区域-->
+    <div class="jeecg-basic-table-form-container">
+      <a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
+        <a-row :gutter="24">
+          <a-col :lg="6">
+            <a-form-item name="code">
+              <template #label><span title="编码">编码</span></template>
+              <a-input placeholder="请输入编码" v-model:value="queryParam.code" allow-clear ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :lg="6">
+            <a-form-item name="name">
+              <template #label><span title="名称">名称</span></template>
+              <a-input placeholder="请输入名称" v-model:value="queryParam.name" allow-clear ></a-input>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :lg="6">
+              <a-form-item name="abbreviation">
+                <template #label><span title="简称">简称</span></template>
+                <a-input placeholder="请输入简称" v-model:value="queryParam.abbreviation" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="dutyParagraph">
+                <template #label><span title="税号">税号</span></template>
+                <a-input placeholder="请输入税号" v-model:value="queryParam.dutyParagraph" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="legalPerson">
+                <template #label><span title="法人">法人</span></template>
+                <a-input placeholder="请输入法人" v-model:value="queryParam.legalPerson" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="contacts">
+                <template #label><span title="联系人">联系人</span></template>
+                <a-input placeholder="请输入联系人" v-model:value="queryParam.contacts" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="phone">
+                <template #label><span title="联系电话">联系电话</span></template>
+                <a-input placeholder="请输入联系电话" v-model:value="queryParam.phone" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg="6">
+              <a-form-item name="country">
+                <template #label><span title="国家">国家</span></template>
+                <a-input placeholder="请输入国家" v-model:value="queryParam.country" allow-clear ></a-input>
+              </a-form-item>
+            </a-col>
+          </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="searchQuery">查询</a-button>
+                <a-button type="primary" 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">
-     <!--插槽:table标题-->
+    <BasicTable @register="registerTable" :rowSelection="rowSelection">
+      <!--插槽:table标题-->
       <template #tableTitle>
-          <a-button type="primary" v-auth="'cuspCode:cusp_intermediator:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
-          <a-button  type="primary" v-auth="'cuspCode:cusp_intermediator:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
-          <j-upload-button type="primary" v-auth="'cuspCode:cusp_intermediator:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
-          <a-dropdown v-if="selectedRowKeys.length > 0">
-              <template #overlay>
-                <a-menu>
-                  <a-menu-item key="1" @click="batchHandleDelete">
-                    <Icon icon="ant-design:delete-outlined"></Icon>
-                    删除
-                  </a-menu-item>
-                </a-menu>
-              </template>
-              <a-button v-auth="'cuspCode:cusp_intermediator:deleteBatch'">批量操作
-                <Icon icon="mdi:chevron-down"></Icon>
-              </a-button>
+        <a-button type="primary" v-auth="'cuspCode:cusp_intermediator:add'"  @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
+        <a-button  type="primary" v-auth="'cuspCode:cusp_intermediator:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
+        <j-upload-button  type="primary" v-auth="'cuspCode:cusp_intermediator:importExcel'"  preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
+        <a-dropdown v-if="selectedRowKeys.length > 0">
+          <template #overlay>
+            <a-menu>
+              <a-menu-item key="1" @click="batchHandleDelete">
+                <Icon icon="ant-design:delete-outlined"></Icon>
+                删除
+              </a-menu-item>
+            </a-menu>
+          </template>
+          <a-button v-auth="'cuspCode:cusp_intermediator:deleteBatch'">批量操作
+            <Icon icon="mdi:chevron-down"></Icon>
+          </a-button>
         </a-dropdown>
         <!-- 高级查询 -->
         <super-query :config="superQueryConfig" @search="handleSuperQuery" />
       </template>
-       <!--操作栏-->
+      <!--操作栏-->
       <template #action="{ record }">
         <TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
       </template>
-      <!--字段回显插槽-->
       <template v-slot:bodyCell="{ column, record, index, text }">
       </template>
     </BasicTable>
     <!-- 表单区域 -->
-    <CuspIntermediatorModal @register="registerModal" @success="handleSuccess"></CuspIntermediatorModal>
+    <CuspIntermediatorModal ref="registerModal" @success="handleSuccess"></CuspIntermediatorModal>
   </div>
 </template>
 
 <script lang="ts" name="cuspCode-cuspIntermediator" setup>
-  import {ref, reactive, computed, unref} from 'vue';
-  import {BasicTable, useTable, TableAction} from '/@/components/Table';
-  import {useModal} from '/@/components/Modal';
-  import { useListPage } from '/@/hooks/system/useListPage'
-  import CuspIntermediatorModal from './components/CuspIntermediatorModal.vue'
-  import {columns, searchFormSchema, superQuerySchema} from './CuspIntermediator.data';
-  import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './CuspIntermediator.api';
+  import { ref, reactive } from 'vue';
+  import { BasicTable, useTable, TableAction } from '/@/components/Table';
+  import { useListPage } from '/@/hooks/system/useListPage';
+  import { columns, superQuerySchema } from './CuspIntermediator.data';
+  import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './CuspIntermediator.api';
   import { downloadFile } from '/@/utils/common/renderUtils';
+  import CuspIntermediatorModal from './components/CuspIntermediatorModal.vue'
   import { useUserStore } from '/@/store/modules/user';
+
+  const formRef = ref();
   const queryParam = reactive<any>({});
-  const checkedKeys = ref<Array<string | number>>([]);
+  const toggleSearchStatus = ref<boolean>(false);
+  const registerModal = ref();
   const userStore = useUserStore();
-  //注册model
-  const [registerModal, {openModal}] = useModal();
   //注册table数据
-  const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
-      tableProps:{
-           title: '中间人',
-           api: list,
-           columns,
-           canResize:false,
-           formConfig: {
-              //labelWidth: 120,
-              schemas: searchFormSchema,
-              autoSubmitOnEnter:true,
-              showAdvancedButton:true,
-              fieldMapToNumber: [
-              ],
-              fieldMapToTime: [
-              ],
-            },
-           actionColumn: {
-               width: 120,
-               fixed:'right'
-            },
-            beforeFetch: (params) => {
-              return Object.assign(params, queryParam);
-            },
+  const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
+    tableProps: {
+      title: '中间人',
+      api: list,
+      columns,
+      canResize:false,
+      useSearchForm: false,
+      actionColumn: {
+        width: 120,
+        fixed: 'right',
       },
-       exportConfig: {
-            name:"中间人",
-            url: getExportUrl,
-            params: queryParam,
-          },
-          importConfig: {
-            url: getImportUrl,
-            success: handleSuccess
-          },
-  })
-
-  const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
+      beforeFetch: async (params) => {
+        return Object.assign(params, queryParam);
+      },
+    },
+    exportConfig: {
+      name: "中间人",
+      url: getExportUrl,
+      params: queryParam,
+    },
+	  importConfig: {
+	    url: getImportUrl,
+	    success: handleSuccess
+	  },
+  });
+  const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
+  const labelCol = reactive({
+    xs:24,
+    sm:4,
+    xl:6,
+    xxl:4
+  });
+  const wrapperCol = reactive({
+    xs: 24,
+    sm: 20,
+  });
 
   // 高级查询配置
   const superQueryConfig = reactive(superQuerySchema);
@@ -99,92 +167,131 @@
     Object.keys(params).map((k) => {
       queryParam[k] = params[k];
     });
-    reload();
+    searchQuery();
   }
-   /**
-    * 新增事件
-    */
+
+  /**
+   * 新增事件
+   */
   function handleAdd() {
-     openModal(true, {
-       isUpdate: false,
-       showFooter: true,
-     });
+    registerModal.value.disableSubmit = false;
+    registerModal.value.add();
   }
-   /**
-    * 编辑事件
-    */
+  
+  /**
+   * 编辑事件
+   */
   function handleEdit(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: true,
-     });
-   }
-   /**
-    * 详情
+    registerModal.value.disableSubmit = false;
+    registerModal.value.edit(record);
+  }
+   
+  /**
+   * 详情
    */
   function handleDetail(record: Recordable) {
-     openModal(true, {
-       record,
-       isUpdate: true,
-       showFooter: false,
-     });
-   }
-   /**
-    * 删除事件
-    */
+    registerModal.value.disableSubmit = true;
+    registerModal.value.edit(record);
+  }
+   
+  /**
+   * 删除事件
+   */
   async function handleDelete(record) {
-     await deleteOne({id: record.id}, handleSuccess);
-   }
-   /**
-    * 批量删除事件
-    */
+    await deleteOne({ id: record.id }, handleSuccess);
+  }
+   
+  /**
+   * 批量删除事件
+   */
   async function batchHandleDelete() {
-     await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
-   }
-   /**
-    * 成功回调
-    */
+    await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
+  }
+   
+  /**
+   * 成功回调
+   */
   function handleSuccess() {
-      (selectedRowKeys.value = []) && reload();
-   }
-   /**
-      * 操作栏
-      */
-  function getTableAction(record){
-       return [
-         {
-           label: '编辑',
-           onClick: handleEdit.bind(null, record),
-           auth: 'cuspCode:cusp_intermediator:edit'
-         }
-       ]
-   }
-     /**
-        * 下拉操作栏
-        */
-  function getDropDownAction(record){
-       return [
-         {
-           label: '详情',
-           onClick: handleDetail.bind(null, record),
-         }, {
-           label: '删除',
-           popConfirm: {
-             title: '是否确认删除',
-             confirm: handleDelete.bind(null, record),
-             placement: 'topLeft',
-           },
-           auth: 'cuspCode:cusp_intermediator:delete'
-         }
-       ]
-   }
+    (selectedRowKeys.value = []) && reload();
+  }
+   
+  /**
+   * 操作栏
+   */
+  function getTableAction(record) {
+    return [
+      {
+        label: '编辑',
+        onClick: handleEdit.bind(null, record),
+        auth: 'cuspCode:cusp_intermediator:edit'
+      },
+    ];
+  }
+   
+  /**
+   * 下拉操作栏
+   */
+  function getDropDownAction(record) {
+    return [
+      {
+        label: '详情',
+        onClick: handleDetail.bind(null, record),
+      }, {
+        label: '删除',
+        popConfirm: {
+          title: '是否确认删除',
+          confirm: handleDelete.bind(null, record),
+          placement: 'topLeft',
+        },
+        auth: 'cuspCode:cusp_intermediator:delete'
+      }
+    ]
+  }
+
+  /**
+   * 查询
+   */
+  function searchQuery() {
+    reload();
+  }
+  
+  /**
+   * 重置
+   */
+  function searchReset() {
+    formRef.value.resetFields();
+    selectedRowKeys.value = [];
+    //刷新数据
+    reload();
+  }
+  
+
 
 
 </script>
 
 <style lang="less" scoped>
-  :deep(.ant-picker),:deep(.ant-input-number){
-    width: 100%;
+  .jeecg-basic-table-form-container {
+    padding: 0;
+    .table-page-search-submitButtons {
+      display: block;
+      margin-bottom: 24px;
+      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: 16px;
+      height: 32px;
+    }
+    :deep(.ant-picker),:deep(.ant-input-number){
+      width: 100%;
+    }
   }
-</style>
+</style>

+ 205 - 62
src/views/cuspCode/Intermediator/components/CuspIntermediatorForm.vue

@@ -1,70 +1,213 @@
 <template>
-    <div style="min-height: 400px">
-        <BasicForm @register="registerForm"></BasicForm>
-        <div style="width: 100%;text-align: center" v-if="!formDisabled">
-            <a-button @click="submitForm" pre-icon="ant-design:check" type="primary">提 交</a-button>
-        </div>
-    </div>
+  <a-spin :spinning="confirmLoading">
+    <JFormContainer :disabled="disabled">
+      <template #detail>
+        <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="CuspIntermediatorForm">
+          <a-row>
+						<a-col :span="12">
+							<a-form-item label="状态(1-启用,0-停用)" v-bind="validateInfos.status" id="CuspIntermediatorForm-status" name="status">
+								<j-dict-select-tag v-model:value="formData.status" dictCode="" placeholder="请选择状态(1-启用,0-停用)"  allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="编码" v-bind="validateInfos.code" id="CuspIntermediatorForm-code" name="code">
+								<a-input v-model:value="formData.code" placeholder="请输入编码" disabled allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="名称" v-bind="validateInfos.name" id="CuspIntermediatorForm-name" name="name">
+								<a-input v-model:value="formData.name" placeholder="请输入名称"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="简称" v-bind="validateInfos.abbreviation" id="CuspIntermediatorForm-abbreviation" name="abbreviation">
+								<a-input v-model:value="formData.abbreviation" placeholder="请输入简称"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="税号" v-bind="validateInfos.dutyParagraph" id="CuspIntermediatorForm-dutyParagraph" name="dutyParagraph">
+								<a-input v-model:value="formData.dutyParagraph" placeholder="请输入税号"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="法人" v-bind="validateInfos.legalPerson" id="CuspIntermediatorForm-legalPerson" name="legalPerson">
+								<a-input v-model:value="formData.legalPerson" placeholder="请输入法人"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="联系人" v-bind="validateInfos.contacts" id="CuspIntermediatorForm-contacts" name="contacts">
+								<a-input v-model:value="formData.contacts" placeholder="请输入联系人"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="联系电话" v-bind="validateInfos.phone" id="CuspIntermediatorForm-phone" name="phone">
+								<a-input v-model:value="formData.phone" placeholder="请输入联系电话"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="办公地址" v-bind="validateInfos.address" id="CuspIntermediatorForm-address" name="address">
+								<a-input v-model:value="formData.address" placeholder="请输入办公地址"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="邮箱" v-bind="validateInfos.email" id="CuspIntermediatorForm-email" name="email">
+								<a-input v-model:value="formData.email" placeholder="请输入邮箱"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="国家" v-bind="validateInfos.country" id="CuspIntermediatorForm-country" name="country">
+								<a-input v-model:value="formData.country" placeholder="请输入国家"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+						<a-col :span="12">
+							<a-form-item label="备注" v-bind="validateInfos.notes" id="CuspIntermediatorForm-notes" name="notes">
+								<a-input v-model:value="formData.notes" placeholder="请输入备注"  allow-clear ></a-input>
+							</a-form-item>
+						</a-col>
+          </a-row>
+        </a-form>
+      </template>
+    </JFormContainer>
+  </a-spin>
 </template>
 
-<script lang="ts">
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {computed, defineComponent} from 'vue';
-    import {defHttp} from '/@/utils/http/axios';
-    import { propTypes } from '/@/utils/propTypes';
-    import {getBpmFormSchema} from '../CuspIntermediator.data';
-    import {saveOrUpdate} from '../CuspIntermediator.api';
-    
-    export default defineComponent({
-        name: "CuspIntermediatorForm",
-        components:{
-            BasicForm
-        },
-        props:{
-            formData: propTypes.object.def({}),
-            formBpm: propTypes.bool.def(true),
-        },
-        setup(props){
-            const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
-                labelWidth: 150,
-                schemas: getBpmFormSchema(props.formData),
-                showActionButtonGroup: false,
-                baseColProps: {span: 12}
-            });
+<script lang="ts" setup>
+  import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
+  import { defHttp } from '/@/utils/http/axios';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
+  import { getValueType } from '/@/utils';
+  import { saveOrUpdate } from '../CuspIntermediator.api';
+  import { Form } from 'ant-design-vue';
+  import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
+  const props = defineProps({
+    formDisabled: { type: Boolean, default: false },
+    formData: { type: Object, default: () => ({})},
+    formBpm: { type: Boolean, default: true }
+  });
+  const formRef = ref();
+  const useForm = Form.useForm;
+  const emit = defineEmits(['register', 'ok']);
+  const formData = reactive<Record<string, any>>({
+    id: '',
+    status: undefined,
+    code: '',   
+    name: '',   
+    abbreviation: '',   
+    dutyParagraph: '',   
+    legalPerson: '',   
+    contacts: '',   
+    phone: '',   
+    address: '',   
+    email: '',   
+    country: '',   
+    notes: '',   
+  });
+  const { createMessage } = useMessage();
+  const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
+  const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
+  const confirmLoading = ref<boolean>(false);
+  //表单验证
+  const validatorRules = reactive({
+    name: [{ required: true, message: '请输入名称!'},],
+  });
+  const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
 
-            const formDisabled = computed(()=>{
-                if(props.formData.disabled === false){
-                    return false;
-                }
-                return true;
-            });
+  // 表单禁用
+  const disabled = computed(()=>{
+    if(props.formBpm === true){
+      if(props.formData.disabled === false){
+        return false;
+      }else{
+        return true;
+      }
+    }
+    return props.formDisabled;
+  });
 
-            let formData = {};
-            const queryByIdUrl = '/cuspCode/cuspIntermediator/queryById';
-            async function initFormData(){
-                let params = {id: props.formData.dataId};
-                const data = await defHttp.get({url: queryByIdUrl, params});
-                formData = {...data}
-                //设置表单的值
-                await setFieldsValue(formData);
-                //默认是禁用
-                await setProps({disabled: formDisabled.value})
-            }
+  
+  /**
+   * 新增
+   */
+  function add() {
+    edit({});
+  }
 
-            async function submitForm() {
-                let data = getFieldsValue();
-                let params = Object.assign({}, formData, data);
-                console.log('表单数据', params)
-                await saveOrUpdate(params, true)
-            }
-
-            initFormData();
-            
-            return {
-                registerForm,
-                formDisabled,
-                submitForm,
-            }
+  /**
+   * 编辑
+   */
+  function edit(record) {
+    nextTick(() => {
+      resetFields();
+      const tmpData = {};
+      Object.keys(formData).forEach((key) => {
+        if(record.hasOwnProperty(key)){
+          tmpData[key] = record[key]
         }
+      })
+      //赋值
+      Object.assign(formData, tmpData);
     });
-</script>
+  }
+
+  /**
+   * 提交数据
+   */
+  async function submitForm() {
+    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);
+    }
+    confirmLoading.value = true;
+    const isUpdate = ref<boolean>(false);
+    //时间格式化
+    let model = formData;
+    if (model.id) {
+      isUpdate.value = true;
+    }
+    //循环数据
+    for (let data in model) {
+      //如果该数据是数组并且是字符串类型
+      if (model[data] instanceof Array) {
+        let valueType = getValueType(formRef.value.getProps, data);
+        //如果是字符串类型的需要变成以逗号分割的字符串
+        if (valueType === 'string') {
+          model[data] = model[data].join(',');
+        }
+      }
+    }
+    await saveOrUpdate(model, isUpdate.value)
+      .then((res) => {
+        if (res.success) {
+          createMessage.success(res.message);
+          emit('ok');
+        } else {
+          createMessage.warning(res.message);
+        }
+      })
+      .finally(() => {
+        confirmLoading.value = false;
+      });
+  }
+
+
+  defineExpose({
+    add,
+    edit,
+    submitForm,
+  });
+</script>
+
+<style lang="less" scoped>
+  .antd-modal-form {
+    padding: 14px;
+  }
+</style>

+ 67 - 65
src/views/cuspCode/Intermediator/components/CuspIntermediatorModal.vue

@@ -1,75 +1,77 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="896" @ok="handleSubmit">
-      <BasicForm @register="registerForm" name="CuspIntermediatorForm" />
-  </BasicModal>
+  <j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
+    <CuspIntermediatorForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></CuspIntermediatorForm>
+  </j-modal>
 </template>
 
 <script lang="ts" setup>
-    import {ref, computed, unref} from 'vue';
-    import {BasicModal, useModalInner} from '/@/components/Modal';
-    import {BasicForm, useForm} from '/@/components/Form/index';
-    import {formSchema} from '../CuspIntermediator.data';
-    import {saveOrUpdate} from '../CuspIntermediator.api';
-    // Emits声明
-    const emit = defineEmits(['register','success']);
-    const isUpdate = ref(true);
-    const isDetail = ref(false);
-    //表单配置
-    const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
-        schemas: formSchema,
-        showActionButtonGroup: false,
-        baseColProps: {span: 12}
+  import { ref, nextTick, defineExpose } from 'vue';
+  import CuspIntermediatorForm from './CuspIntermediatorForm.vue'
+  import JModal from '/@/components/Modal/src/JModal/JModal.vue';
+  
+  const title = ref<string>('');
+  const width = ref<number>(800);
+  const visible = ref<boolean>(false);
+  const disableSubmit = ref<boolean>(false);
+  const registerForm = ref();
+  const emit = defineEmits(['register', 'success']);
+
+  /**
+   * 新增
+   */
+  function add() {
+    title.value = '新增';
+    visible.value = true;
+    nextTick(() => {
+      registerForm.value.add();
     });
-    //表单赋值
-    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
-        //重置表单
-        await resetFields();
-        setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
-        isUpdate.value = !!data?.isUpdate;
-        isDetail.value = !!data?.showFooter;
-        if (unref(isUpdate)) {
-            //表单赋值
-            await setFieldsValue({
-                ...data.record,
-            });
-        }
-        // 隐藏底部时禁用整个表单
-       setProps({ disabled: !data?.showFooter })
+  }
+  
+  /**
+   * 编辑
+   * @param record
+   */
+  function edit(record) {
+    title.value = disableSubmit.value ? '详情' : '编辑';
+    visible.value = true;
+    nextTick(() => {
+      registerForm.value.edit(record);
     });
-    //设置标题
-    const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
-    //表单提交事件
-    async function handleSubmit(v) {
-        try {
-            let values = await validate();
-            setModalProps({confirmLoading: true});
-            //提交表单
-            await saveOrUpdate(values, isUpdate.value);
-            //关闭弹窗
-            closeModal();
-            //刷新列表
-            emit('success');
-        } catch ({ errorFields }) {
-           if (errorFields) {
-             const firstField = errorFields[0];
-             if (firstField) {
-               scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
-             }
-           }
-           return Promise.reject(errorFields);
-        } finally {
-            setModalProps({confirmLoading: false});
-        }
-    }
-</script>
+  }
+  
+  /**
+   * 确定按钮点击事件
+   */
+  function handleOk() {
+    registerForm.value.submitForm();
+  }
 
-<style lang="less" scoped>
-	/** 时间和数字输入框样式 */
-  :deep(.ant-input-number) {
-    width: 100%;
+  /**
+   * form保存回调事件
+   */
+  function submitCallback() {
+    handleCancel();
+    emit('success');
   }
 
-  :deep(.ant-calendar-picker) {
-    width: 100%;
+  /**
+   * 取消按钮回调事件
+   */
+  function handleCancel() {
+    visible.value = false;
+  }
+
+  defineExpose({
+    add,
+    edit,
+    disableSubmit,
+  });
+</script>
+
+<style lang="less">
+  /**隐藏样式-modal确定按钮 */
+  .jee-hidden {
+    display: none !important;
   }
-</style>
+</style>
+<style lang="less" scoped></style>