lsw 1 year ago
parent
commit
d7e6dca051
41 changed files with 1085 additions and 728 deletions
  1. 2 2
      admin-ui/.env.development
  2. 2 2
      admin-ui/.env.production
  3. 2 2
      admin-ui/.env.staging
  4. 1 1
      admin-ui/package.json
  5. 9 0
      admin-ui/src/assets/styles/extend.scss
  6. 8 2
      admin-ui/src/store/modules/user.js
  7. 2 2
      admin-ui/src/views/index.vue
  8. 6 5
      admin-ui/src/views/system/user/index.vue
  9. 138 0
      admin-ui/src/views/work/company/edit.vue
  10. 124 0
      admin-ui/src/views/work/company/index.vue
  11. 40 54
      admin-ui/src/views/work/notice/edit.vue
  12. 0 92
      admin-ui/src/views/work/platform/edit.vue
  13. 41 85
      admin-ui/src/views/work/platform/index.vue
  14. 54 89
      admin-ui/src/views/work/project/edit.vue
  15. 41 65
      admin-ui/src/views/work/project/index.vue
  16. 70 90
      admin-ui/src/views/work/user/edit.vue
  17. 64 77
      admin-ui/src/views/work/user/index.vue
  18. 11 16
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  19. 19 20
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  20. 74 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java
  21. 15 35
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/PlatformController.java
  22. 27 16
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/ProjectController.java
  23. 74 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Company.java
  24. 3 3
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Project.java
  25. 19 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/CompanyMapper.java
  26. 19 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java
  27. 58 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java
  28. 23 0
      ruoyi-admin/src/main/resources/mapper/work/CompanyMapper.xml
  29. 2 21
      ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
  30. 16 5
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
  31. 30 6
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  32. 22 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
  33. 3 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java
  34. 1 1
      ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
  35. 4 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
  36. 5 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  37. 4 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  38. 6 10
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
  39. 17 16
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  40. 12 3
      ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
  41. 17 1
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 2 - 2
admin-ui/.env.development

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 卡口后台管理
+VUE_APP_TITLE = 承揽时代云平台
 
 # 开发环境配置
 ENV = 'development'
 
-# 卡口后台管理/开发环境
+# 承揽时代云平台/开发环境
 VUE_APP_BASE_API = '/dev-api'
 
 # 路由懒加载

+ 2 - 2
admin-ui/.env.production

@@ -1,8 +1,8 @@
 # 页面标题
-VUE_APP_TITLE = 卡口后台管理
+VUE_APP_TITLE = 承揽时代云平台
 
 # 生产环境配置
 ENV = 'production'
 
-# 卡口后台管理/生产环境
+# 承揽时代云平台/生产环境
 VUE_APP_BASE_API = '/prod'

+ 2 - 2
admin-ui/.env.staging

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 卡口后台管理
+VUE_APP_TITLE = 承揽时代云平台
 
 NODE_ENV = production
 
 # 测试环境配置
 ENV = 'staging'
 
-# 卡口后台管理/测试环境
+# 承揽时代云平台/测试环境
 VUE_APP_BASE_API = '/stage-api'

+ 1 - 1
admin-ui/package.json

@@ -1,7 +1,7 @@
 {
   "name": "ruoyi",
   "version": "3.8.4",
-  "description": "卡口后台管理",
+  "description": "承揽时代云平台",
   "author": "若依",
   "license": "MIT",
   "scripts": {

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

@@ -322,3 +322,12 @@
     flex: 1;
   }
 }
+.sfz{
+  border-radius:5px;
+  width: 200px;
+}
+.bs{
+  color: darkgray;
+  padding-bottom: 15px;
+  padding-top: 5px;
+}

+ 8 - 2
admin-ui/src/store/modules/user.js

@@ -33,6 +33,9 @@ const user = {
     deptNameStr: (state, deptNameStr) => {
       state.deptNameStr = deptNameStr
     },
+    companyId: (state, companyId) => {
+      state.companyId = companyId
+    },
     SET_ROLES: (state, roles) => {
       state.roles = roles
     },
@@ -73,10 +76,13 @@ const user = {
           }
           commit('SET_NAME', user.userName)
           commit('SET_nickName', user.nickName)
-          commit('deptNameStr', user.dept.deptName||'')
+          commit('companyId', user.companyId);
+          if(user.dept){
+            commit('deptNameStr', user.dept.deptName||'')
+            commit('deptId', user.dept.deptId);
+          }
           commit('SET_ID', user.userId)
           commit('SET_AVATAR', avatar)
-          commit('deptId', user.dept.deptId);
           resolve(res)
         }).catch(error => {
           reject(error)

+ 2 - 2
admin-ui/src/views/index.vue

@@ -284,8 +284,8 @@ export default {
     }
   },
   created() {
-    this.getData();
-    this.getWeek();
+    //this.getData();
+    //this.getWeek();
   },
   methods: {
     getData() {

+ 6 - 5
admin-ui/src/views/system/user/index.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-row :gutter="20">
       <!--部门数据-->
-      <el-col :span="3" :xs="24">
+      <el-col :span="3" :xs="24" v-if="">
         <div class="head-container"><el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="el-icon-search" style="margin-bottom: 20px" /></div>
         <div class="head-container">
           <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" ref="tree" default-expand-all highlight-current @node-click="handleNodeClick" />
@@ -30,15 +30,15 @@
           <el-col :span="1.5">
             <el-button type="danger" icon="el-icon-delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:user:remove']">删除</el-button>
           </el-col>
-          <el-col :span="1.5"><el-button type="info" icon="el-icon-upload2" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button></el-col>
-          <el-col :span="1.5"><el-button type="warning" icon="el-icon-download" @click="handleExport" v-hasPermi="['system:user:export']">导出</el-button></el-col>
+          <el-col :span="1.5" v-if="!user.companyId"><el-button type="info" icon="el-icon-upload2" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button></el-col>
+          <el-col :span="1.5" v-if="!user.companyId"><el-button type="warning" icon="el-icon-download" @click="handleExport" v-hasPermi="['system:user:export']">导出</el-button></el-col>
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
         <el-table border :data="userList" @selection-change="handleSelectionChange" height="calc(100vh - 273px)">
           <el-table-column type="selection" align="center" width="50" />
           <el-table-column label="账号" align="center" key="userName" prop="userName" :show-overflow-tooltip="true" width="110" />
           <el-table-column label="姓名" align="center" key="nickName" prop="nickName" :show-overflow-tooltip="true" width="110" />
-          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" :show-overflow-tooltip="true" width="170" />
+          <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" :show-overflow-tooltip="true" width="170" v-if="!user.companyId"/>
           <el-table-column label="角色" align="center" width="170">
             <template slot-scope="scope">
               <el-tag type="danger" size="mini" style="margin-top: 2px" v-if="scope.row.userName == 'admin'">超级管理员</el-tag>
@@ -65,7 +65,7 @@
             <template slot-scope="scope" v-if="scope.row.userId !== 1">
               <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">修改</el-button>
               <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
-              <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
+              <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']" v-if="!user.companyId">
                 <span class="el-dropdown-link">
                   <i class="el-icon-d-arrow-right el-icon--right"></i>
                   更多
@@ -188,6 +188,7 @@ export default {
   components: { Treeselect },
   data() {
     return {
+      user: this.$store.state.user,
       // 选中数组
       ids: [],
       // 非单个禁用

+ 138 - 0
admin-ui/src/views/work/company/edit.vue

@@ -0,0 +1,138 @@
+<template>
+  <div class="cmain">
+    <el-form ref="form" :model="form" :rules="rules" label-width="110px">
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">企业信息</div>
+        </div>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="企业名称" prop="companyName">
+              <el-input v-model="form.companyName" placeholder="请输入企业名称" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="企业负责人" prop="director">
+              <el-input v-model="form.director" placeholder="请输入企业方负责人" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="手机号" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入手机号" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系地址" prop="address">
+              <el-input v-model="form.address" placeholder="请输入联系地址" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="营业执照" prop="business">
+          <ImageUpload v-model="form.business" :isShowTip="false"></ImageUpload>
+        </el-form-item>
+      </div>
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">对公账户信息</div>
+        </div>
+        <el-form-item label="开户行" prop="bankName">
+          <el-input v-model="form.bankName" placeholder="请输入开户行" clearable />
+        </el-form-item>
+        <el-form-item label="对公账号" prop="bankAccount">
+          <el-input v-model="form.bankAccount" placeholder="请输入对公账号" clearable />
+        </el-form-item>
+        <el-form-item label="开户许可证" prop="b1">
+          <ImageUpload v-model="form.b1" :isShowTip="false"></ImageUpload>
+        </el-form-item>
+      </div>
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">
+            <span>平台登录账号</span>
+            <span class="jz">管理员</span>
+          </div>
+        </div>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="登录账号" prop="userName">
+              <el-input v-model="form.userName" placeholder="请输入手机号" :disabled="form.id" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="登录密码" prop="password">
+              <el-input type="password" v-model="form.password" placeholder="默认123456" :disabled="form.id" clearable />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+    </el-form>
+    <div class="mfooter">
+      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      form: {password:123456},
+      rules: {
+        companyName: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        director: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        phone: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        address: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        business: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        bankName: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        bankAccount: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        b1: [{ required: true, message: '不能为空', trigger: 'blur' }]
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  mounted() {
+    if (this.param.id) {
+      this.ajax({ url: '/work/company/detail/' + this.param.id }).then((response) => {
+        this.form = response.data;
+      });
+    }
+  },
+  methods: {
+    submitForm() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (this.form.id) {
+            this.ajax({ method: 'post', url: '/work/company/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
+          } else {
+            this.ajax({ method: 'post', url: '/work/company/add', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('新增成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
+          }
+        }
+      });
+    }
+  }
+};
+</script>

+ 124 - 0
admin-ui/src/views/work/company/index.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="企业名称" prop="companyName">
+        <el-input v-model="queryParams.companyName" 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="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:company:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:company:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:company: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="center" prop="companyName" width="250"/>
+      <el-table-column label="企业方负责人" align="center" prop="director" />
+      <el-table-column label="手机号" align="center" prop="phone" />
+      <el-table-column label="创建日期" align="center" prop="createTime" />
+      <el-table-column label="账号状态" align="center" prop="state" width="100">
+        <template slot-scope="scope">
+          <div class="switch">
+            <el-switch v-model="scope.row.state" :active-value="0" :width="50" :inactive-value="1" @change="op('change', scope.row)"></el-switch>
+            <span class="zc" v-if="scope.row.state == 0">正常</span>
+            <span class="ty" v-else>禁用</span>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:company:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:company: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 edit from './edit';
+export default {
+  name: 'Company',
+  data() {
+    return {
+      ids: [],
+      showSearch: true,
+      response: {},
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        companyName: null,
+        director: null,
+        phone: null,
+        state: null,
+        orderByColumn: 'id',
+        isAsc: 'desc'
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.ajax({ url: '/work/company/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: '60%', height: '93%' });
+      }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑企业', width: '60%', height: '93%' });
+      }
+      //账号状态
+      if (tag == 'change') {
+        let text = row.state === 0 ? '启用' : '禁用';
+        this.$confirm('确认要' + text + '该企业吗,停用后该企业的所有账号都不能登录?', '警告', { type: 'warning' })
+          .then(() => {
+            this.post({ url: '/work/company/change', data: { id: row.id, state: row.state } })
+              .then((response) => {
+                this.$modal.msgSuccess(text + '成功');
+              })
+              .catch(() => {
+                row.state = row.state === 0 ? 1 : 0;
+              });
+          })
+          .catch(() => {
+            row.state = row.state === 0 ? 1 : 0;
+          });
+      }
+    },
+    del(row) {
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/company/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
+        });
+      });
+    }
+  }
+};
+</script>

+ 40 - 54
admin-ui/src/views/work/notice/edit.vue

@@ -1,41 +1,31 @@
 <template>
   <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入标题" clearable/>
-        </el-form-item>
-        <el-form-item label="内容" prop="contents">
-          <el-input v-model="form.contents" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="是否置顶" prop="top">
-          <el-input v-model="form.top" placeholder="请输入是否置顶" clearable/>
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
-        </el-form-item>
-        <el-form-item label="创建者" prop="createBy">
-          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable
-            v-model="form.createTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="更新者" prop="updateBy">
-          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
-        </el-form-item>
-        <el-form-item label="更新时间" prop="updateTime">
-          <el-date-picker clearable
-            v-model="form.updateTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择更新时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="form.title" placeholder="请输入标题" clearable />
+      </el-form-item>
+      <el-form-item label="内容" prop="contents">
+        <el-input v-model="form.contents" type="textarea" placeholder="请输入内容" />
+      </el-form-item>
+      <el-form-item label="是否置顶" prop="top">
+        <el-input v-model="form.top" placeholder="请输入是否置顶" clearable />
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input v-model="form.state" placeholder="请输入状态" clearable />
+      </el-form-item>
+      <el-form-item label="创建者" prop="createBy">
+        <el-input v-model="form.createBy" placeholder="请输入创建者" clearable />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker clearable v-model="form.createTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择创建时间"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="更新者" prop="updateBy">
+        <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable />
+      </el-form-item>
+      <el-form-item label="更新时间" prop="updateTime">
+        <el-date-picker clearable v-model="form.updateTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择更新时间"></el-date-picker>
+      </el-form-item>
+    </el-form>
     <div class="mfooter">
       <el-button type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
@@ -49,12 +39,8 @@ export default {
     return {
       form: {},
       rules: {
-        title: [
-          { required: true, message: "标题不能为空", trigger: "blur" }
-        ],
-        contents: [
-          { required: true, message: "内容不能为空", trigger: "blur" }
-        ],
+        title: [{ required: true, message: '标题不能为空', trigger: 'blur' }],
+        contents: [{ required: true, message: '内容不能为空', trigger: 'blur' }]
       }
     };
   },
@@ -71,27 +57,27 @@ export default {
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/notice/detail/' + this.param.id }).then(response => {
+      this.ajax({ url: '/work/notice/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
   },
   methods: {
     submitForm() {
-      this.$refs["form"].validate(valid => {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/notice/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
+            this.ajax({ method: 'post', url: '/work/notice/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           } else {
-              this.ajax({method: 'post',url: '/work/notice/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
+            this.ajax({ method: 'post', url: '/work/notice/add', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('新增成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           }
         }
       });

+ 0 - 92
admin-ui/src/views/work/platform/edit.vue

@@ -1,92 +0,0 @@
-<template>
-  <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="服务公司" prop="serviceCompany">
-          <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable/>
-        </el-form-item>
-        <el-form-item label="开户行" prop="bankName">
-          <el-input v-model="form.bankName" placeholder="请输入开户行" clearable/>
-        </el-form-item>
-        <el-form-item label="银行卡账号" prop="bankAccount">
-          <el-input v-model="form.bankAccount" placeholder="请输入银行卡账号" clearable/>
-        </el-form-item>
-        <el-form-item label="创建者" prop="createBy">
-          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable
-            v-model="form.createTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="更新者" prop="updateBy">
-          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
-        </el-form-item>
-        <el-form-item label="更新时间" prop="updateTime">
-          <el-date-picker clearable
-            v-model="form.updateTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择更新时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
-    <div class="mfooter">
-      <el-button type="primary" @click="submitForm">确 定</el-button>
-      <el-button @click="$layer.close(layerid)">取 消</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      form: {},
-      rules: {
-      }
-    };
-  },
-  props: {
-    param: {
-      type: Object,
-      default: () => {
-        return {};
-      }
-    },
-    layerid: {
-      type: String
-    }
-  },
-  mounted() {
-    if (this.param.id) {
-      this.ajax({ url: '/work/platform/detail/' + this.param.id }).then(response => {
-        this.form = response.data;
-      });
-    }
-  },
-  methods: {
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/platform/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
-          } else {
-              this.ajax({method: 'post',url: '/work/platform/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
-          }
-        }
-      });
-    }
-  }
-};
-</script>

+ 41 - 85
admin-ui/src/views/work/platform/index.vue

@@ -1,103 +1,59 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
-      <el-form-item label="服务公司" prop="serviceCompany">
-        <el-input v-model="queryParams.serviceCompany" placeholder="请输入服务公司"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="开户行" prop="bankName">
-        <el-input v-model="queryParams.bankName" placeholder="请输入开户行"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="银行卡账号" prop="bankAccount">
-        <el-input v-model="queryParams.bankAccount" placeholder="请输入银行卡账号"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </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="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:platform:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:platform:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:platform: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="id" align="center" prop="id" />
-      <el-table-column label="服务公司" align="center" prop="serviceCompany" />
-      <el-table-column label="开户行" align="center" prop="bankName" />
-      <el-table-column label="银行卡账号" align="center" prop="bankAccount" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:platform:edit']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:platform: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 class="cmain">
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">企业充值信息</div>
+        </div>
+        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+          <el-form-item label="服务公司" prop="serviceCompany">
+            <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable />
+          </el-form-item>
+          <el-form-item label="开户行" prop="bankName">
+            <el-input v-model="form.bankName" placeholder="请输入开户行" clearable />
+          </el-form-item>
+          <el-form-item label="银行卡号" prop="bankAccount">
+            <el-input v-model="form.bankAccount" placeholder="请输入银行卡号" clearable />
+          </el-form-item>
+        </el-form>
+        <div class="mfooter">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="$layer.close(layerid)">取 消</el-button>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
-import edit from './edit'
 export default {
-  name: "Platform",
   data() {
     return {
-      ids: [],
-      showSearch:true,
-      response: {},
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        serviceCompany: null,
-        bankName: null,
-        bankAccount: null,
-        orderByColumn: 'id',
-        isAsc: 'desc'
+      form: {},
+      rules: {
+        serviceCompany: [{ required: true, message: '服务公司不能为空', trigger: 'blur' }],
+        bankName: [{ required: true, message: '开户行不能为空', trigger: 'blur' }],
+        bankAccount: [{ required: true, message: '银行卡号不能为空', trigger: 'blur' }]
       }
     };
   },
-  created() {
-    this.getList();
+  mounted() {
+    this.ajax({ url: '/work/platform/detail' }).then((response) => {
+      this.form = response.data;
+    });
   },
   methods: {
-    getList() {
-      this.ajax({ url: '/work/platform/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/platform/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
+    submitForm() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (this.form.id) {
+            this.ajax({ method: 'post', url: '/work/platform/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
             });
-        });
+          }
+        }
+      });
     }
   }
 };

+ 54 - 89
admin-ui/src/views/work/project/edit.vue

@@ -1,77 +1,40 @@
 <template>
   <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="关联企业" prop="companyId">
-          <el-input v-model="form.companyId" placeholder="请输入关联企业" clearable/>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">基础信息</div>
+        </div>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="项目名称" prop="projectName">
+              <el-input v-model="form.projectName" placeholder="请输入项目名称" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="项目编号" prop="num">
+              <el-input v-model="form.num" placeholder="自动根据年月日生成" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="项目周期" prop="sData">
+              <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" style="width: 100% !important"></el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="结算日" prop="bData">
+              <el-date-picker clearable v-model="form.bData" type="date" value-format="yyyy-MM-dd" placeholder="请选择结算日"></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="附加说明" prop="contents">
+          <el-input v-model="form.contents" type="textarea" placeholder="请输入附加说明" rows="3" clearable />
         </el-form-item>
-        <el-form-item label="项目名称" prop="projectName">
-          <el-input v-model="form.projectName" placeholder="请输入项目名称" clearable/>
-        </el-form-item>
-        <el-form-item label="项目编号" prop="num">
-          <el-input v-model="form.num" placeholder="请输入项目编号" clearable/>
-        </el-form-item>
-        <el-form-item label="项目内容" prop="contents">
-          <el-input v-model="form.contents" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="服务公司" prop="serviceCompany">
-          <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable/>
-        </el-form-item>
-        <el-form-item label="开始时间" prop="sData">
-          <el-date-picker clearable
-            v-model="form.sData"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择开始时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="结束时间" prop="eData">
-          <el-date-picker clearable
-            v-model="form.eData"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择结束时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="结算日" prop="bData">
-          <el-date-picker clearable
-            v-model="form.bData"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择结算日">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="接包人数" prop="peoples">
-          <el-input v-model="form.peoples" placeholder="请输入接包人数" clearable/>
-        </el-form-item>
-        <el-form-item label="是否置顶" prop="top">
-          <el-input v-model="form.top" placeholder="请输入是否置顶" clearable/>
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
-        </el-form-item>
-        <el-form-item label="创建者" prop="createBy">
-          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable
-            v-model="form.createTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="更新者" prop="updateBy">
-          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
-        </el-form-item>
-        <el-form-item label="更新时间" prop="updateTime">
-          <el-date-picker clearable
-            v-model="form.updateTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择更新时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
+      </div>
+    </el-form>
     <div class="mfooter">
       <el-button type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
@@ -83,14 +46,12 @@
 export default {
   data() {
     return {
+      dateRange: [],
       form: {},
       rules: {
-        num: [
-          { required: true, message: "项目编号不能为空", trigger: "blur" }
-        ],
-        contents: [
-          { required: true, message: "项目内容不能为空", trigger: "blur" }
-        ],
+        projectName: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        sData: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        bData: [{ required: true, message: '不能为空', trigger: 'blur' }],
       }
     };
   },
@@ -107,27 +68,31 @@ export default {
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/project/detail/' + this.param.id }).then(response => {
+      this.ajax({ url: '/work/project/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
   },
   methods: {
     submitForm() {
-      this.$refs["form"].validate(valid => {
+      if (this.dateRange) {
+        this.form.sData = this.dateRange[0];
+        this.form.eData = this.dateRange[1];
+      }
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/project/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
+            this.ajax({ method: 'post', url: '/work/project/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           } else {
-              this.ajax({method: 'post',url: '/work/project/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
+            this.ajax({ method: 'post', url: '/work/project/add', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('新增成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           }
         }
       });

+ 41 - 65
admin-ui/src/views/work/project/index.vue

@@ -1,35 +1,14 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
-      <el-form-item label="关联企业" prop="companyId">
-        <el-input v-model="queryParams.companyId" placeholder="请输入关联企业"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
       <el-form-item label="项目名称" prop="projectName">
-        <el-input v-model="queryParams.projectName" placeholder="请输入项目名称"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+        <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" @keyup.enter.native="handleQuery" clearable class="inp" />
       </el-form-item>
       <el-form-item label="项目编号" prop="num">
-        <el-input v-model="queryParams.num" placeholder="请输入项目编号"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="服务公司" prop="serviceCompany">
-        <el-input v-model="queryParams.serviceCompany" placeholder="请输入服务公司"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="开始时间" prop="sData">
-        <el-date-picker clearable v-model="queryParams.sData" type="date" value-format="yyyy-MM-dd" placeholder="请选择开始时间"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="结束时间" prop="eData">
-        <el-date-picker clearable v-model="queryParams.eData" type="date" value-format="yyyy-MM-dd" placeholder="请选择结束时间"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="结算日" prop="bData">
-        <el-date-picker clearable v-model="queryParams.bData" type="date" value-format="yyyy-MM-dd" placeholder="请选择结算日"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="接包人数" prop="peoples">
-        <el-input v-model="queryParams.peoples" placeholder="请输入接包人数"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="是否置顶" prop="top">
-        <el-input v-model="queryParams.top" placeholder="请输入是否置顶"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+        <el-input v-model="queryParams.num" 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-input v-model="queryParams.state" placeholder="请输入状态" @keyup.enter.native="handleQuery" clearable class="inp" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -37,61 +16,58 @@
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
-        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:project:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:project:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:project:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
-        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:project:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:project:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:project: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="id" align="center" prop="id" />
-      <el-table-column label="关联企业" align="center" prop="companyId" />
       <el-table-column label="项目名称" align="center" prop="projectName" />
-      <el-table-column label="项目类型" align="center" prop="projectType" />
       <el-table-column label="项目编号" align="center" prop="num" />
-      <el-table-column label="项目内容" align="center" prop="contents" />
-      <el-table-column label="服务公司" align="center" prop="serviceCompany" />
-      <el-table-column label="开始时间" align="center" prop="sData" width="180">
+      <el-table-column label="项目周期" align="center">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.sData, '{y}-{m}-{d}') }}</span>
+          <span>{{ scope.row.sData }}至{{ scope.row.eData }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="结束时间" align="center" prop="eData" width="180">
+      <el-table-column label="服务公司" align="center">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.eData, '{y}-{m}-{d}') }}</span>
+          <div class="omit">{{ scope.row.serviceCompany }}</div>
         </template>
       </el-table-column>
-      <el-table-column label="结算日" align="center" prop="bData" width="180">
+      <el-table-column label="接包人数" align="center" prop="peoples" width="120" />
+      <el-table-column label="发包日期" align="center" prop="createTime" />
+      <el-table-column label="项目状态" align="center" prop="state" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.bData, '{y}-{m}-{d}') }}</span>
+          <div class="switch">
+            <el-switch v-model="scope.row.state" :active-value="0" :width="50" :inactive-value="1" @change="op('change', scope.row)"></el-switch>
+            <span class="zc" v-if="scope.row.state == 0">正常</span>
+            <span class="ty" v-else>禁用</span>
+          </div>
         </template>
       </el-table-column>
-      <el-table-column label="接包人数" align="center" prop="peoples" />
-      <el-table-column label="是否置顶" align="center" prop="top" />
-      <el-table-column label="状态" align="center" prop="state" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:project:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:project:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:project:remove']">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
-          <el-empty></el-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"/>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
   </div>
 </template>
 
 <script>
-import edit from './edit'
+import edit from './edit';
 export default {
-  name: "Project",
+  name: 'Project',
   data() {
     return {
       ids: [],
-      showSearch:true,
+      showSearch: true,
       response: {},
       queryParams: {
         pageNum: 1,
@@ -118,8 +94,8 @@ export default {
   },
   methods: {
     getList() {
-      this.ajax({ url: '/work/project/list', data: this.queryParams }).then(response => {
-            this.response = response;
+      this.ajax({ url: '/work/project/list', data: this.queryParams }).then((response) => {
+        this.response = response;
       });
     },
     handleQuery() {
@@ -127,28 +103,28 @@ export default {
       this.getList();
     },
     resetQuery() {
-      this.resetForm("queryForm");
+      this.resetForm('queryForm');
       this.handleQuery();
     },
     selects(rows) {
-      this.ids = rows.map(item => item.id)
+      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%'});
-          }
+      if (tag == 'add') {
+        this.iframe({ obj: edit, param: {}, title: '新增项目', width: '60%', height: '70%' });
+      }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑项目', width: '60%', height: '70%' });
+      }
     },
     del(row) {
-        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/project/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
-            });
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/project/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
         });
+      });
     }
   }
 };

+ 70 - 90
admin-ui/src/views/work/user/edit.vue

@@ -1,72 +1,66 @@
 <template>
   <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="姓名" prop="name">
-          <el-input v-model="form.name" placeholder="请输入姓名" clearable/>
-        </el-form-item>
-        <el-form-item label="手机号" prop="phone">
-          <el-input v-model="form.phone" placeholder="请输入手机号" clearable/>
-        </el-form-item>
-        <el-form-item label="身份证" prop="idCard">
-          <el-input v-model="form.idCard" placeholder="请输入身份证" clearable/>
-        </el-form-item>
-        <el-form-item label="开户行" prop="bankName">
-          <el-input v-model="form.bankName" placeholder="请输入开户行" clearable/>
-        </el-form-item>
-        <el-form-item label="银行卡账号" prop="bankAccount">
-          <el-input v-model="form.bankAccount" placeholder="请输入银行卡账号" clearable/>
-        </el-form-item>
-        <el-form-item label="支付宝" prop="alipay">
-          <el-input v-model="form.alipay" placeholder="请输入支付宝" clearable/>
-        </el-form-item>
-        <el-form-item label="身份证人面像" prop="p1">
-          <el-input v-model="form.p1" placeholder="请输入身份证人面像" clearable/>
-        </el-form-item>
-        <el-form-item label="身份证人徽面" prop="p2">
-          <el-input v-model="form.p2" placeholder="请输入身份证人徽面" clearable/>
-        </el-form-item>
-        <el-form-item label="服务公司" prop="serviceCompany">
-          <el-input v-model="form.serviceCompany" placeholder="请输入服务公司" clearable/>
-        </el-form-item>
-        <el-form-item label="是否签署合同" prop="isContract">
-          <el-input v-model="form.isContract" placeholder="请输入是否签署合同" clearable/>
-        </el-form-item>
-        <el-form-item label="合同有效期" prop="contractDate">
-          <el-date-picker clearable
-            v-model="form.contractDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择合同有效期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
-        </el-form-item>
-        <el-form-item label="创建者" prop="createBy">
-          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable
-            v-model="form.createTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="更新者" prop="updateBy">
-          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
-        </el-form-item>
-        <el-form-item label="更新时间" prop="updateTime">
-          <el-date-picker clearable
-            v-model="form.updateTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择更新时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">个人信息</div>
+        </div>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="姓名" prop="name">
+              <el-input v-model="form.name" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="身份证" prop="idCard">
+              <el-input v-model="form.idCard" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="手机号" prop="phone">
+              <el-input v-model="form.phone" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="开户行" prop="bankName">
+              <el-input v-model="form.bankName" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="银行卡号" prop="bankAccount">
+              <el-input v-model="form.bankAccount" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="支付宝" prop="alipay">
+              <el-input v-model="form.alipay" disabled />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="bos">
+        <div class="lab">
+          <div class="bsg"></div>
+          <div class="tit">身份信息</div>
+        </div>
+        <el-row>
+          <el-col :span="12" style="text-align: center">
+            <el-image :fit="'contain'" class="sfz" :z-index="50000" :src="baseUrl + form.p1" :preview-src-list="[baseUrl + form.p1]"></el-image>
+            <div class="bs">身份证人面像</div>
+          </el-col>
+          <el-col :span="12" style="text-align: center">
+            <el-image :fit="'contain'" class="sfz" :z-index="50000" :src="baseUrl + form.p2" :preview-src-list="[baseUrl + form.p2]"></el-image>
+            <div class="bs">身份证人徽面</div>
+          </el-col>
+        </el-row>
+      </div>
+    </el-form>
     <div class="mfooter">
-      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button type="primary" @click="submitForm(1)">审核通过</el-button>
+      <el-button type="danger" @click="submitForm(2)">审核不通过</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
     </div>
   </div>
@@ -77,14 +71,7 @@ export default {
   data() {
     return {
       form: {},
-      rules: {
-        idCard: [
-          { required: true, message: "身份证不能为空", trigger: "blur" }
-        ],
-        bankName: [
-          { required: true, message: "开户行不能为空", trigger: "blur" }
-        ],
-      }
+      rules: {}
     };
   },
   props: {
@@ -100,28 +87,21 @@ export default {
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/user/detail/' + this.param.id }).then(response => {
+      this.ajax({ url: '/work/user/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
   },
   methods: {
-    submitForm() {
-      this.$refs["form"].validate(valid => {
+    submitForm(isAuthentication) {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
-          if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/user/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
-          } else {
-              this.ajax({method: 'post',url: '/work/user/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
-          }
+          this.form.isAuthentication=isAuthentication;
+          this.ajax({ method: 'post', url: '/work/user/edit', data: this.form }).then((response) => {
+            this.$modal.msgSuccess('操作成功');
+            this.$layer.close(this.layerid);
+            this.$parent.getList();
+          });
         }
       });
     }

+ 64 - 77
admin-ui/src/views/work/user/index.vue

@@ -1,41 +1,14 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
+    <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 class="inp"/>
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" @keyup.enter.native="handleQuery" clearable class="inp" />
       </el-form-item>
       <el-form-item label="手机号" prop="phone">
-        <el-input v-model="queryParams.phone" placeholder="请输入手机号"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+        <el-input v-model="queryParams.phone" placeholder="请输入手机号" @keyup.enter.native="handleQuery" clearable class="inp" />
       </el-form-item>
       <el-form-item label="身份证" prop="idCard">
-        <el-input v-model="queryParams.idCard" placeholder="请输入身份证"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="开户行" prop="bankName">
-        <el-input v-model="queryParams.bankName" placeholder="请输入开户行"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="银行卡账号" prop="bankAccount">
-        <el-input v-model="queryParams.bankAccount" placeholder="请输入银行卡账号"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="支付宝" prop="alipay">
-        <el-input v-model="queryParams.alipay" placeholder="请输入支付宝"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="身份证人面像" prop="p1">
-        <el-input v-model="queryParams.p1" placeholder="请输入身份证人面像"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="身份证人徽面" prop="p2">
-        <el-input v-model="queryParams.p2" placeholder="请输入身份证人徽面"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="服务公司" prop="serviceCompany">
-        <el-input v-model="queryParams.serviceCompany" placeholder="请输入服务公司"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="是否签署合同" prop="isContract">
-        <el-input v-model="queryParams.isContract" placeholder="请输入是否签署合同"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="合同有效期" prop="contractDate">
-        <el-date-picker clearable v-model="queryParams.contractDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择合同有效期"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="状态" prop="state">
-        <el-input v-model="queryParams.state" placeholder="请输入状态"  @keyup.enter.native="handleQuery" clearable class="inp"/>
+        <el-input v-model="queryParams.idCard" placeholder="请输入身份证" @keyup.enter.native="handleQuery" clearable class="inp" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -43,53 +16,61 @@
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
-        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:user:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:user:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:user:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
-        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:user:edit']">审核</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:user: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="id" align="center" prop="id" />
       <el-table-column label="姓名" align="center" prop="name" />
       <el-table-column label="手机号" align="center" prop="phone" />
       <el-table-column label="身份证" align="center" prop="idCard" />
-      <el-table-column label="开户行" align="center" prop="bankName" />
-      <el-table-column label="银行卡账号" align="center" prop="bankAccount" />
-      <el-table-column label="支付宝" align="center" prop="alipay" />
-      <el-table-column label="身份证人面像" align="center" prop="p1" />
-      <el-table-column label="身份证人徽面" align="center" prop="p2" />
-      <el-table-column label="服务公司" align="center" prop="serviceCompany" />
-      <el-table-column label="是否签署合同" align="center" prop="isContract" />
-      <el-table-column label="合同有效期" align="center" prop="contractDate" width="180">
+      <el-table-column label="实名认证" align="center" prop="isAuthentication" width="130">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.contractDate, '{y}-{m}-{d}') }}</span>
+          <el-tag type="danger" v-if="scope.row.isAuthentication == 0">未实名</el-tag>
+          <el-tag type="success" v-if="scope.row.isAuthentication == 1">已实名</el-tag>
+          <el-tag type="danger" v-if="scope.row.isAuthentication == 2">实名不通过</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="状态" align="center" prop="state" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="签署合同" align="center" prop="isContract" width="130">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:user:edit']">修改</el-button>
+          <el-tag type="danger" v-if="scope.row.isContract == 0">未签署</el-tag>
+          <el-tag type="success" v-if="scope.row.isContract == 1">已签署</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="注册日期" align="center" prop="createTime" />
+      <el-table-column label="账号状态" align="center" prop="state" width="100">
+        <template slot-scope="scope">
+          <div class="switch">
+            <el-switch v-model="scope.row.state" :active-value="0" :width="50" :inactive-value="1" @change="op('change', scope.row)"></el-switch>
+            <span class="zc" v-if="scope.row.state == 0">正常</span>
+            <span class="ty" v-else>禁用</span>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" fixed="right">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:user:edit']">审核</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:user:remove']">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
-          <el-empty></el-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"/>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
   </div>
 </template>
 
 <script>
-import edit from './edit'
+import edit from './edit';
 export default {
-  name: "User",
+  name: 'Users',
   data() {
     return {
       ids: [],
-      showSearch:true,
+      showSearch: true,
       response: {},
       queryParams: {
         pageNum: 1,
@@ -97,14 +78,6 @@ export default {
         name: null,
         phone: null,
         idCard: null,
-        bankName: null,
-        bankAccount: null,
-        alipay: null,
-        p1: null,
-        p2: null,
-        serviceCompany: null,
-        isContract: null,
-        contractDate: null,
         state: null,
         orderByColumn: 'id',
         isAsc: 'desc'
@@ -116,8 +89,8 @@ export default {
   },
   methods: {
     getList() {
-      this.ajax({ url: '/work/user/list', data: this.queryParams }).then(response => {
-            this.response = response;
+      this.ajax({ url: '/work/user/list', data: this.queryParams }).then((response) => {
+        this.response = response;
       });
     },
     handleQuery() {
@@ -125,28 +98,42 @@ export default {
       this.getList();
     },
     resetQuery() {
-      this.resetForm("queryForm");
+      this.resetForm('queryForm');
       this.handleQuery();
     },
     selects(rows) {
-      this.ids = rows.map(item => item.id)
+      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%'});
-          }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id }, title: '审核', width: '60%', height: '70%' });
+      }
+      //账号状态
+      if (tag == 'change') {
+        let text = row.state === 0 ? '启用' : '禁用';
+        this.$confirm('确认要' + text + '该用户吗?', '警告', { type: 'warning' })
+          .then(() => {
+            this.post({ url: '/work/user/edit', data: { id: row.id, state: row.state } })
+              .then((response) => {
+                this.$modal.msgSuccess(text + '成功');
+              })
+              .catch(() => {
+                row.state = row.state === 0 ? 1 : 0;
+              });
+          })
+          .catch(() => {
+            row.state = row.state === 0 ? 1 : 0;
+          });
+      }
     },
     del(row) {
-        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/user/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
-            });
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/user/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
         });
+      });
     }
   }
 };

+ 11 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -1,19 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
@@ -21,10 +7,8 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.TokenService;
@@ -32,6 +16,13 @@ import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+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.util.List;
 
 /**
  * 角色信息
@@ -59,6 +50,9 @@ public class SysRoleController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:role:list')")
     @GetMapping("/list")
     public TableDataInfo list(SysRole role) {
+        if (getLoginUser().getUser().getType() == 1) {
+            role.setCompanyId(getLoginUser().getUser().getCompanyId());
+        }
         startPage();
         List<SysRole> list = roleService.selectRoleList(role);
         return getDataTable(list);
@@ -95,6 +89,7 @@ public class SysRoleController extends BaseController {
         } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) {
             return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
         }
+        role.setCompanyId(getLoginUser().getUser().getCompanyId());
         role.setCreateBy(getUsername());
         return toAjax(roleService.insertRole(role));
 

+ 19 - 20
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -1,24 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletResponse;
-
-import com.ruoyi.framework.web.service.SysPermissionService;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
@@ -31,10 +12,22 @@ import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysPostService;
 import com.ruoyi.system.service.ISysRoleService;
 import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 用户信息
@@ -65,6 +58,9 @@ public class SysUserController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
     public TableDataInfo list(SysUser user) {
+        if (getLoginUser().getUser().getType() == 1) {
+            user.setCompanyId(getLoginUser().getUser().getCompanyId());
+        }
         startPage();
         List<SysUser> list = userService.selectUserList(user);
         for (SysUser sys : list) {
@@ -105,7 +101,9 @@ public class SysUserController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping(value = {"/", "/{userId}"})
     public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
-        userService.checkUserDataScope(userId);
+        if (getLoginUser().getUser().getType() == 0) {
+            userService.checkUserDataScope(userId);
+        }
         AjaxResult ajax = AjaxResult.success();
         List<SysRole> roles = roleService.selectRoleAll();
         ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
@@ -135,6 +133,7 @@ public class SysUserController extends BaseController {
                 && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
             return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
+        user.setCompanyId(getLoginUser().getUser().getCompanyId());
         user.setCreateBy(getUsername());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         return toAjax(userService.insertUser(user));

+ 74 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java

@@ -0,0 +1,74 @@
+package com.ruoyi.web.work.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.work.domain.Company;
+import com.ruoyi.web.work.service.ICompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.rmi.ServerException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 企业管理
+ *
+ * @author lsw
+ * @date 2024-04-16
+ */
+@RestController
+@RequestMapping("/work/company")
+public class CompanyController extends BaseController {
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    private ISysUserService userService;
+
+
+    @PreAuthorize("@ss.hasPermi('work:company:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Company company) {
+        startPage();
+        List<Company> list = companyService.selectList(company);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:company:query')")
+    @GetMapping(value = "/detail/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        Company company= companyService.getById(id);
+        SysUser user=userService.selectUserByCompanyId(id);
+        company.setUserName(user.getUserName());
+        company.setPassword(user.getPassword());
+        return AjaxResult.success(company);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:company:add')")
+    @Log(title = "企业管理", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody Company company) throws ServerException {
+        return companyService.add(company);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:company:edit')")
+    @Log(title = "企业管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody Company company) {
+        return toAjax(companyService.updateById(company));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:company:remove')")
+    @Log(title = "企业管理", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(companyService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 15 - 35
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/PlatformController.java

@@ -1,22 +1,16 @@
 package com.ruoyi.web.work.controller;
 
-import java.util.Arrays;
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.web.work.domain.Platform;
 import com.ruoyi.web.work.service.IPlatformService;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 平台信息
@@ -29,38 +23,24 @@ public class PlatformController extends BaseController {
     @Autowired
     private IPlatformService platformService;
 
-    @PreAuthorize("@ss.hasPermi('work:platform:list')")
-    @GetMapping("/list")
-    public TableDataInfo list(Platform platform){
-        startPage();
-        List<Platform> list = platformService.selectList(platform);
-        return getDataTable(list);
-    }
+    @Autowired
+    private RedisCache redisCache;
 
     @PreAuthorize("@ss.hasPermi('work:platform:query')")
-    @GetMapping(value = "/detail/{id}")
-    public AjaxResult detail(@PathVariable("id") Long id){
-        return AjaxResult.success(platformService.getById(id));
+    @GetMapping(value = "/detail")
+    public AjaxResult detail(){
+        return AjaxResult.success(platformService.getById(1));
     }
 
-    @PreAuthorize("@ss.hasPermi('work:platform:add')")
-    @Log(title = "平台信息", businessType = BusinessType.INSERT)
-    @PostMapping("/add")
-    public AjaxResult add(@RequestBody Platform platform){
-        return toAjax(platformService.save(platform));
-    }
 
     @PreAuthorize("@ss.hasPermi('work:platform:edit')")
     @Log(title = "平台信息", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     public AjaxResult edit(@RequestBody Platform platform){
-        return toAjax(platformService.updateById(platform));
-    }
-
-    @PreAuthorize("@ss.hasPermi('work:platform:remove')")
-    @Log(title = "平台信息", businessType = BusinessType.DELETE)
-    @GetMapping("/remove/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids){
-        return toAjax(platformService.removeByIds(Arrays.asList(ids)));
+        boolean row = platformService.updateById(platform);
+        if (row) {
+            redisCache.setCacheObject(CacheConstants.APP_PLATFORM, platform);
+        }
+        return toAjax(row);
     }
 }

+ 27 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/ProjectController.java

@@ -1,25 +1,26 @@
 package com.ruoyi.web.work.controller;
 
-import java.util.Arrays;
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.CacheConstants;
 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.core.redis.RedisCache;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.web.work.domain.Platform;
 import com.ruoyi.web.work.domain.Project;
 import com.ruoyi.web.work.service.IProjectService;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 项目管理
+ *
  * @author lsw
  * @date 2024-04-15
  */
@@ -29,9 +30,15 @@ public class ProjectController extends BaseController {
     @Autowired
     private IProjectService projectService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     @PreAuthorize("@ss.hasPermi('work:project:list')")
     @GetMapping("/list")
-    public TableDataInfo list(Project project){
+    public TableDataInfo list(Project project) {
+        if (getLoginUser().getUser().getType() == 1) {
+            project.setCompanyId(getLoginUser().getUser().getCompanyId());
+        }
         startPage();
         List<Project> list = projectService.selectList(project);
         return getDataTable(list);
@@ -39,28 +46,32 @@ public class ProjectController extends BaseController {
 
     @PreAuthorize("@ss.hasPermi('work:project:query')")
     @GetMapping(value = "/detail/{id}")
-    public AjaxResult detail(@PathVariable("id") Long id){
+    public AjaxResult detail(@PathVariable("id") Long id) {
         return AjaxResult.success(projectService.getById(id));
     }
 
     @PreAuthorize("@ss.hasPermi('work:project:add')")
     @Log(title = "项目管理", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody Project project){
+    public AjaxResult add(@RequestBody Project project) {
+        Platform platform = redisCache.getCacheObject(CacheConstants.APP_PLATFORM);
+        project.setCompanyId(getLoginUser().getUser().getCompanyId());
+        project.setNum(StringUtils.generateNumber());
+        project.setServiceCompany(platform.getServiceCompany());
         return toAjax(projectService.save(project));
     }
 
     @PreAuthorize("@ss.hasPermi('work:project:edit')")
     @Log(title = "项目管理", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@RequestBody Project project){
+    public AjaxResult edit(@RequestBody Project project) {
         return toAjax(projectService.updateById(project));
     }
 
     @PreAuthorize("@ss.hasPermi('work:project:remove')")
     @Log(title = "项目管理", businessType = BusinessType.DELETE)
     @GetMapping("/remove/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids){
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(projectService.removeByIds(Arrays.asList(ids)));
     }
 }

+ 74 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Company.java

@@ -0,0 +1,74 @@
+package com.ruoyi.web.work.domain;
+
+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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+@Data
+@TableName(value = "tb_company")
+@Accessors(chain = true)
+public class Company{
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "企业名称")
+    private String companyName;
+
+    @ApiModelProperty(value = "企业方负责人")
+    private String director;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "联系地址")
+    private String address;
+
+    @ApiModelProperty(value = "开户行")
+    private String bankName;
+
+    @ApiModelProperty(value = "对公账号")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "开户许可证照片")
+    private String b1;
+
+    @ApiModelProperty(value = "营业执照")
+    private String business;
+
+    @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;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private String userName;
+
+    @TableField(exist = false)
+    private String password;
+
+}

+ 3 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Project.java

@@ -39,15 +39,15 @@ public class Project{
     @ApiModelProperty(value = "服务公司")
     private String serviceCompany;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "开始时间")
     private Date sData;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "结束时间")
     private Date eData;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "结算日")
     private Date bData;
 

+ 19 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/CompanyMapper.java

@@ -0,0 +1,19 @@
+package com.ruoyi.web.work.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.work.domain.Company;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+public interface CompanyMapper extends BaseMapper<Company> {
+    List<Company> selectList(Company company);
+
+    @Select("SELECT * FROM tb_company WHERE company_name=#{companyName}")
+    Company selectByCompanyName(@Param("companyName")String companyName);
+}

+ 19 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java

@@ -0,0 +1,19 @@
+package com.ruoyi.web.work.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.web.work.domain.Company;
+
+import java.rmi.ServerException;
+import java.util.List;
+
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+public interface ICompanyService extends IService<Company>{
+    List<Company> selectList(Company company);
+
+    AjaxResult add(Company company) throws ServerException;
+
+}

+ 58 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java

@@ -0,0 +1,58 @@
+package com.ruoyi.web.work.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.work.domain.Company;
+import com.ruoyi.web.work.mapper.CompanyMapper;
+import com.ruoyi.web.work.service.ICompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.rmi.ServerException;
+import java.util.List;
+
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+@Service
+public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements ICompanyService {
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @Override
+    public List<Company> selectList(Company company) {
+        return companyMapper.selectList(company);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public AjaxResult add(Company company) throws ServerException {
+        Company bean = companyMapper.selectByCompanyName(company.getCompanyName());
+        if (bean != null) {
+            return AjaxResult.error("该企业已存在");
+        }
+        save(company);
+        SysUser user = new SysUser();
+        user.setUserName(company.getUserName());
+        user.setPassword(company.getPassword());
+        user.setRoleIds(new Long[]{2l});
+        user.setType(1);
+        user.setNickName(company.getDirector());
+        user.setCompanyId(company.getId());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
+            throw new ServerException("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        userService.insertUser(user);
+        return AjaxResult.success();
+    }
+}

+ 23 - 0
ruoyi-admin/src/main/resources/mapper/work/CompanyMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.web.work.mapper.CompanyMapper">
+    
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.Company">
+        select * from tb_company
+        <where>  
+            <if test="companyName != null  and companyName != ''"> and company_name like concat('%', #{companyName}, '%')</if>
+            <if test="director != null  and director != ''"> and director = #{director}</if>
+            <if test="email != null  and email != ''"> and email = #{email}</if>
+            <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+            <if test="address != null  and address != ''"> and address = #{address}</if>
+            <if test="bankName != null  and bankName != ''"> and bank_name like concat('%', #{bankName}, '%')</if>
+            <if test="bankAccount != null  and bankAccount != ''"> and bank_account = #{bankAccount}</if>
+            <if test="b1 != null  and b1 != ''"> and b1 = #{b1}</if>
+            <if test="business != null  and business != ''"> and business = #{business}</if>
+            <if test="state != null "> and state = #{state}</if>
+        </where>
+    </select>
+
+</mapper>

+ 2 - 21
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -92,26 +92,7 @@ public class CacheConstants {
     public static final String APP_BANNER_KEY = "app_banner:";
 
     /**
-     * 金额统计 redis key
+     * 平台信息 redis key
      */
-    public static final String APP_TJ_KEY = "app_tj:";
-
-    /**
-     * 通道设备状态
-     */
-    public static final String CHANNEL = "channel:";
-
-    /**
-     * 散货入场车辆
-     */
-    public static final String SCARS = "scars:";
-
-    /**
-     * 集装箱入场车辆
-     */
-    public static final String JCARS = "jcars:";
-
-    public static final String CARLOG = "carLog:";
-
-    public static final String REALTIME= "realTime:";
+    public static final String APP_PLATFORM= "app_platform:";
 }

+ 16 - 5
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java

@@ -1,13 +1,14 @@
 package com.ruoyi.common.core.domain.entity;
 
-import java.util.Set;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.annotation.Excel.ColumnType;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Set;
 
 /**
  * 角色表 sys_role
@@ -26,6 +27,8 @@ public class SysRole extends BaseEntity
     @Excel(name = "角色名称")
     private String roleName;
 
+    private Long companyId;
+
     /** 角色权限 */
     @Excel(name = "角色权限")
     private String roleKey;
@@ -63,6 +66,14 @@ public class SysRole extends BaseEntity
     /** 角色菜单权限 */
     private Set<String> permissions;
 
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
     public SysRole()
     {
 

+ 30 - 6
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -1,17 +1,19 @@
 package com.ruoyi.common.core.domain.entity;
 
-import java.util.Date;
-import java.util.List;
-import javax.validation.constraints.*;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.annotation.Excel.ColumnType;
 import com.ruoyi.common.annotation.Excel.Type;
 import com.ruoyi.common.annotation.Excels;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.xss.Xss;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 用户对象 sys_user
@@ -127,6 +129,26 @@ public class SysUser extends BaseEntity {
      */
     private Long roleId;
 
+    private Integer type;
+
+    private Long companyId;
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
     public SysUser() {
 
     }
@@ -325,6 +347,8 @@ public class SysUser extends BaseEntity {
                 .append("updateTime", getUpdateTime())
                 .append("remark", getRemark())
                 .append("dept", getDept())
+                .append("type", getType())
+                .append("companyId", getCompanyId())
                 .toString();
     }
 }

+ 22 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java

@@ -16,6 +16,8 @@ import javax.xml.bind.DatatypeConverter;
 import java.io.*;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -695,7 +697,27 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
         }
         return decryptStr;
     }
+    public static String generateNumber() {
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
 
+        // 设置格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+
+        // 格式化当前时间
+        String formattedNow = now.format(formatter);
+
+        // 生成3个随机数
+        Random random = new Random();
+        int random1 = random.nextInt(10);
+        int random2 = random.nextInt(10);
+        int random3 = random.nextInt(10);
+
+        // 生成编号
+        String number = formattedNow + random1 + random2 + random3;
+
+        return number;
+    }
     public static void main(String[] args) {
         String str="713E872756B56B4791B2C4A8873F071DE730CC46DDE4A65666AB8B01F947F7EB64F4DC09B1D42F541E53F2F2DE4BB286805D9DB9FFC5F0B66B281890B47E46732EDBD0885CA7E2163E43AA5F85E7442E7A1635BEC01F67A59B243E98346ACAFE25D2F564F219BF5D058E5FD30DEF79386C83CA024D7E21ED3C34B0AD192300A4ADE7F4B1AF65B356AD0B5B4915EC230D2C34D11578AFD70B32D6722EB2AF5ABCDA6115C3E0D9224F252D6AB309C07E2E";
         System.out.println(AESDecrypt(str));

+ 3 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java

@@ -114,7 +114,9 @@ public class SysPermissionService {
             LoginUser loginUser = redisCache.getCacheObject(key);
             if (loginUser != null && loginUser.getUser().getUserId().equals(userId)) {
                 loginUser.setUser(userService.selectUserById(loginUser.getUser().getUserId()));
-                loginUser.setPermissions(getMenuPermission(loginUser.getUser()));
+                if(!getMenuPermission(loginUser.getUser()).isEmpty()){
+                    loginUser.setPermissions(getMenuPermission(loginUser.getUser()));
+                }
                 tokenService.setLoginUser(loginUser);
             }
         }

+ 1 - 1
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
 #foreach($column in $columns)
 #if($column.query)
 #set($dictType=$column.dictType)

+ 4 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java

@@ -1,7 +1,9 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
 import com.ruoyi.common.core.domain.entity.SysRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 角色表 数据层
@@ -63,7 +65,7 @@ public interface SysRoleMapper
      * @param roleName 角色名称
      * @return 角色信息
      */
-    public SysRole checkRoleNameUnique(String roleName);
+    public SysRole checkRoleNameUnique(@Param("roleName")String roleName,@Param("companyId")Long companyId);
 
     /**
      * 校验角色权限是否唯一

+ 5 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -1,8 +1,9 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户表 数据层
@@ -124,4 +125,6 @@ public interface SysUserMapper
      * @return 结果
      */
     public SysUser checkEmailUnique(String email);
+
+    SysUser selectUserByCompanyId(@Param("companyId") Long companyId);
 }

+ 4 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -1,9 +1,9 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
-
 import com.ruoyi.common.core.domain.entity.SysUser;
 
+import java.util.List;
+
 /**
  * 用户 业务层
  *
@@ -50,6 +50,8 @@ public interface ISysUserService {
      */
     public SysUser selectUserById(Long userId);
 
+    SysUser selectUserByCompanyId(Long companyId);
+
     /**
      * 根据用户ID查询用户所属角色组
      *

+ 6 - 10
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java

@@ -1,14 +1,5 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -25,6 +16,11 @@ import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysRoleMenuMapper;
 import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.service.ISysRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
 
 /**
  * 角色 业务层处理
@@ -137,7 +133,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
     @Override
     public String checkRoleNameUnique(SysRole role) {
         Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
-        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
+        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName(),SecurityUtils.getLoginUser().getUser().getCompanyId());
         if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }

+ 17 - 16
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -1,16 +1,5 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.validation.Validator;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -23,13 +12,20 @@ import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.domain.SysUserPost;
 import com.ruoyi.system.domain.SysUserRole;
-import com.ruoyi.system.mapper.SysPostMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysUserPostMapper;
-import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 用户 业务层处理
@@ -119,6 +115,11 @@ public class SysUserServiceImpl implements ISysUserService {
         return userMapper.selectUserById(userId);
     }
 
+    @Override
+    public SysUser selectUserByCompanyId(Long companyId) {
+        return userMapper.selectUserByCompanyId(companyId);
+    }
+
     /**
      * 查询用户所属角色组
      *

+ 12 - 3
ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"           column="update_by"             />
 		<result property="updateTime"         column="update_time"           />
 		<result property="remark"             column="remark"                />
+		<result property="companyId"    column="company_id"       />
 	</resultMap>
 	
 	<sql id="selectRoleVo">
-	    select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
+	    select distinct r.role_id,r.company_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
             r.status, r.del_flag, r.create_time, r.remark 
         from sys_role r
 	        left join sys_user_role ur on ur.role_id = r.role_id
@@ -33,6 +34,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		where r.del_flag = '0'
+		<if test="companyId != null">
+			AND r.company_id = #{companyId}
+		</if>
+		<if test="companyId == null">
+			AND r.company_id is null
+		</if>
 		<if test="roleId != null and roleId != 0">
 			AND r.role_id = #{roleId}
 		</if>
@@ -83,9 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		WHERE r.del_flag = '0' and u.user_name = #{userName}
 	</select>
 	
-	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
+	<select id="checkRoleNameUnique" parameterType="SysRole" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
-		 where r.role_name=#{roleName} and r.del_flag = '0' limit 1
+		 where r.role_name=#{roleName} and r.company_id=#{companyId} and r.del_flag = '0' limit 1
 	</select>
 	
 	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
@@ -104,6 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptCheckStrictly != null">dept_check_strictly,</if>
  			<if test="status != null and status != ''">status,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+		    <if test="companyId != null">company_id,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			create_time
  		)values(
@@ -116,6 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+		    <if test="companyId != null">#{companyId},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			sysdate()
  		)

+ 17 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,6 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy"     column="update_by"    />
         <result property="updateTime"   column="update_time"  />
         <result property="remark"       column="remark"       />
+		<result property="type"         column="type"       />
+		<result property="companyId"    column="company_id"       />
         <association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
         <collection  property="roles"   javaType="java.util.List"           resultMap="RoleResult" />
     </resultMap>
@@ -47,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.user_id,u.type,u.company_id,u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -63,6 +65,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="userId != null and userId != 0">
 			AND u.user_id = #{userId}
 		</if>
+		<if test="companyId != null">
+			AND u.company_id = #{companyId}
+		</if>
+		<if test="companyId == null">
+			AND u.company_id is null
+		</if>
 		<if test="userName != null and userName != ''">
 			AND concat(u.user_name,u.nick_name) like concat('%', #{userName}, '%')
 		</if>
@@ -133,6 +141,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1
 	</select>
+
+	<select id="selectUserByCompanyId" parameterType="Long" resultMap="SysUserResult">
+		SELECT * FROM sys_user WHERE company_id=#{companyId}
+	</select>
 	
 	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
@@ -156,6 +168,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+		    <if test="type != null">type,</if>
+		    <if test="companyId != null">company_id,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -170,6 +184,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+		    <if test="type != null">#{type},</if>
+		    <if test="companyId != null">#{companyId},</if>
  			sysdate()
  		)
 	</insert>