nidapeng
2024-03-14 7ad3d376d3ccb029bb8077725aa70747b0ebb2ad
Merge remote-tracking branch 'origin/master'
已添加4个文件
已修改24个文件
1519 ■■■■ 文件已修改
company/.env.development 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/system/menu.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyDescWindow.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyWindow.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaShopDescWindow.vue 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaShopWindow.vue 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/MenuSelect.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/system/menu/OperaMenuComWindow.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/system/permission/OperaPermissionWindow.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/company.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/shop.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/system/menuCom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/system/menuShop.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/system/permission.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/system/SystemMenuController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/system/SystemPermissionController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/CompanyController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/system/SystemPermissionController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/system/model/SystemPermission.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/CompanyService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/system/impl/SystemPermissionServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/resources/mappers/SystemPermissionMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/system/SystemMenuController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/system/SystemPermissionController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development
company/src/api/system/menu.js
@@ -6,8 +6,9 @@
}
// æŸ¥è¯¢----企业菜单
export function fetchTree1 () {
  return request.post(`/system/menu/treeList/1`)
export function fetchTree1 (type) {
  type = type || 1;
  return request.post(`/system/menu/treeList/${type}`)
}
// æ–°å»º
company/src/components/business/OperaCompanyDescWindow.vue
@@ -94,9 +94,9 @@
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">营业执照:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.businessImg.fileurlFull">
                        <div class="image" v-if="form.businessImg && form.businessImg.fileurlFull">
                          <el-image
                              v-if="form.businessImg.fileurlFull!=null"
                              v-if="form.businessImg!=null&&form.businessImg.fileurlFull!=null"
                              style="width: 90px; height: 90px"
                              :src="form.businessImg.fileurlFull"
                              :preview-src-list="[form.businessImg.fileurlFull]">
@@ -107,7 +107,7 @@
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">法人身份证:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.idcardImgList[0].fileurlFull">
                        <div class="image" v-if="form.idcardImgList && form.idcardImgList .length>1 && form.idcardImgList[0].fileurlFull">
                          <el-image
                              append-to-body
                              v-if="form.idcardImgList[0].fileurlFull"
@@ -116,7 +116,7 @@
                              :preview-src-list="[form.idcardImgList[0].fileurlFull]">
                          </el-image>
                        </div>
                        <div class="image" v-if="form.idcardImgList[1].fileurlFull">
                        <div class="image" v-if="form.idcardImgList && form.idcardImgList .length>2 && form.idcardImgList[1].fileurlFull">
                          <el-image
                              append-to-body
                              v-if="form.idcardImgList[1].fileurlFull"
@@ -130,7 +130,7 @@
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">企业签章:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.signImg.fileurlFull">
                        <div class="image" v-if="form.signImg && form.signImg.fileurlFull">
                          <el-image
                              v-if="form.signImg.fileurlFull!=null"
                              style="width: 90px; height: 90px"
@@ -299,15 +299,22 @@
            imgurl: '',
            imgurlfull: ''
          }
          if(res.businessImg){
          this.form.file.imgurl = res.businessImg.fileurl
          this.form.file.imgurlfull = res.businessImg.fileurlFull
          }
          if (res.idcardImgList&& res.idcardImgList.length>1) {
          this.form.file1.imgurl = res.idcardImgList[0].fileurl
          this.form.file1.imgurlfull = res.idcardImgList[0].fileurlFull
          }
          if (res.idcardImgList && res.idcardImgList.length>2) {
          this.form.file2.imgurl = res.idcardImgList[1].fileurl
          this.form.file2.imgurlfull = res.idcardImgList[1].fileurlFull
          }
          if (res.signImg) {
          this.form.file3.imgurl = res.signImg.fileurl
          this.form.file3.imgurlfull = res.signImg.fileurlFull
          }
          listForCompany({ companyId: this.dataId })
            .then(resa => {
company/src/components/business/OperaCompanyWindow.vue
@@ -23,10 +23,10 @@
                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
                </div>
            </el-form-item>
            <el-form-item label="验证码" prop="captche" v-if="form.type !== 1">
            <el-form-item label="验证码" prop="captche" v-if="!form.id">
                <el-input v-model="form.captche" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="公司账号" prop="username" v-if="form.type !== 1">
            <el-form-item label="公司账号" prop="username" v-if="!form.id">
                <el-input v-model="form.username" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="认证邮箱" prop="email" >
@@ -68,9 +68,9 @@
<!--                </div>-->
<!--            </el-form-item>-->
        </el-form>
        <el-button type="primary" style="margin-bottom: 15px;" @click="add" v-if="form.type !== 1">添加</el-button>
        <el-button type="primary" style="margin-bottom: 15px;" @click="add" v-if="!form.id">添加</el-button>
        <el-table
            v-if="form.type !== 1"
            v-if="!form.id"
            :data="form.solutionList"
            border
            style="width: 100%">
@@ -161,6 +161,7 @@
          }
        ],
        type: '0',
        actionType: '0',
        file: {
          imgurl: '',
          imgurlfull: ''
@@ -217,7 +218,6 @@
          { required: true, message: '请输入公司账号' }
        ]
      },
      programme: []
    }
  },
company/src/components/business/OperaShopDescWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,437 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :withFooter="false"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="info">
            <div class="info_label">
                <span>企业详情</span>
                <div>
                    <el-button type="primary" @click="$refs.modification.open('修改保险方案', form)">更改保险方案</el-button>
                    <el-button type="primary" @click="$refs.operaCompanyWindow.open('编辑企业信息', form)">修改企业信息</el-button>
                </div>
            </div>
            <div class="info_list">
                <div class="info_list_item">
                    <div class="info_list_item_label">企业名称:</div>
                    <div class="info_list_item_val">{{form.name || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">统一信用代码:</div>
                    <div class="info_list_item_val">{{form.code || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">公司账号:</div>
                    <div class="info_list_item_val">{{form.username || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">绑定手机号:</div>
                    <div class="info_list_item_val">
                        {{form.phone || '-'}}
                        <el-button type="primary" size="mini" style="margin-left: 10px;" @click="visiblePhone = true">更改绑定</el-button>
                    </div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">认证邮箱:</div>
                    <div class="info_list_item_val">{{form.email || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">纳税人识别号:</div>
                    <div class="info_list_item_val">{{form.taxCode || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">开户行:</div>
                    <div class="info_list_item_val">{{form.taxBank || '-'}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">银行账号:</div>
                    <div class="info_list_item_val">{{form.taxAccount || '-'}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">地址、电话:</div>
                    <div class="info_list_item_val">{{form.taxAddr || '-'}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">电子发票接收地址:</div>
                    <div class="info_list_item_val">{{form.invoiceEmail || '-'}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">纸质发票接收地址:</div>
                    <div class="info_list_item_val">{{form.invoiceAddr || '-'}}</div>
                </div>
            </div>
            <el-table
                :data="form.solutionListName"
                border
                style="width: 100%; margin-bottom: 20px;">
                <el-table-column
                    label="序号"
                    align="center"
                    width="80">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column
                    prop="solutionName"
                    align="center"
                    label="保险方案">
                </el-table-column>
                <el-table-column
                    align="center"
                    label="加减保功能">
                    <template slot-scope="{row}">
                        <el-checkbox :true-label="1" :false-label="0" disabled v-model="row.canAdd">加保</el-checkbox>
                        <el-checkbox :true-label="1" :false-label="0" disabled v-model="row.canReduce">减保</el-checkbox>
                    </template>
                </el-table-column>
            </el-table>
            <div class="info_list" v-if="JSON.stringify(form) !== '{}'">
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">营业执照:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.businessImg && form.businessImg.fileurlFull">
                          <el-image
                              v-if="form.businessImg!=null&&form.businessImg.fileurlFull!=null"
                              style="width: 90px; height: 90px"
                              :src="form.businessImg.fileurlFull"
                              :preview-src-list="[form.businessImg.fileurlFull]">
                          </el-image>
                        </div>
                    </div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">法人身份证:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.idcardImgList && form.idcardImgList .length>1 && form.idcardImgList[0].fileurlFull">
                          <el-image
                              append-to-body
                              v-if="form.idcardImgList[0].fileurlFull"
                              style="width: 90px; height: 90px"
                              :src="form.idcardImgList[0].fileurlFull"
                              :preview-src-list="[form.idcardImgList[0].fileurlFull]">
                          </el-image>
                        </div>
                        <div class="image" v-if="form.idcardImgList && form.idcardImgList .length>2 && form.idcardImgList[1].fileurlFull">
                          <el-image
                              append-to-body
                              v-if="form.idcardImgList[1].fileurlFull"
                              style="width: 90px; height: 90px"
                              :src="form.idcardImgList[1].fileurlFull"
                              :preview-src-list="[form.idcardImgList[1].fileurlFull]">
                          </el-image>
                        </div>
                    </div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label" style="width: 100px;">企业签章:</div>
                    <div class="info_list_item_val">
                        <div class="image" v-if="form.signImg && form.signImg.fileurlFull">
                          <el-image
                              v-if="form.signImg.fileurlFull!=null"
                              style="width: 90px; height: 90px"
                              :src="form.signImg.fileurlFull"
                              :preview-src-list="[form.signImg.fileurlFull]">
                          </el-image>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- æ–°å»º/修改 -->
        <OperaCompanyWindow ref="operaCompanyWindow" @success="callback"/>
        <!-- ä¿®æ”¹ä¿é™©æ–¹æ¡ˆ -->
        <modification ref="modification" @success="callback"/>
        <!-- ä¿®æ”¹æ‰‹æœºå· -->
        <el-dialog
            title="更改绑定手机号"
            :visible.sync="visiblePhone"
            width="500px"
            :modal="false"
            :show-close="false"
            :close-on-click-modal="false"
            center>
            <div class="form">
                <div class="form_item">
                    <div class="form_item_label">绑定手机号:</div>
                    <div class="form_item_val">
                        <el-input v-model="phone" placeholder="请输入"></el-input>
                    </div>
                </div>
                <div class="form_item">
                    <div class="form_item_label">验证码:</div>
                    <div class="form_item_val">
                        <el-input v-model="code" placeholder="请输入"></el-input>
                        <el-button type="primary" style="margin-left: 20px;" @click="send" v-if="num === 0">发送验证码</el-button>
                        <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
                    </div>
                </div>
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button @click="close">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="updatePhoneEvent">提 äº¤</el-button>
            </span>
        </el-dialog>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import OperaCompanyWindow from '@/components/business/OperaCompanyWindow'
import modification from '@/components/business/modification'
import { getById, updatePhone } from '@/api/business/company'
import { listForCompany } from '@/api/business/solutions'
import { sendSms } from '@/api/business/smsEmail'
export default {
  name: 'OperaCompanyDescWindow',
  extends: BaseOpera,
  components: { GlobalWindow, OperaCompanyWindow, modification },
  data () {
    return {
      ruleForm: {
        phone: '',
        code: ''
      },
      dataId: null,
      num: 0,
      timer: null,
      // è¡¨å•数据
      form: {},
      phone: '',
      code: '',
      visiblePhone: false,
      options: [],
      tableData: []
    }
  },
  created () {
    this.config({
      api: '/business/company',
      'field.id': 'id'
    })
  },
  methods: {
    close () {
      this.visiblePhone = false
      this.phone = ''
      this.code = ''
      clearInterval(this.timer)
      this.num = 0
    },
    updatePhoneEvent () {
      if (!this.phone) {
        this.$message.warning('请输入手机号')
        return
      }
      if (!this.code) {
        this.$message.warning('请输入验证码')
        return
      }
      updatePhone({
        id: this.form.id,
        captche: this.code,
        phone: this.phone
      }).then(res => {
        this.form.phone = JSON.parse(JSON.stringify(this.phone))
        this.$message.success('操作成功')
        this.visiblePhone = false
        this.phone = ''
        this.code = ''
        clearInterval(this.timer)
        this.num = 0
      })
    },
    send () {
      if (!this.phone) {
        this.$message.warning('请输入手机号')
        return
      }
      sendSms({ phone: this.phone })
        .then(res => {
          this.num = 60
          this.setTime()
        })
    },
    setTime () {
      this.timer = setInterval(() => {
        this.num -= 1
        if (this.num === 0) {
          clearInterval(this.timer)
          this.num = 0
        }
      }, 1000)
    },
    open (title, target) {
      const that = this
      this.title = title
      this.dataId = target.id
      this.phone = ''
      this.code = ''
      clearInterval(this.timer)
      this.num = 0
      this.getDetail()
    },
    getDetail () {
      var that = this
      getById(this.dataId)
        .then(res => {
          this.form = res
          this.form.type = 1
          this.form.file = {
            imgurl: '',
            imgurlfull: ''
          }
          this.form.file1 = {
            imgurl: '',
            imgurlfull: ''
          }
          this.form.file2 = {
            imgurl: '',
            imgurlfull: ''
          }
          this.form.file3 = {
            imgurl: '',
            imgurlfull: ''
          }
          if(res.businessImg){
            this.form.file.imgurl = res.businessImg.fileurl
            this.form.file.imgurlfull = res.businessImg.fileurlFull
          }
          if (res.idcardImgList&& res.idcardImgList.length>1) {
            this.form.file1.imgurl = res.idcardImgList[0].fileurl
            this.form.file1.imgurlfull = res.idcardImgList[0].fileurlFull
          }
          if (res.idcardImgList && res.idcardImgList.length>2) {
            this.form.file2.imgurl = res.idcardImgList[1].fileurl
            this.form.file2.imgurlfull = res.idcardImgList[1].fileurlFull
          }
          if (res.signImg) {
            this.form.file3.imgurl = res.signImg.fileurl
            this.form.file3.imgurlfull = res.signImg.fileurlFull
          }
          listForCompany({ companyId: this.dataId })
            .then(resa => {
              that.form.solutionList = resa.map(item => {
                return {
                  solutionBaseId: item.solutionBaseId,
                  canAdd: item.canAdd,
                  canReduce: item.canReduce
                }
              })
              that.form.solutionListName = resa.map(item => {
                return {
                  solutionName: item.solutionName,
                  canAdd: item.canAdd,
                  canReduce: item.canReduce
                }
              })
              console.log(that.form)
              that.visible = true
            })
        })
    },
    callback () {
      this.getDetail()
      this.$emit('success')
      // this.visible = false
    }
  }
}
</script>
<style lang="scss" scoped>
    .form {
        width: 100%;
        display: flex;
        flex-direction: column;
        .form_item {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 20px;
            &:last-child {
                margin-bottom: 0 !important;
            }
            .form_item_label {
                width: 100px;
                flex-shrink: 0;
                font-size: 14px;
                color: black;
            }
            .form_item_val {
                flex: 1;
                height: 35px;
                display: flex;
                align-items: center;
                input {
                    width: 100%;
                    height: 100%;
                    font-size: 14px;
                    color: black;
                    padding: 5px 10px;
                    outline: none;
                    box-sizing: border-box;
                    border: 1px solid #ececec;
                }
            }
        }
    }
    .info {
        width: 100%;
        .info_label {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 20px;
            span {
                font-size: 18px;
                font-weight: 500;
                color: #000000;
            }
        }
        .info_list {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            .info_list_item {
                width: 33.3%;
                display: flex;
                align-items: start;
                margin-bottom: 20px;
                .info_list_item_label {
                    /*width: 150px;*/
                    flex-shrink: 0;
                }
                .info_list_item_val {
                    flex: 1;
                    display: flex;
                    align-items: center;
                    .image {
                        width: 100px;
                        height: 100px;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        overflow: hidden;
                        margin-right: 10px;
                        &:last-child {
                            margin: 0 !important;
                        }
                        img {
                            width: 100%;
                        }
                    }
                }
            }
        }
    }
</style>
company/src/components/business/OperaShopWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,303 @@
<template>
    <GlobalWindow
        :title="title"
        width="60%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :model="form" ref="form" :rules="rules" style="width: 50%;">
            <el-form-item label="商户名称" prop="name">
                <el-input v-model="form.name" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="统一信用代码" prop="code">
                <el-input v-model="form.code" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="法人姓名" prop="legalName">
                <el-input v-model="form.legalName" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="绑定手机号" prop="phone" v-if="!form.id">
                <div style="width: 100%; display: flex; align-items: center;">
                    <el-input v-model="form.phone" maxlength="11" type="number" style="flex: 1;" placeholder="请输入" v-trim/>
                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" @click="send" v-if="num === 0">发送验证码</el-button>
                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
                </div>
            </el-form-item>
            <el-form-item label="验证码" prop="captche" v-if="!form.id">
                <el-input v-model="form.captche" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="公司账号" prop="username" v-if="!form.id">
                <el-input v-model="form.username" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="认证邮箱" prop="email" >
                <el-input v-model="form.email" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="纳税人识别号" prop="taxCode">
                <el-input v-model="form.taxCode" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="银行账号" prop="taxAccount">
                <el-input v-model="form.taxAccount" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="开户行" prop="taxBank">
                <el-input v-model="form.taxBank" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="地址、电话" prop="taxAddr">
                <el-input v-model="form.taxAddr" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="电子发票接收地址" prop="invoiceEmail">
                <el-input v-model="form.invoiceEmail" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="纸质发票接收地址" prop="invoiceAddr">
                <el-input v-model="form.invoiceAddr" placeholder="请输入" v-trim/>
            </el-form-item>
            <el-form-item label="营业执照" prop="businessImg">
                <div style="width: 100%; height: 100px; display: flex; align-items: center;">
                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file" @uploadSuccess="result" />
                </div>
            </el-form-item>
            <el-form-item label="法人身份证" prop="idcardImgList"  style="height: 120px">
                <div style="width: 100%; display: flex; align-items: center;">
                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file1" @uploadSuccess="result1" />
                    <div style="width: 15px;height: 100%;"></div>
                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file2" @uploadSuccess="result2" />
                </div>
            </el-form-item>
<!--            <el-form-item label="电子签章" prop="signImg">-->
<!--                <div style="width: 100%; height: 100px; display: flex; align-items: center;">-->
<!--                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="form.file3" @uploadSuccess="result3" />-->
<!--                </div>-->
<!--            </el-form-item>-->
        </el-form>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import { all } from '@/api/business/solutions'
import { sendSms } from '@/api/business/smsEmail'
export default {
  name: 'OperaCompanyWindow',
  extends: BaseOpera,
  components: { GlobalWindow, UploadAvatarImage },
  data () {
    return {
      // è¡¨å•数据
      initParam:{
        id: null,
        name: '',
        code: '',
        legalName: '',
        taxCode: '',
        taxAccount: '',
        username: '',
        taxBank: '',
        taxAddr: '',
        invoiceEmail: '',
        invoiceAddr: '',
        phone: '',
        email: '',
        type: 1,
        actionType: 0,
        captche: '',
        businessImg: {
          fileurl: '',
          name: ''
        },
        idcardImgList: [],
        signImg: {
          fileurl: '',
          name: ''
        },
        solutionList: [
          {
            solution: null,
            canAdd: 0,
            canReduce: 0
          }
        ],
        file: {
          imgurl: '',
          imgurlfull: ''
        },
        file1: {
          imgurl: '',
          imgurlfull: ''
        },
        file2: {
          imgurl: '',
          imgurlfull: ''
        },
        file3: {
          imgurl: '',
          imgurlfull: ''
        },
      },
      form: {},
      timer: null,
      num: 0,
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入公司名称' }
        ],
        code: [
          { required: true, message: '请输入统一信用代码' }
        ],
        captche: [
          { required: true, message: '请输入验证码' }
        ],
        legalName: [
          { required: true, message: '请输入法人姓名' }
        ],
        phone: [
          { required: true, message: '请输入手机号' }
        ],
        // taxAccount: [
        //   { required: true, message: '请输入银行卡' }
        // ],
        email: [
          { required: true, message: '请输入认证邮箱' }
        ],
        businessImg: [
          { required: true, message: '请上传营业执照' }
        ],
        idcardImgList: [
          { required: true, message: '请上传法人身份证' }
        ],
        signImg: [
          { required: true, message: '请上传电子签章' }
        ],
        username: [
          { required: true, message: '请输入公司账号' }
        ]
      },
      programme: []
    }
  },
  created () {
    this.config({
      api: '/business/company',
      'field.id': 'id'
    })
  },
  watch: {
    visible: {
      handler (news) {
        if (news) {
          clearInterval(this.timer)
          this.num = 0
        }
      }
    }
  },
  methods: {
    changeSolution(row,index){
     this.form.solutionList[index].solution=row
   //   console.log(this.form.solutionList)
    },
    send () {
      if (!this.form.phone) {
        this.$message.warning('请输入手机号')
        return
      }
      sendSms({ phone: this.form.phone })
        .then(res => {
          this.num = 60
          this.setTime()
        })
    },
    setTime () {
      this.timer = setInterval(() => {
        this.num -= 1
        if (this.num === 0) {
          clearInterval(this.timer)
          this.num = 0
        }
      }, 1000)
    },
    open (title, target,type) {
      this.title = title
      this.visible = true
      this.form = this.initParam
      this.getAll()
      // æ–°å»º
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // ç¼–辑
      this.$nextTick(() => {
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    },
    // èŽ·å–å…¨éƒ¨æ–¹æ¡ˆ
    getAll () {
      all({})
        .then(res => {
          this.programme = res
        })
    },
    dele (index) {
      if (this.form.solutionList.length === 1) {
        this.$message.warning('至少保留一项')
        return
      }
      this.form.solutionList.splice(index, 1)
    },
    add () {
      this.form.solutionList.push({
        solutionId:null,
        solution: {},
        canAdd: '',
        canReduce: ''
      })
    },
    handleRemove (file, fileList) {
      console.log(file, fileList)
    },
    // æŽ¥æ”¶è¥ä¸šæ‰§ç…§æ•°æ®
    result (data) {
      this.form.businessImg = {
        fileurl: '',
        name: ''
      }
      this.form.businessImg.fileurl = data.imgurl
      this.form.businessImg.name = data.name
    },
    // èº«ä»½è¯ç…§ç‰‡1
    result1 (data) {
      this.form.idcardImgList[0] = {
        fileurl: '',
        name: ''
      }
      this.form.idcardImgList[0] = { fileurl: data.imgurl, name: data.name }
    },
    // èº«ä»½è¯ç…§ç‰‡2
    result2 (data) {
      this.form.idcardImgList[1] = {
        fileurl: '',
        name: ''
      }
      this.form.idcardImgList[1] = { fileurl: data.imgurl, name: data.name }
    },
    // ç”µå­ç­¾ç« 
    result3 (data) {
      this.form.signImg = {
        fileurl: '',
        name: ''
      }
      this.form.signImg.fileurl = data.imgurl
      this.form.signImg.name = data.name
    }
  }
}
</script>
company/src/components/common/MenuSelect.vue
@@ -50,8 +50,8 @@
  methods: {
    // èŽ·å–æ‰€æœ‰èœå•
    fetchData () {
      if (this.type === '1') {
        fetchTree1()
      if (this.type == '1' || this.type == '2')  {
        fetchTree1(this.type)
          .then(records => {
            this.data = []
            this.__fillData(this.data, records)
company/src/components/system/menu/OperaMenuComWindow.vue
@@ -9,7 +9,7 @@
        <p class="tip" v-if="form.parent != null && form.id == null">为 <em>{{parentName}}</em> æ–°å»ºå­èœå•</p>
        <el-form :model="form" ref="form" :rules="rules">
            <el-form-item label="上级菜单" prop="parentId">
                <MenuSelect v-if="visible" type="1" v-model="form.parentId" placeholder="请选择上级菜单" :exclude-id="excludeMenuId" clearable :inline="false"/>
                <MenuSelect v-if="visible" :type="form.type" v-model="form.parentId" placeholder="请选择上级菜单" :exclude-id="excludeMenuId" clearable :inline="false"/>
            </el-form-item>
            <el-form-item label="菜单名称" prop="name" required>
                <el-input v-model="form.name" placeholder="请输入菜单名称" v-trim maxlength="50"/>
@@ -71,16 +71,17 @@
             * @target: ç¼–辑的菜单对象
             * @parent: æ–°å»ºæ—¶çš„上级菜单
             */
            open (title, target, parent) {
    open (title, target, parent, type) {
                this.title = title
                this.visible = true
      this.form.type = type || 1
                // æ–°å»ºï¼Œmenu为空时表示新建菜单
                if (target == null) {
                    this.excludeMenuId = null
                    this.$nextTick(() => {
                        this.$refs.form.resetFields()
                        this.form.id = null
                        this.form.type = parent.type
          this.form.type = parent != null ? parent.type : (type || 1)
                        this.form.parentId = parent == null ? null : parent.id
                        this.parentName = parent == null ? null : parent.name
                    })
company/src/components/system/permission/OperaPermissionWindow.vue
@@ -12,6 +12,14 @@
      <el-form-item label="权限名称" prop="name" required>
        <el-input v-model="form.name" placeholder="请输入权限名称" v-trim maxlength="50"/>
      </el-form-item>
      <el-form-item label="平台类型" prop="type" required>
        <el-select v-model="form.type" placeholder="请选择平台类型"  >
          <el-option label="通用" value="0"></el-option>
          <el-option label="平台端" value="1"></el-option>
          <el-option label="企业端" value="2"></el-option>
          <el-option label="商户端" value="3"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="权限备注" prop="remark">
        <el-input v-model="form.remark" placeholder="请输入权限备注" type="textarea" :rows="3" v-trim maxlength="500"/>
      </el-form-item>
@@ -35,12 +43,16 @@
        id: null,
        code: '',
        name: '',
        remark: ''
        remark: '',
        type: '0'
      },
      // éªŒè¯è§„则
      rules: {
        code: [
          { required: true, message: '请输入权限编码' }
        ],
        type: [
          { required: true, message: '请选择平台类型' }
        ],
        name: [
          { required: true, message: '请输入权限名称' }
@@ -65,6 +77,7 @@
        this.originPermissionCode = target.code
        for (const key in this.form) {
          this.form[key] = target[key]
          this.form.type=this.form.type+''
        }
      })
    },
company/src/views/business/company.vue
@@ -92,7 +92,8 @@
                // æœç´¢
                searchForm: {
                    name: '',
                    username: ''
                    username: '',
                    type:0
                }
            }
        },
company/src/views/business/shop.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
<template>
    <TableLayout :permissions="['business:company:queryShop']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="商户名称" prop="name">
                <el-input v-model="searchForm.name" placeholder="请输入商户名称" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:company:createShop']">
                <li><el-button type="primary" @click="$refs.operaShopWindow.open('新建商户')" v-permissions="['business:company:createShop']">新建商户</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column prop="name" label="商户名称" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="统一信用代码" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="添加时间" min-width="100px"></el-table-column>
                <el-table-column prop="phone" label="绑定手机号" min-width="100px"></el-table-column>
                <el-table-column label="启用状态" min-width="100px">
                    <template slot-scope="{row}">
                        <el-switch
                            @change="changeStatus($event, row)"
                            v-model="row.status"
                            active-color="#13ce66"
                            inactive-color="#ff4949"
                            :active-value="0"
                            :inactive-value="1">
                        </el-switch>
                    </template>
                </el-table-column>
                <el-table-column label="电子签认证状态" min-width="100px">
                    <template slot-scope="{row}">
                      <span v-if="row.signStatus === 0">待认证</span>
                      <span v-if="row.signStatus === 1">认证中</span>
                      <span v-if="row.signStatus === 2">认证失败</span>
                      <span v-if="row.signStatus === 3">认证通过</span>
                    </template>
                </el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:company:updateShop', 'business:company:deleteShop'])"
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.operaShopDescWindow.open('商户详情', row)"  v-permissions="['business:company:updateShop']">查看详情</el-button>
                        <el-button type="text" @click="edit(row)" v-permissions="['business:company:updateShop']">修改</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaShopWindow ref="operaShopWindow" @success="handlePageChange" />
        <!-- è¯¦æƒ… -->
        <OperaShopDescWindow ref="operaShopDescWindow" @success="handlePageChange" />
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaShopWindow from '@/components/business/OperaShopWindow'
import OperaShopDescWindow from '@/components/business/OperaShopDescWindow'
import { updateStatus, getById } from '@/api/business/company'
export default {
  name: 'Company',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaShopWindow, OperaShopDescWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        name: '',
        username: '',
        type: 1
      }
    }
  },
  created () {
    this.config({
      module: '商户信息表',
      api: '/business/company',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    edit (row) {
      getById(row.id)
        .then(res => {
          const form = res
          form.type = 1
          form.file = {
            imgurl: '',
            imgurlfull: ''
          }
          form.file1 = {
            imgurl: '',
            imgurlfull: ''
          }
          form.file2 = {
            imgurl: '',
            imgurlfull: ''
          }
          form.file3 = {
            imgurl: '',
            imgurlfull: ''
          }
          form.file.imgurl = res.businessImg.fileurl
          form.file.imgurlfull = res.businessImg.fileurlFull
          if (res.idcardImgList == null) {
            res.idcardImgList = new Array()
          }
          if (res.idcardImgList && res.idcardImgList.length > 0) {
            form.file1.imgurl = res.idcardImgList[0].fileurl
            form.file1.imgurlfull = res.idcardImgList[0].fileurlFull
          }
          if (res.idcardImgList && res.idcardImgList.length > 1) {
            form.file2.imgurl = res.idcardImgList[1].fileurl
            form.file2.imgurlfull = res.idcardImgList[1].fileurlFull
          }
          form.file3.imgurl = res.signImg.fileurl
          form.file3.imgurlfull = res.signImg.fileurlFull
          this.$refs.operaShopWindow.open('编辑商户', form)
        })
    },
    // ä¿®æ”¹çŠ¶æ€
    changeStatus (status, row) {
      updateStatus({ id: row.id, status })
        .then(res => {
          this.search()
        })
        .catch(err => {
          row.status = row.status === 0 ? 1 : 0
        })
    }
  }
}
</script>
company/src/views/system/menuCom.vue
@@ -3,7 +3,7 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['system:menu:create', 'system:menu:delete', 'system:menu:sort']">
                <li><el-button type="primary" @click="$refs.OperaMenuComWindow.open('新建一级菜单')" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
                <li><el-button type="primary" @click="$refs.OperaMenuComWindow.open('新建一级菜单',null,null,1)" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
                <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:menu:delete']">删除</el-button></li>
                <li><el-button @click="sort('top')" :loading="isWorking.sort" icon="el-icon-sort-up" v-permissions="['system:menu:sort']">上移</el-button></li>
                <li><el-button @click="sort('bottom')" :loading="isWorking.sort" icon="el-icon-sort-down" v-permissions="['system:menu:sort']">下移</el-button></li>
company/src/views/system/menuShop.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
<template>
    <TableLayout class="menu-layout" :permissions="['system:menu:query']">
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['system:menu:create', 'system:menu:delete', 'system:menu:sort']">
                <li><el-button type="primary" @click="$refs.OperaMenuComWindow.open('新建商户一级菜单',null,null,2)" icon="el-icon-plus" v-permissions="['system:menu:create']">新建</el-button></li>
                <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:menu:delete']">删除</el-button></li>
                <li><el-button @click="sort('top')" :loading="isWorking.sort" icon="el-icon-sort-up" v-permissions="['system:menu:sort']">上移</el-button></li>
                <li><el-button @click="sort('bottom')" :loading="isWorking.sort" icon="el-icon-sort-down" v-permissions="['system:menu:sort']">下移</el-button></li>
            </ul>
            <el-table
                ref="table"
                v-loading="isWorking.search"
                :data="tableData.list"
                :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
                row-key="id"
                stripe
                :default-expand-all="false"
                @selection-change="handleSelectionChange"
            >
                <el-table-column type="selection" width="55" fixed="left"></el-table-column>
                <el-table-column prop="name" label="菜单名称"  fixed="left" min-width="160px"></el-table-column>
                <el-table-column prop="icon" label="图标" min-width="80px" class-name="table-column-icon">
                    <template slot-scope="{row}">
                        <i v-if="row.icon != null && row.icon !== ''" :class="{[row.icon]: true}"></i>
                        <template v-else>未设置</template>
                    </template>
                </el-table-column>
                <el-table-column prop="path" label="访问路径" min-width="140px"></el-table-column>
                <el-table-column prop="remark" label="备注" min-width="120px"></el-table-column>
                <el-table-column prop="createUser" label="创建人" min-width="100px">
                    <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
                </el-table-column>
                <el-table-column prop="createTime" label="创建时间" min-width="140px"></el-table-column>
                <el-table-column prop="updateUser" label="更新人" min-width="100px">
                    <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
                </el-table-column>
                <el-table-column prop="updateTime" label="更新时间" min-width="140px"></el-table-column>
                <el-table-column prop="disabled" label="是否启用" min-width="80px">
                    <template slot-scope="{row}">
                        <el-switch v-model="row.disabled" :active-value="false" :inactive-value="true" @change="switchDisabled(row)"/>
                    </template>
                </el-table-column>
                <el-table-column
                    v-if="containPermissions(['system:menu:update', 'system:menu:create', 'system:menu:delete'])"
                    label="操作"
                    min-width="220"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMenuComWindow.open('编辑商户菜单', {...row, type: 2})" v-permissions="['system:menu:update']">编辑</el-button>
                        <el-button type="text" icon="el-icon-plus" @click="$refs.OperaMenuComWindow.open('新建商户子菜单', null, {...row, type: 2},2)" v-permissions="['system:menu:create']">新建子菜单</el-button>
                        <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:menu:delete']">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaMenuComWindow ref="OperaMenuComWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    </TableLayout>
</template>
<script>
    import TableLayout from '@/layouts/TableLayout'
    import BaseTable from '@/components/base/BaseTable'
    import OperaMenuComWindow from '@/components/system/menu/OperaMenuComWindow'
    import { fetchTree1, updateStatus, sort } from '@/api/system/menu'
    export default {
        name: 'SystemMenu',
        extends: BaseTable,
        components: { OperaMenuComWindow, TableLayout },
        data () {
            return {
                // æ˜¯å¦æ­£åœ¨å¤„理中
                isWorking: {
                    sort: false
                }
            }
        },
        methods: {
            // æŸ¥è¯¢æ•°æ®
            handlePageChange () {
                this.isWorking.search = true
                fetchTree1(2)
                    .then(records => {
                        this.tableData.list = records
                    })
                    .catch(e => {
                        this.$tip.apiFailed(e)
                    })
                    .finally(() => {
                        this.isWorking.search = false
                    })
            },
            // æŽ’序
            sort (direction) {
                if (this.isWorking.sort) {
                    return
                }
                if (this.tableData.selectedRows.length === 0) {
                    this.$tip.warning('请选择一条数据')
                    return
                }
                if (this.tableData.selectedRows.length > 1) {
                    this.$tip.warning('排序时仅允许选择一条数据')
                    return
                }
                const menuId = this.tableData.selectedRows[0].id
                // æ‰¾åˆ°èœå•范围
                let menuPool
                for (const rootMenu of this.tableData.list) {
                    const parent = this.__findParent(menuId, rootMenu)
                    if (parent != null) {
                        menuPool = parent.children
                    }
                }
                menuPool = menuPool || this.tableData.list
                const menuIndex = menuPool.findIndex(menu => menu.id === menuId)
                // ä¸Šç§»æ ¡éªŒ
                if (direction === 'top' && menuIndex === 0) {
                    this.$tip.warning('菜单已到顶部')
                    return
                }
                // ä¸‹ç§»æ ¡éªŒ
                if (direction === 'bottom' && menuIndex === menuPool.length - 1) {
                    this.$tip.warning('菜单已到底部')
                    return
                }
                this.isWorking.sort = true
                sort({
                    id: this.tableData.selectedRows[0].id,
                    direction
                })
                    .then(() => {
                        if (direction === 'top') {
                            menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex - 1, 1)[0])
                        } else {
                            menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex + 1, 1)[0])
                        }
                    })
                    .catch(e => {
                        this.$tip.apiFailed(e)
                    })
                    .finally(() => {
                        this.isWorking.sort = false
                    })
            },
            // å¯ç”¨/禁用菜单
            switchDisabled (row) {
                if (!row.disabled) {
                    this.__updateMenuStatus(row)
                    return
                }
                this.$dialog.disableConfirm(`确认禁用 ${row.name} èœå•吗?`)
                    .then(() => {
                        this.__updateMenuStatus(row)
                    }).catch(() => {
                    row.disabled = !row.disabled
                })
            },
            // æŸ¥è¯¢çˆ¶èŠ‚ç‚¹
            __findParent (id, parent) {
                if (parent.children === 0) {
                    return
                }
                for (const menu of parent.children) {
                    if (menu.id === id) {
                        return parent
                    }
                    if (menu.children.length > 0) {
                        const m = this.__findParent(id, menu)
                        if (m != null) {
                            return m
                        }
                    }
                }
                return null
            },
            // ä¿®æ”¹èœå•状态
            __updateMenuStatus (row) {
                updateStatus({
                    id: row.id,
                    parentId: row.parentId,
                    disabled: row.disabled
                })
                    .then(() => {
                        this.$tip.apiSuccess('修改成功')
                    })
                    .catch(e => {
                        row.disabled = !row.disabled
                        this.$tip.apiFailed(e)
                    })
            }
        },
        created () {
            this.config({
                module: '菜单',
                api: '/system/menu'
            })
            this.search()
        }
    }
</script>
<style lang="scss" scoped>
    @import "@/assets/style/variables.scss";
    .menu-layout {
        /deep/ .table-content {
            margin-top: 0;
        }
    }
    // å›¾æ ‡åˆ—
    .table-column-icon {
        // element-ui图标
        i {
            background-color: $primary-color;
            opacity: 0.72;
            font-size: 20px;
            color: #fff;
            padding: 4px;
            border-radius: 50%;
        }
        // è‡ªå®šä¹‰å›¾æ ‡
        [class^="eva-icon-"] {
            width: 20px;
            height: 20px;
            background-size: 16px;
            vertical-align: middle;
        }
    }
</style>
company/src/views/system/permission.vue
@@ -8,6 +8,14 @@
      <el-form-item label="权限名称" prop="name">
        <el-input v-model="searchForm.name" v-trim placeholder="请输入权限名称" @keypress.enter.native="search"/>
      </el-form-item>
      <el-form-item label="平台类型" prop="type">
        <el-select v-model="searchForm.type" placeholder="请选择" @change="search">
          <el-option label="通用" value="0"></el-option>
          <el-option label="平台端" value="1"></el-option>
          <el-option label="企业端" value="2"></el-option>
          <el-option label="商户端" value="3"></el-option>
        </el-select>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
@@ -30,6 +38,14 @@
        <el-table-column type="selection" fixed="left" width="55"></el-table-column>
        <el-table-column prop="code" label="权限编码" fixed="left" min-width="200px"></el-table-column>
        <el-table-column prop="name" label="权限名称" fixed="left" min-width="120px"></el-table-column>
        <el-table-column prop="name" label="平台类型" fixed="left" min-width="120px">
          <template slot-scope="{row}">
            <span  v-if="row.type == null || row.type ===0">通用</span>
            <span  v-if="row.type === 1">平台端</span>
            <span   v-if="row.type === 2">企业端</span>
            <span   v-if="row.type === 3">商户端</span>
          </template>
        </el-table-column>
        <el-table-column prop="remark" label="权限备注" min-width="120px"></el-table-column>
        <el-table-column prop="createUser" label="创建人" min-width="100px">
          <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
@@ -77,6 +93,7 @@
      searchForm: {
        code: '',
        name: '',
        type: '',
        remark: ''
      }
    }
server/company/src/main/java/com/doumee/api/system/SystemMenuController.java
@@ -6,6 +6,7 @@
import com.doumee.core.constants.OperaType;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.UpdateSystemMenuSortDTO;
import com.doumee.dao.system.model.SystemMenu;
import com.doumee.dao.system.vo.SystemMenuListVO;
@@ -32,80 +33,19 @@
    @Autowired
    private SystemMenuBiz systemMenuBiz;
    @ApiOperation("菜单排序")
    @PostMapping("/updateSort")
    @RequiresPermissions("system:menu:sort")
    public ApiResponse updateSort (@Validated @RequestBody UpdateSystemMenuSortDTO dto) {
        systemMenuBiz.updateSort(dto);
        return ApiResponse.success(null);
    }
    @ApiOperation("查询菜单树")
    @GetMapping("/treeNodes")
    public ApiResponse<List<SystemMenuNodeVO>> getTreeMenu () {
        LoginUserInfo loginUserInfo = this.getLoginUser();
        return ApiResponse.success(systemMenuBiz.findTree(loginUserInfo.getId(),loginUserInfo.getType()));
        return ApiResponse.success(systemMenuBiz.findTree(loginUserInfo.getId(), Constants.ONE));
    }
//    @ApiOperation("查询列表树")
//    @PostMapping("/treeList")
//    @RequiresPermissions("system:menu:query")
//    public ApiResponse<List<SystemMenuListVO>> findTree () {
//        LoginUserInfo loginUserInfo = this.getLoginUser();
//        return ApiResponse.success(systemMenuBiz.findTreeByType(loginUserInfo.getType()));
//    }
    @ApiOperation("查询列表树")
    @PostMapping("/treeList/{type}")
    @RequiresPermissions("system:menu:query")
    public ApiResponse<List<SystemMenuListVO>> treeList (@PathVariable Integer type) {
        return ApiResponse.success(systemMenuBiz.findTreeByType(type));
        return ApiResponse.success(systemMenuBiz.findTreeByType(Constants.ONE));
    }
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:menu:create")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemMenu systemMenu) {
        return ApiResponse.success(systemMenuBiz.create(systemMenu));
    }
    @ApiOperation("删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:menu:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemMenuBiz.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:menu:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        systemMenuBiz.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:menu:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemMenu systemMenu) {
        systemMenuBiz.updateById(systemMenu);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改菜单状态")
    @PostMapping("/updateStatus")
    @RequiresPermissions("system:menu:update")
    public ApiResponse updateStatus(@Validated(OperaType.UpdateStatus.class) @RequestBody SystemMenu systemMenu) {
        systemMenuBiz.updateById(systemMenu);
        return ApiResponse.success(null);
    }
}
server/company/src/main/java/com/doumee/api/system/SystemPermissionController.java
@@ -7,6 +7,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.QuerySystemPermissionDTO;
import com.doumee.dao.system.model.SystemPermission;
import com.doumee.dao.system.vo.SystemPermissionListVO;
@@ -19,6 +20,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -36,55 +38,13 @@
    @Autowired
    private SystemPermissionBiz systemPermissionBiz;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:permission:create")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPermission systemPermission) {
        return ApiResponse.success(systemPermissionBiz.create(systemPermission));
    }
    @ApiOperation("删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:permission:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemPermissionBiz.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:permission:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        systemPermissionBiz.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:permission:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPermission systemPermission) {
        systemPermissionBiz.updateById(systemPermission);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("system:permission:query")
    public ApiResponse<PageData<SystemPermissionListVO>> findPage (@RequestBody PageWrap<QuerySystemPermissionDTO> pageWrap) {
        return ApiResponse.success(systemPermissionService.findPage(pageWrap));
    }
    @ApiOperation("查询所有")
    @GetMapping("/all")
    @RequiresPermissions("system:permission:query")
    public ApiResponse<List<SystemPermission>> findAll () {
        SystemPermission systemPermission = new SystemPermission();
        systemPermission.setTypeList(Arrays.asList(new Integer[]{Constants.ZERO,Constants.TWO}));
        systemPermission.setDeleted(Boolean.FALSE);
        return ApiResponse.success(systemPermissionService.findList(systemPermission));
    }
server/platform/src/main/java/com/doumee/api/business/ApplyChagneDetailController.java
@@ -67,7 +67,6 @@
        applyChagneDetailService.updateById(applyChagneDetail);
        return ApiResponse.success(null);
    }
    //
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:applychagnedetail:query")
server/platform/src/main/java/com/doumee/api/business/CompanyController.java
@@ -13,6 +13,7 @@
import com.doumee.service.business.CompanyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -42,10 +43,19 @@
        companyService.startSignAuth(company.getId());
        return ApiResponse.success(null);
    }
    @PreventRepeat
    @ApiOperation("新建商户")
    @PostMapping("/createShop")
    @RequiresPermissions("business:company:createShop")
    public ApiResponse createShop(@RequestBody Company company) {
        companyService.createShop(company);
        companyService.startSignAuth(company.getId());
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:company:delete")
    @RequiresPermissions(value = {"business:company:delete", "business:company:deleteShop"}, logical = Logical.OR)
    public ApiResponse deleteById(@PathVariable Integer id) {
        companyService.deleteById(id);
        return ApiResponse.success(null);
@@ -53,7 +63,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:company:delete")
    @RequiresPermissions(value = {"business:company:delete", "business:company:deleteShop"}, logical = Logical.OR)
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
@@ -66,7 +76,7 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:company:update")
    @RequiresPermissions(value = {"business:company:update", "business:company:updateShop"}, logical = Logical.OR)
    public ApiResponse updateById(@RequestBody Company company) {
        companyService.updateById(company);
        companyService.startSignAuth(company.getId());
@@ -75,21 +85,21 @@
    @ApiOperation("根据ID禁用启用")
    @PostMapping("/updateStatus")
    @RequiresPermissions("business:company:update")
    @RequiresPermissions(value = {"business:company:update", "business:company:updateShop"}, logical = Logical.OR)
    public ApiResponse updateStatus(@RequestBody Company company) {
        companyService.updateStatus(company);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改保险方案")
    @PostMapping("/updateSolutions")
    @RequiresPermissions("business:company:update")
    @RequiresPermissions(value = {"business:company:update", "business:company:updateShop"}, logical = Logical.OR)
    public ApiResponse updateSolutions(@RequestBody Company company) {
        companyService.updateSolutions(company);
        return ApiResponse.success(null);
    }
    @ApiOperation("企业更换手机号")
    @PostMapping("/updatePhone")
    @RequiresPermissions("business:company:update")
    @RequiresPermissions(value = {"business:company:update", "business:company:updateShop"}, logical = Logical.OR)
    public ApiResponse updatePhone(@RequestBody Company company) {
        companyService.updatePhone(company);
        return ApiResponse.success(null);
@@ -104,7 +114,7 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:company:query")
    @RequiresPermissions(value = {"business:company:query", "business:company:queryShop"}, logical = Logical.OR)
    public ApiResponse<PageData<Company>> findPage (@RequestBody PageWrap<Company> pageWrap) {
        //权限范围内
        return ApiResponse.success(companyService.findPage(pageWrap));
@@ -118,12 +128,11 @@
    }
    @ApiOperation("查询全部数据")
    @PostMapping("/list")
    @RequiresPermissions("business:company:query")
    @RequiresPermissions(value = {"business:company:query", "business:company:queryShop"}, logical = Logical.OR)
    public ApiResponse<List<Company>> findList (@RequestBody  Company pageWrap) {
        pageWrap.setQueryFlag(Constants.ZERO);//查询全部权限范围内
        return ApiResponse.success(companyService.findList(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:company:exportExcel")
@@ -133,7 +142,7 @@
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:company:query")
    @RequiresPermissions(value = {"business:company:query", "business:company:queryShop"}, logical = Logical.OR)
    public ApiResponse<Company> findById(@PathVariable Integer id) {
        return ApiResponse.success(companyService.findById(id));
server/platform/src/main/java/com/doumee/api/system/SystemPermissionController.java
@@ -20,6 +20,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -86,6 +87,7 @@
    @RequiresPermissions("system:permission:query")
    public ApiResponse<List<SystemPermission>> findAll () {
        SystemPermission systemPermission = new SystemPermission();
        systemPermission.setTypeList(Arrays.asList(new Integer[]{Constants.ZERO,Constants.ONE}));
        systemPermission.setDeleted(Boolean.FALSE);
        return ApiResponse.success(systemPermissionService.findList(systemPermission));
    }
@@ -95,7 +97,7 @@
    @RequiresPermissions("system:permission:query")
    public ApiResponse<List<SystemPermission>> findAllCom () {
        SystemPermission systemPermission = new SystemPermission();
        systemPermission.setType(Constants.ONE);
        systemPermission.setTypeList(Arrays.asList(new Integer[]{Constants.ZERO,Constants.TWO}));
        systemPermission.setDeleted(Boolean.FALSE);
        return ApiResponse.success(systemPermissionService.findList(systemPermission));
    }
server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java
server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -91,7 +91,7 @@
    private Integer status;
    @ApiModelProperty(value = "合并单编码(关联union_change)", example = "1")
    @ExcelColumn(name="合并单编码(关联union_change)")
    private Integer unionChange;
    private Integer unionChangeId;
    @ApiModelProperty(value = "在线签章合同号")
    private String signApplyNo;
    @ApiModelProperty(value = "期望保险生效起期")
server/service/src/main/java/com/doumee/dao/system/model/SystemPermission.java
@@ -1,16 +1,19 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.models.auth.In;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * ç³»ç»Ÿæƒé™
@@ -54,7 +57,10 @@
    @ApiModelProperty(value = "是否已删除", hidden = true)
    private Boolean deleted;
    @ApiModelProperty(value = "类型 0平台用户 1企业用户")
    @ApiModelProperty(value = "类型 0平台用户 1企业用户 2商户用户")
    private Integer type;
    @ApiModelProperty(value = "类型集合")
    @TableField(exist = false)
    private List<Integer> typeList;
}
server/service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -21,6 +21,7 @@
     * @return Integer
     */
    Company create(Company company);
    Company createShop(Company company);
    void updateStatus(Company company);
    void updatePhone(Company company);
    /**
server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -88,6 +88,7 @@
        company.setStatus(Constants.ZERO);
        company.setType(Constants.ZERO);
        company.setSignStatus(Constants.ZERO);
        company.setType(Constants.ZERO);
        company.setSignIdStatus(Constants.ZERO);
        companyMapper.insert(company);
        company.setEditDate(company.getCreateDate());
@@ -98,6 +99,36 @@
        dealFileData(company);
        //处理关联方案
        dealSolutionsData(company);
        return company;
    }
    @Override
    @Transactional
    public Company createShop(Company company) {
        isValidCreateParam(company);
        if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                .eq(Company::getCode,company.getCode())
               .or().eq(Company::getPhone,company.getPhone())
               .or().eq(Company::getEmail,company.getEmail())
               .or().eq(Company::getUsername,company.getUsername())
                .or().eq(Company::getName,company.getName()))>0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该企业【名称】【统一信用代码】【邮箱】或者【手机号】已存在,请确认后重新提交!");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        company.setCreator(user.getId());
        company.setCreateDate(new Date());
        company.setType(Constants.ONE);
        company.setIsdeleted(Constants.ZERO);
        company.setStatus(Constants.ZERO);
        company.setType(Constants.ZERO);
        company.setSignStatus(Constants.ZERO);
        company.setSignIdStatus(Constants.ZERO);
        companyMapper.insert(company);
        company.setEditDate(company.getCreateDate());
        company.setEditor(user.getId());
        //处理登陆账号信息
        dealSystemUserData(company);
        //处理附件信息
        dealFileData(company);
        return company;
    }
    @Override
@@ -339,7 +370,7 @@
        if(company.getSignImg()!=null && StringUtils.isNotBlank(company.getSignImg().getFileurl())){
            multifileList.add(initMultiFileByCompay(company,company.getSignImg(),Constants.MultiFile.COM_SING_IMG.getKey()));
        }else {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请上传电子签章!");
         //   throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请上传电子签章!");
        }
        if(company.getIdcardImgList()!=null && company.getIdcardImgList()!=null&& company.getIdcardImgList().size()>0){
            for(Multifile f : company.getIdcardImgList()){
server/service/src/main/java/com/doumee/service/system/impl/SystemPermissionServiceImpl.java
@@ -89,7 +89,12 @@
    @Override
    public List<SystemPermission> findList(SystemPermission systemPermission) {
        Wrapper<SystemPermission> wrapper = new QueryWrapper<>(systemPermission);
        QueryWrapper<SystemPermission> wrapper = new QueryWrapper<>(systemPermission);
        if(systemPermission.getTypeList()!=null){
            wrapper.lambda().and(w->{w.isNull(SystemPermission::getType).or()
                    .in(SystemPermission::getType,systemPermission.getTypeList());
            });
        }
        return systemPermissionMapper.selectList(wrapper);
    }
server/service/src/main/resources/mappers/SystemPermissionMapper.xml
@@ -16,7 +16,7 @@
  </resultMap>
  <select id="selectManageList" resultMap="SystemPermissionListVO">
    SELECT
      perm.`ID`, perm.`CODE`, perm.`NAME`, perm.`REMARK`, perm.`FIXED`, perm.`CREATE_TIME`, perm.`UPDATE_TIME`, perm.`CREATE_USER`, perm.`UPDATE_USER`, perm.`DELETED`,
      perm.`ID`, perm.`type`, perm.`CODE`, perm.`NAME`, perm.`REMARK`, perm.`FIXED`, perm.`CREATE_TIME`, perm.`UPDATE_TIME`, perm.`CREATE_USER`, perm.`UPDATE_USER`, perm.`DELETED`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_PERMISSION perm
@@ -24,10 +24,13 @@
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = perm.UPDATE_USER
    <where>
      perm.DELETED = 0
      <if test="dto.code != null">
      <if test="dto.code != null and dto.code!=''">
        AND perm.CODE LIKE CONCAT('%', #{dto.code}, '%')
      </if>
      <if test="dto.name != null">
      <if test="dto.type != null">
        AND ifnull(perm.type,0) in(0, ${dto.type})
      </if>
      <if test="dto.name != null  and dto.name!=''">
        AND perm.`NAME` LIKE CONCAT('%', #{dto.name}, '%')
      </if>
    </where>
server/shop/src/main/java/com/doumee/api/system/SystemMenuController.java
@@ -6,6 +6,7 @@
import com.doumee.core.constants.OperaType;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.UpdateSystemMenuSortDTO;
import com.doumee.dao.system.model.SystemMenu;
import com.doumee.dao.system.vo.SystemMenuListVO;
@@ -32,71 +33,18 @@
    @Autowired
    private SystemMenuBiz systemMenuBiz;
    @ApiOperation("菜单排序")
    @PostMapping("/updateSort")
    @RequiresPermissions("system:menu:sort")
    public ApiResponse updateSort (@Validated @RequestBody UpdateSystemMenuSortDTO dto) {
        systemMenuBiz.updateSort(dto);
        return ApiResponse.success(null);
    }
    @ApiOperation("查询菜单树")
    @GetMapping("/treeNodes")
    public ApiResponse<List<SystemMenuNodeVO>> getTreeMenu () {
        LoginUserInfo loginUserInfo = this.getLoginUser();
        return ApiResponse.success(systemMenuBiz.findTree(loginUserInfo.getId(),loginUserInfo.getType()));
        return ApiResponse.success(systemMenuBiz.findTree(loginUserInfo.getId(), Constants.TWO));
    }
    @ApiOperation("查询列表树")
    @PostMapping("/treeList/{type}")
    @RequiresPermissions("system:menu:query")
    public ApiResponse<List<SystemMenuListVO>> treeList (@PathVariable Integer type) {
        type = Constants.TWO;//商户菜单
        return ApiResponse.success(systemMenuBiz.findTreeByType(type));
    }
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:menu:create")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemMenu systemMenu) {
        return ApiResponse.success(systemMenuBiz.create(systemMenu));
    }
    @ApiOperation("删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:menu:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemMenuBiz.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:menu:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        systemMenuBiz.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:menu:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemMenu systemMenu) {
        systemMenuBiz.updateById(systemMenu);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改菜单状态")
    @PostMapping("/updateStatus")
    @RequiresPermissions("system:menu:update")
    public ApiResponse updateStatus(@Validated(OperaType.UpdateStatus.class) @RequestBody SystemMenu systemMenu) {
        systemMenuBiz.updateById(systemMenu);
        return ApiResponse.success(null);
    }
}
server/shop/src/main/java/com/doumee/api/system/SystemPermissionController.java
@@ -7,6 +7,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.QuerySystemPermissionDTO;
import com.doumee.dao.system.model.SystemPermission;
import com.doumee.dao.system.vo.SystemPermissionListVO;
@@ -19,6 +20,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -36,55 +38,12 @@
    @Autowired
    private SystemPermissionBiz systemPermissionBiz;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:permission:create")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPermission systemPermission) {
        return ApiResponse.success(systemPermissionBiz.create(systemPermission));
    }
    @ApiOperation("删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:permission:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemPermissionBiz.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:permission:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        systemPermissionBiz.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:permission:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPermission systemPermission) {
        systemPermissionBiz.updateById(systemPermission);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("system:permission:query")
    public ApiResponse<PageData<SystemPermissionListVO>> findPage (@RequestBody PageWrap<QuerySystemPermissionDTO> pageWrap) {
        return ApiResponse.success(systemPermissionService.findPage(pageWrap));
    }
    @ApiOperation("查询所有")
    @GetMapping("/all")
    @RequiresPermissions("system:permission:query")
    public ApiResponse<List<SystemPermission>> findAll () {
        SystemPermission systemPermission = new SystemPermission();
        systemPermission.setTypeList(Arrays.asList(new Integer[]{Constants.ZERO,Constants.THREE}));
        systemPermission.setDeleted(Boolean.FALSE);
        return ApiResponse.success(systemPermissionService.findList(systemPermission));
    }