lsw před 1 rokem
rodič
revize
d1d5af6178
28 změnil soubory, kde provedl 239 přidání a 147 odebrání
  1. 0 1
      admin-ui/public/js/jquery.min.js
  2. 0 1
      admin-ui/public/js/layer/extend/layer.ext.js
  3. 0 1
      admin-ui/public/js/layer/layer.js
  4. binární
      admin-ui/public/js/layer/skin/default/icon-ext.png
  5. binární
      admin-ui/public/js/layer/skin/default/icon.png
  6. binární
      admin-ui/public/js/layer/skin/default/loading-0.gif
  7. binární
      admin-ui/public/js/layer/skin/default/loading-1.gif
  8. binární
      admin-ui/public/js/layer/skin/default/loading-2.gif
  9. 0 6
      admin-ui/public/js/layer/skin/layer.css
  10. 0 7
      admin-ui/public/js/layer/skin/layer.ext.css
  11. 5 0
      admin-ui/src/components/ImageUpload/index.vue
  12. 1 1
      admin-ui/src/components/companyInfo.vue
  13. 24 18
      admin-ui/src/views/work/company/detail.vue
  14. 36 22
      admin-ui/src/views/work/company/edit.vue
  15. 14 15
      admin-ui/src/views/work/company/index.vue
  16. 1 1
      admin-ui/src/views/work/feedback/index.vue
  17. 11 12
      admin-ui/src/views/work/project/edit.vue
  18. 1 1
      admin-ui/src/views/work/project/packages/index.vue
  19. 8 3
      admin-ui/src/views/work/statement/pay/edit.vue
  20. 12 6
      admin-ui/src/views/work/statement/pay/index.vue
  21. 30 8
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java
  22. 2 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/RelateController.java
  23. 24 1
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Company.java
  24. 20 0
      ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/LockDto.java
  25. 4 2
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java
  26. 36 30
      ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java
  27. 3 0
      ruoyi-admin/src/main/resources/mapper/work/CompanyMapper.xml
  28. 7 11
      ruoyi-common/src/main/java/com/ruoyi/common/utils/ImageCompressUtil.java

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
admin-ui/public/js/jquery.min.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
admin-ui/public/js/layer/extend/layer.ext.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
admin-ui/public/js/layer/layer.js


binární
admin-ui/public/js/layer/skin/default/icon-ext.png


binární
admin-ui/public/js/layer/skin/default/icon.png


binární
admin-ui/public/js/layer/skin/default/loading-0.gif


binární
admin-ui/public/js/layer/skin/default/loading-1.gif


binární
admin-ui/public/js/layer/skin/default/loading-2.gif


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 6
admin-ui/public/js/layer/skin/layer.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 7
admin-ui/public/js/layer/skin/layer.ext.css


+ 5 - 0
admin-ui/src/components/ImageUpload/index.vue

@@ -17,6 +17,7 @@
       :on-preview="handlePictureCardPreview"
       :accept="accept"
       :class="{ hide: this.fileList.length >= this.limit }"
+      :disabled="read"
     >
       <i class="el-icon-plus"></i>
     </el-upload>
@@ -40,6 +41,10 @@ import { getToken } from '@/utils/auth';
 
 export default {
   props: {
+    read: {
+      type: Boolean,
+      default: false
+    },
     value: [String, Object, Array],
     // 图片数量限制
     accept: {

+ 1 - 1
admin-ui/src/components/companyInfo.vue

@@ -47,7 +47,7 @@ export default {
   methods: {
     op(tag, row) {
       if (tag == 'info') {
-        this.iframe({ obj: company, param: { id: this.form.id, detail: true }, title: '企业信息', width: '60%', height: '75%' });
+        this.iframe({ obj: company, param: { id: this.form.id, detail: true }, title: '企业信息', width: '60%', height: '70%' });
       }
       if (tag == 'qr') {
         this.iframe({ obj: qr, param: {}, title: '查看企业二维码', width: '27%', height: '45%' });

+ 24 - 18
admin-ui/src/views/work/company/detail.vue

@@ -6,47 +6,53 @@
           <div class="bsg"></div>
           <div class="tit">企业信息</div>
         </div>
+        <el-form-item label="企业名称" prop="companyName">
+          <el-input v-model="form.companyName" :disabled="param.detail" clearable />
+        </el-form-item>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="企业名称" prop="companyName">
-              <el-input v-model="form.companyName" placeholder="请输入企业名称" :disabled="param.detail" clearable />
+            <el-form-item label="企业负责人" prop="director">
+              <el-input v-model="form.director" clearable :disabled="param.detail" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="企业负责人" prop="director">
-              <el-input v-model="form.director" placeholder="请输入企业方负责人" clearable :disabled="param.detail" />
+            <el-form-item label="手机号" prop="phone">
+              <el-input v-model="form.phone" clearable :disabled="param.detail" />
             </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 :disabled="param.detail" />
+            <el-form-item label="联系地址" prop="address">
+              <el-input type="textarea" v-model="form.address" rows="4" clearable :disabled="param.detail" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="联系地址" prop="address">
-              <el-input v-model="form.address" placeholder="请输入联系地址" clearable :disabled="param.detail" />
+            <el-form-item label="营业执照" prop="business">
+              <ImageUpload v-model="form.business" :isShowTip="false" :limit="1" :read="param.detail"></ImageUpload>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="营业执照" prop="business">
-          <ImageUpload v-model="form.business" :isShowTip="false" :limit="1"></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 :disabled="param.detail" />
-        </el-form-item>
-        <el-form-item label="对公账号" prop="bankAccount">
-          <el-input v-model="form.bankAccount" placeholder="请输入对公账号" clearable :disabled="param.detail" />
-        </el-form-item>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="开户行" prop="bankName">
+              <el-input v-model="form.bankName" :disabled="param.detail" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="对公账号" prop="bankAccount">
+              <el-input v-model="form.bankAccount" :disabled="param.detail" />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="开户许可证" prop="b1">
-          <ImageUpload v-model="form.b1" :isShowTip="false" :limit="1"></ImageUpload>
+          <ImageUpload v-model="form.b1" :isShowTip="false" :limit="1" :read="param.detail"></ImageUpload>
         </el-form-item>
       </div>
     </el-form>

+ 36 - 22
admin-ui/src/views/work/company/edit.vue

@@ -6,47 +6,53 @@
           <div class="bsg"></div>
           <div class="tit">企业信息</div>
         </div>
+        <el-form-item label="企业名称" prop="companyName">
+          <el-input v-model="form.companyName" placeholder="请输入企业名称" :disabled="param.detail" clearable />
+        </el-form-item>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="企业名称" prop="companyName">
-              <el-input v-model="form.companyName" placeholder="请输入企业名称" :disabled="param.detail" clearable />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
             <el-form-item label="企业负责人" prop="director">
               <el-input v-model="form.director" placeholder="请输入企业方负责人" clearable :disabled="param.detail" />
             </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 :disabled="param.detail" />
             </el-form-item>
           </el-col>
+        </el-row>
+        <el-row>
           <el-col :span="12">
             <el-form-item label="联系地址" prop="address">
-              <el-input v-model="form.address" placeholder="请输入联系地址" clearable :disabled="param.detail" />
+              <el-input type="textarea" v-model="form.address" rows="4" placeholder="请输入联系地址" clearable :disabled="param.detail" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="营业执照" prop="business">
+              <ImageUpload v-model="form.business" :isShowTip="false" :limit="1" :read="param.detail"></ImageUpload>
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="营业执照" prop="business">
-          <ImageUpload v-model="form.business" :isShowTip="false" :limit="1"></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 :disabled="param.detail" />
-        </el-form-item>
-        <el-form-item label="对公账号" prop="bankAccount">
-          <el-input v-model="form.bankAccount" placeholder="请输入对公账号" clearable :disabled="param.detail" />
-        </el-form-item>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="开户行" prop="bankName">
+              <el-input v-model="form.bankName" placeholder="请输入开户行" clearable :disabled="param.detail" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="对公账号" prop="bankAccount">
+              <el-input v-model="form.bankAccount" placeholder="请输入对公账号" clearable :disabled="param.detail" />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="开户许可证" prop="b1">
-          <ImageUpload v-model="form.b1" :isShowTip="false" :limit="1"></ImageUpload>
+          <ImageUpload v-model="form.b1" :isShowTip="false" :limit="1" :read="param.detail"></ImageUpload>
         </el-form-item>
       </div>
       <div class="bos" v-if="!form.id">
@@ -60,12 +66,12 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="登录账号" prop="userName">
-              <el-input v-model="form.userName" placeholder="请输入手机号" auto-complete="user" clearable />
+              <el-input v-model="form.userName" placeholder="请输入登录账号" auto-complete="user" 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" auto-complete="password" />
+              <el-input type="password" v-model="form.password" placeholder="默认123456" auto-complete="password" show-password />
             </el-form-item>
           </el-col>
         </el-row>
@@ -86,13 +92,21 @@ export default {
       rules: {
         companyName: [{ required: true, message: '不能为空', trigger: 'blur' }],
         director: [{ required: true, message: '不能为空', trigger: 'blur' }],
-        phone: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        phone: [
+          { required: true, message: '不能为空', trigger: 'blur' },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            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' }],
-        userName: [{ required: true, message: '账号不能为空', trigger: 'blur' }]
+        userName: [{ required: true, message: '账号不能为空', trigger: 'blur' }],
+        password: [{ required: true, message: '密码不能为空', trigger: 'blur' }]
       }
     };
   },

+ 14 - 15
admin-ui/src/views/work/company/index.vue

@@ -22,12 +22,11 @@
       </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>
+      <el-button type="primary" icon="el-icon-plus" @click="op('add')" v-hasPermi="['work:company:add']">新增</el-button>
+      <el-button type="primary" icon="el-icon-download" @click="handleExport" v-hasPermi="['work:company:export']">导出</el-button>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+    <el-table :data="response.rows" border height="calc(100vh - 270px)">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="企业名称" align="left" prop="companyName" />
       <el-table-column label="企业方负责人" align="center" prop="director" width="120" />
@@ -65,7 +64,6 @@ export default {
   name: 'Company',
   data() {
     return {
-      ids: [],
       showSearch: true,
       response: {},
       dateRange: [],
@@ -103,26 +101,23 @@ export default {
       this.dateRange = [];
       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: '85%' });
+        this.iframe({ obj: edit, param: {}, title: '新增企业', width: '60%', height: '80%' });
       }
-      const id = row.id || this.ids[0];
+      const id = row.id;
       if (tag == 'detail') {
-        this.iframe({ obj: edit, param: { id: id, detail: true }, title: '查看企业信息', width: '60%', height: '75%' });
+        this.iframe({ obj: edit, param: { id: id, detail: true }, title: '查看企业信息', width: '60%', height: '70%' });
       }
       if (tag == 'edit') {
-        this.iframe({ obj: edit, param: { id: id }, title: '编辑企业', width: '60%', height: '80%' });
+        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' })
+        this.$confirm('确认要' + text + '该企业? 停用后该企业所有账号都停用', '警告', { type: 'warning' })
           .then(() => {
-            this.post({ url: '/work/company/edit', data: { id: row.id, state: row.state } })
+            this.post({ url: '/work/company/lock', data: { id: row.id, state: row.state } })
               .then((response) => {
                 this.$modal.msgSuccess(text + '成功');
               })
@@ -137,11 +132,15 @@ export default {
     },
     del(row) {
       this.$confirm('是否确认删除选中企业?删除后该企业下的所有账号都被删除', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/company/remove/' + (row.id || this.ids) }).then((response) => {
+        this.get({ url: '/work/company/remove/' + row.id }).then((response) => {
           this.$modal.msgSuccess('删除成功');
           this.getList();
         });
       });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('/work/company/export', { ...this.queryParams }, '企业信息.xlsx');
     }
   }
 };

+ 1 - 1
admin-ui/src/views/work/feedback/index.vue

@@ -44,7 +44,7 @@
       <el-table-column label="创建时间" align="center" prop="createTime" width="200" />
       <el-table-column label="操作" align="center" width="200">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:project:list']">详情</el-button>
+          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:feedback:edit']">详情</el-button>
           <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:feedback:edit']" v-if="scope.row.state == 0">回复</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:feedback:remove']">删除</el-button>
         </template>

+ 11 - 12
admin-ui/src/views/work/project/edit.vue

@@ -14,14 +14,14 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="项目编号" prop="num">
-              <el-input v-model="form.num" placeholder="自动根据年月日生成" disabled/>
+              <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="startDate">
-              <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :disabled="param.detail" style="width: 100% !important"></el-date-picker>
+            <el-form-item label="项目周期" prop="dateRange">
+              <el-date-picker v-model="form.dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :disabled="param.detail" style="width: 100% !important"></el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -46,12 +46,10 @@
 export default {
   data() {
     return {
-      dateRange: [],
-      form: {},
+      form: { dateRange: [] },
       rules: {
         projectName: [{ required: true, message: '不能为空', trigger: 'blur' }],
-        startDate: [{ required: true, message: '不能为空', trigger: 'blur' }],
-        finishDate: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        dateRange: [{ required: true, message: '不能为空', trigger: 'blur' }],
         balanceDate: [{ required: true, message: '不能为空', trigger: 'blur' }]
       }
     };
@@ -70,17 +68,18 @@ export default {
   mounted() {
     if (this.param.id) {
       this.ajax({ url: '/work/project/detail/' + this.param.id }).then((response) => {
+        response.data.dateRange=[];
         this.form = response.data;
-        this.dateRange.push(this.form.startDate);
-        this.dateRange.push(this.form.finishDate);
+        this.form.dateRange.push(this.form.startDate);
+        this.form.dateRange.push(this.form.finishDate);
       });
     }
   },
   methods: {
     submitForm() {
-      if (this.dateRange) {
-        this.form.startDate = this.dateRange[0];
-        this.form.finishDate = this.dateRange[1];
+      if (this.form.dateRange) {
+        this.form.startDate = this.form.dateRange[0];
+        this.form.finishDate = this.form.dateRange[1];
       }
       this.$refs['form'].validate((valid) => {
         if (valid) {

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

@@ -22,7 +22,7 @@
       <el-table-column label="身份证" align="center" prop="idCard" />
       <el-table-column label="手机号" align="center" prop="phone" width="120" />
       <el-table-column label="支付宝账号" align="center" prop="alipay" />
-      <el-table-column label="上传凭证" align="center" width="130">
+      <el-table-column label="接包凭证" align="center" width="130">
         <template slot-scope="scope">
           <el-tag type="danger" v-if="scope.row.audit == 0">待上传</el-tag>
           <el-tag type="info" v-if="scope.row.audit == 1">待审核</el-tag>

+ 8 - 3
admin-ui/src/views/work/statement/pay/edit.vue

@@ -15,7 +15,12 @@
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <div></div>
+    <div class="jlu">
+      <span class="sp">共计应付款:{{ param.form.money }}元</span>
+      <span class="sp">发放业务费:{{ param.form.realMoney }}元</span>
+      <span class="sp">综合服务费:{{ param.form.serviceMoney }}元</span>
+      <span class="sp">应结算人数:{{ param.form.peoples }}人</span>
+    </div>
     <el-table :data="response.rows" border height="400">
       <el-table-column type="index" label="序号" align="center" width="70" />
       <el-table-column label="姓名" align="center" prop="name" width="100" />
@@ -37,7 +42,7 @@
       </template>
     </el-table>
     <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
-    <div class="mfooter">
+    <div class="mfooter" v-if="!param.detail">
       <el-button type="primary" @click="submitForm">确认发放</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
     </div>
@@ -72,7 +77,7 @@ export default {
       type: String
     }
   },
-  created() {
+  mounted() {
     this.queryParams.statementId = this.param.form.id;
     this.getList();
   },

+ 12 - 6
admin-ui/src/views/work/statement/pay/index.vue

@@ -20,12 +20,14 @@
     </el-form>
     <el-table :data="response.rows" border height="calc(100vh - 235px)">
       <el-table-column type="index" label="序号" align="center" width="70" />
-      <el-table-column label="结算单号" align="center" prop="num" />
+      <el-table-column label="结算单号" align="center" prop="num" width="180" />
       <el-table-column label="结算企业" align="center" width="200">
         <template slot-scope="scope">
-          <div class="omit" :title="scope.row.companyName">{{ scope.row.companyName }}</div>
+          <div class="omit pon" :title="scope.row.companyName" @click="op('company', scope.row)">{{ scope.row.companyName }}</div>
         </template>
       </el-table-column>
+      <el-table-column label="结算项目" align="center" prop="projectName" width="170" />
+      <el-table-column label="结算批次" align="center" prop="batchName" width="170" />
       <el-table-column label="结算人数" align="center" prop="peoples" width="110" />
       <el-table-column label="结算金额(元)" align="center" prop="money" width="125" />
       <el-table-column label="发放业务费(元)" align="center" prop="realMoney" width="125" />
@@ -37,7 +39,7 @@
         </template>
       </el-table-column>
       <el-table-column label="创建日期" align="center" prop="giveTime" width="160" />
-      <el-table-column label="操作" align="center" width="160">
+      <el-table-column label="操作" align="center" width="160" fixed="right">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)">详情</el-button>
           <el-button size="mini" type="text" icon="el-icon-s-promotion" @click="op('ok', scope.row)" v-hasPermi="['work:statement:ok']" v-if="scope.row.give === 1">发放</el-button>
@@ -53,6 +55,7 @@
 
 <script>
 import edit from './edit';
+import company from '@/views/work/company/edit';
 export default {
   data() {
     return {
@@ -63,7 +66,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         num: null,
-        give:null,
+        give: null,
         orderByColumn: 's.id',
         isAsc: 'desc'
       }
@@ -93,11 +96,14 @@ export default {
     },
     op(tag, row) {
       const id = row.id;
+      if (tag == 'company') {
+        this.iframe({ obj: company, param: { id: row.companyId, detail: true }, title: '查看企业信息', width: '60%', height: '75%' });
+      }
       if (tag == 'detail') {
-        this.iframe({ obj: edit, param: { id: id, detail: true }, title: '查看详情', width: '75%', height: '65%' });
+        this.iframe({ obj: edit, param: { form: row, detail: true }, title: '查看详情', width: '75%', height: '65%' });
       }
       if (tag == 'ok') {
-        this.iframe({ obj: edit, param: { form: row, detail: true }, title: '发放业务费', width: '75%', height: '65%' });
+        this.iframe({ obj: edit, param: { form: row }, title: '发放业务费', width: '75%', height: '65%' });
       }
     }
   }

+ 30 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/CompanyController.java

@@ -5,13 +5,18 @@ import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.web.work.domain.Company;
+import com.ruoyi.web.work.domain.dto.LockDto;
 import com.ruoyi.web.work.mapper.CommonMapper;
 import com.ruoyi.web.work.service.ICompanyService;
 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.rmi.ServerException;
 import java.util.List;
 import java.util.Map;
@@ -60,23 +65,40 @@ public class CompanyController extends BaseController {
     }
 
     @PreAuthorize("@ss.hasPermi('work:company:add')")
-    @Log(title = "企业管理", businessType = BusinessType.INSERT)
+    @Log(title = "新增企业", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody Company company) throws ServerException {
+    public AjaxResult add(@Validated @RequestBody Company company) throws ServerException {
         return companyService.add(company);
     }
 
     @PreAuthorize("@ss.hasPermi('work:company:edit')")
-    @Log(title = "企业管理", businessType = BusinessType.UPDATE)
+    @Log(title = "编辑企业", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@RequestBody Company company) throws ServerException {
+    public AjaxResult edit(@Validated @RequestBody Company company) throws ServerException {
         return companyService.edit(company);
     }
 
+    @PreAuthorize("@ss.hasPermi('work:company:lock')")
+    @Log(title = "锁定/解锁企业", businessType = BusinessType.UPDATE)
+    @PostMapping("/lock")
+    public AjaxResult lock(@Validated @RequestBody LockDto dto) throws ServerException {
+        return companyService.lock(dto);
+    }
+
     @PreAuthorize("@ss.hasPermi('work:company:remove')")
-    @Log(title = "企业管理", businessType = BusinessType.DELETE)
-    @GetMapping("/remove/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids) {
-        return toAjax(companyService.remove(ids));
+    @Log(title = "删除企业", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{id}")
+    public AjaxResult remove(@PathVariable Long id) throws ServerException {
+        return companyService.remove(id);
+    }
+
+    @Log(title = "导出企业", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('work:company:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, Company company) {
+        PageUtils.orderBy("c.id desc");
+        List<Company> list = companyService.selectList(company);
+        ExcelUtil<Company> util = new ExcelUtil<Company>(Company.class);
+        util.exportExcel(response, list, "企业信息");
     }
 }

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/RelateController.java

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.web.work.domain.Relate;
 import com.ruoyi.web.work.service.IRelateService;
@@ -48,6 +49,7 @@ public class RelateController extends BaseController {
     @PostMapping("/export")
     public void export(HttpServletResponse response, Relate relate) {
         relate.setCompanyId(getLoginUser().getUser().getCompanyId());
+        PageUtils.orderBy("r.id desc");
         List<Relate> list = relateService.selectList(relate);
         ExcelUtil<Relate> util = new ExcelUtil<Relate>(Relate.class);
         util.exportExcel(response, list, "企业关联用户");

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

@@ -4,13 +4,18 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.validate.Regexp;
 import com.ruoyi.web.work.domain.base.BaseData;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
 import java.math.BigDecimal;
 import java.util.Date;
+
 /**
  * @author lsw
  * @date 2024-04-16
@@ -23,37 +28,54 @@ public class Company extends BaseData {
 
     private Long id;
 
+    @NotBlank(message = "企业名称不能为空")
     @ApiModelProperty(value = "企业名称")
+    @Excel(name = "企业名称", width = 35)
     private String companyName;
 
+    @NotBlank(message = "企业方负责人不能为空")
     @ApiModelProperty(value = "企业方负责人")
+    @Excel(name = "企业方负责人")
     private String director;
 
     @ApiModelProperty(value = "邮箱")
     private String email;
 
+    @NotBlank(message = "手机号不能为空")
+    @Pattern(regexp = Regexp.PHONE, message = "手机号不合法")
     @ApiModelProperty(value = "手机号")
+    @Excel(name = "手机号")
     private String phone;
 
+    @NotBlank(message = "联系地址不能为空")
     @ApiModelProperty(value = "联系地址")
+    @Excel(name = "联系地址",width = 40)
     private String address;
 
+    @NotBlank(message = "开户行不能为空")
     @ApiModelProperty(value = "开户行")
+    @Excel(name = "开户行")
     private String bankName;
 
+    @NotBlank(message = "对公账号不能为空")
     @ApiModelProperty(value = "对公账号")
+    @Excel(name = "对公账号")
     private String bankAccount;
 
     @ApiModelProperty(value = "余额")
+    @Excel(name = "账户余额")
     private BigDecimal money;
 
+    @NotBlank(message = "请上传开户许可证照片")
     @ApiModelProperty(value = "开户许可证照片")
     private String b1;
 
+    @NotBlank(message = "请上传营业执照")
     @ApiModelProperty(value = "营业执照")
     private String business;
 
-    @ApiModelProperty(value = "状态:0=正常,1=停用")
+    @ApiModelProperty(value = "账户状态:0=正常,1=停用")
+    @Excel(name = "账户状态", readConverterExp = "0=正常,1=停用")
     private Integer state;
 
     @TableField(fill = FieldFill.INSERT)
@@ -61,6 +83,7 @@ public class Company extends BaseData {
 
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss", width = 30)
     private Date createTime;
 
     @TableField(fill = FieldFill.UPDATE)

+ 20 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/LockDto.java

@@ -0,0 +1,20 @@
+package com.ruoyi.web.work.domain.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class LockDto {
+
+
+    @NotNull(message = "参数错误")
+    private Long id;
+
+    @NotNull(message = "参数错误")
+    @Min(value = 0, message = "state 只能是 0 或者 1")
+    @Max(value = 1, message = "state 只能是 1 或者 0")
+    private Integer state;
+}

+ 4 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/ICompanyService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.work.domain.Company;
 import com.ruoyi.web.work.domain.dto.CompanyDto;
+import com.ruoyi.web.work.domain.dto.LockDto;
 import com.ruoyi.web.work.domain.vo.CompanyListVo;
 
 import java.rmi.ServerException;
@@ -13,7 +14,7 @@ import java.util.List;
  * @author lsw
  * @date 2024-04-16
  */
-public interface ICompanyService extends IService<Company>{
+public interface ICompanyService extends IService<Company> {
     List<Company> selectList(Company company);
 
     List<CompanyListVo> selectCompanyList(CompanyDto dto);
@@ -22,8 +23,9 @@ public interface ICompanyService extends IService<Company>{
 
     AjaxResult edit(Company company) throws ServerException;
 
-    boolean remove(Long[] ids);
+    AjaxResult lock(LockDto dto) throws ServerException;
 
+    AjaxResult remove(Long id) throws ServerException;
 
 
 }

+ 36 - 30
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/CompanyServiceImpl.java

@@ -9,6 +9,7 @@ import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.web.work.domain.Company;
 import com.ruoyi.web.work.domain.dto.CompanyDto;
+import com.ruoyi.web.work.domain.dto.LockDto;
 import com.ruoyi.web.work.domain.vo.CompanyListVo;
 import com.ruoyi.web.work.mapper.CompanyMapper;
 import com.ruoyi.web.work.service.ICompanyService;
@@ -18,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.rmi.ServerException;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -78,43 +78,49 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
 
     @Override
     public AjaxResult edit(Company company) throws ServerException {
-        Company bean = companyMapper.selectById(company.getId());
-        if (bean == null) {
-            return AjaxResult.error("企业不存在");
-        }
+        company.setMoney(null);
         if (!updateById(company)) {
             throw new ServerException("编辑企业失败,请联系管理员");
         }
-        if (company.getState() == 1) {
-            SysUser user = new SysUser();
-            user.setCompanyId(bean.getId());
-            List<SysUser> list = userService.selectUserList(user);
-            list.forEach(e -> {
-                e.setStatus("1");
-                if (userService.updateUser(e) > 0) {
-                    permissionService.refreshUserPermission(e.getUserId());
-                }
-            });
-        }
         return AjaxResult.success();
     }
 
-    @Transactional
     @Override
-    public boolean remove(Long[] ids) {
-        boolean row = removeByIds(Arrays.asList(ids));
-        if (row) {
-            for (Long id : ids) {
-                SysUser user = new SysUser();
-                user.setCompanyId(id);
-                List<SysUser> list = userService.selectUserList(user);
-                list.forEach(e -> {
-                    if (userService.deleteUserById(e.getUserId()) > 0) {
-                        permissionService.refreshUserPermission(e.getUserId());
-                    }
-                });
+    public AjaxResult lock(LockDto dto) throws ServerException {
+        Company company = new Company();
+        company.setId(dto.getId());
+        company.setState(dto.getState());
+        if (!updateById(company)) {
+            throw new ServerException("锁定/解锁企业失败,请联系管理员");
+        }
+        //更新企业旗下用户权限
+        SysUser user = new SysUser();
+        user.setCompanyId(company.getId());
+        List<SysUser> list = userService.selectUserList(user);
+        list.forEach(e -> {
+            e.setStatus(dto.getState().toString());
+            if (userService.updateUser(e) > 0) {
+                permissionService.refreshUserPermission(e.getUserId());
             }
+        });
+        return AjaxResult.success();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public AjaxResult remove(Long id) throws ServerException {
+        if (!removeById(id)) {
+            throw new ServerException("删除企业失败,请联系管理员");
         }
-        return row;
+        SysUser user = new SysUser();
+        user.setCompanyId(id);
+        List<SysUser> list = userService.selectUserList(user);
+        list.forEach(e -> {
+            if (userService.deleteUserById(e.getUserId()) == 0) {
+                throw new RuntimeException("删除企业失败,请联系管理员");
+            }
+            permissionService.refreshUserPermission(e.getUserId());
+        });
+        return AjaxResult.success();
     }
 }

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

@@ -8,6 +8,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
         c.id,
         c.company_name,
+        c.bank_name,
+        c.bank_account,
+        c.address,
         c.director,
         c.money,
         c.phone,

+ 7 - 11
ruoyi-common/src/main/java/com/ruoyi/common/utils/ImageCompressUtil.java

@@ -31,25 +31,21 @@ public class ImageCompressUtil {
             int w1 = w;
             int h1 = h;
             //对于小400分辨率的图不压缩
-            if (w < 500 && w > 350) {
+            if (w < 1000 && w > 500) {
                 w1 = (int) (w - w * 0.2);
                 h1 = (int) (h - h * 0.2);
             }
-            if (w < 1000 && w > 500) {
-                w1 = (int) (w - w * 0.3);
-                h1 = (int) (h - h * 0.3);
-            }
             if (w < 1600 && w > 1000) {
-                w1 = (int) (w - w * 0.6);
-                h1 = (int) (h - h * 0.6);
+                w1 = (int) (w - w * 0.45);
+                h1 = (int) (h - h * 0.45);
             }
             if (w < 2500 && w > 1600) {
-                w1 = (int) (w - w * 0.7);
-                h1 = (int) (h - h * 0.7);
+                w1 = (int) (w - w * 0.55);
+                h1 = (int) (h - h * 0.55);
             }
             if (w > 2500) {
-                w1 = (int) (w - w * 0.75);
-                h1 = (int) (h - h * 0.75);
+                w1 = (int) (w - w * 0.6);
+                h1 = (int) (h - h * 0.6);
             }
             String srcImgPath = newFile.getAbsoluteFile().toString();
             String subfix = "jpg";

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů