lsw 1 anno fa
parent
commit
bca38393a3

+ 3 - 0
admin-ui/src/assets/styles/extend.scss

@@ -341,3 +341,6 @@
 .yzm{
   color:#1890ff;
 }
+.el-icon-warning{
+  padding-left: 3px;
+}

+ 6 - 3
admin-ui/src/views/work/money/index.vue

@@ -15,7 +15,7 @@
           <el-button type="primary" icon="el-icon-minus" @click="op('out')" v-hasPermi="['work:out:add']">提现</el-button>
           <el-button type="primary" icon="el-icon-plus" @click="op('add')" v-hasPermi="['work:recharge:add']">充值</el-button>
           <el-button type="primary" icon="el-icon-document" @click="op('recharge_list')" v-hasPermi="['work:recharge:list']">充值明细</el-button>
-          <el-button type="primary" icon="el-icon-s-promotion" @click="op('recharge_list')" v-hasPermi="['work:recharge:list']">提现明细</el-button>
+          <el-button type="primary" icon="el-icon-s-promotion" @click="op('out_list')" v-hasPermi="['work:out:list']">提现明细</el-button>
         </el-row>
       </div>
     </div>
@@ -24,7 +24,7 @@
 
 <script>
 import out_edit from './out/edit.vue';
-import out_list from './out/edit.vue';
+import out_list from './out/index.vue';
 import recharge_edit from './recharge/edit.vue';
 import recharge_list from './recharge/record.vue';
 import qr from '@/components/qr';
@@ -63,7 +63,10 @@ export default {
         this.iframe({ obj: recharge_edit, param: {}, title: '充值申请', width: '40%', height: '65%' });
       }
       if (tag == 'recharge_list') {
-        this.iframe({ obj: recharge_list, param: {}, title: '充值明细', width: '70%', height: '70%' });
+        this.iframe({ obj: recharge_list, param: {}, title: '充值明细', width: '75%', height: '70%' });
+      }
+      if (tag == 'out_list') {
+        this.iframe({ obj: out_list, param: {}, title: '提现明细', width: '70%', height: '70%' });
       }
     }
   }

+ 119 - 0
admin-ui/src/views/work/money/out/record.vue

@@ -0,0 +1,119 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="提现编号" prop="nums">
+        <el-input v-model="queryParams.nums" placeholder="请输入提现编号" @keyup.enter.native="handleQuery" class="inp" clearable />
+      </el-form-item>
+      <el-form-item label="提现状态" prop="state">
+        <el-select v-model="queryParams.state" placeholder="提现状态" clearable style="width: 117px">
+          <el-option value="0" label="待确认"></el-option>
+          <el-option value="1" label="已确认"></el-option>
+          <el-option value="2" label="提现无效"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="时间范围">
+        <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:out:edit']">审核</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:out:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="提现企业" align="left" prop="companyName" />
+      <el-table-column label="提现编号" align="center" prop="nums" width="170" />
+      <el-table-column label="提现金额(元)" align="center" prop="money" width="130" />
+      <el-table-column label="提现状态" align="center" width="110">
+        <template slot-scope="scope">
+          <el-tag type="danger" v-if="scope.row.state == 0">待确认</el-tag>
+          <el-tag type="success" v-if="scope.row.state == 1">已确认</el-tag>
+          <el-popover placement="top-start" v-if="scope.row.state == 2" title="原因" width="200" trigger="hover" :content="scope.row.msg">
+            <el-tag type="danger" slot="reference">提现无效</el-tag>
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column label="申请日期" align="center" prop="createTime" width="170" />
+      <el-table-column label="申请人" align="center" prop="opBy" width="130" />
+      <el-table-column label="操作" align="center" width="180">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:out:list']">查看</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:out:edit']" :disabled="scope.row.state != 0">审核</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:out:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script>
+import audit from './audit';
+export default {
+  name: 'Out',
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      dateRange: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyName: null,
+        state: null,
+        nums: null,
+        orderByColumn: 'r.id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      if (this.dateRange) {
+        this.queryParams.dateBegin = this.dateRange[0];
+        this.queryParams.dateEnd = this.dateRange[1];
+      }
+      this.ajax({ url: '/work/out/list', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map((item) => item.id);
+    },
+    op(tag, row) {
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: audit, param: { id: id }, title: '提现确认', width: '45%', height: '65%' });
+      }
+    },
+    del(row) {
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/out/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
+        });
+      });
+    }
+  }
+};
+</script>

+ 1 - 1
admin-ui/src/views/work/money/recharge/audit.vue

@@ -29,7 +29,7 @@
     </div>
     <div class="mfooter" v-if="!param.detail">
       <el-button type="primary" @click="submitForm(1)">确 认</el-button>
-      <el-button type="danger" @click="submitForm(2)">无 效</el-button>
+      <el-button type="danger" @click="submitForm(2)">不通过</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
     </div>
   </div>

+ 6 - 3
admin-ui/src/views/work/money/recharge/index.vue

@@ -11,7 +11,7 @@
         <el-select v-model="queryParams.state" placeholder="充值状态" clearable style="width: 117px">
           <el-option value="0" label="待确认"></el-option>
           <el-option value="1" label="已确认"></el-option>
-          <el-option value="2" label="充值无效"></el-option>
+          <el-option value="2" label="充值失败"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="时间范围">
@@ -37,12 +37,15 @@
           <el-tag type="danger" v-if="scope.row.state == 0">待确认</el-tag>
           <el-tag type="success" v-if="scope.row.state == 1">已确认</el-tag>
           <el-popover placement="top-start" v-if="scope.row.state == 2" title="原因" width="200" trigger="hover" :content="scope.row.msg">
-            <el-tag type="danger" slot="reference">充值无效</el-tag>
+            <div slot="reference">
+              <el-tag type="info">充值失败</el-tag>
+              <i class="el-icon-warning"></i>
+            </div>
           </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="申请日期" align="center" prop="createTime" width="170" />
       <el-table-column label="申请人" align="center" prop="opBy" width="130" />
+      <el-table-column label="申请日期" align="center" prop="createTime" width="170" />
       <el-table-column label="操作" align="center" width="180">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:recharge:list']">查看</el-button>

+ 14 - 4
admin-ui/src/views/work/money/recharge/record.vue

@@ -18,11 +18,12 @@
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
+      <el-button type="primary" icon="el-icon-download" @click="handleExport" v-hasPermi="['work:recharge:export']" style="float: right">导出</el-button>
     </el-form>
     <el-table :data="response.rows" border>
-      <el-table-column type="index" label="序号" align="center" width="80"/>
-      <el-table-column label="充值金额(元)" align="center" prop="money"/>
-      <el-table-column label="充值编号" align="center" prop="nums"/>
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="充值金额(元)" align="center" prop="money" />
+      <el-table-column label="充值编号" align="center" prop="nums" />
       <el-table-column label="充值状态" align="center" width="110">
         <template slot-scope="scope">
           <el-tag type="danger" v-if="scope.row.state == 0">待确认</el-tag>
@@ -32,8 +33,13 @@
           </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="申请日期" align="center" prop="createTime"/>
+      <el-table-column label="充值凭证" align="center">
+        <template slot-scope="scope">
+          <span class="cg">点击查看</span>
+        </template>
+      </el-table-column>
       <el-table-column label="申请人" align="center" prop="opBy" width="130" />
+      <el-table-column label="申请日期" align="center" prop="createTime" />
       <template slot="empty">
         <el-empty></el-empty>
       </template>
@@ -83,6 +89,10 @@ export default {
       this.resetForm('queryForm');
       this.dateRange = [];
       this.handleQuery();
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/recharge/export', { ...this.queryParams }, '充值明细.xlsx');
     }
   }
 };

+ 10 - 31
admin-ui/src/views/work/project/packages/index.vue

@@ -1,19 +1,17 @@
 <template>
   <div class="cmain">
     <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
-      <el-form-item label="关联项目" prop="projectId">
-        <el-input v-model="queryParams.projectId" placeholder="请输入关联项目" @keyup.enter.native="handleQuery" clearable class="inp" />
-      </el-form-item>
-      <el-form-item label="状态" prop="state">
-        <el-input v-model="queryParams.state" placeholder="请输入状态" @keyup.enter.native="handleQuery" clearable class="inp" />
+      <el-form-item label="姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" clearable />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
+      <el-button type="primary" icon="el-icon-download" @click="handleQuery" style="float: right">导出excel</el-button>
     </el-form>
-    <el-table :data="response.rows" border @selection-change="selects">
-      <el-table-column type="selection" width="55" align="center" />
+    <el-table :data="response.rows" border>
+      <el-table-column type="index" label="序号" align="center" width="80" />
       <el-table-column label="姓名" align="center" prop="name" />
       <el-table-column label="身份证" align="center" prop="idCard" />
       <el-table-column label="手机号" align="center" prop="phone" />
@@ -32,16 +30,13 @@ export default {
   name: 'Packages',
   data() {
     return {
-      ids: [],
-      showSearch: true,
       response: {},
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        userId: null,
         projectId: null,
-        state: null,
-        orderByColumn: 'id',
+        name: null,
+        orderByColumn: 'p.id',
         isAsc: 'desc'
       }
     };
@@ -75,25 +70,9 @@ export default {
       this.resetForm('queryForm');
       this.handleQuery();
     },
-    selects(rows) {
-      this.ids = rows.map((item) => item.id);
-    },
-    op(tag, row) {
-      if (tag == 'add') {
-        this.iframe({ obj: edit, param: {}, title: '新增', width: '45%', height: '55%' });
-      }
-      if (tag == 'edit') {
-        const id = row.id || this.ids[0];
-        this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '50%', height: '50%' });
-      }
-    },
-    del(row) {
-      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/packages/remove/' + (row.id || this.ids) }).then((response) => {
-          this.$modal.msgSuccess('删除成功');
-          this.getList();
-        });
-      });
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/packages/export', { ...this.queryParams }, `caseinfo_${new Date().getTime()}.xlsx`);
     }
   }
 };

+ 102 - 0
admin-ui/src/views/work/relate/index.vue

@@ -0,0 +1,102 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="姓名" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item label="手机号" prop="phone">
+        <el-input v-model="queryParams.phone" placeholder="请输入手机号" @keyup.enter.native="handleQuery" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:relate:remove']">解除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <el-button type="primary" icon="el-icon-download" @click="handleExport" v-hasPermi="['work:relate:export']">导出</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="身份证" align="center" prop="idCard" />
+      <el-table-column label="手机号" align="center" prop="phone" />
+      <el-table-column label="关联方式" align="center" prop="way" />
+      <el-table-column label="关联时间" align="center" prop="createTime" />
+      <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:relate:remove']">解除</el-button>
+        </template>
+      </el-table-column>
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Relate',
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        phone: null,
+        orderByColumn: 'r.id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/relate/list', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    selects(rows) {
+      this.ids = rows.map((item) => item.id);
+    },
+    op(tag, row) {
+      if (tag == 'add') {
+        this.iframe({ obj: edit, param: {}, title: '新增', width: '45%', height: '55%' });
+      }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '50%', height: '50%' });
+      }
+    },
+    del(row) {
+      this.$confirm('是否确认解除选中关联用户?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/relate/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('解除成功');
+          this.getList();
+        });
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/relate/export', { ...this.queryParams }, '企业关联用户.xlsx');
+    }
+  }
+};
+</script>

+ 2 - 2
app/common/http.js

@@ -1,9 +1,9 @@
-//const ip = 'http://127.0.0.1:9191';
+const ip = 'http://127.0.0.1:9191';
 //const ip = 'http://192.168.0.107:9191';
 //const ip = 'http://211.149.236.41:8080/houtai-api';
 //const ip = 'http://192.168.174.80:9191';
 //const ip = 'http://106.55.241.82:9191';
-const ip = 'http://192.168.0.100:9191';
+//const ip = 'http://192.168.0.100:9191';
 /**
  * 封装的http请求
  */

+ 1 - 1
app/pages/company/index.vue

@@ -62,7 +62,7 @@ export default {
 					success: (res) => {
 						this.http.request({
 							url: '/app/relate/add',
-							data: { companyId: res.result },
+							data: { companyId: res.result,way:'扫码关联' },
 							method: 'POST',
 							success: (res) => {
 								uni.showModal({

+ 1 - 1
app/pages/company/search.vue

@@ -36,7 +36,7 @@ export default {
 					if (res.confirm) {
 						this.http.request({
 							url: '/app/relate/add',
-							data: { companyId: item.id },
+							data: { companyId: item.id,way:'手动关联' },
 							method: 'POST',
 							success: (res) => {
 								uni.showModal({

+ 16 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/RechargeController.java

@@ -6,6 +6,8 @@ import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.web.work.domain.Recharge;
 import com.ruoyi.web.work.domain.dto.RechargeDto;
 import com.ruoyi.web.work.service.IRechargeService;
@@ -14,6 +16,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.rmi.ServerException;
 import java.util.Arrays;
 import java.util.List;
@@ -68,4 +71,17 @@ public class RechargeController extends BaseController {
     public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(rechargeService.removeByIds(Arrays.asList(ids)));
     }
+
+    @Log(title = "充值管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('work:recharge:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, Recharge recharge) {
+        if (getLoginUser().getUser().getType() == 1) {
+            recharge.setCompanyId(getLoginUser().getUser().getCompanyId());
+        }
+        PageUtils.orderBy("r.id desc");
+        List<Recharge> list = rechargeService.selectList(recharge);
+        ExcelUtil<Recharge> util = new ExcelUtil<Recharge>(Recharge.class);
+        util.exportExcel(response, list, "充值明细");
+    }
 }

+ 19 - 5
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/RelateController.java

@@ -5,17 +5,20 @@ import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.web.work.domain.Relate;
 import com.ruoyi.web.work.service.IRelateService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.List;
 
 /**
  * 关联企业
+ *
  * @author lsw
  * @date 2024-04-18
  */
@@ -27,7 +30,8 @@ public class RelateController extends BaseController {
 
     @PreAuthorize("@ss.hasPermi('work:relate:list')")
     @GetMapping("/list")
-    public TableDataInfo list(Relate relate){
+    public TableDataInfo list(Relate relate) {
+        relate.setCompanyId(getLoginUser().getUser().getCompanyId());
         startPage();
         List<Relate> list = relateService.selectList(relate);
         return getDataTable(list);
@@ -35,28 +39,38 @@ public class RelateController extends BaseController {
 
     @PreAuthorize("@ss.hasPermi('work:relate:query')")
     @GetMapping(value = "/detail/{id}")
-    public AjaxResult detail(@PathVariable("id") Long id){
+    public AjaxResult detail(@PathVariable("id") Long id) {
         return AjaxResult.success(relateService.getById(id));
     }
 
     @PreAuthorize("@ss.hasPermi('work:relate:add')")
     @Log(title = "关联企业", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody Relate relate){
+    public AjaxResult add(@RequestBody Relate relate) {
         return toAjax(relateService.save(relate));
     }
 
     @PreAuthorize("@ss.hasPermi('work:relate:edit')")
     @Log(title = "关联企业", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@RequestBody Relate relate){
+    public AjaxResult edit(@RequestBody Relate relate) {
         return toAjax(relateService.updateById(relate));
     }
 
     @PreAuthorize("@ss.hasPermi('work:relate:remove')")
     @Log(title = "关联企业", businessType = BusinessType.DELETE)
     @GetMapping("/remove/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids){
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(relateService.removeByIds(Arrays.asList(ids)));
     }
+
+    @Log(title = "关联企业", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('work:relate:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, Relate relate) {
+        relate.setCompanyId(getLoginUser().getUser().getCompanyId());
+        List<Relate> list = relateService.selectList(relate);
+        ExcelUtil<Relate> util = new ExcelUtil<Relate>(Relate.class);
+        util.exportExcel(response, list, "企业关联用户");
+    }
 }

+ 9 - 9
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Recharge.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.Version;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.web.work.domain.base.BaseData;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -22,7 +24,7 @@ import java.util.Date;
 @Data
 @TableName(value = "tb_recharge")
 @Accessors(chain = true)
-public class Recharge {
+public class Recharge extends BaseData {
     private static final long serialVersionUID = 1L;
 
     private Long id;
@@ -34,11 +36,13 @@ public class Recharge {
     private Long userId;
 
     @ApiModelProperty(value = "充值编号")
+    @Excel(name = "充值编号", width = 30, sort = 1)
     private String nums;
 
     @NotNull(message = "充值金额不能为空")
     @DecimalMin(value = "1", inclusive = false, message = "充值金额不能小于1")
     @ApiModelProperty(value = "充值金额")
+    @Excel(name = "充值金额", sort = 2)
     private BigDecimal money;
 
     @NotBlank(message = "充值凭证不能为空")
@@ -46,6 +50,7 @@ public class Recharge {
     private String certificate;
 
     @ApiModelProperty(value = "状态:0=正常,1=停用")
+    @Excel(name = "状态", readConverterExp = "0=待确认,1=已确认,1=无效", sort = 3)
     private Integer state;
 
     @ApiModelProperty(value = "充值无效原因")
@@ -54,10 +59,12 @@ public class Recharge {
     @Version
     private String version;
 
+    @Excel(name = "申请人", sort = 4)
     private String opBy;
 
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "申请时间", dateFormat = "yyyy-MM-dd HH:mm:ss", width = 30, sort = 5)
     private Date createTime;
 
     @TableField(fill = FieldFill.UPDATE)
@@ -69,14 +76,7 @@ public class Recharge {
 
     @ApiModelProperty(value = "企业名称")
     @TableField(exist = false)
+    @Excel(name = "企业名称", sort = 0, width = 40)
     private String companyName;
 
-    //开始日期
-    @TableField(exist = false)
-    private String dateBegin;
-
-    //结束日期
-    @TableField(exist = false)
-    private String dateEnd;
-
 }

+ 43 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Relate.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import java.util.Date;
 /**
  * @author lsw
@@ -32,12 +35,9 @@ public class Relate{
     @ApiModelProperty(value = "状态:0=正常,1=停用")
     private Integer state;
 
-    @TableField(fill = FieldFill.INSERT)
-    private String createBy;
 
     @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private String createBy;
 
     @TableField(fill = FieldFill.UPDATE)
     private String updateBy;
@@ -46,5 +46,44 @@ public class Relate{
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "姓名")
+    @Excel(name = "姓名")
+    private String name;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "手机号")
+    @Excel(name = "手机号")
+    private String phone;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "身份证")
+    @Excel(name = "身份证",width = 30)
+    private String idCard;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "开户行")
+    private String bankName;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "银行卡账号")
+    private String bankAccount;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "支付宝")
+    private String alipay;
+
+    @ApiModelProperty(value = "是否签署合同:0=未签,1=已签")
+    private Integer isContract;
+
+    @NotBlank(message = "关联方式不能为空")
+    @Pattern(regexp = "^(手动关联|扫码关联)$", message = "关联方式必须为'手动关联'或'扫码关联'")
+    @Excel(name = "关联方式")
+    private String way;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "关联时间",dateFormat = "yyyy-MM-dd HH:mm:ss", width = 30)
+    private Date createTime;
 
 }

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/User.java

@@ -28,7 +28,7 @@ public class User{
     private String name;
 
     @ApiModelProperty(value = "手机号")
-    private Long phone;
+    private String phone;
 
     @ApiModelProperty(value = "身份证")
     private String idCard;

+ 27 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/base/BaseData.java

@@ -0,0 +1,27 @@
+package com.ruoyi.web.work.domain.base;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+@Data
+@Accessors(chain = true)
+public class BaseData {
+    private static final long serialVersionUID = 1L;
+
+    //开始日期
+    @TableField(exist = false)
+    @JsonIgnore
+    private String dateBegin;
+
+    //结束日期
+    @TableField(exist = false)
+    @JsonIgnore
+    private String dateEnd;
+
+}

+ 1 - 0
ruoyi-admin/src/main/resources/mapper/work/PackagesMapper.xml

@@ -19,6 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN tb_user u ON u.id = p.user_id
         <where>  
             <if test="userId != null "> and p.user_id = #{userId}</if>
+            <if test="name != null  and name != ''"> and u.name like concat('%', #{name}, '%')</if>
             <if test="projectId != null "> and p.project_id = #{projectId}</if>
             <if test="state != null "> and p.state = #{state}</if>
         </where>

+ 1 - 0
ruoyi-admin/src/main/resources/mapper/work/RelateMapper.xml

@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="companyId != null "> and r.company_id = #{companyId}</if>
             <if test="name != null  and name != ''"> and c.name like concat('%', #{name}, '%')</if>
+            <if test="phone != null  and phone != ''"> and c.phone like concat('%', #{phone}, '%')</if>
         </where>
     </select>