MrShi
2024-11-22 ba5f8ce99b414a89d1e21a650321bf373773e7ae
优化
已修改25个文件
530 ■■■■ 文件已修改
company/.env 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.developmentCom 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.developmentShop 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.production 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.productionCom 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.productionShop 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeCheckWindow.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaApplyChangeUnitCheckWindow.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyUserApplyWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaInsuranceApplyWindow.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaWtbApplyShopWindow.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/allocateEnterprises.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/detailsEntrustedInsurance.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/modification.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/CommonHeader.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/system/role/PermissionConfigWindow.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/system/user/RoleConfigWindow.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/utils/request.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/utils/resetMessage.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/insuranceApply.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/insuranceApply.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/system/role.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/system/user.vue 338 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env
@@ -4,7 +4,7 @@
VUE_APP_ROUTER_MODE = 'hash'
# 项目上下文路径
VUE_APP_CONTEXT_PATH = '/yyb_admin'
# VUE_APP_CONTEXT_PATH = '/yyb_admin'
# VUE_APP_CONTEXT_PATH = '/yyb_web'
# VUE_APP_CONTEXT_PATH = '/yyb_shop'
company/.env.development
@@ -4,11 +4,12 @@
# 接口前缀
VUE_APP_API_PREFIX = '/yyb_admin_api'
VUE_APP_SYSTEM_TITLE = '云易保客户服务系统-平台端'
VUE_APP_CONTEXT_PATH = '/yyb_admin'
VUE_APP_COOKIE_NAME='dmplat-auth-token'
# 测试服
# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
# 任康
VUE_APP_API = 'http://192.168.0.147:10030/'
# VUE_APP_API = 'http://192.168.0.147:10030/'
company/.env.developmentCom
@@ -4,11 +4,11 @@
# 接口前缀
# VUE_APP_API_PREFIX = '/yyb_admin_api'
VUE_APP_SYSTEM_TITLE = '云易保客户服务系统-企业端'
VUE_APP_CONTEXT_PATH = '/yyb_web'
VUE_APP_COOKIE_NAME='doumee-auth-token'
#VUE_APP_API = 'https://dmtest.ahapp.net/yyb_web_api/'
VUE_APP_API = 'https://dmtest.ahapp.net/yyb_web_api/'
VUE_APP_API = 'http://192.168.0.147:10031/'
# VUE_APP_API = 'http://192.168.0.147:10031/'
# VUE_APP_API = 'https://www.yyb.red/yyb_web_api/'
company/.env.developmentShop
@@ -5,9 +5,10 @@
# VUE_APP_API_PREFIX = '/yyb_admin_api'
VUE_APP_COOKIE_NAME='dmshop-auth-token'
VUE_APP_SYSTEM_TITLE = '云易保客户服务系统-商户端'
#VUE_APP_API = 'https://www.yyb.red/yyb_shop_api/'
VUE_APP_CONTEXT_PATH = '/yyb_shop'
VUE_APP_API = 'https://dmtest.ahapp.net/yyb_shop_api/'
 VUE_APP_API = 'http://192.168.0.147:10032/'
# VUE_APP_API = 'http://192.168.0.147:10032/'
#VUE_APP_API = 'http://localhost:10032/'
company/.env.production
@@ -1,12 +1,12 @@
# 生产环境配置
NODE_ENV = 'production'
# VUE_APP_CONTEXT_PATH = '/admin'
VUE_APP_API_PREFIX = '/yyb_admin_api'
VUE_APP_CONTEXT_NAME = 'admin'
VUE_APP_CONTEXT_NAME = 'yyb_admin'
VUE_APP_COOKIE_NAME='dmplat-auth-token'
VUE_APP_SYSTEM_TITLE = '云易保客户服务系统-平台端'
VUE_APP_CONTEXT_PATH = '/yyb_admin'
# 平台端
VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
company/.env.productionCom
@@ -3,9 +3,9 @@
VUE_APP_API_PREFIX = '/yyb_web_api'
#VUE_APP_CONTEXT_PATH = '/company'
VUE_APP_CONTEXT_PATH = '/yyb_web'
VUE_APP_CONTEXT_NAME = 'company'
VUE_APP_CONTEXT_NAME = 'yyb_company'
VUE_APP_COOKIE_NAME='doumee-auth-token'
company/.env.productionShop
@@ -1,11 +1,10 @@
# 生产环境配置
NODE_ENV = 'production'
VUE_APP_CONTEXT_PATH = '/shop'
VUE_APP_API_PREFIX = '/yyb_shop_api'
VUE_APP_CONTEXT_NAME = 'shop'
VUE_APP_CONTEXT_NAME = 'yyb_shop'
VUE_APP_COOKIE_NAME='dmshop-auth-token'
VUE_APP_CONTEXT_PATH = '/yyb_shop'
# 平台端
# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_shop_api/'
company/src/components/business/OperaApplyChangeCheckWindow.vue
@@ -122,7 +122,7 @@
                <div class="form_item">
                    <div class="form_item_label"><span>*</span>上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                      <UploadFile :limit="99" :uploadData="{ folder: 'apply',fileType:'.pdf' }" @remove="removeEditPiDan" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                    </div>
                </div>
                <div class="form_item">
@@ -186,7 +186,7 @@
        delValidTime: null,
        validCode: null,
        pidanFile: [],
        editPidanFile: null,
        editPidanFile: [],
        fileList1: [],
        fileList2: [],
        selectRadio: 0
@@ -218,7 +218,7 @@
        applyStartTime: null,
        validCode: null,
        pidanFile: [],
        editPidanFile: null,
        editPidanFile: [],
        fileList1: [],
        fileList2: [],
        selectRadio: 0
@@ -323,7 +323,14 @@
      })
    },
    editBaoxianFileUploaded (data) {
      this.form.editPidanFile = data
      this.form.editPidanFile.push(data)
    },
    removeEditPiDan(e) {
        this.form.editPidanFile.forEach((item, index) => {
            if (e === item.imgaddr) {
                this.form.editPidanFile.splice(index, 1)
            }
        })
    },
    backDo () {
      this.$dialog.messageConfirm('确认进行该操作吗?')
company/src/components/business/OperaApplyChangeUnitCheckWindow.vue
@@ -54,7 +54,7 @@
                <div class="form_item">
                    <div class="form_item_label">上传批单:</div>
                    <div class="form_item_val">
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :limit="99" :fileList="form.fileList1" @remove="removePIDAN" @uploadSuccess="baoxianFileUploaded" />
                    </div>
                </div>
            </div>
@@ -135,7 +135,7 @@
          editValidCode: '',
          applyStartTime:null,
         validCode:null,
          pidanFile:null,
          pidanFile:[],
         editPidanFile:null,
          fileList1: [],
          fileList2: [],
@@ -166,7 +166,7 @@
         editValidCode: '',
         applyStartTime:null,
         validCode:null,
         pidanFile:null,
         pidanFile:[],
         editPidanFile:null,
         fileList1: [],
         fileList2: [],
@@ -219,8 +219,15 @@
       }
    },
    baoxianFileUploaded(data){
      this.form.pidanFile=data
      this.form.pidanFile.push(data)
    },
      removePIDAN(e) {
          this.form.pidanFile.forEach((item, index) => {
              if (item.imgaddr === e) {
                  this.form.pidanFile.splice(index, 1)
              }
          })
      },
    editBaoxianFileUploaded(data){
      this.form.editPidanFile=data
    },
company/src/components/business/OperaCompanyUserApplyWindow.vue
@@ -40,7 +40,7 @@
                    show-word-limit />
            </el-form-item>
            <el-form-item label="授权书" prop="multifileList">
                <UploadFile @remove="deleFile" :limit="99" :uploadData="{ folder: 'companyUserApply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
                <UploadFile v-if="visible" @remove="deleFile" :limit="99" :uploadData="{ folder: 'companyUserApply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
            </el-form-item>
        </el-form>
    </GlobalWindow>
company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -19,7 +19,10 @@
                <div class="desc_item_label">
                    <div class="desc_item_label_left">
                        <span>投保企业:{{ model.companyName }}</span>
                        <span>保单状态:<span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span></span>
                        <span>保单状态:
                            <span style="color: #f95601;" v-if="[5,27].includes(model.status) && model.statusInfo === '待生效'">{{ model.statusInfo }}</span>
                            <span :class="'apply-status'+model.status" v-else>{{ model.statusInfo }}</span>
                        </span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                  <div class="desc_item_label_right">
@@ -49,7 +52,7 @@
                      <el-button  v-if="[6,7,8,11].includes(model.status) && model.solutionType ==0" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('驳回退回申请',model,5)">驳回退回申请</el-button>
                      <el-button v-if="[22, 0].includes(model.status) && [0,1].includes(model.solutionType)" type="primary" @click="$refs.InsuranceDetails.open('投保审核',model,1)">投保审核</el-button>
                      <el-button v-if="![1, 4, 5].includes(model.status) && [0,1].includes(model.solutionType)" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('退回申请',model,1)">退回申请</el-button>
                      <el-button v-if="[5,27].includes(model.status) && userInfo.type === 0" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                      <el-button v-if="[5,27].includes(model.status) && ['待生效'].includes(model.statusInfo) && userInfo.type === 0" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('修改保险单',model,4)">修改保险单</el-button>
                    </template>
                  </div>
@@ -244,7 +247,7 @@
                            <template slot-scope="{row}">
                                <span v-if="row.applyStatus === 0" style="color: #00BA92;">保障中</span>
                                <span v-if="row.applyStatus === 1" style="color: #999;">不在保</span>
                                <span v-if="row.applyStatus === 2" style="color: #00BA92;">待生效</span>
                                <span v-if="row.applyStatus === 2" style="color: #f95601;">待生效</span>
                            </template>
                        </el-table-column>
                        <el-table-column
@@ -421,7 +424,7 @@
                            :key="Math.random()"
                            prop="changeNum"
                            align="center"
                            label="更换工种人数">
                            :label="model.hasDispatchUnit !== 1 ? '更换派遣单位人数' : '更换工种人数'">
                          <template scope="{row}">
                            {{row.changeNum||0}} 人
                          </template>
@@ -996,14 +999,18 @@
            .desc_item_label {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                align-items: start;
                flex-direction: column;
                margin-bottom: 10px;
                span {
                    font-size: 14px;
                    color: black;
                    margin-right: 30px;
                }
                .desc_item_label_right {
                    width: 100%;
                    margin: 10px 0;
                }
            }
            .desc_item_from {
                width: 100%;
company/src/components/business/OperaWtbApplyShopWindow.vue
@@ -20,7 +20,9 @@
                    <div class="desc_item_label_left">
                        <span>投保人:{{ model.shopName }}</span>
                        <span>被保险人:{{ model.companyName }}</span>
                      <span>保单状态:<span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span></span>
                      <span>保单状态:
                          <span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span>
                      </span>
                        <span>提交时间:{{ model.createDate }}</span>
                    </div>
                  <div class="desc_item_label_right">
@@ -127,6 +129,7 @@
                                    <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="duId" v-if="model.hasDispatchUnit !== 1">
@@ -246,9 +249,9 @@
                            :key="Math.random()"
                            label="在保状态">
                            <template slot-scope="{row}">
                                <span v-if="row.applyStatus === 0">保障中</span>
                                <span v-if="row.applyStatus === 1">不在保</span>
                                <span v-if="row.applyStatus === 2">待生效</span>
                                <span v-if="row.applyStatus === 0" style="color: #00BA92;">保障中</span>
                                <span v-if="row.applyStatus === 1" style="color: #999;">不在保</span>
                                <span v-if="row.applyStatus === 2" style="color: #f95601;">待生效</span>
                            </template>
                        </el-table-column>
                        <el-table-column
@@ -415,7 +418,7 @@
                            :key="Math.random()"
                            prop="changeNum"
                            align="center"
                            label="更换派遣单位人数">
                            :label="model.hasDispatchUnit !== 1 ? '更换派遣单位人数' : '更换工种人数'">
                        </el-table-column>
                        <el-table-column
                            :key="Math.random()"
company/src/components/business/allocateEnterprises.vue
@@ -3,7 +3,7 @@
        class="menu-config-dialog"
        :visible.sync="visible"
        :confirm-working="isWorking"
        width="576px"
        width="800px"
        title="分配服务企业"
        @confirm="confirm"
    >
@@ -93,7 +93,11 @@
    }
  }
</script>
<style>
    .el-transfer-panel {
        width: 300px !important;
    }
</style>
<style scoped lang="scss">
    @import "@/assets/style/variables.scss";
    .global-window {
company/src/components/business/detailsEntrustedInsurance.vue
@@ -28,6 +28,11 @@
              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">{{model.signType === 1 ? '查看申请单' : '查看投保单'}}</el-button>
<!--              <el-button v-if="[2].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('上传保险单',model,3)">上传保险单</el-button>-->
              <el-button v-if="model.status == 3" type="primary" @click="viewBaoxiandan">查看保险单</el-button>
              <el-button v-if="[2,3,4,1,5].includes(model.status) && (model.toubaodanFile || model.toubaodanSignedFile)" type="primary" @click="viewToubaodan">{{model.signType === 1 ? '查看申请单' : '查看投保单'}}</el-button>
              <el-button v-if="[0,1,2,5].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('退回申请',model,1)">退回申请</el-button>
              <el-button v-if="[5].includes(model.status)" type="primary" @click="fusheng">投保复审</el-button>
              <el-button v-if="[0,1,2].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('退回申请',model,1)">退回申请</el-button>
            </template>
            <template v-if="userInfo.type ===0">
company/src/components/business/modification.vue
@@ -124,9 +124,10 @@
        if (item.id === e) {
          baseId = item.baseId
          this.form.solutionList[index].solution.type = item.type
          if(item.type == 1){
          // console.log(item.type)
          // if(item.type == 1){
            this.form.solutionList[index].shopId =item.shopId
          }
          // }
        }
      })
company/src/components/common/CommonHeader.vue
@@ -214,7 +214,11 @@
  }
}
</script>
<style>
  .el-dropdown-menu {
    width: 240px !important;
  }
</style>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
.common-header {
company/src/components/system/role/PermissionConfigWindow.vue
@@ -2,7 +2,7 @@
  <GlobalWindow
    :visible.sync="visible"
    :confirm-working="isWorking"
    width="582px"
    width="800px"
    title="配置角色权限"
    @confirm="confirm"
  >
@@ -122,3 +122,8 @@
  }
}
</style>
<style>
  .el-transfer-panel {
    width: 300px !important;
  }
</style>
company/src/components/system/user/RoleConfigWindow.vue
@@ -2,7 +2,7 @@
  <GlobalWindow
    :visible.sync="visible"
    :confirm-working="isWorking"
    width="582px"
    width="800px"
    title="配置用户角色"
    @confirm="confirm"
  >
@@ -125,3 +125,8 @@
  }
}
</style>
<style>
  .el-transfer-panel {
    width: 300px !important;
  }
</style>
company/src/utils/request.js
@@ -42,6 +42,7 @@
// 新建响应拦截器
axiosInstance.interceptors.response.use((response) => {
  // console.log(response)
  // 请求失败
  if (response.status !== 200) {
    return Promise.reject(new Error('服务器繁忙,请稍后再试'))
@@ -64,6 +65,7 @@
  }
  return response.data.data
}, function (error) {
  console.log(error)
  if (error.code == null) {
    return Promise.reject(new Error('服务器繁忙,请稍后再试'))
  }
company/src/utils/resetMessage.js
@@ -1,32 +1,18 @@
//resetMessage.js
/**重置message,防止重复点击重复弹出message消息提示 */
import {
  Message
} from 'element-ui';
import { Message } from 'element-ui';
let messageInstance = null;
const resetMessage = (options) => {
  if(messageInstance) {
    messageInstance.close();
export const showMessage = (message) => {
  if (messageInstance) {
    // 如果已经存在一个消息提示实例,则先关闭它
    Message.closeAll();
  }
  Message.closeAll(); //手动关闭所有消息提示实例
  messageInstance = Message(options);
  // console.log(Message(options));
};
['error','success','info','warning'].forEach(type => {
  resetMessage[type] = options => {
    if(typeof options === 'string') {
      options = {
        message:options
      }
  // 显示新的消息提示,并保存该实例
  messageInstance = Message({
    message: message,
    onClose: () => {
      messageInstance = null; // 当消息提示关闭时,将实例置为null
    }
    options.type = type
    return resetMessage(options)
  }
})
export const message = resetMessage
  });
}
company/src/views/business/insuranceApply.vue
@@ -73,6 +73,7 @@
                    <span style="color: #666;" v-if="[9,25,27,5].includes(row.status) && ['已关闭','已过期'].includes(row.statusInfo)">{{row.statusInfo}}</span>
                    <span style="color: red;" v-else-if="row.status === 4 && row.statusInfo === '已退回'">{{ row.statusInfo}}</span>
                    <span style="color: #f95601;" v-else-if="[5,27].includes(row.status) && row.statusInfo === '待生效'">{{ row.statusInfo}}</span>
                      <span style="color: #216EEE;" v-else-if="[12].includes(row.status) && row.statusInfo === '待审核'">{{ row.statusInfo}}</span>
                    <span :class="'apply-status'+row.status" v-else>{{row.statusInfo}}</span>
                  </template>
                </el-table-column>
company/src/views/enterprise/insuranceApply.vue
@@ -57,6 +57,7 @@
                  <span style="color: #666;" v-if="[9,25,27,5].includes(row.status) && ['已关闭','已过期'].includes(row.statusInfo)">{{row.statusInfo}}</span>
                  <span style="color: red;" v-else-if="row.status === 4 && row.statusInfo === '已退回'">{{ row.statusInfo}}</span>
                  <span style="color: #f95601;" v-else-if="[5,27].includes(row.status) && row.statusInfo === '待生效'">{{ row.statusInfo}}</span>
                  <span style="color: #216EEE;" v-else-if="[12].includes(row.status) && row.statusInfo === '待审核'">{{ row.statusInfo}}</span>
                  <span :class="'apply-status'+row.status" v-else>{{row.statusInfo}}</span>
<!--                <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>-->
              </template>
@@ -199,7 +200,7 @@
    isShow(status, endTime) {
      const currentDate = new Date();
      const specifiedDate = new Date(endTime);
      return status === 5 && (currentDate < specifiedDate);
      return [5,27].includes(status) && (currentDate < specifiedDate);
    },
    changeStatus(e) {
      if (e.indexOf(',') !== -1) {
@@ -221,7 +222,6 @@
        this.search()
      },
    result(flag,param){
      console.log(flag,param)
      if(param && param.godetail && param.id){
        if (param.type == 1) {
          this.$refs.OperaWtbApplyShopWindow.open('委托投保详情', { id: param.id })
company/src/views/index.vue
@@ -147,7 +147,7 @@
          </div>
          <div class="home_content_right_page">
            <el-pagination
              @current-change="handleCurrentChange2"
              @current-change="handleCurrentChange6"
              :current-page="page6"
              :page-size="5"
              layout="total, prev, pager, next, jumper"
@@ -187,10 +187,10 @@
          </div>
        </div>
        <div v-if="activeName === '8'">
          <div class="home_content_right_list" v-if="tableData7 && tableData7.length">
            <div class="list_item" v-for="(item, index) in tableData7" :key="index">
          <div class="home_content_right_list" v-if="tableData8 && tableData8.length">
            <div class="list_item" v-for="(item, index) in tableData8" :key="index">
              <div class="list_item_left">
                <span>{{item.title}}({{ item.typeDetail }})</span>
                <span>{{item.title}}(待审核)</span>
                <span>{{item.info}}({{item.content}})</span>
              </div>
              <div class="list_item_center">
company/src/views/system/role.vue
@@ -42,12 +42,12 @@
        <el-table-column
          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission', 'system:role:createRoleMenu', 'system:role:delete'])"
          label="操作"
          min-width="330"
          min-width="260"
          fixed="right"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaRoleWindow.open('编辑角色', row)" icon="el-icon-edit" v-permissions="['system:role:update']">编辑</el-button>
            <el-button type="text" @click="openRole(row.systemDataPermission, row.id)">数据权限</el-button>
<!--            <el-button type="text" @click="openRole(row.systemDataPermission, row.id)">数据权限</el-button>-->
            <el-button type="text" @click="$refs.permissionConfigWindow.open(row)" v-permissions="['system:role:createRolePermission']">配置权限</el-button>
            <el-button type="text" @click="$refs.menuConfigWindow.open(row)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">授权菜单</el-button>
            <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:role:delete']">删除</el-button>
company/src/views/system/user.vue
@@ -1,180 +1,180 @@
<template>
  <TableLayout :permissions="['system:user:query']">
    <!-- 搜索表单 -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
      <el-form-item label="姓名" prop="realname">
        <el-input v-model="searchForm.realname" v-trim placeholder="请输入" @keypress.enter.native="search"/>
      </el-form-item>
      <el-form-item label="所属部门" prop="companyDepartmentPathName">
        <el-input v-model="searchForm.companyDepartmentPathName" v-trim placeholder="请输入" @keypress.enter.native="search"/>
      </el-form-item>
      <section>
        <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- 表格和分页 -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
        <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新增账号')">新增账号</el-button></li>
<!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">删除</el-button></li>-->
      </ul>
<!--      @selection-change="handleSelectionChange"-->
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        :default-sort = "{prop: 'createTime', order: 'descending'}"
        stripe
        @sort-change="handleSortChange"
      >
        <el-table-column label="序号" width="80px">
          <template slot-scope="scope">
            <span>{{scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="username" label="账号" min-width="120px"></el-table-column>
        <el-table-column prop="realname" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="mobile" label="联系方式" min-width="100px"></el-table-column>
        <el-table-column label="主管" min-width="100px">
            <template slot-scope="{ row }">
                <el-switch
                    v-model="row.headStatus"
                    @change="setHeadStatus($event, row)"
                    active-color="#13ce66"
                    inactive-color="#ff4949"
                    :active-value="1"
                    :inactive-value="0">
                </el-switch>
            </template>
        </el-table-column>
        <el-table-column prop="companyDepartmentPathName" label="所在部门" min-width="100px"></el-table-column>
        <el-table-column prop="roles" label="角色" min-width="160px" class-name="table-column-strings">
          <template slot-scope="{row}">
            <ul>
              <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
            </ul>
          </template>
        </el-table-column>
        <el-table-column label="启用状态" min-width="100px">
          <template slot-scope="{row}">
            <el-switch
              v-if="!row.fixed"
              @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
          v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
          label="操作"
          width="270"
          fixed="right"
        >
<!--          row.id !== userInfo.id &&-->
          <template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('编辑用户', {...row, departmentId: row.companyDepartmentPathId.substring(0, row.companyDepartmentPathId.length - 1).split('/').map(val => +val)})" v-permissions="['system:user:update']">编辑</el-button>
            <el-button type="text" @click="$refs.allocationEnterprises.open('分配企业', row)" v-if="[0,2].includes(userInfo.type)">分配企业</el-button>
            <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">配置角色</el-button>
            <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">重置密码</el-button>
<!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">删除</el-button>-->
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      ></pagination>
    </template>
    <!-- 新建/修改 -->
    <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    <!-- 配置角色 -->
    <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    <!-- 重置密码 -->
    <ResetPwdWindow ref="resetPwdWindow"/>
    <!--  分配企业  -->
    <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
  </TableLayout>
    <TableLayout :permissions="['system:user:query']">
        <!-- 搜索表单 -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
            <el-form-item label="姓名" prop="realname">
                <el-input v-model="searchForm.realname" v-trim placeholder="请输入" @keypress.enter.native="search"/>
            </el-form-item>
            <el-form-item label="所属部门" prop="companyDepartmentPathName">
                <el-input v-model="searchForm.companyDepartmentPathName" v-trim placeholder="请输入" @keypress.enter.native="search"/>
            </el-form-item>
            <section>
                <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- 表格和分页 -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
                <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新增账号')">新增账号</el-button></li>
                <!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">删除</el-button></li>-->
            </ul>
            <!--      @selection-change="handleSelectionChange"-->
            <el-table
                    v-loading="isWorking.search"
                    :data="tableData.list"
                    :default-sort = "{prop: 'createTime', order: 'descending'}"
                    stripe
                    @sort-change="handleSortChange"
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="username" label="账号" min-width="120px"></el-table-column>
                <el-table-column prop="realname" label="姓名" min-width="100px"></el-table-column>
                <el-table-column prop="mobile" label="联系方式" min-width="100px"></el-table-column>
                <el-table-column label="主管" min-width="100px">
                    <template slot-scope="{ row }">
                        <el-switch
                                v-model="row.headStatus"
                                @change="setHeadStatus($event, row)"
                                active-color="#13ce66"
                                inactive-color="#ff4949"
                                :active-value="1"
                                :inactive-value="0">
                        </el-switch>
                    </template>
                </el-table-column>
                <el-table-column prop="companyDepartmentPathName" label="所在部门" min-width="100px"></el-table-column>
                <el-table-column prop="roles" label="角色" min-width="160px" class-name="table-column-strings">
                    <template slot-scope="{row}">
                        <ul>
                            <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
                        </ul>
                    </template>
                </el-table-column>
                <el-table-column label="启用状态" min-width="100px">
                    <template slot-scope="{row}">
                        <el-switch
                                v-if="!row.fixed"
                                @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
                        v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
                        label="操作"
                        width="270"
                        fixed="right"
                >
                    <!--          row.id !== userInfo.id &&-->
                    <template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
                        <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('编辑用户', {...row, departmentId: row.companyDepartmentPathId ? row.companyDepartmentPathId.substring(0, row.companyDepartmentPathId.length - 1).split('/').map(val => +val) : '' })" v-permissions="['system:user:update']">编辑</el-button>
                        <el-button type="text" @click="$refs.allocationEnterprises.open('分配企业', row)" v-if="[0,2].includes(userInfo.type)">分配企业</el-button>
                        <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">配置角色</el-button>
                        <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">重置密码</el-button>
                        <!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">删除</el-button>-->
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                    @size-change="handleSizeChange"
                    @current-change="handlePageChange"
                    :pagination="tableData.pagination"
            ></pagination>
        </template>
        <!-- 新建/修改 -->
        <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
        <!-- 配置角色 -->
        <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
        <!-- 重置密码 -->
        <ResetPwdWindow ref="resetPwdWindow"/>
        <!--  分配企业  -->
        <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    </TableLayout>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import OperaUserWindow from '@/components/system/user/OperaUserWindow'
import allocationEnterprises from '@/components/system/user/allocationEnterprises'
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
import DepartmentSelect from '@/components/common/DepartmentSelect'
import PositionSelect from '@/components/common/PositionSelect'
import { updUserStatus, updateHead } from '@/api/system/user'
import { mapState } from 'vuex'
export default {
  name: 'SystemUser',
  extends: BaseTable,
  computed: {
    ...mapState(['userInfo'])
  },
  components: { allocationEnterprises, PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
  data () {
    return {
      // 搜索
      searchForm: {
        username: '', // 名字
        realname: '', // 姓名
        rootDeptId: null, // 部门ID
        positionId: null, // 岗位ID
        mobile: '', // 手机号码
        type: '',
        companyDepartmentPathName: ''   // 部门名称
  import Pagination from '@/components/common/Pagination'
  import TableLayout from '@/layouts/TableLayout'
  import BaseTable from '@/components/base/BaseTable'
  import OperaUserWindow from '@/components/system/user/OperaUserWindow'
  import allocationEnterprises from '@/components/system/user/allocationEnterprises'
  import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
  import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
  import DepartmentSelect from '@/components/common/DepartmentSelect'
  import PositionSelect from '@/components/common/PositionSelect'
  import { updUserStatus, updateHead } from '@/api/system/user'
  import { mapState } from 'vuex'
  export default {
    name: 'SystemUser',
    extends: BaseTable,
    computed: {
      ...mapState(['userInfo'])
    },
    components: { allocationEnterprises, PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
    data () {
      return {
        // 搜索
        searchForm: {
          username: '', // 名字
          realname: '', // 姓名
          rootDeptId: null, // 部门ID
          positionId: null, // 岗位ID
          mobile: '', // 手机号码
          type: '',
          companyDepartmentPathName: ''   // 部门名称
        }
      }
    },
    created () {
      this.config({
        module: '用户',
        api: '/system/user',
        'field.main': 'realname',
        sorts: [{
          property: 'CREATE_TIME',
          direction: 'DESC'
        }]
      })
      this.searchForm.type = this.userInfo.type
      this.search()
    },
    methods: {
      // 设置取消主管
      setHeadStatus(e, row) {
        updateHead({ id: row.id, headStatus: row.headStatus })
          .then(res => {
            this.search()
          })
      },
      changeStatus(status, row) {
        updUserStatus({
          id: row.id,
          status
        }).then(res => {
          this.search()
        }).catch(err => {
          row.status = row.status === 0 ? 1 : 0
        })
      }
    }
  },
  created () {
    this.config({
      module: '用户',
      api: '/system/user',
      'field.main': 'realname',
      sorts: [{
        property: 'CREATE_TIME',
        direction: 'DESC'
      }]
    })
    this.searchForm.type = this.userInfo.type
    this.search()
  },
  methods: {
    // 设置取消主管
    setHeadStatus(e, row) {
      updateHead({ id: row.id, headStatus: row.headStatus })
        .then(res => {
          this.search()
        })
    },
    changeStatus(status, row) {
      updUserStatus({
        id: row.id,
        status
      }).then(res => {
        this.search()
      }).catch(err => {
        row.status = row.status === 0 ? 1 : 0
      })
    }
  }
}
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
// 列表头像处理
.table-column-avatar {
  img {
    width: 48px;
  }
}
    @import "@/assets/style/variables.scss";
    // 列表头像处理
    .table-column-avatar {
        img {
            width: 48px;
        }
    }
</style>