MrShi
2024-11-11 0da56b9186b6c63a587c36c2f3a1b30329281d28
优化
已添加4个文件
已修改9个文件
746 ■■■■■ 文件已修改
company/src/api/business/company.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/companyUserApply.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/contract.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyDepartmentWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyUserApplyWindow.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/authorizedEnterprise.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/operaCompanyUserApplyDescWindow.vue 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/UploadFile.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/companyUserApply.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/contract.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/solutions.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/userManagement.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/company.js
@@ -60,3 +60,8 @@
export function findAllCompanyList (data) {
    return request.post('/business/company/findAllCompanyList', data)
}
// å‘起签署
export function getSignLink (id) {
    return request.get(`/business/companySolution/getSignLink?id=${id}`)
}
company/src/api/business/companyUserApply.js
@@ -16,3 +16,23 @@
export function updateById (data) {
  return request.post('/business/companyUserApply/updateById', data)
}
// æ ¹æ®ID查询
export function getById (id) {
  return request.get(`business/companyUserApply/${id}`)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/business/companyUserApply/delete/${id}`)
}
// å®¡æ‰¹
export function audit (data) {
  return request.post('/business/companyUserApply/audit', data)
}
// åˆ†é¡µæŸ¥è¯¢
export function page (data) {
  return request.post('/business/companyUserApply/page', data)
}
company/src/api/business/contract.js
@@ -28,8 +28,8 @@
}
// åˆåŒå–消
export function cancel (data) {
  return request.post('/business/contract/cancel', data)
export function cancel (id) {
  return request.get(`/business/contract/cancel?id=${id}`)
}
// å‘起签署
company/src/components/business/OperaCompanyDepartmentWindow.vue
@@ -5,7 +5,7 @@
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :model="form" ref="form" :rules="rules">{{form.type}}
        <el-form :model="form" ref="form" :rules="rules">
            <el-form-item label="上级组织" prop="parentId">
                <el-cascader
                    :options="organization"
company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,176 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="info" v-if="info">
            <div class="info_list">
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">申请授权账号:</div>
                    <div class="info_list_item_val">{{info.userName}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">授权管理企业:</div>
                    <div class="info_list_item_val">{{info.companyNames}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">申请说明:</div>
                    <div class="info_list_item_val">{{info.content}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">申请附件:</div>
                    <div class="info_list_item_val">
                        <div class="info_list_item_val_cul">
                            <u v-for="(item, index) in info.multifileList" :key="index" @click="openFile(item.fileurlFull)">{{item.name}}</u>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <el-form :model="form" ref="form" :rules="rules">
            <el-form-item label="是否通过" prop="status">
                <el-radio-group v-model="form.status">
                    <el-radio :label="1">审核通过</el-radio>
                    <el-radio :label="2">审核不通过</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="驳回理由" prop="checkInfo" :rules="form.status === 2 ? { required: true, message: '驳回理由不能为空', trigger: 'blur' } : { required: false } ">
                <el-input
                    type="textarea"
                    placeholder="请输入驳回理由"
                    v-model="form.checkInfo"
                    maxlength="300"
                    show-word-limit />
            </el-form-item>
        </el-form>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import UploadFile from '@/components/common/UploadFile'
  import { audit, getById } from '@/api/business/companyUserApply'
  export default {
    name: 'OperaCompanyUserApplyCarefulWindow',
    extends: BaseOpera,
    components: { GlobalWindow, UploadFile },
    data () {
      return {
        // è¡¨å•数据
        form: {
          id: null,
          status: 1,
          checkInfo: ''
        },
        info: null,
        // éªŒè¯è§„则
        rules: {}
      }
    },
    methods: {
      open (title, id) {
        this.title = title
        this.form.checkInfo = ''
        this.form.status = 1
        this.form.id = id
        getById(id)
          .then(res => {
            this.info = res
            this.visible = true
          })
      },
      openFile(url) {
        window.open(url)
      },
      confirm() {
        this.$refs.form.validate((valid) => {
          if (!valid) {
            return
          }
          // è°ƒç”¨æ–°å»ºæŽ¥å£
          this.isWorking = true
          audit(this.form)
            .then(() => {
              this.visible = false
              this.$tip.apiSuccess('审核成功')
              this.$emit('success')
            })
            .catch(e => {
              this.$tip.apiFailed(e)
            })
            .finally(() => {
              this.isWorking = false
            })
        })
      }
    }
  }
</script>
<style lang="scss" scoped>
    .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: 600;
                color: #000000;
            }
        }
        .info_list {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            .info_list_item {
                width: 50%;
                display: flex;
                align-items: start;
                margin-bottom: 20px;
                .info_list_item_label {
                    font-size: 15px;
                    flex-shrink: 0;
                }
                .info_list_item_val {
                    flex: 1;
                    display: flex;
                    align-items: center;
                    font-size: 15px;
                    .info_list_item_val_cul {
                        display: flex;
                        flex-direction: column;
                        u {
                            font-size: 15px;
                            color: #2E68EC;
                            cursor: pointer;
                            margin-top: 5px;
                            &:first-child {
                                margin: 0;
                            }
                        }
                    }
                    .image {
                        width: 100px;
                        height: 100px;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        overflow: hidden;
                        img {
                            width: 100%;
                        }
                    }
                }
            }
        }
    }
</style>
company/src/components/business/OperaCompanyUserApplyWindow.vue
@@ -32,33 +32,17 @@
                        :value="item.id">
                    </el-option>
                </el-select>
<!--                <div style="display: flex; align-items: center;">-->
<!--                    <el-input v-model="form.content" placeholder="请输入内容"></el-input>-->
<!--                </div>-->
<!--                <div class="list">-->
<!--                    <div class="list_label">已选企业:</div>-->
<!--                    <div class="list_box">-->
<!--                        <div class="list_box_row">-->
<!--                            <span>XXX有限责任公司</span>-->
<!--                            <i class="el-icon-error"></i>-->
<!--                        </div>-->
<!--                        <div class="list_box_row">-->
<!--                            <span>XXX有限责任公司</span>-->
<!--                            <i class="el-icon-error"></i>-->
<!--                        </div>-->
<!--                    </div>-->
<!--                </div>-->
            </el-form-item>
            <el-form-item label="申请说明" prop="content">
                <el-input
                    type="textarea"
                    placeholder="请输入申请说明"
                    v-model="form.content"
                    maxlength="30"
                    maxlength="300"
                    show-word-limit />
            </el-form-item>
            <el-form-item label="授权书" prop="multifileList">
                <UploadFile @remove="deleFile" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
                <UploadFile @remove="deleFile" :limit="99" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
            </el-form-item>
        </el-form>
    </GlobalWindow>
@@ -82,7 +66,7 @@
          userId: '',
          content: '',
          companyIds: [],
          multifileList: null
          multifileList: []
        },
        // éªŒè¯è§„则
        rules: {
@@ -114,7 +98,6 @@
            return
          }
          let obj = JSON.parse(JSON.stringify(this.form))
          obj.multifileList = [obj.multifileList]
          obj.companyIds = obj.companyIds.join(',')
          obj.companyNames = []
          this.form.companyIds.forEach(item => {
@@ -147,7 +130,6 @@
            return
          }
          let obj = JSON.parse(JSON.stringify(this.form))
          obj.multifileList = [obj.multifileList]
          obj.companyIds = obj.companyIds.join(',')
          obj.companyNames = []
          this.form.companyIds.forEach(item => {
@@ -193,11 +175,15 @@
          }
        })
      },
      deleFile () {
        this.form.multifileList = null
      deleFile (imgaddr) {
        this.form.multifileList.forEach((item, index) => {
          if (item.imgaddr === imgaddr) {
            this.form.multifileList.splice(index, 1)
          }
        })
      },
      editFanganFile (data) {
        this.form.multifileList = data
        this.form.multifileList.push(data)
      },
      getAccount() {
        findUserList({})
company/src/components/business/authorizedEnterprise.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :withFooter="false"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-table
            :data="tableData"
            border
            style="width: 100%">
            <el-table-column
                prop="date"
                label="账号">
            </el-table-column>
            <el-table-column
                prop="name"
                label="姓名">
            </el-table-column>
            <el-table-column
                prop="address"
                label="联系方式">
            </el-table-column>
            <el-table-column
                prop="address"
                label="授权企业名称">
            </el-table-column>
            <el-table-column
                prop="address"
                label="授权人">
            </el-table-column>
            <el-table-column
                prop="address"
                label="授权时间">
            </el-table-column>
            <el-table-column
                prop="address"
                label="操作">
            </el-table-column>
        </el-table>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { page } from '@/api/business/companyUserApply'
  export default {
    name: 'authorizedEnterprise',
    extends: BaseOpera,
    components: { GlobalWindow },
    data () {
      return {
        model: {},
        tableData: []
      }
    },
    methods: {
      open (title, target) {
        this.title = title
        this.visible = true
      },
      getList() {
        page({
          capacity: 10,
          page: 1,
          model: {
            userId: ''
          }
        })
      }
    }
  }
</script>
<style lang="scss" scoped>
</style>
company/src/components/business/operaCompanyUserApplyDescWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,165 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :withFooter="false"
        :visible.sync="visible"
    >
        <div class="info">
            <div class="info_label">
                <span>申请记录详情</span>
            </div>
            <div class="info_list">
                <div class="info_list_item">
                    <div class="info_list_item_label">申请人:</div>
                    <div class="info_list_item_val">{{form.realName}}</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">申请时间:</div>
                    <div class="info_list_item_val">{{form.createDate}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">授权账号:</div>
                    <div class="info_list_item_val">{{form.userName}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">授权管理企业:</div>
                    <div class="info_list_item_val">{{form.companyNames}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">申请说明:</div>
                    <div class="info_list_item_val">{{form.content}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">申请附件:</div>
                    <div class="info_list_item_val">
                        <div class="info_list_item_val_cul">
                            <u v-for="(item, index) in form.multifileList" :key="index" @click="openFile(item.fileurlFull)">{{item.name}}</u>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="info">
            <div class="info_label">
                <span>审批情况</span>
            </div>
            <div class="info_list">
                <div class="info_list_item">
                    <div class="info_list_item_label">审批结果:</div>
                    <div class="info_list_item_val">
                        <template v-if="form.status === 0">待审核</template>
                        <template v-if="form.status === 1">审核通过</template>
                        <template v-if="form.status === 2">审核不通过</template>
                    </div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">审核时间:</div>
                    <div class="info_list_item_val">{{form.checkDate}}</div>
                </div>
                <div class="info_list_item" style="width: 100%;">
                    <div class="info_list_item_label">审核说明:</div>
                    <div class="info_list_item_val">{{form.checkInfo}}</div>
                </div>
            </div>
        </div>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import { getById } from '@/api/business/companyUserApply'
  import { mapState } from 'vuex'
  export default {
    name: 'operaCompanyUserApplyDescWindow',
    extends: BaseOpera,
    components: { GlobalWindow },
    data () {
      return {
        form: {}
      }
    },
    computed: {
      ...mapState(['userInfo'])
    },
    methods: {
      open (title, id) {
        this.title = title
        getById(id)
          .then(res => {
            console.log(res)
            this.form = res
            this.visible = true
          })
      },
      openFile(url) {
        window.open(url)
      }
    }
  }
</script>
<style lang="scss" scoped>
    .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: 600;
                color: #000000;
            }
        }
        .info_list {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            .info_list_item {
                width: 50%;
                display: flex;
                align-items: start;
                margin-bottom: 20px;
                .info_list_item_label {
                    font-size: 15px;
                    flex-shrink: 0;
                }
                .info_list_item_val {
                    flex: 1;
                    display: flex;
                    align-items: center;
                    font-size: 15px;
                    .info_list_item_val_cul {
                        display: flex;
                        flex-direction: column;
                        u {
                            font-size: 15px;
                            color: #2E68EC;
                            cursor: pointer;
                            margin-top: 5px;
                            &:first-child {
                                margin: 0;
                            }
                        }
                    }
                    .image {
                        width: 100px;
                        height: 100px;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        overflow: hidden;
                        img {
                            width: 100%;
                        }
                    }
                }
            }
        }
    }
</style>
company/src/components/common/UploadFile.vue
@@ -5,7 +5,7 @@
      class="upload-demo"
      :accept="uploadData.fileType"
      :action="uploadImgUrl"
      :limit="1"
      :limit="limit"
      :before-remove="removes"
      :on-exceed="handleExceed"
      :on-success="handleFileSuccess"
@@ -42,7 +42,11 @@
      type: String,
      default: 'width: 190px; height: 190px;'
    },
    uploadData: Object
    uploadData: Object,
    limit: {
      type: Number,
      default: () => 1
    }
  },
  data() {
    return {
@@ -70,9 +74,10 @@
    }
  },
  methods: {
    removes() {
    removes(e) {
      this.uploaded=false
      this.$emit('remove')
      console.log(e.imgaddr)
      this.$emit('remove', e.imgaddr)
    },
    // ä¸Šä¼ å›¾ç‰‡
    handleExceed(){
company/src/views/business/companyUserApply.vue
@@ -16,7 +16,7 @@
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:companyuserapply:create']">
            <ul class="toolbar" v-permissions="['business:companyuserapply:create']" v-if="userInfo.type === 1">
                <li><el-button type="primary" @click="$refs.operaCompanyUserApplyWindow.open('新建申请')" icon="el-icon-plus" v-permissions="['business:companyuserapply:create']">新建</el-button></li>
            </ul>
            <el-table
@@ -46,8 +46,9 @@
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.operaCompanyUserApplyWindow.open('申请记录详情', row)" icon="el-icon-view">查看</el-button>
                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:companyuserapply:delete']">删除</el-button>
                        <el-button type="text" @click="$refs.operaCompanyUserApplyDescWindow.open('申请记录详情', row.id)" icon="el-icon-view">查看</el-button>
                        <el-button type="text" v-if="userInfo.type === 0 && row.status === 0" @click="$refs.operaCompanyUserApplyCarefulWindow.open('集团申请记录审核', row.id)">审核</el-button>
                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-if="userInfo.type === 1" v-permissions="['business:companyuserapply:delete']">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
@@ -60,6 +61,10 @@
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaCompanyUserApplyWindow ref="operaCompanyUserApplyWindow" @success="handlePageChange"/>
        <!--    æŸ¥çœ‹    -->
        <operaCompanyUserApplyDescWindow ref="operaCompanyUserApplyDescWindow" />
        <!--    å®¡æ ¸    -->
        <OperaCompanyUserApplyCarefulWindow ref="operaCompanyUserApplyCarefulWindow" @success="handlePageChange"/>
    </TableLayout>
</template>
@@ -67,11 +72,17 @@
  import BaseTable from '@/components/base/BaseTable'
  import TableLayout from '@/layouts/TableLayout'
  import Pagination from '@/components/common/Pagination'
  import OperaCompanyUserApplyCarefulWindow from '@/components/business/OperaCompanyUserApplyCarefulWindow'
  import OperaCompanyUserApplyWindow from '@/components/business/OperaCompanyUserApplyWindow'
  import operaCompanyUserApplyDescWindow from '@/components/business/operaCompanyUserApplyDescWindow'
  import { mapState } from 'vuex'
  export default {
    name: 'CompanyUserApply',
    extends: BaseTable,
    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow },
    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow, operaCompanyUserApplyDescWindow, OperaCompanyUserApplyCarefulWindow },
    computed: {
      ...mapState(['userInfo'])
    },
    data () {
      return {
        // æœç´¢
company/src/views/business/contract.vue
@@ -29,7 +29,7 @@
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:contract:create']">
            <ul class="toolbar" v-permissions="['business:contract:create']" v-if="userInfo.type === 0">
                <li><el-button type="primary" @click="$refs.operaContractWindow.open('新建合同信息表')" icon="el-icon-plus" v-permissions="['business:contract:create']">新建</el-button></li>
            </ul>
            <el-table
@@ -50,7 +50,11 @@
                        <template v-else-if="row.signType === 2">商户-企业</template>
                    </template>
                </el-table-column>
                <el-table-column prop="companyName" label="对方名称" min-width="100px"></el-table-column>
                <el-table-column prop="companyName" label="对方名称" min-width="100px">
                    <template slot-scope="{row}">
                        {{ row.partyCompanyName }} / {{ row.companyName }}
                    </template>
                </el-table-column>
                <el-table-column label="合同开始时间" min-width="100px">
                    <template slot-scope="{row}">
                        {{ row.startTime }} - {{ row.endTime }}
@@ -74,7 +78,21 @@
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.operaContractDescWindow.open('合同详情', row.id)" icon="el-icon-view">查看详情</el-button>
                        <el-button type="text" @click="sign(row)" icon="el-icon-document-checked" v-if="row.status !== 1 && row.status !== 4 && row.status !== 3">签署</el-button>
                        <template v-if="userInfo.type === 0">
                            <template v-if="(row.signType === 0 && row.status === 0) || (row.signType === 1 && row.status === 0)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <template v-if="userInfo.type === 1">
                            <template v-if="(row.signType === 1 && row.status === 1) || (row.signType === 2 && row.status === 1)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <template v-if="userInfo.type === 2">
                            <template v-if="(row.signType === 0 && row.status === 1) || (row.signType === 2 && row.status === 0)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <el-button type="text" icon="el-icon-document-remove" v-if="row.status === 0" @click="cancelHT(row.id)">取消</el-button>
                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:contract:delete']" v-if="row.status === 4">删除</el-button>
                    </template>
@@ -101,10 +119,14 @@
  import OperaContractWindow from '@/components/business/OperaContractWindow'
  import OperaContractDescWindow from '@/components/business/OperaContractDescWindow'
  import { cancel, getSignLink } from '@/api/business/contract'
  import { mapState } from 'vuex'
  export default {
    name: 'Contract',
    extends: BaseTable,
    components: { TableLayout, Pagination, OperaContractWindow, OperaContractDescWindow },
    computed: {
      ...mapState(['userInfo'])
    },
    data () {
      return {
        // æœç´¢
@@ -139,7 +161,7 @@
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          cancel({ id }).then(res => {
          cancel(id).then(res => {
            this.search()
          })
        }).catch(() => {
company/src/views/business/solutions.vue
@@ -5,6 +5,12 @@
            <el-form-item label="保险方案" prop="name">
                <el-input v-model="searchForm.name" placeholder="请输入" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="签署状态" prop="signStatus">
                <el-select v-model="searchForm.signStatus" placeholder="请选择">
                    <el-option label="待签署" :value="0"></el-option>
                    <el-option label="已签署" :value="1"></el-option>
                </el-select>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
@@ -27,8 +33,9 @@
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="子方案名称" min-width="150px"></el-table-column>
                <el-table-column prop="solutionBaseName" label="主方案" min-width="100px"></el-table-column>
                <el-table-column prop="name" label="子方案名称" min-width="150px" v-if="userInfo.type === 0"></el-table-column>
                <el-table-column prop="name" label="方案名称" min-width="150px" v-if="userInfo.type === 1"></el-table-column>
                <el-table-column prop="solutionBaseName" label="主方案" min-width="100px" v-if="userInfo.type === 0"></el-table-column>
                <el-table-column label="投保类型" min-width="120px" align="center">
                    <template slot-scope="{row}">
                        <span v-if="row.type === 0">直保</span>
@@ -46,7 +53,7 @@
                        <span v-if="row.timeUnit === 5">å¹´</span>
                    </template>
                </el-table-column>
                <el-table-column prop="retrial" label="需要复审">
                <el-table-column prop="retrial" label="需要复审" v-if="userInfo.type === 0">
                    <template slot-scope="{row}">
                        <span v-if="row.retrial === 0">不需要</span>
                        <span v-if="row.retrial === 1">需要</span>
@@ -56,25 +63,42 @@
                <el-table-column prop="status" label="启用状态" min-width="100px" v-if="userInfo.type !== 1">
                    <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">
                            @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 prop="signDate" label="签署时间" min-width="100px"></el-table-column>
                <el-table-column prop="signUserName" label="签署人" min-width="100px"></el-table-column>
                <el-table-column label="签署状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span v-if="row.signStatus === 0">待签章</span>
                        <span v-else-if="!row.signStatus">待签章</span>
                        <span v-else-if="row.signStatus === 1">已签章</span>
                    </template>
                </el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:solutions:update', 'business:solutions:delete'])"
                    label="操作"
                    min-width="150"
                    min-width="230"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.OperaSolutionsDescWindow.open('子方案详情', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">查看详情</el-button>
                        <template v-if="userInfo.type !== 1">
                            <el-button type="text" @click="$refs.operaSolutionsWindow.open('编辑子方案', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">修改</el-button>
                        </template>
                        <template v-if="userInfo.type === 1 && (!row.signStatus || row.signStatus === 0)">
                            <el-button type="text" icon="el-icon-tickets" @click="sign(row.companySolutionId)">签署</el-button>
                        </template>
                        <template v-if="userInfo.type === 1 && row.signStatus === 1">
                            <el-button type="text" icon="el-icon-tickets" @click="seeFleSignUrl(row.fileSignUrl)">查看方案确认书</el-button>
                        </template>
                    </template>
                </el-table-column>
@@ -99,6 +123,7 @@
  import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
  import OperaSolutionsDescWindow from '@/components/business/OperaSolutionsDescWindow'
  import { updateStatus } from '@/api/business/solutions'
  import { getSignLink } from '@/api/business/company'
  import { mapState } from 'vuex'
  export default {
    name: 'Solutions',
@@ -110,7 +135,8 @@
        searchForm: {
          name: '',
          status: '',
          type: ''
          type: '',
          signStatus: ''
        }
      }
    },
@@ -132,6 +158,15 @@
      this.search()
    },
    methods: {
      seeFleSignUrl(url) {
        window.open(url)
      },
      sign(id) {
        getSignLink(id)
          .then(res => {
            window.open(res)
          })
      },
      // ä¿®æ”¹çŠ¶æ€
      changeStatus (status, row) {
        updateStatus({ id: row.id, status })
company/src/views/business/userManagement.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,141 @@
<template>
    <TableLayout :permissions="['system:user:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
            <el-form-item label="账号" prop="username">
                <el-input v-model="searchForm.username" v-trim placeholder="请输入" @keypress.enter.native="search"/>
            </el-form-item>
            <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="mobile">
                <el-input v-model="searchForm.mobile" v-trim placeholder="请输入" @keypress.enter.native="search"/>
            </el-form-item>
            <el-form-item label="企业名称" prop="companyName">
                <el-input v-model="searchForm.companyName" 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>
            <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 prop="companyDepartmentPathName" label="归属公司" min-width="100px"></el-table-column>
                <el-table-column label="授权企业" min-width="100px">
                    <template slot-scope="{row}">
                        <span>{{row.authNum}}å®¶</span>
                    </template>
                </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
                    label="操作"
                    width="100"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.authorizedEnterprise.open('授权企业记录', row.id)">授权企业</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            ></pagination>
        </template>
        <authorizedEnterprise ref="authorizedEnterprise" />
    </TableLayout>
</template>
<script>
  import Pagination from '@/components/common/Pagination'
  import TableLayout from '@/layouts/TableLayout'
  import BaseTable from '@/components/base/BaseTable'
  import { updUserStatus } from '@/api/system/user'
  import authorizedEnterprise from '@/components/business/authorizedEnterprise'
  export default {
    name: 'userManagement',
    extends: BaseTable,
    components: { TableLayout, Pagination, authorizedEnterprise },
    data () {
      return {
        // æœç´¢
        searchForm: {
          username: '',
          realname: '',
          mobile: '',
          companyName: ''
        }
      }
    },
    created () {
      this.config({
        module: '用户',
        api: '/system/user',
        'field.main': 'realname',
        sorts: [{
          property: 'CREATE_TIME',
          direction: 'DESC'
        }]
      })
      this.search()
    },
    methods: {
      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;
        }
    }
</style>