Эх сурвалжийг харах

Merge branch 'develop' of https://code.dashoo.cn/chengjian/opms_frontend into develop

wanglj 2 жил өмнө
parent
commit
e6f93f5e23

+ 4 - 0
src/api/contract/index.js

@@ -36,4 +36,8 @@ export default {
   getDynamicsList(query) {
     return micro_request.postRequest(basePath, 'CtrContract', 'DynamicsList', query)
   },
+  // 提交审核
+  commit(query) {
+    return micro_request.postRequest(basePath, 'CtrContract', 'Commit', query)
+  },
 }

+ 35 - 0
src/api/system/report.js

@@ -0,0 +1,35 @@
+/*
+ * @Author: niezch@dashoo.cn
+ * @Date: 2023-02-16 16:21:14
+ * @LastEditors: niezch@dashoo.cn
+ * @LastEditTime: 2023-02-17 14:50:54
+ * @Description: file content
+ * @FilePath: \opms_frontend\src\api\system\report.js
+ */
+import micro_request from '@/utils/micro_request'
+
+const basePath = process.env.VUE_APP_ParentPath
+export default {
+  // 获取列表
+  getList(query) {
+    return micro_request.postRequest(basePath, 'Report', 'GetList', query)
+  },
+  getEntityById(query) {
+    return micro_request.postRequest(basePath, 'Report', 'GetEntityById', query)
+  },
+  doAdd(query) {
+    return micro_request.postRequest(basePath, 'Report', 'Create', query)
+  },
+  doEdit(query) {
+    return micro_request.postRequest(basePath, 'Report', 'UpdateById', query)
+  },
+  doDelete(query) {
+    return micro_request.postRequest(basePath, 'Report', 'DeleteByIds', query)
+  },
+  getRoleReportId(query) {
+    return micro_request.postRequest(basePath, 'RoleReport', 'GetList', query)
+  },
+  addRoleReport(query) {
+    return micro_request.postRequest(basePath, 'RoleReport', 'Add', query)
+  },
+}

+ 163 - 0
src/views/contract/components/ApplyContract.vue

@@ -0,0 +1,163 @@
+<!--
+ * @Author: wanglj 471442253@qq.com
+ * @Date: 2022-12-26 14:34:34
+ * @LastEditors: wanglj
+ * @LastEditTime: 2023-01-13 09:41:38
+ * @Description: file content
+ * @FilePath: \opms_frontend\src\views\customer\components\allocate.vue
+-->
+<template>
+  <el-dialog title="提交审核" :visible.sync="visible" width="50%" @close="handleClose">
+    <el-form ref="form" label-width="150px" :model="form" :rules="rules">
+      <el-form-item label="合同模板" prop="contractModel">
+        <el-radio-group v-model="form.contractModel">
+          <el-radio label="大数模板" />
+          <el-radio label="客户模板" />
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="条款情况" prop="terms">
+        <el-radio-group v-model="form.terms">
+          <el-radio label="接纳全部条款" />
+          <el-radio label="不接纳全部条款" />
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="付款条件" prop="payTerms">
+        <el-input
+          v-model="form.payTerms"
+          maxlength="500"
+          placeholder="请输入付款条件"
+          resize="none"
+          :rows="5"
+          show-word-limit
+          type="textarea" />
+      </el-form-item>
+      <el-form-item label="文件" prop="file">
+        <el-upload
+          ref="uploadRef"
+          action="#"
+          :auto-upload="false"
+          :file-list="fileList"
+          :limit="1"
+          :on-change="
+            (file) => {
+              return setFile(file)
+            }
+          ">
+          <el-button size="mini" type="primary">点击上传</el-button>
+        </el-upload>
+      </el-form-item>
+    </el-form>
+    <span slot="footer">
+      <el-button :loading="loading" size="mini" type="primary" @click="handleSubmit">确定</el-button>
+      <el-button size="mini" @click="visible = false">取消</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+  import axios from 'axios'
+  import { getToken } from '@/utils/token'
+  import to from 'await-to-js'
+  export default {
+    components: {},
+    data() {
+      return {
+        visible: false,
+        loading: false,
+        fileList: [],
+        fileSettings: {
+          // 文件配置信息
+          fileSize: 52428800,
+          fileTypes: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          pictureSize: 52428800,
+          pictureTypes: '.jpg,.jpeg,.gif,.png,.jfif,.txt',
+          types: '.doc,.docx,.zip,.xls,.xlsx,.rar,.jpg,.jpeg,.gif,.png,.jfif,.mp4,.txt',
+          videoSize: 104857600,
+          videoType: '.mp4',
+        },
+        form: {
+          id: 0,
+          contractModel: '',
+          terms: '',
+          payTerms: '',
+          file: null,
+        },
+        rules: {
+          contractModel: [{ required: true, trigger: 'blur', message: '请选择合同模板' }],
+          terms: [{ required: true, trigger: 'blur', message: '请选择条款情况' }],
+          payTerms: [{ required: true, trigger: 'blur', message: '请选择付款条件' }],
+        },
+      }
+    },
+    methods: {
+      handleClose() {
+        this.fileList = []
+        this.loading = false
+        this.form = {
+          id: 0,
+          contractModel: '',
+          terms: '',
+          payTerms: '',
+          file: null,
+        }
+      },
+      // 上传图片
+      setFile(file) {
+        this.form.file = file.raw
+        return true
+      },
+      async handleSubmit() {
+        const [valid] = await to(this.$refs.form.validate())
+        if (valid == false) return
+        if (this.form.file == null) return this.$message.warning('附件不能为空')
+        // const [err, res] = await to(contractApi.ss(this.form))
+        // if (err) return
+
+        let formData = new FormData()
+        formData.append('file', this.form.file)
+        formData.append('contractId', this.form.id)
+        formData.append('contractModel', this.form.contractModel)
+        formData.append('terms', this.form.terms)
+        formData.append('payTerms', this.form.payTerms)
+        this.loading = true
+        axios({
+          method: 'post',
+          url: process.env.VUE_APP_MicroSrvProxy_API + process.env.VUE_APP_ParentPath,
+          // url: 'http://192.168.0.51:9981/dashoo.dev.opms.parent-0.0.1',
+          data: formData,
+          headers: {
+            Authorization: 'Bearer ' + getToken(),
+            'X-RPCX-SerializeType': '1',
+            'X-RPCX-ServicePath': 'CtrContractHandler',
+            'X-RPCX-ServiceMethod': 'CommitWithFile',
+            'content-type': 'multipart/form-data',
+            tenant: process.env.VUE_APP_TENANT,
+          },
+        })
+          .then((res) => {
+            this.loading = false
+            console.log(res)
+            if (res.data.code != 0) {
+              this.$message({
+                type: 'error',
+                message: res.data.msg,
+              })
+            } else {
+              this.visible = false
+              this.$emit('refresh')
+            }
+          })
+          .catch((err) => {
+            this.loading = false
+            console.error(err)
+            this.$message({
+              type: 'warning',
+              message: '系统异常',
+            })
+          })
+      },
+    },
+  }
+</script>
+
+<style></style>

+ 29 - 14
src/views/contract/index.vue

@@ -32,7 +32,7 @@
           </el-form-item>
           <el-form-item prop="custId">
             <el-select v-model="queryForm.approStatus" clearable placeholder="审批状态">
-              <el-option v-for="item in approStatusOption" :key="item.id" :label="item.label" :value="item.id" />
+              <el-option v-for="(v, k) in approStatusOption" :key="k" :label="v" :value="k" />
             </el-select>
           </el-form-item>
           <el-form-item>
@@ -67,6 +67,9 @@
           <span v-else-if="item.prop === 'contractAmount'">
             {{ formatPrice(row.contractAmount) }}
           </span>
+          <span v-else-if="item.prop === 'approStatus'">
+            {{ approStatusOption[row.approStatus] }}
+          </span>
           <span v-else-if="item.label === '合同有效时间'">
             {{ parseTime(row.contractStartTime, '{y}-{m}-{d}') }}~{{ parseTime(row.contractEndTime, '{y}-{m}-{d}') }}
           </span>
@@ -113,7 +116,10 @@
       </el-table-column>
       <el-table-column align="center" fixed="right" label="操作" width="90px">
         <template slot-scope="scope">
-          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button v-if="scope.row.approStatus == '10'" type="text" @click="handleApply(scope.row.id)">
+            提交审核
+          </el-button>
+          <el-button v-if="scope.row.approStatus == '10'" type="text" @click="handleEdit(scope.row)">编辑</el-button>
           <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
@@ -130,6 +136,7 @@
     <Edit ref="edit" @contractSave="contractSave" />
     <!-- 转移合同 -->
     <Transfer ref="transfer" :contract-id="contractId" @transferSave="contractSave" />
+    <ApplyContract ref="applyContract" @refresh="queryData" />
   </div>
 </template>
 
@@ -139,21 +146,25 @@
   import Edit from './components/Edit'
   import TableTool from '@/components/table/TableTool'
   import Transfer from './components/Transfer'
+  import ApplyContract from './components/ApplyContract'
   export default {
     name: 'OpenSea',
     components: {
       Edit,
       TableTool,
       Transfer,
+      ApplyContract,
     },
     data() {
       return {
         height: this.$baseTableHeight(2),
-        approStatusOption: [
-          { id: 1, label: '审批中' },
-          { id: 2, label: '已拒绝' },
-          { id: 3, label: '已通过' },
-        ],
+        approStatusOption: {
+          10: '待提交审核',
+          20: '待审核',
+          30: '审核已同意',
+          40: '审核已拒绝',
+          50: '审核已撤销',
+        },
         contractId: [], //当前合同id
         listLoading: false,
         layout: 'total, sizes, prev, pager, next, jumper',
@@ -189,13 +200,6 @@
             sortable: false,
             disableCheck: false,
           },
-          // {
-          //   label: '审批状态',
-          //   width: '100px',
-          //   prop: 'approStatus',
-          //   sortable: false,
-          //   disableCheck: false,
-          // },
           {
             label: '所在省',
             width: '100px',
@@ -266,6 +270,13 @@
             sortable: false,
             disableCheck: false,
           },
+          {
+            label: '审批状态',
+            width: '100px',
+            prop: 'approStatus',
+            sortable: false,
+            disableCheck: false,
+          },
         ],
       }
     },
@@ -298,6 +309,10 @@
         this.total = res.data.total
         this.listLoading = false
       },
+      handleApply(id) {
+        this.$refs.applyContract.form.id = id
+        this.$refs.applyContract.visible = true
+      },
       reset() {
         this.queryForm = {
           pageNum: 1,

+ 21 - 3
src/views/customer/components/Edit.vue

@@ -42,12 +42,22 @@
           <el-form-item label="所在地区" required>
             <el-row :gutter="4" style="width: 100%; padding-top: 32px">
               <el-col :span="8">
-                <el-select v-model="editForm.province" placeholder="省" value-key="id" @change="provinceChange">
+                <el-select
+                  v-model="editForm.province"
+                  :disabled="areaEditDisable"
+                  placeholder="省"
+                  value-key="id"
+                  @change="provinceChange">
                   <el-option v-for="item in provinceOptions" :key="item.id" :label="item.distName" :value="item" />
                 </el-select>
               </el-col>
               <el-col :span="8">
-                <el-select v-model="editForm.city" placeholder="市" value-key="id" @change="cityChange">
+                <el-select
+                  v-model="editForm.city"
+                  :disabled="areaEditDisable"
+                  placeholder="市"
+                  value-key="id"
+                  @change="cityChange">
                   <el-option
                     v-for="item in editForm.province ? editForm.province.children : []"
                     :key="item.id"
@@ -56,7 +66,12 @@
                 </el-select>
               </el-col>
               <el-col :span="8">
-                <el-select v-model="editForm.region" placeholder="区" value-key="id" @change="$forceUpdate()">
+                <el-select
+                  v-model="editForm.region"
+                  :disabled="areaEditDisable"
+                  placeholder="区"
+                  value-key="id"
+                  @change="$forceUpdate()">
                   <el-option
                     v-for="item in editForm.city ? editForm.city.children : []"
                     :key="item.id"
@@ -130,6 +145,7 @@
         title: '新增客户信息',
         // 新增编辑客户弹窗
         editVisible: false,
+        areaEditDisable: false,
         editForm: {
           custName: '', // 客户名称
           abbrName: '', // 助记名
@@ -165,9 +181,11 @@
         if (!ids) {
           this.title = '新增客户信息'
           this.editVisible = true
+          this.areaEditDisable = false
           return
         }
         this.title = '编辑客户'
+        this.areaEditDisable = true
         const [err, res] = await to(api.getDetail({ ids }))
         if (err) return
         if (res.data.list[0]) this.editForm = res.data.list[0]

+ 114 - 0
src/views/system/report/components/ReportEdit.vue

@@ -0,0 +1,114 @@
+<!--
+ * @Author: niezch@dashoo.cn
+ * @Date: 2023-02-16 15:55:15
+ * @LastEditors: niezch@dashoo.cn
+ * @LastEditTime: 2023-02-17 15:53:42
+ * @Description: file content
+ * @FilePath: \opms_frontend\src\views\system\report\components\ReportEdit.vue
+-->
+<template>
+  <el-dialog :title="title" :visible.sync="dialogFormVisible" width="500px" @close="close">
+    <el-form ref="form" label-width="80px" :model="form" :rules="rules">
+      <el-form-item label="报表名称" prop="reportName">
+        <el-input v-model="form.reportName" placeholder="请输入报表名称" />
+      </el-form-item>
+      <el-form-item label="报表类型" prop="reportType">
+        <el-radio-group v-model="form.reportType">
+          <el-radio-group v-model="form.reportType">
+            <el-radio label="10">数值指标</el-radio>
+            <el-radio label="20">数据报表</el-radio>
+          </el-radio-group>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="报表描述" prop="reportDesc">
+        <el-input v-model="form.reportDesc" placeholder="请输入报表描述" />
+      </el-form-item>
+      <el-form-item label="报表代码" prop="reportCode">
+        <el-input v-model="form.reportCode" placeholder="请输入报表代码" />
+      </el-form-item>
+      <el-form-item label="报表图标" prop="reportIcon">
+        <el-popover popper-class="icon-selector-popper" trigger="hover" width="292">
+          <template #reference>
+            <el-input v-model="form.reportIcon" />
+          </template>
+          <vab-icon-selector @handle-icon="handleIcon" />
+        </el-popover>
+        <!-- <el-input v-model="form.reportIcon" placeholder="请输入报表图标" /> -->
+      </el-form-item>
+
+      <el-form-item label="备注" prop="remark">
+        <el-input v-model="form.remark" placeholder="请输入内容" type="textarea" />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="save">确 定</el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+  import reportApi from '@/api/system/report'
+  import roleApi from '@/api/system/role'
+
+  export default {
+    name: 'PostEdit',
+    data() {
+      return {
+        form: { reportType: '10', reportIcon: undefined },
+        rules: {
+          reportName: [{ required: true, message: '报表名称不能为空', trigger: 'blur' }],
+          reportDesc: [{ required: true, message: '报表描述不能为空', trigger: 'blur' }],
+        },
+        title: '',
+        dialogFormVisible: false,
+        // 角色选项
+        roleOptions: [],
+      }
+    },
+    mounted() {
+      // 获取角色
+      roleApi.getList({ status: '10' }).then((response) => {
+        this.roleOptions = response.data.list
+      })
+    },
+    methods: {
+      handleIcon(item) {
+        this.form.icon = item
+      },
+      showEdit(row) {
+        if (!row) {
+          this.title = '添加'
+        } else {
+          this.title = '编辑'
+          this.getDetailsInfo(row.id)
+        }
+        this.dialogFormVisible = true
+      },
+      async getDetailsInfo(id) {
+        const { data: data } = await reportApi.getEntityById({ id: id })
+        this.form = data
+      },
+      close() {
+        this.$refs['form'].resetFields()
+        this.form = this.$options.data().form
+        this.dialogFormVisible = false
+      },
+      save() {
+        this.$refs['form'].validate(async (valid) => {
+          if (valid) {
+            if (this.form.id) {
+              const { msg } = await reportApi.doEdit(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            } else {
+              const { msg } = await reportApi.doAdd(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            }
+            this.$emit('fetch-data')
+            this.close()
+          }
+        })
+      },
+    },
+  }
+</script>

+ 156 - 0
src/views/system/report/components/ReportList.vue

@@ -0,0 +1,156 @@
+<!--
+ * @Author: niezch@dashoo.cn
+ * @Date: 2023-02-16 15:55:15
+ * @LastEditors: niezch@dashoo.cn
+ * @LastEditTime: 2023-02-17 15:41:28
+ * @Description: file content
+ * @FilePath: \opms_frontend\src\views\system\report\components\ReportList.vue
+-->
+<template>
+  <el-dialog :title="title" :visible.sync="dialogFormVisible" width="700px" @close="close">
+    <el-table v-loading="listLoading" border :data="list" :height="height" @selection-change="setSelectRows">
+      <el-table-column align="center" label="角色Id" prop="id" show-overflow-tooltip />
+      <el-table-column align="center" label="角色名称" prop="roleName" show-overflow-tooltip />
+      <!-- <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip /> -->
+      <el-table-column align="center" label="创建时间" prop="createdTime">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createdTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="操作" show-overflow-tooltip>
+        <template #default="{ row }">
+          <el-button type="text" @click="handleApplication(row)">应用</el-button>
+        </template>
+      </el-table-column>
+      <template #empty>
+        <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
+      </template>
+    </el-table>
+    <el-pagination
+      background
+      :current-page="queryForm.pageNum"
+      :layout="layout"
+      :page-size="queryForm.pageSize"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange" />
+  </el-dialog>
+</template>
+<script>
+  import reportApi from '@/api/system/report'
+  import roleApi from '@/api/system/role'
+
+  export default {
+    name: 'PostEdit',
+    data() {
+      return {
+        form: { reportType: '10' },
+        rules: {
+          reportName: [{ required: true, message: '报表名称不能为空', trigger: 'blur' }],
+          // reportType: [{ required: true, message: '报表类型不能为空', trigger: 'blur' }],
+          reportDesc: [{ required: true, message: '报表描述不能为空', trigger: 'blur' }],
+        },
+        title: '',
+        dialogFormVisible: false,
+        // 角色选项
+        roleOptions: [],
+        listLoading: true,
+        list: [],
+        rid: '',
+        queryForm: {
+          pageNum: 1,
+          pageSize: 10,
+          reportName: undefined,
+          roleName: undefined,
+          remark: undefined,
+          roleId: undefined,
+          reportId: undefined,
+        },
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+        selectRows: '',
+      }
+    },
+    computed: {
+      height() {
+        return this.$baseTableHeight(1)
+      },
+    },
+    mounted() {
+      // 获取角色
+      // roleApi.getList({ status: '10' }).then((response) => {
+      //   this.roleOptions = response.data.list
+      //   console.log( this.roleOptions)
+      // })
+    },
+    methods: {
+      //应用
+      async handleApplication(row) {
+        let query = {
+          reportId: this.rid,
+          roleId: parseInt(row.id),
+          remark: '',
+        }
+        const { msg } = await reportApi.addRoleReport(query)
+        this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+      },
+      setSelectRows(val) {
+        this.selectRows = val
+      },
+      showEdit(row) {
+        this.title = '应用'
+        this.getRoleList()
+        this.rid = row.id
+        this.dialogFormVisible = true
+      },
+      async getDetailsInfo(id) {
+        const { data: data } = await reportApi.getRoleReportId({ reportId: id })
+        this.list = data.list
+        this.total = data.total
+        this.listLoading = false
+      },
+      async getRoleList() {
+        roleApi.getList({ status: '10' }).then((response) => {
+          this.roleOptions = response.data.list
+          console.log(this.roleOptions)
+        })
+        const { data: data } = await roleApi.getList({ status: '10' })
+
+        console.log(data)
+        this.list = data.list
+        this.total = data.total
+        this.listLoading = false
+      },
+      close() {
+        this.dialogFormVisible = false
+      },
+      save() {
+        this.$refs['form'].validate(async (valid) => {
+          if (valid) {
+            if (this.form.id) {
+              const { msg } = await reportApi.doEdit(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            } else {
+              const { msg } = await reportApi.doAdd(this.form)
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            }
+            this.$emit('fetch-data')
+            this.close()
+          }
+        })
+      },
+      handleSizeChange(val) {
+        this.queryForm.pageSize = val
+        this.getDetailsInfo()
+      },
+      handleCurrentChange(val) {
+        this.queryForm.pageNum = val
+        this.getDetailsInfo()
+      },
+      queryData() {
+        this.queryForm.pageNum = 1
+        this.getDetailsInfo()
+      },
+    },
+  }
+</script>

+ 170 - 0
src/views/system/report/index.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="user-management-container">
+    <vab-query-form>
+      <vab-query-form-left-panel :span="5">
+        <el-button icon="el-icon-plus" type="primary" @click="handleEdit($event)">添加</el-button>
+        <el-button icon="el-icon-delete" type="danger" @click="handleDelete($event)">删除</el-button>
+      </vab-query-form-left-panel>
+      <vab-query-form-right-panel :span="19">
+        <el-form :inline="true" :model="queryForm" @submit.native.prevent>
+          <el-form-item label="报表名称" prop="reportName">
+            <el-input v-model.trim="queryForm.reportName" clearable placeholder="请输入报表名称" />
+          </el-form-item>
+          <el-form-item label="报表代码" prop="reportCode">
+            <el-input v-model.trim="queryForm.reportCode" clearable placeholder="请输入报表代码" />
+          </el-form-item>
+          <el-form-item label="报表类型" prop="reportType">
+            <el-select v-model="queryForm.reportType" clearable placeholder="类型">
+              <el-option label="数值指标" value="10" />
+              <el-option label="数据报表" value="20" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
+          </el-form-item>
+        </el-form>
+      </vab-query-form-right-panel>
+    </vab-query-form>
+
+    <el-table v-loading="listLoading" border :data="list" :height="height" @selection-change="setSelectRows">
+      <el-table-column align="center" show-overflow-tooltip type="selection" />
+      <el-table-column align="center" label="报表类型" prop="reportType">
+        <template #default="{ row }">
+          {{ row.reportType === '10' ? '数值指标' : '数据报表' }}
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="报表代码" prop="reportCode" show-overflow-tooltip />
+      <el-table-column align="center" label="报表图标" prop="reportIcon" show-overflow-tooltip />
+      <el-table-column align="center" label="报表名称" prop="reportName" show-overflow-tooltip />
+      <el-table-column align="center" label="正在使用的角色" prop="" show-overflow-tooltip />
+      <el-table-column align="center" label="报表描述" prop="reportDesc" show-overflow-tooltip />
+      <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
+
+      <el-table-column align="center" label="创建时间" prop="createdTime">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.createdTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="操作" show-overflow-tooltip width="125">
+        <template #default="{ row }">
+          <el-button type="text" @click="handleApplication(row)">应用</el-button>
+          <el-button type="text" @click="handleEdit(row)">编辑</el-button>
+          <el-button type="text" @click="handleDelete(row)">删除</el-button>
+        </template>
+      </el-table-column>
+      <template #empty>
+        <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
+      </template>
+    </el-table>
+    <el-pagination
+      background
+      :current-page="queryForm.pageNum"
+      :layout="layout"
+      :page-size="queryForm.pageSize"
+      :total="total"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange" />
+    <edit ref="edit" @fetch-data="fetchData" />
+    <rlist ref="reportlist" @fetch-data="fetchData" />
+  </div>
+</template>
+
+<script>
+  import reportApi from '@/api/system/report'
+  import Edit from './components/ReportEdit'
+  import Rlist from './components/ReportList'
+
+  export default {
+    name: 'Post',
+    components: { Edit, Rlist },
+    data() {
+      return {
+        list: [],
+        listLoading: true,
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+        selectRows: '',
+        queryForm: {
+          pageNum: 1,
+          pageSize: 10,
+          reportName: undefined,
+          reportCode: undefined,
+          reportType: undefined,
+        },
+      }
+    },
+    computed: {
+      height() {
+        return this.$baseTableHeight(1)
+      },
+    },
+    created() {
+      this.fetchData()
+    },
+    methods: {
+      setSelectRows(val) {
+        this.selectRows = val
+      },
+      handleApplication(row) {
+        if (row.id) {
+          this.$refs['reportlist'].showEdit(row)
+        } else {
+          this.$refs['reportlist'].showEdit()
+        }
+      },
+      handleEdit(row) {
+        if (row.id) {
+          this.$refs['edit'].showEdit(row)
+        } else {
+          this.$refs['edit'].showEdit()
+        }
+      },
+      handleDelete(row) {
+        if (row.id) {
+          this.$baseConfirm('你确定要删除当前项吗', null, async () => {
+            const { msg } = await reportApi.doDelete({ ids: [row.id] })
+            this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+            await this.fetchData()
+          })
+        } else {
+          if (this.selectRows.length > 0) {
+            // const ids = this.selectRows.map((item) => item.id).join()
+            let ids = []
+            for (let item of this.selectRows) {
+              ids.push(item.id)
+            }
+
+            this.$baseConfirm('你确定要删除选中项吗', null, async () => {
+              const { msg } = await reportApi.doDelete({ ids })
+              this.$baseMessage(msg, 'success', 'vab-hey-message-success')
+              await this.fetchData()
+            })
+          } else {
+            this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
+          }
+        }
+      },
+      handleSizeChange(val) {
+        this.queryForm.pageSize = val
+        this.fetchData()
+      },
+      handleCurrentChange(val) {
+        this.queryForm.pageNum = val
+        this.fetchData()
+      },
+      queryData() {
+        this.queryForm.pageNum = 1
+        this.fetchData()
+      },
+      async fetchData() {
+        this.listLoading = true
+        const {
+          data: { list, total },
+        } = await reportApi.getList(this.queryForm)
+        this.list = list
+        this.total = total
+        this.listLoading = false
+      },
+    },
+  }
+</script>