Browse Source

流程配置修改

tengmingxue 2 years ago
parent
commit
5e0e96de9f

+ 91 - 22
src/views/dataAdmin/dataAdmin/configProcess/AddProcess.vue

@@ -13,10 +13,11 @@
         ref="formRef"
         :model="formState"
         :rules="rules"
-        :label-col="labelCol"
-        :wrapper-col="wrapperCol"
+        :label-col="{ span: 2 }"
+        :wrapper-col="{ span: 4 }"
+        style="height: 100%"
       >
-        <div class="info-item">
+        <div class="info-item info-item-basic">
           <div class="title">基本信息</div>
           <div class="form-continer">
             <a-form-item label="业务类型" name="type">
@@ -28,9 +29,27 @@
             </a-form-item>
           </div>
         </div>
-        <div class="info-item">
+        <div class="info-item info-item-steps">
           <div class="title">步骤配置</div>
-          <div class="form-continer"></div>
+          <div class="form-continer">
+            <div class="left-continer">
+              <a-table
+                v-if="dataSource.length > 0"
+                bordered
+                :data-source="dataSource"
+                :columns="pColumns"
+                :pagination="false"
+                style="height: 100%"
+              >
+                <template #operation="{ record }">
+                  <a style="color: #2d74e7" @click="editStep(record)">编辑</a>
+                </template>
+              </a-table>
+            </div>
+            <div class="right-continer">
+              <add-step-form :currStep="currStep" @editStep="updateStep"></add-step-form>
+            </div>
+          </div>
         </div>
       </a-form>
     </div>
@@ -38,13 +57,26 @@
 </template>
 <script lang="ts">
 import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
-import { defineComponent, ref, computed, unref, reactive, onMounted, watch, UnwrapRef, toRaw } from 'vue';
+import {
+  defineComponent,
+  ref,
+  computed,
+  unref,
+  reactive,
+  onMounted,
+  watch,
+  UnwrapRef,
+  toRaw,
+  nextTick,
+} from 'vue';
 import { BasicModal, useModalInner } from '/@/components/Modal';
 import { BasicForm, useForm } from '/@/components/Form/index';
-import { busType, accountFormSchema, accountFormSchema2 } from './configData';
-import { Upload } from 'ant-design-vue';
+import { accountFormSchema, accountFormSchema2, busType, stepColumns } from './configData';
 import { useMessage } from '/@/hooks/web/useMessage';
+import { cloneDeep } from 'lodash-es';
 import { addFileResource } from '../../api/fileUploadApi';
+import AddStepForm from './addStepForm.vue';
+
 interface FormState {
   type: string;
   steps: Object[];
@@ -54,7 +86,7 @@ export default defineComponent({
   components: {
     BasicModal,
     BasicForm,
-    Upload,
+    AddStepForm,
   },
   emits: ['success', 'register'],
   setup(_, { emit }) {
@@ -72,6 +104,9 @@ export default defineComponent({
       steps: [{ required: true, message: '请配置审核步骤', trigger: 'change', type: 'array' }],
     };
     const dicBusiness = busType;
+    const pColumns = stepColumns;
+    let currStep = ref({ xh: 1, name: '', code: '' });
+    const dataSource = [{ xh: 1, name: '', code: 'update' }];
     onMounted(async () => {});
     const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
       labelWidth: 100,
@@ -136,14 +171,21 @@ export default defineComponent({
       return formData;
     }
 
-    // 菜单点击事件
-    const menuClick = (value) => {
-      console.log('canshu1111' + JSON.stringify(value));
-      if (value.key == 'mail1') {
-        show1.value = true;
-      } else {
-        show1.value = false;
-      }
+    /**
+     * 编辑步骤
+     */
+    const editStep = (row) => {
+      console.log('编辑步骤', row);
+      currStep = row;
+    };
+
+    const updateStep = (row) => {
+      nextTick(() => {
+        dataSource.forEach((item) => {
+          if (item.xh === row.xh) item.name = row.name;
+        });
+        console.log('数据改变了', dataSource);
+      });
     };
 
     const onSubmit = () => {
@@ -165,27 +207,31 @@ export default defineComponent({
       formState,
       rules,
       dicBusiness,
-      labelCol: { span: 2 },
-      wrapperCol: { span: 4 },
+      pColumns,
+      currStep,
+      dataSource,
       registerModal,
       registerForm,
       handleSubmit,
       getTitle,
-      menuClick,
       show1,
       onSubmit,
       resetForm,
+      editStep,
+      updateStep,
     };
   },
 });
 </script>
 <style scoped lang="less">
 .process-cofig {
-  height: 50vh;
+  position: absolute;
+  height: calc(100% - 14px);
+  width: calc(100% - 30px);
   padding: 0 20px;
+
   .info-item {
     width: 100%;
-    height: auto;
     margin-bottom: 20px;
     .title {
       padding-left: 10px;
@@ -200,7 +246,30 @@ export default defineComponent({
     }
     .form-continer {
       padding-top: 20px;
+      height: calc(100% - 36px);
+      .left-continer {
+        float: left;
+        height: 100%;
+        width: 440px;
+        padding: 20px;
+        background: #ffffff;
+        box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.1), inset 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
+      }
+      .right-continer {
+        float: right;
+        padding: 20px;
+        height: 100%;
+        width: calc(100% - 440px);
+        background: #ffffff;
+        box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.1), inset 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
+      }
     }
   }
+  .info-item-basic {
+    height: 68px;
+  }
+  .info-item-steps {
+    height: calc(100% - 88px);
+  }
 }
 </style>

+ 223 - 0
src/views/dataAdmin/dataAdmin/configProcess/addStepForm.vue

@@ -0,0 +1,223 @@
+<!--
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-29 16:44:32
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-29 22:21:07
+ * @FilePath: \xld-gis-admin\src\views\dataAdmin\dataAdmin\configProcess\addStepForm.vue
+ * @Description: 流程步骤配置表单
+-->
+<template>
+  <a-form
+    ref="formRef"
+    :model="formState"
+    :rules="formState.xh === 1 ? rules1 : rules"
+    style="height: 100%"
+    class="step-form"
+  >
+    <a-form-item
+      ref="xh"
+      label="步骤序号"
+      name="xh"
+      :labelCol="{ span: 4 }"
+      :wrapper-col="{ span: 18 }"
+    >
+      <a-input-number
+        :min="1"
+        :max="10"
+        v-model:value="formState.xh"
+        :disabled="true"
+        style="width: 50px; float: left"
+      />
+      <div class="btn-group">
+        <span class="addBtn btn" @click="stepEdit(1)">+</span>
+        <span class="redBtn btn" @click="stepEdit(-1)">-</span>
+      </div>
+    </a-form-item>
+    <a-form-item
+      ref="name"
+      label="步骤名称"
+      name="name"
+      :labelCol="{ span: 4 }"
+      :wrapper-col="{ span: 12 }"
+    >
+      <a-input v-model:value="formState.name" />
+    </a-form-item>
+    <a-form-item
+      v-if="formState.xh !== 1"
+      ref="model"
+      label="处理模式"
+      name="model"
+      :labelCol="{ span: 4 }"
+      :wrapper-col="{ span: 12 }"
+    >
+      <a-radio-group v-model:value="formState.model">
+        <a-radio value="1">逐级</a-radio>
+        <a-radio value="2">并行</a-radio>
+      </a-radio-group>
+    </a-form-item>
+    <a-form-item
+      v-if="formState.xh !== 1"
+      ref="dept"
+      label="处理部门"
+      name="dept"
+      :labelCol="{ span: 4 }"
+      :wrapper-col="{ span: 12 }"
+    >
+      <a-select
+        v-model:value="formState.dept"
+        placeholder="请选择处理部门"
+        mode="multiple"
+        style="width: 100%"
+      >
+        <a-select-option value="1">部门1</a-select-option>
+        <a-select-option value="2">部门2</a-select-option>
+      </a-select>
+    </a-form-item>
+    <a-form-item
+      v-if="formState.xh !== 1"
+      ref="user"
+      label="处理人员"
+      name="user"
+      :labelCol="{ span: 4 }"
+      :wrapper-col="{ span: 12 }"
+    >
+      <a-select
+        v-model:value="formState.user"
+        placeholder="请选择处理人员"
+        mode="multiple"
+        style="width: 100%"
+      >
+        <a-select-option value="1">人员1</a-select-option>
+        <a-select-option value="2">人员2</a-select-option>
+      </a-select>
+    </a-form-item>
+  </a-form>
+</template>
+<script lang="ts">
+import {
+  defineComponent,
+  ref,
+  computed,
+  unref,
+  reactive,
+  onMounted,
+  watch,
+  UnwrapRef,
+  toRaw,
+  nextTick,
+} from 'vue';
+import { DeleteOutlined } from '@ant-design/icons-vue';
+import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
+const props = {
+  currStep: { type: Object, require: true },
+};
+interface FormState {
+  xh: number;
+  name: string;
+  model: string;
+  dept: string[];
+  user: string[];
+}
+export default defineComponent({
+  name: 'AddStepForm',
+  components: { DeleteOutlined },
+  props,
+  setup(props, { emit }) {
+    let currStep = ref(props.currStep);
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive({
+      xh: 1,
+      name: '',
+      model: '1',
+      dept: [],
+      user: [],
+    });
+    const rules = {
+      name: [{ required: true, message: '请填写步骤名称', trigger: 'blur' }],
+      model: [{ required: true, message: '请选择处理模式', trigger: 'change' }],
+      dept: [{ required: true, message: '请选择处理部门', trigger: 'change' }],
+      user: [{ required: true, message: '请选择处理人员', trigger: 'change' }],
+    };
+    const rules1 = {
+      name: [{ required: true, message: '请填写步骤名称', trigger: 'blur' }],
+    };
+
+    watch(
+      () => props.currStep,
+      (obj) => {
+        currStep = obj;
+      }
+    );
+
+    watch(
+      () => formState.name,
+      (nVal) => {
+        //名字改变回显
+        emit('editStep', formState);
+      }
+    );
+    const stepEdit = (flag) => {
+      console.log('编辑步骤', flag);
+      if (flag === 1) {
+        formRef.value
+          .validate()
+          .then(() => {
+            console.log('values', formState, toRaw(formState));
+            //校验通过
+            formState.xh = formState.xh + 1;
+            formState.name = '';
+            formState.model = '1';
+            formState.dept = [];
+            formState.user = [];
+          })
+          .catch((error: ValidateErrorEntity<FormState>) => {
+            console.log('校验失败', error);
+          });
+      }
+    };
+    onMounted(async () => {});
+
+    return {
+      formRef,
+      formState,
+      rules,
+      rules1,
+      stepEdit,
+      currStep,
+    };
+  },
+});
+</script>
+<style scoped lang="less">
+.step-form {
+  .btn-group {
+    float: left;
+    height: 30px;
+    width: 80px;
+    display: flex;
+    align-items: center;
+    .btn {
+      float: left;
+      height: 20px;
+      line-height: 15px;
+      width: 20px;
+      margin-left: 10px;
+      color: #fff;
+      font-size: 20px;
+      font-weight: bold;
+      display: flex;
+      justify-content: center;
+      border-radius: 50%;
+      text-align: center;
+      cursor: pointer;
+    }
+    .addBtn {
+      background: #0671dd;
+    }
+    .redBtn {
+      background: #f84242;
+    }
+  }
+}
+</style>
+    

+ 29 - 2
src/views/dataAdmin/dataAdmin/configProcess/configData.js

@@ -2,7 +2,7 @@
  * @Author: tengmingxue 1473375109@qq.com
  * @Date: 2023-08-28 21:12:52
  * @LastEditors: tengmingxue 1473375109@qq.com
- * @LastEditTime: 2023-08-28 23:04:01
+ * @LastEditTime: 2023-08-29 22:24:09
  * @FilePath: \xld-gis-admin\src\views\dataAdmin\dataAdmin\configProcess\configData.js
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -61,7 +61,9 @@ export const accountFormSchema = []
 // 新增表单配置
 export const accountFormSchema2 = []
 
-
+/**
+ * 业务类型
+*/
 export const busType = [
   { value: '0', label: '地图资源上传' },
   { value: '1', label: '场景资源上传' },
@@ -72,3 +74,28 @@ export const busType = [
   { value: '6', label: '组件资源上传' },
   { value: '7', label: '组件资源申请' },
 ]
+
+/**
+ * 流程步骤字段
+*/
+export const stepColumns = [
+  {
+    title: '步骤序号',
+    dataIndex: 'xh',
+    width: '24%',
+    align:'center',
+  },
+  {
+    title: '步骤名称',
+    dataIndex: 'name',
+    width: '56%',
+    align:'center',
+  },
+  {
+    title: '操作',
+    dataIndex: 'operation',
+    width: '20%',
+    align:'center',
+    slots: { customRender: 'operation' },
+  },
+];

+ 7 - 8
src/views/dataAdmin/dataAdmin/configProcess/index.vue

@@ -5,7 +5,7 @@
     <BasicTable
       :rowSelection="{ type: 'checkbox' }"
       @register="registerTable"
-      :clickToRowSelect="false"
+      :clickToRowSelect="true"
     >
       <!-- 表格右上角按钮 -->
       <template #toolbar>
@@ -134,14 +134,13 @@ export default defineComponent({
       useBatchDelete(delFileResource, handleSuccess, setProps);
     //
     selectionOptions.rowSelection.getCheckboxProps = (record) => {
-      // Demo:status为1的选择框禁用
-      if (record.status === 1) {
-        return { disabled: true };
-      } else {
-        return { disabled: false };
-      }
+      // Demo:status为1的选择框禁用 控制选择框勾选状态
+      // if (record.status === 1) {
+      //   return { disabled: true };
+      // } else {
+      //   return { disabled: false };
+      // }
     };
-    //
     nextTick(() => {
       setProps(selectionOptions);
     });

+ 106 - 0
src/views/dataAdmin/dataView/MapSourceModal.vue

@@ -0,0 +1,106 @@
+<!--
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-15 16:19:10
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-17 14:28:44
+ * @FilePath: \xld-gis-admin\src\views\resource\map\MapSourceModal.vue
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+-->
+<template>
+  <BasicModal
+    width="1200px"
+    v-bind="$attrs"
+    @register="registerModal"
+    :title="getTitle"
+    @ok="handleSubmit"
+  >
+    <div style="height: 60vh" class="res-form-container">
+      <a-tabs v-model:activeKey="activeKey" class="res-a-tabs">
+        <a-tab-pane key="1" tab="地图资源信息">
+          <!-- <BasicForm @register="registerForm"></BasicForm> -->
+          <source-detail ref="refSourceDetail" @RtnMain="RtnMain" :formData="formData" :isUpdate="isUpdate"></source-detail>
+        </a-tab-pane>
+        <a-tab-pane key="2" tab="流程信息" force-render>
+          <div class="tab2"></div>
+        </a-tab-pane>
+      </a-tabs>
+    </div>
+  </BasicModal>
+</template>
+  <script lang="ts">
+import { defineComponent, ref, computed, unref, reactive, onMounted } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { formSchema } from './map.data';
+import { BasicTree } from '/@/components/Tree';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import SourceDetail from './SourceDetail.vue';
+
+export default defineComponent({
+  name: 'AccountModal',
+  components: {
+    BasicModal,
+    BasicForm,
+    BasicTree,
+    PlusOutlined,
+    SourceDetail,
+    VNodes: (_, { attrs }) => {
+      return attrs.vnodes;
+    },
+  },
+  emits: ['success', 'register'],
+  setup(_, { emit }) {
+    const data = reactive({
+      activeKey: '2',
+    });
+    const refSourceDetail = ref(null);
+    let formData = ref(null)
+    const isUpdate = ref(true);
+    const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+      setModalProps({ confirmLoading: false });
+      isUpdate.value = !!data?.isUpdate;
+      if(isUpdate.value) formData.value = data.record
+    });
+    const getTitle = computed(() => (!unref(isUpdate) ? '新增地图资源' : '编辑地图资源'));
+
+    async function handleSubmit() {
+      refSourceDetail.value.submitForm();
+    }
+    const RtnMain = (status) => {
+      console.log('操作状态',status)
+      emit('success')
+    }
+
+    onMounted(() => {});
+    return {
+      ...ref(data),
+      registerModal,
+      handleSubmit,
+      getTitle,
+      refSourceDetail,
+      isUpdate,
+      formData,
+      RtnMain,
+    };
+  },
+});
+</script>
+  <style scoped lang="less">
+:deep(.vben-basic-tree) {
+  width: 100% !important;
+}
+
+:deep(.is-unflod) {
+  display: none !important;
+}
+
+:deep(.is-flod) {
+  display: none !important;
+}
+:deep(.res-form-container) {
+  .res-a-tabs {
+    margin-top: 61px !important;
+  }
+}
+</style>
+  

+ 610 - 0
src/views/dataAdmin/dataView/SourceDetail.vue

@@ -0,0 +1,610 @@
+<!--
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-15 22:08:21
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-17 15:24:30
+ * @FilePath: \xld-gis-admin\src\views\resource\map\SourceDetail.vue
+ * @Description: 地图资源明细界面
+-->
+<template>
+  <div class="source-detail">
+    <a-form ref="formRef" :model="formState" :rules="rules" style="width: 100%">
+      <div class="compontents">
+        <div class="title">基本信息</div>
+        <a-row class="form-container">
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="code" label="资源编码" name="code" class="label-form-item">
+              <a-input v-model:value="formState.code" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicename"
+              label="资源名称"
+              name="servicename"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.servicename" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicealiasname"
+              label="资源别名"
+              name="servicealiasname"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.servicealiasname" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="keywords" label="资源标签" name="keywords" class="label-form-item">
+              <a-select v-model:value="formState.keywords" mode="multiple">
+                <template v-for="tag in serviceTags" :key="tag.code">
+                  <a-select-option :value="tag.value">{{ tag.label }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="24" class="form-col">
+            <a-form-item
+              ref="description"
+              label="资源描述"
+              name="description"
+              class="label-form-item"
+            >
+              <a-textarea v-model:value="formState.description" :rows="2" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="24" class="form-col">
+            <a-form-item ref="thumbnail" label="缩略图" name="thumbnail" class="label-form-item">
+              <a-upload action="" v-model:file-list="fileList">
+                <a-button style="background-color: #0671dd; color: #fff; border-radius: 4px">
+                  <upload-outlined></upload-outlined>
+                  文件上传
+                </a-button>
+              </a-upload>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </div>
+
+      <div class="compontents">
+        <div class="title">描述信息</div>
+        <a-row class="form-container">
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicetype"
+              label="资源类型"
+              name="servicetype"
+              class="label-form-item"
+            >
+              <a-select v-model:value="formState.servicetype">
+                <template v-for="tag in serviceTypes" :key="tag.id">
+                  <a-select-option :value="tag.id">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="coordinate" label="坐标系" name="coordinate" class="label-form-item">
+              <a-select v-model:value="formState.coordinate">
+                <template v-for="tag in sysCoors" :key="tag.GEOMNAME">
+                  <a-select-option :value="tag.GEOMNAME">{{ tag.GEOMTITLE }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24" class="form-col">
+            <a-form-item ref="mapingurl" label="服务地址" name="mapingurl" class="label-form-item">
+              <a-input v-model:value="formState.mapingurl" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="dataScope" label="数据范围" name="dataScope" class="label-form-item">
+              <a-input v-model:value="formState.dataScope" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="数据来源" name="source" class="label-form-item">
+              <a-input v-model:value="formState.source" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="restype" label="密级" name="secrets" class="label-form-item">
+              <a-select v-model:value="formState.secrets">
+                <template v-for="tag in secrets" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="sourcetable"
+              label="数据表"
+              name="sourcetable"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.formdatabase" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="collect" label="保管单位" name="collect" class="label-form-item">
+              <a-select v-model:value="formState.collect">
+                <template v-for="tag in collectDept" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="respUnit" label="责任处室" name="respUnit" class="label-form-item">
+              <a-select v-model:value="formState.respUnit">
+                <template v-for="tag in respDept" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="发布日期" name="source" class="label-form-item">
+              <!-- <a-input v-model:value="formState.publishtime" disabled /> -->
+              <a-date-picker
+                v-model:value="formState.publishtime"
+                format="YYYY-MM-DD hh:mm:ss"
+                style="width: 100%"
+                disabled
+                show-time
+              >
+                <template #renderExtraFooter>extra footer</template>
+              </a-date-picker>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="发布者" name="source" class="label-form-item">
+              <a-input v-model:value="formState.publisher" disabled />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="updatetype"
+              label="更新方式"
+              name="updatetype"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.updateType" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="updatetime"
+              label="更新时间"
+              name="updatetime"
+              class="label-form-item"
+            >
+              <a-date-picker
+                v-model:value="formState.updatetime"
+                format="YYYY-MM-DD hh:mm:ss"
+                style="width: 100%"
+                disabled
+                show-time
+              >
+                <template #renderExtraFooter>extra footer</template>
+              </a-date-picker>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="epsgcode" label="EPSGCode" name="epsgcode" class="label-form-item">
+              <a-select v-model:value="formState.epsgcode">
+                <template v-for="tag in EPSGCodes" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="runtimestatus"
+              label="运行状态"
+              name="runtimestatus"
+              class="label-form-item"
+            >
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.runtimestatus"
+              />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="public" label="是否公开" name="public" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.public"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="share" label="是否共享" name="share" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.share"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item
+              ref="externalApply"
+              label="是否外部申请"
+              name="externalApply"
+              class="label-form-item"
+            >
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.externalApply"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="searched" label="是否展示" name="searched" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.searched"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </div>
+    </a-form>
+  </div>
+</template>
+<script lang="ts">
+import {
+  defineComponent,
+  ref,
+  toRefs,
+  toRaw,
+  unref,
+  computed,
+  unref,
+  nextTick,
+  reactive,
+  UnwrapRef,
+  onMounted,
+  watch,
+} from 'vue';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { UploadOutlined } from '@ant-design/icons-vue';
+import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
+import { useMessage } from '/@/hooks/web/useMessage';
+const { t } = useI18n(); //加载国际化
+// 加载菜单数据
+import { useI18n } from '/@/hooks/web/useI18n';
+import Moment from 'moment';
+import { insertService } from '/@/api/resource/map';
+import {
+  serviceTypes,
+  serviceTags,
+  secrets,
+  sysCoors,
+  respDept,
+  collectDept,
+  EPSGCodes,
+} from './map.data';
+import { session } from '/@/utils/Memory.js';
+const props = {
+  formData: { type: Object, default: ref(null) },
+  isUpdate: { type: Boolean, default: ref(false) },
+};
+interface FormState {
+  code: string;
+  servicename: string;
+  servicealiasname: string;
+  keywords: string[];
+  description: string;
+  servicetype: string;
+  coordinate: string;
+  mapingurl: string;
+  dataScope: string;
+  source: string;
+  secrets: string;
+  formdatabase: string;
+  collect: string;
+  respUnit: string;
+  publishtime: string;
+  publisher: string;
+  updateType: string;
+  updatetime: string;
+  epsgcode: string;
+  runtimestatus: boolean;
+  public: boolean;
+  share: boolean;
+  searched: boolean;
+  externalApply: boolean;
+  date1: undefined;
+}
+export default defineComponent({
+  name: 'SourceDetail',
+  components: { BasicForm, UploadOutlined },
+  props,
+  setup(props, { emit }) {
+    const data = reactive({
+      detail: props.formData,
+      isUpdate: props.isUpdate,
+      fileList: [],
+      serviceTags: serviceTags,
+      secrets: secrets, //密级
+      sysCoors: sysCoors, //坐标系
+      serviceTypes: serviceTypes, //资源类型
+      respDept: respDept, //责任科室
+      collectDept: collectDept, //保管部门
+      EPSGCodes: EPSGCodes, //EPSGCode
+    });
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive({
+      code: '',
+      servicename: '',
+      servicealiasname: '',
+      keywords: [],
+      description: '',
+      servicetype: '',
+      coordinate: '',
+      mapingurl: '',
+      dataScope: '',
+      source: '',
+      secrets: '',
+      formdatabase: '',
+      collect: '',
+      respUnit: '',
+      publishtime: '',
+      publisher: '',
+      updateType: '',
+      updatetime: '',
+      epsgcode: '',
+      runtimestatus: true,
+      public: true,
+      share: true,
+      searched: true,
+      externalApply: true,
+      date1: undefined,
+    });
+    const moment = Moment;
+    const rules = {
+      servicename: [
+        { required: true, message: '请填写资源名称', trigger: 'blur' },
+        { min: 3, max: 20, message: '长度必须在3到20个字符', trigger: 'blur' },
+      ],
+      servicealiasname: [
+        { required: true, message: '请输入资源别名', trigger: 'blur' },
+        { min: 3, max: 20, message: '长度必须在3到20个字符', trigger: 'blur' },
+      ],
+      systag: [{ required: true, message: '请选择系统标签', trigger: 'change' }],
+      servicetype: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
+      coordinate: [{ required: true, message: '请选择坐标系', trigger: 'change' }],
+      mapingurl: [{ required: true, message: '请输入服务地址', trigger: 'blur' }],
+
+      date1: [{ required: true, message: 'Please pick a date', trigger: 'change', type: 'object' }],
+      type: [
+        {
+          type: 'array',
+          required: true,
+          message: 'Please select at least one activity type',
+          trigger: 'change',
+        },
+      ],
+      resource: [{ required: true, message: 'Please select activity resource', trigger: 'change' }],
+      desc: [{ required: true, message: 'Please input activity form', trigger: 'blur' }],
+    };
+    const { createMessage } = useMessage();
+    watch(
+      () => props.formData,
+      (obj) => {
+        data.detail = obj;
+        if (data.isUpdate) setFormData();
+      }
+    );
+    watch(
+      () => props.isUpdate,
+      (obj) => {
+        data.isUpdate = obj;
+      }
+    );
+    const submitForm = () => {
+      try {
+        formRef.value
+          .validate()
+          .then(async () => {
+            //console.log('values', formState, toRaw(formState));
+            const params = setSubmitForm();
+            if (params) {
+              if (data.isUpdate) {
+              } else {
+                const res = await insertService(params);
+                if (res && res?.status !== '-1') {
+                  createMessage.success('新增地图资源成功!');
+                  resetForm();
+                  emit('RtnMain', true);
+                } else createMessage.error('新增地图资源失败!,失败原因:' + res?.message, 1);
+              }
+            }
+          })
+          .catch((error: ValidateErrorEntity<FormState>) => {
+            createMessage.error('请完成必填信息!', 1);
+            console.log('error', error);
+          });
+      } catch (ex) {
+        console.log(ex);
+      }
+    };
+    const resetForm = () => {
+      formRef.value.resetFields();
+    };
+
+    /**
+     * 设置提交数据
+     */
+    const setSubmitForm = () => {
+      const userinfo = session.getItem('userInfo');
+      const collect = collectDept.find((item) => item.code === formState.collect);
+      const rboffices = respDept.find((item) => item.code === formState.respUnit);
+      const secretlevels = secrets.find((item) => item.code === formState.secrets);
+      const coor = sysCoors.find((item) => item.GEOMNAME === formState.coordinate);
+      const EPSGCode = EPSGCodes.find((item) => item.code === formState.epsgcode);
+      return {
+        type: 'MR',
+        servicebase: {
+          publisher: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          username: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          userid: userinfo?.EMPLOYEE?.EMPLOYEE_ID, //'27AF004A-8BDN-885T-30FU-89DE3388762B',
+          servicealiasname: formState.servicealiasname, //资源别名
+          description: formState.description, //资源描述
+          ispublic: formState.public ? '1' : '0', //是否公开
+          searched: formState.searched ? '1' : '0', //是否展示
+          servicetype: formState.servicetype, //资源类型
+          externalApply: formState.externalApply ? '1' : '0', //外部申请
+          runtimestatus: formState.runtimestatus ? '1' : '0', //运行状态
+          servicename: formState.servicename, //资源名
+          mapingurl: formState.mapingurl, //服务地址
+          otherService: '',
+        },
+        metadata: {
+          mapingurl: formState.mapingurl, //服务地址
+          name: formState.servicename, //资源名
+          servicealiasname: formState.servicealiasname, //资源别名
+          thumbnail: '',
+          description: formState.description,
+          keywords: formState.keywords.toString(),
+          servicetype: formState.servicetype, //资源类型
+          dataScope: formState.dataScope, //数据范围
+          updateType: formState.updateType, //更新方式
+          source: formState.source, //数据来源
+          formdatabase: formState.formdatabase, //数据表
+          rboffice: rboffices ? rboffices.codeName : '', //责任单位
+          keepingunit: collect ? collect.codeName : '', //保管单位
+          secretlevel: secretlevels ? secretlevels.codeName : '',
+          crs: coor ? coor.GEOMNAME : '',
+          epsgCode: EPSGCode ? EPSGCode.codeName : '',
+          workSpace: '',
+          runtimestatus: formState.runtimestatus ? '1' : '0', //运行状态
+          ishistory: '0',
+          shsqlc: 'ggdata',
+          urlInfo: '',
+          otherService: '',
+          bz: '',
+          ispublic: formState.public ? '1' : '0', //是否公开
+          searched: formState.searched ? '1' : '0', //是否展示
+          externalApply: formState.externalApply ? '1' : '0', //外部申请
+          isShow: formState.share ? '1' : '0',
+          publisher: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          username: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          userid: userinfo?.EMPLOYEE?.EMPLOYEE_ID, //'27AF004A-8BDN-885T-30FU-89DE3388762B',
+        },
+        sourcetraces: [],
+        dataVersionConf: {},
+      };
+    };
+    /**
+     * 设置表单数据
+     */
+    const setFormData = () => {
+      console.log('表单数据请看', data.detail);
+      console.log('服务类型', serviceTypes);
+      console.log('服务标签', serviceTags);
+      console.log('密级', secrets);
+      console.log('坐标系', sysCoors);
+      console.log('责任科室', respDept);
+      console.log('保管部门', collectDept);
+      console.log('EPSGCodes', EPSGCodes);
+      formState.public = data.detail.ispublic === '1' ? true : false;
+      formState.servicename = data.detail?.servicename;
+      formState.publishtime = data.detail?.publishdate
+        ? moment(data.detail?.publishdate).format('YYYY-MM-DD HH:mm:ss')
+        : '';
+      formState.publisher = data.detail?.publisher;
+      formState.runtimestatus = data.detail.runtimestatus === 0 ? false : true;
+      formState.servicealiasname = data.detail?.servicealiasname;
+      formState.code = data.detail?.serviceid;
+      formState.servicetype = data.detail?.servicetype;
+      formState.updatetime = data.detail?.updatedate
+        ? moment(data.detail?.updatedate).format('YYYY-MM-DD HH:mm:ss')
+        : '';
+      formState.servicetype = data.detail?.servicetype;
+      formState.coordinate = data.detail?.crs;
+      formState.searched = data.detail.searched === 0 ? false : true;
+    };
+
+    onMounted(() => {
+      resetForm();
+    });
+    return {
+      ...toRefs(data),
+      formRef,
+      moment,
+      rules,
+      formState,
+      submitForm,
+      resetForm,
+      createMessage,
+      setSubmitForm,
+      setFormData,
+    };
+  },
+});
+</script>
+  
+  <style scoped lang="less">
+.source-detail {
+  height: 100%;
+  width: 100%;
+  padding: 0 20px;
+  .compontents {
+    width: 100%;
+    height: auto;
+    .title {
+      height: 19px;
+      line-height: 18px;
+      padding-left: 6px;
+      margin-bottom: 20px;
+      border-left: 3px solid #0671dd;
+      font-family: Source Han Sans CN;
+      font-size: 16px;
+      font-weight: 350;
+      letter-spacing: 0px;
+    }
+    .form-container {
+      width: 100%;
+      height: auto;
+      .form-col {
+        height: 100%;
+      }
+      .form-col-left {
+        padding-right: 20px;
+      }
+    }
+  }
+}
+.label-form-item {
+  :deep(.ant-form-item-label) {
+    width: 90px;
+  }
+  :deep(.ant-form-item-control) {
+    width: calc(100% - 90px);
+  }
+}
+</style>
+  

+ 239 - 0
src/views/dataAdmin/dataView/index.vue

@@ -0,0 +1,239 @@
+<template>
+  <div class="examine-container">
+    <div class="left-container">
+      <template v-for="source in sourceTypes" :key="source.name">
+        <div
+          class="soure-item-row"
+          :class="{ active: current === source.name }"
+          @click="current = source.name"
+        >
+          {{ `${source.name}(${source.num})` }}
+        </div>
+      </template>
+    </div>
+    <div class="right-container">
+      <BasicTable :rowSelection="{ type: 'checkbox' }" rowKey="serviceid" @register="registerTable">
+        <template #action="{ record }">
+          <TableAction
+            :actions="[
+              {
+                label: '浏览',
+                icon: '' /**clarity:note-edit-line*/,
+                onClick: handleEdit.bind(null, record),
+              },
+              {
+                label: '详情',
+                icon: '' /**clarity:note-edit-line*/,
+                onClick: handleEdit.bind(null, record),
+              }
+            ]"
+          />
+        </template>
+        <template #pdate="{ record }">
+          <Tag :color="'red'">
+            {{ record.publishdate ? moment(record.publishdate).format('YYYY-MM-DD HH:mm:ss') : '' }}
+          </Tag>
+        </template>
+        <template #status="{ record }">
+          <Tag :style="`color:${record.status === 3 || record.status === 3 ? 'red' : ''};`">
+            {{
+              record.status === 0
+                ? '待审核'
+                : record.status === 1
+                ? '审核通过'
+                : record.status === 2
+                ? '审核不通过'
+                : record.status === 3
+                ? '被驳回'
+                : '未提交'
+            }}
+          </Tag>
+        </template>
+      </BasicTable>
+      <MapSourceModal @register="registerModal" @success="handleSuccess" />
+    </div>
+  </div>
+</template>
+<script lang="ts">
+import { defineComponent, nextTick, onBeforeMount, reactive, ref, toRef } from 'vue';
+import { BasicTable, useTable, TableAction } from '/@/components/Table';
+import { delRole, getRoleListByPage, setRoleStatus } from '/@/api/system/system';
+// import { useDrawer } from '/@/components/Drawer';
+import { useModal } from '/@/components/Modal';
+import MapSourceModal from './MapSourceModal.vue';
+import { columns, searchFormSchema } from './map.data';
+import { RoleEnum } from '/@/enums/roleEnum';
+import { Authority } from '/@/components/Authority';
+import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
+import { useMessage } from '/@/hooks/web/useMessage';
+import { Switch, Popconfirm } from 'ant-design-vue';
+import { list } from '/@/api/resource/map';
+import Moment from 'moment';
+import { active } from 'sortablejs';
+
+export default defineComponent({
+  name: 'RoleManagement',
+  components: { BasicTable, MapSourceModal, TableAction, Authority, Switch, Popconfirm },
+  setup() {
+    let current = ref('地图资源');
+    //const [registerDrawer, { openDrawer }] = useDrawer();
+    const [registerModal, { openModal }] = useModal();
+    const [registerTable, { getSelectRows, setProps, reload, setSelectedRowKeys }] = useTable({
+      title: '地图资源列表',
+      api: list, //求接口
+      //dataSource: dataSources, //表格的数据
+      columns,
+      rowKey: 'serviceid',
+      formConfig: {
+        labelWidth: 100,
+        schemas: searchFormSchema,
+      },
+      useSearchForm: true,
+      showTableSetting: true,
+      bordered: true,
+      showIndexColumn: true,
+      actionColumn: {
+        width: 200,
+        title: '操作',
+        dataIndex: 'action',
+        slots: { customRender: 'action' },
+        fixed: 'right',
+      },
+      pagination: {
+        hideOnSinglePage: false,
+      },
+      clickToRowSelect: true, //点击当前行多选框不选中,默认是true
+      rowSelection: { type: 'checkbox' }, //是否有多选功能
+    });
+    const moment = Moment;
+
+    const sourceTypes = ref([
+      { name: '地图资源', num: 4 },
+      { name: '场景资源', num: 5 },
+      { name: '文件资源', num: 10 },
+      { name: '组件资源', num: 2 },
+    ]);
+    const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } =
+      useBatchDelete(delRole, handleSuccess, setProps);
+    selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => {
+      // Demo:status为1的选择框禁用
+      if (record.status === 1) {
+        return { disabled: true };
+      } else {
+        return { disabled: false };
+      }
+    };
+    nextTick(() => {
+      setProps(selectionOptions);
+    });
+
+    function handleCreate() {
+      // openDrawer(true, {
+      //   isUpdate: false,
+      // });
+      openModal(true, {
+        isUpdate: false,
+      });
+    }
+
+    function handleEdit(record: Recordable) {
+      // openDrawer(true, {
+      //   record,
+      //   isUpdate: true,
+      // });
+      openModal(true, {
+        record,
+        isUpdate: true,
+      });
+    }
+
+    function handleSuccess() {
+      openModal(false, {
+        isUpdate: false,
+      });
+      reload();
+    }
+
+    const statusChange = async (checked, record) => {
+      setProps({
+        loading: true,
+      });
+      setSelectedRowKeys([]);
+      resetSelectedRowKeys();
+      const newStatus = checked ? 1 : 0;
+      const { createMessage } = useMessage();
+      try {
+        await setRoleStatus(record.id, newStatus);
+        if (newStatus) {
+          createMessage.success(`启用成功`);
+        } else {
+          createMessage.success('禁用成功');
+        }
+      } finally {
+        setProps({
+          loading: false,
+        });
+        reload();
+      }
+    };
+    const batchExamine = () => {
+      console.log('审核数据',getSelectRows())
+    };
+
+    onBeforeMount(async () => {});
+
+    return {
+      current,
+      moment,
+      sourceTypes,
+      registerTable,
+      registerModal,
+      handleCreate,
+      handleEdit,
+      handleSuccess,
+      RoleEnum,
+      hasBatchDelete,
+      handleDeleteOrBatchDelete,
+      statusChange,
+      batchExamine,
+    };
+  },
+});
+</script>
+<style scoped lang="less">
+.examine-container {
+  display: flex;
+  height: 100%;
+  width: 100%;
+  .left-container {
+    width: 240px;
+    height: calc(100% - 32px);
+    margin: 16px 0 16px 10px;
+    padding: 10px 20px;
+    background-color: #fff;
+    border-radius: 2px;
+    .soure-item-row {
+      height: 34px;
+      width: 100%;
+      margin: 20px 0;
+      line-height: 34px;
+      text-align: center;
+      font-size: 14px;
+      font-weight: normal;
+      letter-spacing: 0px;
+      color: #333333;
+      background: #eff0f5;
+      border-radius: 2px;
+    }
+    .active {
+      background: #0671dd;
+      color: #fff;
+    }
+  }
+  .right-container {
+    width: calc(100% - 260px);
+    height: 100%;
+  }
+}
+</style>
+

+ 165 - 0
src/views/dataAdmin/dataView/map.data.ts

@@ -0,0 +1,165 @@
+import { BasicColumn } from '/@/components/Table';
+import { FormSchema } from '/@/components/Table';
+import { RoleEnum } from '/@/enums/roleEnum';
+import { getServiceTypes,queryServiceTags,queryDicsByName,queryCoors } from '/@/api/resource/map';
+
+const resTag = await queryServiceTags()
+let listTag = []
+resTag.map(item => {
+  listTag.push({
+    label: item.name,
+    value: item.code
+  })
+})
+/**
+ * 密级字典
+*/
+export const secrets = await queryDicsByName('密级')
+/**
+ * 服务标签
+*/
+export const serviceTags = listTag;
+/**
+ * 坐标系列表
+*/
+export const sysCoors = await queryCoors()
+/**
+ * 服务类型
+*/
+export const serviceTypes = await getServiceTypes()
+/**
+ * 责任处室
+*/
+export const respDept = await queryDicsByName('责任处室')
+/**
+ * 保管单位
+*/
+export const collectDept = await queryDicsByName('保管单位')
+/**
+ * EPSG code
+*/
+export const EPSGCodes = await queryDicsByName('EPSG code')
+
+
+const checkStatus = [
+  { label: '未提交', value: 1 },
+  { label: '审核中', value: 2 },
+  { label: '审核不通过', value: 3 },
+  { label: '被驳回', value: 4 },
+  { label: '审核通过', value: 5 },
+]
+export enum KeysTypeEnum {
+  DISABLED = 'disabled',
+  ENABLED = 'enabled',
+}
+
+export const RoleMenuDictEnum: Recordable<{ key: string; keyType: KeysTypeEnum }> = {
+  [RoleEnum.PLATFORM_ADMIN]: { key: 'enabled_platform_admin_auth', keyType: KeysTypeEnum.ENABLED },
+  [RoleEnum.SYS_ADMIN]: { key: 'enabled_sysadmin_auth', keyType: KeysTypeEnum.ENABLED },
+  [RoleEnum.TENANT_ADMIN]: { key: 'disabled_tenant_auth', keyType: KeysTypeEnum.DISABLED },
+  [RoleEnum.CUSTOMER_USER]: { key: 'disabled_tenant_auth', keyType: KeysTypeEnum.DISABLED },
+};
+
+/**
+ * 查询条件
+*/
+export const searchFormSchema: FormSchema[] = [
+  {
+    field: 'keywork',
+    label: '关键字',
+    component: 'Input',
+    colProps: { span: 5 },
+    componentProps: {
+      maxLength: 255,
+    },
+  },
+  {
+    field: 'checkStatus',
+    label: '审核状态',
+    component: 'Select',
+    componentProps: {
+      options: checkStatus,
+    },
+    colProps: { span: 5 },
+  },
+];
+
+
+/**
+ * 列表显示信息
+*/
+export const columns: BasicColumn[] = [
+  {
+    title: '资源类型',
+    dataIndex: 'servicetype',
+    width: 120,
+  },
+  {
+    title: '资源名称',
+    dataIndex: 'servicename',
+    width: 160,
+  },
+  {
+    title: '发布时间',
+    dataIndex: 'publishdate',
+    width: 180,
+    slots: { customRender: 'pdate' },
+  },
+  {
+    title: '发布人',
+    dataIndex: 'publisher',
+    width: 100,
+  },
+  
+  {
+    title: '当前环节',
+    dataIndex: 'curLink',
+    width: 90,
+  },
+  {
+    title: '当前处理人',
+    dataIndex: 'curHandler',
+    width: 100,
+  },
+  {
+    title: '审核状态',
+    dataIndex: 'status',
+    width: 110,
+    slots: { customRender: 'status' },
+  },
+  {
+    title: '审核时间',
+    dataIndex: 'checkTime',
+    width: 180,
+  },
+  {
+    title: '审核意见',
+    dataIndex: 'examine',
+    width: 180,
+  },
+];
+
+/**
+ * 表单
+*/
+export const formSchema: FormSchema[] = [
+  {
+    field: 'groupName',
+    label: '角色名称',
+    required: true,
+    component: 'Input',
+    componentProps: {
+      maxLength: 255,
+      placeholder: '请输入角色名称',
+    },
+  },
+  {
+    label: '排序',
+    field: 'sort',
+    component: 'Input',
+    componentProps: {
+      maxLength: 255,
+      placeholder: '请输入排序',
+    },
+  }
+];