jiangping
2024-01-29 3dd3abbc68a1dd587021e205d3bebf4bff3eab46
Merge remote-tracking branch 'origin/master'

# Conflicts:
# company/.env.development
已添加12个文件
已删除19个文件
已修改11个文件
4520 ■■■■■ 文件已修改
company/.env.development 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/dispatchUnit.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/duWorktype.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/member.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/business/worktype.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/system/menu.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/UploadAvatarVideo.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/OperaDispatchUnitWindow.vue 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/OperaInsuranceApplyWindow.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/addEmployee.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/addJobType.vue 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/dispatchUnitDetails.vue 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/importEmployees.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/enterprise/selectEmployees.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/dispatchUnit.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/enterprise/insuranceApply.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/.env 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/.env.development 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/api/business/goods.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/api/business/solutions.js 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/api/system/menu.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaBaseDataWindow.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaBrandWindow.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaCategoryWindow.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaCompanyUserWindow.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaCompanyValidDateWindow.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaCompanyWindow.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaDispatchUnitWindow.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/OperaGoodsWindow.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/dispatchUnitDetails.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/selectProduct.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/components/business/selectProductItem.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/anchor.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/baseData.vue 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/brand.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/category.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/company.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/companyUser.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/fileRecord.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/goods.vue 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/src/views/business/role.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform/vue.config.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development
@@ -5,4 +5,14 @@
#VUE_APP_API = 'http://192.168.0.134:10023/'
VUE_APP_API = 'http://localhost:10023/'
# ä¼ä¸šç«¯-仁康
VUE_APP_API = 'http://192.168.0.134:10025/'
# å¹³å°ç«¯-仁康
# VUE_APP_API = 'http://192.168.0.134:10023/'
# VUE_APP_API = 'http://192.168.0.134:10023/'
# VUE_APP_API = 'http://localhost:10023/'
# VUE_APP_API = 'http://192.168.0.134:10023/'
company/src/api/business/dispatchUnit.js
@@ -11,3 +11,23 @@
export function create (data) {
    return request.post('/business/dispatchUnit/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
    return request.post('/business/dispatchUnit/updateById', data)
}
// æ ¹æ®ID查询
export function getById (id) {
    return request.get(`/business/dispatchUnit/${id}`)
}
// æ·»åŠ å·¥ç§
export function createSolution (data) {
    return request.post('/business/dispatchUnit/createSolution', data)
}
// ä¿®æ”¹ä¿¡æ¯
export function editDispatchUnit (data) {
    return request.post('/business/dispatchUnit/editDispatchUnit', data)
}
company/src/api/business/duWorktype.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
import request from '../../utils/request'
// æ ¹æ®ID删除
export function deleteById (id) {
  return request.get(`/business/duWorktype/delete/${id}`)
}
company/src/api/business/member.js
@@ -11,3 +11,8 @@
export function create (data) {
    return request.post('/business/member/create', data)
}
// æ•°æ®åˆ—表
export function findListByDTO (data) {
    return request.post('/business/member/findListByDTO', data)
}
company/src/api/business/worktype.js
@@ -9,3 +9,8 @@
export function all (data) {
    return request.post(`/business/worktype/list`, data)
}
// æ ¹æ®æ¡ä»¶å·¥ç§åˆ—表
export function findListByDTO (data) {
    return request.post('/business/worktype/findListByDTO', data)
}
company/src/api/system/menu.js
@@ -41,7 +41,7 @@
// æŸ¥è¯¢èœå•æ ‘
export function fetchMenuTree () {
  return request.get('/system/menu/treeNodes?type=0')
  return request.get('/system/menu/treeNodes?type=1')
}
// æŽ’序
company/src/components/common/UploadAvatarVideo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
<template>
  <div>
    <el-upload
      class="avatar-uploader"
      accept=".mp4"
      :style="customStyle"
      :action="uploadImgUrl"
      :data="uploadData"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :on-error="uploadError"
      :before-upload="beforeAvatarUpload">
      <video v-if="file.videourlfull" :src="file.videourlfull" :style="customStyle" class="avatar" />
      <div v-else :style="customStyle">
        <i class="el-icon-plus avatar-uploader-icon"></i>
        <div class="tips-style">{{ tipsLabel }}</div>
      </div>
    </el-upload>
  </div>
</template>
<script>
export default {
  props: {
    file: {
      type: Object,
      default: () => {}
    },
    tipsLabel: '',
    customStyle: {
      type: String,
      default: 'width: 90px; height: 90px;'
    },
    uploadData: Object
  },
  data() {
    return {
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
    }
  },
  methods: {
    // ä¸Šä¼ å›¾ç‰‡
    handleAvatarSuccess(res, file) {
      if (res.code == 200) {
        let { data } = res
        this.file.videourl = data.imgaddr;
        this.file.videourlfull = data.url;
        this.$message.success('上传成功')
        this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
      } else {
        this.$tip.apiFailed('上传失败')
      }
      this.$emit('uploadEnd')
    },
    uploadError() {
      this.$tip.apiFailed('上传失败')
      this.$emit('endUpload')
    },
    // // æ‹¦æˆª
    beforeAvatarUpload(file) {
      this.$emit('uploadBegin')
      return true
    }
  }
}
</script>
<style lang="scss" scoped>
$image-width: 100px;
.avatar-uploader {
  width: $image-width;
  height: $image-width;
}
::v-deep .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  width: $image-width;
  height: $image-width;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409EFF;
}
.avatar-uploader-icon {
  line-height: 90px;
  font-size: 28px;
  color: #8c939d;
  width: $image-width;
  height: $image-width;
  text-align: center;
}
.avatar {
  width: $image-width;
  height: $image-width;
  display: block;
}
.tips-style {
  height: 13px;
  font-size: 13px;
  font-weight: 400;
  color: #999999;
  line-height: 13px;
}
</style>
<style lang="scss" scoped>
::v-deep .el-upload--picture-card{
  width: 90px !important;
  height: 90px !important;
}
::v-deep .el-upload-list__item {
  width: 90px !important;
  height: 90px !important;
}
.icon {
  -webkit-transform: translate(-50%,-50%);
  -ms-transform: translate(-50%,-50%);
  transform: translate(0%, -85%);
}
::v-deep .el-upload-list__item {
  width: 90px !important;
  height: 90px !important;
}
</style>
company/src/components/enterprise/OperaDispatchUnitWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,321 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :model="form" ref="form" :rules="rules">
            <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="content">
                <el-input v-model="form.content" placeholder="请输入" v-trim/>
            </el-form-item>
        </el-form>
        <div class="list" v-if="form.type !== 1">
            <el-button type="primary" style="margin-bottom: 15px;" @click="add">添加方案</el-button>
            <div class="list_item" v-for="(item, index) in form.saveDuSolutionDTOList" :key="index">
                <div class="list_item_input">
                    <div class="list_item_input_label"><span>*</span>保险方案</div>
                    <div class="list_item_input_val">
                        <el-select v-model="item.solutionId" @change="changeTypeWork($event, index)" placeholder="请选择">
                            <el-option
                                v-for="item in insuranceScheme"
                                :key="item.id"
                                :label="item.name"
                                :value="item.id">
                            </el-option>
                        </el-select>
                        <div style="display: flex; align-items: center;">
                            <el-button type="primary" @click="addItem(index)">添加</el-button>
                            <el-button type="danger" @click="deleItem(index)">删除</el-button>
                        </div>
                    </div>
                </div>
                <div class="list_item_table">
                    <el-table
                        :data="item.saveDuWorkTypeDTOList"
                        border
                        style="width: 100%">
                        <el-table-column label="序号" width="80px">
                            <template slot-scope="scope">
                                <span>{{scope.$index + 1}}</span>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="name"
                            label="所属工种">
                            <template slot-scope="scope">
                                <el-select v-model="scope.row.workTypeId" @change="changeGZ($event, index, scope.$index)" placeholder="请选择">
                                    <el-option
                                        v-for="item in item.typeWork"
                                        :key="item.id"
                                        :label="item.name"
                                        :value="item.id">
                                    </el-option>
                                </el-select>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="address"
                            label="操作视频(非必填)">
                            <template slot-scope="scope">
                                <div style="width: 100px; height: 100px;">
                                    <UploadAvatarVideo :uploadData="{ folder: 'unit' }" :file="scope.row.file" @uploadSuccess="result($event, index, scope.$index)" />
                                </div>
                            </template>
                        </el-table-column>
                        <el-table-column
                            label="操作"
                            width="90"
                            fixed="right">
                            <template slot-scope="scope">
                                <el-button type="text" @click="dele(index, scope.$index)">删除</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </div>
            </div>
        </div>
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import UploadAvatarVideo from '@/components/common/UploadAvatarVideo'
import { all } from '@/api/business/solutions'
import { findListByDTO } from '@/api/business/worktype'
import { editDispatchUnit } from '@/api/business/dispatchUnit'
export default {
  name: 'OperaDispatchUnitWindow',
  extends: BaseOpera,
  components: { GlobalWindow, UploadAvatarVideo },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        name: '',
        code: '',
        content: '',
        type: '',
        saveDuSolutionDTOList: [
          {
            id: '',
            saveDuWorkTypeDTOList: [
              {
                videoUrl: '',
                workTypeId: '',
                workTypeName: '',
                file: {
                  videourl: '',
                  videourlfull: ''
                }
              }
            ],
            typeWork: [],
            solutionId: '',
            solutionName: ''
          }
        ]
      },
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入派遣单位名称' }
        ],
        code: [
          { required: true, message: '请输入派遣单位信用代码' }
        ],
        content: [
          { required: true, message: '请输入派遣单位描述' }
        ]
      },
      insuranceScheme: []
    }
  },
  created () {
    this.config({
      api: '/business/dispatchUnit',
      'field.id': 'id'
    })
    all({})
      .then(res => {
        this.insuranceScheme = res
      })
  },
  methods: {
    open (title, target) {
      this.title = title
      this.visible = true
      this.form.saveDuSolutionDTOList = [
        {
          id: '',
          saveDuWorkTypeDTOList: [
            {
              videoUrl: '',
              workTypeId: '',
              workTypeName: '',
              file: {
                videourl: '',
                videourlfull: ''
              }
            }
          ],
          typeWork: [],
          solutionId: '',
          solutionName: ''
        }
      ]
      // æ–°å»º
      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]
        }
      })
    },
      // ç¡®è®¤ä¿®æ”¹
      __confirmEdit () {
          this.$refs.form.validate((valid) => {
              if (!valid) {
                  return
              }
              // è°ƒç”¨æ–°å»ºæŽ¥å£
              this.isWorking = true
              editDispatchUnit(this.form)
                  .then(() => {
                      this.visible = false
                      this.$tip.apiSuccess('修改成功')
                      this.$emit('success')
                  })
                  .catch(e => {
                      this.$tip.apiFailed(e)
                  })
                  .finally(() => {
                      this.isWorking = false
                  })
          })
      },
    // åˆ‡æ¢å·¥ç§
    changeGZ(a, b, c) {
      let text = ''
      this.form.saveDuSolutionDTOList[b].typeWork.forEach(item => {
        if (item.id === a) {
          text = item.name
        }
      })
      this.form.saveDuSolutionDTOList[b].saveDuWorkTypeDTOList[c].workTypeName = text
    },
    // åˆ‡æ¢æ–¹æ¡ˆ
    changeTypeWork(id, index) {
      findListByDTO({ queryType: 0, id })
        .then(res => {
          this.form.saveDuSolutionDTOList[index].typeWork = res
        })
      let text = ''
      this.insuranceScheme.forEach(item => {
        if (item.id === id) {
          text = item.name
        }
      })
      this.form.saveDuSolutionDTOList[index].solutionName = text
    },
    add() {
      this.form.saveDuSolutionDTOList.unshift({
          id: '',
          saveDuWorkTypeDTOList: [
              {
                  videoUrl: '',
                  workTypeId: '',
                  workTypeName: '',
                  file: {
                      videourl: '',
                      videourlfull: ''
                  }
              }
          ],
          typeWork: [],
          solutionId: '',
          solutionName: ''
      })
    },
    addItem(index) {
      this.form.saveDuSolutionDTOList[index].saveDuWorkTypeDTOList.push({
        videoUrl: '',
        workTypeId: '',
        file: {
          videourl: '',
          videourlfull: ''
        }
      })
    },
    deleItem(index) {
      if (this.form.saveDuSolutionDTOList.length === 1) {
        this.$message.warning('至少保留一项内容')
        return
      }
      this.form.saveDuSolutionDTOList.splice(index, 1)
    },
    result(e, a, b) {
      this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList[b].videoUrl = e.imgurl
    },
    dele(a, b) {
      if (this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.length === 1) {
        this.$message.warning('至少保留一项内容')
        return
      }
      this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.splice(b, 1)
    }
  }
}
</script>
<style lang="scss" scoped>
    .list {
        width: 100%;
        margin-bottom: 20px;
        .list_item {
            width: 100%;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .list_item_input {
                width: 100%;
                margin-bottom: 15px;
                .list_item_input_label {
                    margin-bottom: 10px;
                    font-size: 14px;
                    color: #606266;
                    span {
                        color: red;
                        margin-right: 4px;
                    }
                }
                .list_item_input_val {
                    width: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                }
            }
            .list_item_table {
            }
        }
    }
</style>
company/src/components/enterprise/OperaInsuranceApplyWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,172 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :withFooter="false"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="list">
            <el-form :inline="true" :model="form" :rules="rules" class="demo-form-inline">
                <el-form-item label="保险方案" prop="solutionId">
                    <el-select v-model="form.solutionId" placeholder="请选择">
                        <el-option label="区域一" value="shanghai"></el-option>
                        <el-option label="区域二" value="beijing"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="期望保险生效起期" prop="applyStartTime">
                    <div style="display: flex; flex-direction: column;">
                        <el-date-picker
                                v-model="form.applyStartTime"
                                type="date"
                                placeholder="选择日期">
                        </el-date-picker>
                        <span style="color: #F95601; font-size: 14px;">(次日生效投保请于17:30前提交,超时提交以保险单为准)</span>
                    </div>
                </el-form-item>
                <el-form-item label="保险生效止期" prop="applyEndTime">
                    <el-date-picker
                        v-model="form.applyEndTime"
                        type="date"
                        placeholder="选择日期">
                    </el-date-picker>
                </el-form-item>
                <el-form-item label="投保年龄">
                    <span>25至65</span>
                </el-form-item>
                <el-form-item label="费用">
                    <span>200元/å¹´/人</span>
                </el-form-item>
            </el-form>
        </div>
        <div class="btns">
            <div class="btns_item">
                <el-button type="primary" @click="$refs.selectEmployees.open('选取员工')">选取员工</el-button>
                <el-button type="primary">导入员工</el-button>
                <el-button type="primary" @click="$refs.addEmployee.open('添加员工', tableData)">添加员工</el-button>
            </div>
            <div class="btns_item">
                <el-button type="primary">选取派遣单位</el-button>
            </div>
        </div>
        <el-table
            :data="tableData"
            border
            style="width: 100%;margin-bottom: 15px;">
            <el-table-column label="序号" width="80px">
                <template slot-scope="scope">
                    <span>{{scope.$index + 1}}</span>
                </template>
            </el-table-column>
            <el-table-column
                prop="name"
                label="姓名">
            </el-table-column>
            <el-table-column
                prop="idcardNo"
                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>
        <div class="submit">
            <el-button type="primary">投保申请</el-button>
        </div>
        <div class="info">
            å¯Œæ–‡æœ¬
        </div>
        <!--    é€‰æ‹©å‘˜å·¥    -->
        <selectEmployees ref="selectEmployees" />
        <!--    æ·»åŠ å‘˜å·¥    -->
        <addEmployee ref="addEmployee" @result="getValue" />
    </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import selectEmployees from '@/components/enterprise/selectEmployees'
import addEmployee from '@/components/enterprise/addEmployee'
export default {
  name: 'OperaInsuranceApplyWindow',
  extends: BaseOpera,
  components: { GlobalWindow, selectEmployees, addEmployee },
  data () {
    return {
      form: {
          id: null,
          solutionId: '',
          applyStartTime: '',
          applyEndTime: ''
      },
      // éªŒè¯è§„则
      rules: {
          solutionId: [
              { required: true, message: '请选择保险方案' }
          ],
          applyStartTime: [
              { required: true, message: '请选择期望保险生效起期' }
          ]
      },
      tableData: []
    }
  },
  created () {
      this.config({
          api: '/business/insuranceApply',
          'field.id': 'id'
      })
  },
  methods: {
      getValue(list) {
          this.tableData.push(...list)
      }
  }
}
</script>
<style lang="scss" scoped>
    .list {
        width: 100%;
    }
    .btns {
        width: 100%;
        margin-bottom: 15px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        .btns_item {
            display: flex;
            align-items: center;
        }
    }
    .submit {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        margin-bottom: 15px;
    }
    .info {
        width: 100%;
    }
</style>
company/src/components/enterprise/addEmployee.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form :inline="true" class="demo-form-inline">
            <div v-for="(item, index) in list" :key="index">
                <el-form-item label="姓名" required>
                    <el-input v-model="item.name" placeholder="请输入"></el-input>
                </el-form-item>
                <el-form-item label="身份证号" required>
                    <el-input v-model="item.idcardNo" maxlength="18" placeholder="请输入"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" v-if="index === 0" @click="add">添加</el-button>
                    <el-button type="danger" v-else @click="dele(index)">删除</el-button>
                </el-form-item>
            </div>
        </el-form>
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    export default {
        name: 'addEmployee',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                list: [
                    {
                        name: '',
                        idcardNo: ''
                    }
                ],
                arr: []
            }
        },
        methods: {
            open (title, arr) {
                this.title = title
                this.visible = true
                this.list = [
                    {
                        name: '',
                        idcardNo: ''
                    }
                ]
                this.arr = arr
            },
            add() {
                this.list.push({
                    name: '',
                    idCard: ''
                })
            },
            dele(index) {
                this.form.list.splice(index, 1)
            },
            hasDuplicates(arr) {
                return arr.some((value, index) => arr.indexOf(value) !== index);
            },
            confirm() {
                // åˆ¤æ–­åˆ—表否是有空值
                for (let i = 0; this.list.length; i++) {
                    if (!this.list[i].name || !this.list[i].idcardNo) {
                        this.$message.warning('请先完善信息后再提交')
                        return
                    }
                }
                // åˆ¤æ–­æ–°å½•入数据身份证是否有重复
                let idcardList = this.list.map(item => item.idcardNo)
                if (this.hasDuplicates(idcardList)) {
                    this.$message.warning('身份证有重复')
                    return
                }
                // åˆ¤æ–­è¯¦æƒ…列表数据身份证是否有重复
                let next = true
                this.list.forEach(item => {
                    this.arr.forEach(child => {
                        if (item.idcardNo === child.idcardNo) {
                            next = false
                        }
                    })
                })
                if (next) {
                    this.$emit('result', this.list)
                    this.visible = false
                } else {
                    this.$message.warning('身份证号不能重复!')
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>
company/src/components/enterprise/addJobType.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,285 @@
<template>
    <GlobalWindow
        :title="title"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="list">
            <el-button type="primary" style="margin-bottom: 15px;" @click="add">添加方案</el-button>
            <div class="list_item" v-for="(item, index) in form.saveDuSolutionDTOList" :key="index">
                <div class="list_item_input">
                    <div class="list_item_input_label"><span>*</span>保险方案</div>
                    <div class="list_item_input_val">
                        <el-select v-model="item.solutionId" @change="changeTypeWork($event, index)" placeholder="请选择">
                            <el-option
                                v-for="item in insuranceScheme"
                                :key="item.id"
                                :label="item.name"
                                :value="item.id">
                            </el-option>
                        </el-select>
                        <div style="display: flex; align-items: center;">
                            <el-button type="primary" @click="addItem(index)">添加</el-button>
                            <el-button type="danger" @click="deleItem(index)">删除</el-button>
                        </div>
                    </div>
                </div>
                <div class="list_item_table">
                    <el-table
                        :data="item.saveDuWorkTypeDTOList"
                        border
                        style="width: 100%">
                        <el-table-column label="序号" width="80px">
                            <template slot-scope="scope">
                                <span>{{scope.$index + 1}}</span>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="name"
                            label="所属工种">
                            <template slot-scope="scope">
                                <el-select v-model="scope.row.workTypeId" @change="changeGZ($event, index, scope.$index)" placeholder="请选择">
                                    <el-option
                                        v-for="item in item.typeWork"
                                        :key="item.id"
                                        :label="item.name"
                                        :value="item.id">
                                    </el-option>
                                </el-select>
                            </template>
                        </el-table-column>
                        <el-table-column
                            prop="address"
                            label="操作视频(非必填)">
                            <template slot-scope="scope">
                                <div style="width: 100px; height: 100px;">
                                    <UploadAvatarVideo :uploadData="{ folder: 'unit' }" :file="scope.row.file" @uploadSuccess="result($event, index, scope.$index)" />
                                </div>
                            </template>
                        </el-table-column>
                        <el-table-column
                            label="操作"
                            width="90"
                            fixed="right">
                            <template slot-scope="scope">
                                <el-button type="text" @click="dele(index, scope.$index)">删除</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                </div>
            </div>
        </div>
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import UploadAvatarVideo from '@/components/common/UploadAvatarVideo'
  import { all } from '@/api/business/solutions'
  import { findListByDTO } from '@/api/business/worktype'
  import { createSolution } from '@/api/business/dispatchUnit'
  export default {
    name: 'addJobType',
    extends: BaseOpera,
    components: { GlobalWindow, UploadAvatarVideo },
    data () {
      return {
        // è¡¨å•数据
        form: {
          id: null,
          saveDuSolutionDTOList: [
            {
              id: '',
              saveDuWorkTypeDTOList: [
                {
                  videoUrl: '',
                  workTypeId: '',
                  workTypeName: '',
                  file: {
                    videourl: '',
                    videourlfull: ''
                  }
                }
              ],
              typeWork: [],
              solutionId: '',
              solutionName: ''
            }
          ]
        },
        insuranceScheme: []
      }
    },
    created () {
      this.config({
        api: '/business/dispatchUnit',
        'field.id': 'id'
      })
    },
    methods: {
        confirm() {
            for (let i = 0; i < this.form.saveDuSolutionDTOList.length; i++) {
                if (!this.form.saveDuSolutionDTOList[i].solutionId) {
                    this.$message.warning(`第${i + 1}项方案不能为空!`)
                    return
                }
                for (let a = 0; a < this.form.saveDuSolutionDTOList[i].saveDuWorkTypeDTOList.length; a++) {
                    if (!this.form.saveDuSolutionDTOList[i].saveDuWorkTypeDTOList[a].workTypeId) {
                        this.$message.warning(`第${i + 1}项方案工种不能为空!`)
                        return
                    }
                }
            }
            this.isWorking = true
            createSolution(this.form)
                .then(() => {
                    this.visible = false
                    this.$tip.apiSuccess('操作成功')
                    this.$emit('success')
                })
                .catch(e => {
                    this.$tip.apiFailed(e)
                })
                .finally(() => {
                    this.isWorking = false
                })
        },
        deleItem(index) {
            if (this.form.saveDuSolutionDTOList.length === 1) {
                this.$message.warning('至少保留一项内容')
                return
            }
            this.form.saveDuSolutionDTOList.splice(index, 1)
        },
        open (title, target) {
            this.title = title
            this.visible = true
            this.form.id = target.id
            this.form.saveDuSolutionDTOList = [
                {
                    id: '',
                    saveDuWorkTypeDTOList: [
                        {
                            videoUrl: '',
                            workTypeId: '',
                            workTypeName: '',
                            file: {
                                videourl: '',
                                videourlfull: ''
                            }
                        }
                    ],
                    typeWork: [],
                    solutionId: '',
                    solutionName: ''
                }
            ]
            all({})
              .then(res => {
                this.insuranceScheme = res
              })
        },
        // åˆ‡æ¢å·¥ç§
        changeGZ(a, b, c) {
            let text = ''
            this.form.saveDuSolutionDTOList[b].typeWork.forEach(item => {
                if (item.id === a) {
                    text = item.name
                }
            })
            this.form.saveDuSolutionDTOList[b].saveDuWorkTypeDTOList[c].workTypeName = text
        },
        addItem(index) {
            this.form.saveDuSolutionDTOList[index].saveDuWorkTypeDTOList.push({
                videoUrl: '',
                workTypeId: '',
                file: {
                    videourl: '',
                    videourlfull: ''
                }
            })
        },
        result(e, a, b) {
            this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList[b].videoUrl = e.imgurl
        },
        dele(a, b) {
            if (this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.length === 1) {
                this.$message.warning('至少保留一项内容')
                return
            }
            this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.splice(b, 1)
        },
        add() {
            this.form.saveDuSolutionDTOList.unshift({
                id: '',
                saveDuWorkTypeDTOList: [
                    {
                        videoUrl: '',
                        workTypeId: '',
                        workTypeName: '',
                        file: {
                            videourl: '',
                            videourlfull: ''
                        }
                    }
                ],
                typeWork: [],
                solutionId: ''
            })
        },
        // åˆ‡æ¢æ–¹æ¡ˆ
        changeTypeWork(id, index) {
            console.log(index)
            findListByDTO({ queryType: 0, id })
                .then(res => {
                    this.form.saveDuSolutionDTOList[index].typeWork = res
                })
            let text = ''
            this.insuranceScheme.forEach(item => {
                if (item.id === id) {
                    text = item.name
                }
            })
            this.form.saveDuSolutionDTOList[index].solutionName = text
        },
    }
  }
</script>
<style lang="scss" scoped>
    .list {
        width: 100%;
        margin-bottom: 20px;
        .list_item {
            width: 100%;
            margin-bottom: 20px;
            &:last-child {
                margin: 0 !important;
            }
            .list_item_input {
                width: 100%;
                margin-bottom: 15px;
                .list_item_input_label {
                    margin-bottom: 10px;
                    font-size: 14px;
                    color: #606266;
                    span {
                        color: red;
                        margin-right: 4px;
                    }
                }
                .list_item_input_val {
                    width: 100%;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                }
            }
            .list_item_table {
            }
        }
    }
</style>
company/src/components/enterprise/dispatchUnitDetails.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,280 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <div class="info">
            <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" v-if="form.unitStatus === 0">待审核</div>
                    <div class="info_list_item_val" style="color: green;" v-if="form.unitStatus === 1">审核通过</div>
                    <div class="info_list_item_val" style="color: red;" v-if="form.unitStatus === 2">审核不通过</div>
                </div>
                <div class="info_list_item">
                    <div class="info_list_item_label">派遣单位详述:</div>
                    <div class="info_list_item_val">{{form.content}}</div>
                </div>
            </div>
            <div class="info_btns">
                <el-button type="primary" @click="edit">修改派遣单位</el-button>
                <el-button type="primary" @click="$refs.addJobType.open('添加工种', { id: form.id })">添加工种</el-button>
            </div>
            <div class="info_table">
                <div class="info_table_item" v-for="(item, index) in form.duSolutionList" :key="index">
                    <div class="info_table_item_label">保险方案:{{item.solutionName}}</div>
                    <div class="info_table_item_content">
                        <el-table
                            :data="item.duWorktypeList"
                            border
                            style="width: 100%">
                            <el-table-column label="序号" width="80px">
                                <template slot-scope="scope">
                                    <span>{{scope.$index + 1}}</span>
                                </template>
                            </el-table-column>
                            <el-table-column
                                prop="workTypeName"
                                label="所属工种">
                            </el-table-column>
                            <el-table-column
                                prop="name"
                                label="操作视频">
                                <template slot-scope="{row}">
                                    <video loop controls width="150px" height="150px" :src="row.videoUrlFull"></video>
                                </template>
                            </el-table-column>
                            <el-table-column
                                prop="checkDate"
                                label="审核通过日期">
                            </el-table-column>
                            <el-table-column
                                label="状态">
                                <template slot-scope="{row}">
                                    <span v-if="row.status === 0">待审核</span>
                                    <span v-if="row.status === 1">审核通过</span>
                                    <span v-if="row.status === 2">审核不通过</span>
                                </template>
                            </el-table-column>
                            <el-table-column
                                label="操作">
                                <template slot-scope="scope">
                                    <el-button type="text" style="color: red;" v-if="scope.row.status === 2" @click="dele(scope.row.id, index, scope.$index)">删除</el-button>
                                </template>
                            </el-table-column>
                        </el-table>
                    </div>
                </div>
            </div>
            <div class="info_status">
                <div class="info_status_label">审核流程</div>
                <div class="info_status_list">
                    <el-timeline :reverse="reverse">
                        <el-timeline-item
                            v-for="(activity, index) in form.duLogList"
                            :key="index">
                            <div style="display: flex; flex-direction: column;">
                                <span style="font-size: 16px; font-weight: 400; color: black;">
                                    {{activity.title}}
                                    <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;" v-if="activity.objType === 5 || activity.objType === 6 || activity.objType === 1 || activity.objType === 2">
                                        æäº¤æ„è§: -
                                    </span>
                                </span>
                                <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
                                    æ“ä½œå‘˜-{{activity.creatorName}}({{activity.companyName}}){{activity.createDate}}
                                </span>
                            </div>
                        </el-timeline-item>
                    </el-timeline>
                </div>
            </div>
        </div>
        <!--    æ·»åŠ æ–¹æ¡ˆ    -->
        <addJobType ref="addJobType" @success="callback" />
        <!-- ç¼–辑 -->
        <OperaDispatchUnitWindow ref="OperaDispatchUnitWindow" @success="callback" />
    </GlobalWindow>
</template>
<script>
  import BaseOpera from '@/components/base/BaseOpera'
  import GlobalWindow from '@/components/common/GlobalWindow'
  import addJobType from '@/components/enterprise/addJobType'
  import OperaDispatchUnitWindow from '@/components/enterprise/OperaDispatchUnitWindow'
  import { getById } from '@/api/business/dispatchUnit'
  import { deleteById } from '@/api/business/duWorktype'
  export default {
    name: 'dispatchUnitDetails',
    extends: BaseOpera,
    components: { GlobalWindow, addJobType, OperaDispatchUnitWindow },
    data () {
      return {
        // è¡¨å•数据
        form: {
          id: null,
          name: '',
          code: '',
          content: '',
          unitStatus: '',
          duLogList: [],
          duSolutionList: [],
          saveDuSolutionDTOList: [
            {
              id: '',
              saveDuWorkTypeDTOList: [
                {
                  videoUrl: '',
                  workTypeId: '',
                  file: {
                    videourl: '',
                    videourlfull: ''
                  }
                }
              ],
              typeWork: [],
              solutionId: ''
            }
          ]
        },
        tableData: [],
        insuranceScheme: [],
        reverse: true,
        activities: []
      }
    },
    created () {
      this.config({
        api: '/business/dispatchUnit',
        'field.id': 'id'
      })
    },
    methods: {
        edit() {
            this.$confirm('修改派遣单位会导致该派遣单位不可用,如您需要修改该派遣单位的使用保险方案及工种请点击“添加工种”按钮。', '温馨提醒', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
                this.$refs.OperaDispatchUnitWindow.open('编辑派遣单位', {
                    id: this.form.id,
                    name: this.form.name,
                    code: this.form.code,
                    content: this.form.content,
                    type: 1
                })
            }).catch(() => {
            });
        },
      dele (id, b, c) {
        this.$confirm('此操作将永久删除该工种, æ˜¯å¦ç»§ç»­?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          deleteById(id)
            .then(res => {
              this.$message.success('删除成功')
              this.getDetails()
            })
        }).catch(() => {
        });
      },
      open (title, target) {
        this.title = title
        this.form.id = target.id
        this.visible = true
        this.getDetails()
      },
      async getDetails() {
        let res = await getById(this.form.id)
        for (const key in this.form) {
          this.form[key] = res[key]
        }
      },
      callback() {
          this.visible = false
          this.$emit('success')
      }
    }
  }
</script>
<style lang="scss" scoped>
    .info {
        width: 100%;
        .info_list {
            width: 100%;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            .info_list_item {
                width: 33.3%;
                display: flex;
                align-items: center;
                margin-bottom: 15px;
                .info_list_item_label {
                    flex-shrink: 0;
                    width: 150px;
                    font-size: 14px;
                    color: black;
                }
                .info_list_item_val {
                    flex: 1;
                    font-size: 14px;
                    color: black;
                }
            }
        }
        .info_btns {
            width: 100%;
            display: flex;
            align-items: center;
            margin-bottom: 15px;
        }
        .info_table {
            width: 100%;
            display: flex;
            flex-direction: column;
            margin-bottom: 15px;
            .info_table_item {
                width: 100%;
                display: flex;
                flex-direction: column;
                margin-bottom: 15px;
                &:last-child {
                    margin: 0 !important;
                }
                .info_table_item_label {
                    font-size: 14px;
                    color: black;
                    margin-bottom: 10px;
                }
                .info_table_item_content {
                    width: 100%;
                }
            }
        }
        .info_status {
            width: 100%;
            .info_status_label {
                width: 100%;
                font-size: 18px;
                font-weight: bold;
                margin-bottom: 15px;
            }
        }
    }
</style>
company/src/components/enterprise/importEmployees.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form class="demo-form-inline">
            <el-form-item label="上传名单" required>
                <el-button type="primary" @click="clickRef">点击上传</el-button>
                <el-button type="text">名单模板.EXCEL</el-button>
            </el-form-item>
        </el-form>
        <input type="file" accept=".excel" ref="fileExcel" @change="result" />
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    export default {
        name: 'importEmployees',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                list: []
            }
        },
        methods: {
            open (title, arr) {
                this.title = title
                this.visible = true
            },
            clickRef () {
                this.$refs.fileExcel.click()
            },
            result (e) {
                console.log(e)
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>
company/src/components/enterprise/selectEmployees.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-input v-model="val" placeholder="查询员工姓名" @keypress.enter.native="getList" style="margin-bottom: 15px;"></el-input>
        <el-table
            :data="list"
            border
            style="width: 100%">
            <el-table-column label="序号" width="80px">
                <template slot-scope="scope">
                    <span>{{scope.$index + 1}}</span>
                </template>
            </el-table-column>
            <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>
    </GlobalWindow>
</template>
<script>
    import BaseOpera from '@/components/base/BaseOpera'
    import GlobalWindow from '@/components/common/GlobalWindow'
    import { findListByDTO } from '@/api/business/member'
    export default {
        name: 'selectEmployees',
        extends: BaseOpera,
        components: { GlobalWindow },
        data () {
            return {
                val: '',
                list: []
            }
        },
        created () {
            this.config({
                api: '/business/dispatchUnit',
                'field.id': 'id'
            })
        },
        methods: {
            open (title) {
                this.title = title
                this.visible = true
                this.getList()
            },
            getList() {
                findListByDTO({
                    name: this.val
                }).then(res => {
                    this.list = []
                })
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>
company/src/views/enterprise/dispatchUnit.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
<template>
    <TableLayout :permissions="['business:dispatchunit:query']">
        <!-- æœç´¢è¡¨å• -->
        <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:dispatchunit:create']">
                <li><el-button type="primary" @click="$refs.operaDispatchUnitWindow.open('添加派遣单位')" v-permissions="['business:dispatchunit:create']">新增派遣单位</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="派遣单位"></el-table-column>
                <el-table-column label="企业状态">
                    <template slot-scope="{row}">
                        <span v-if="row.unitStatus === 0">待审核</span>
                        <span v-if="row.unitStatus === 1" style="color: green;">审核通过</span>
                        <span v-if="row.unitStatus === 2" style="color: red;">审核不通过</span>
                    </template>
                </el-table-column>
                <el-table-column prop="createDate" label="添加日期"></el-table-column>
                <el-table-column label="是否停用">
                    <template slot-scope="{row}">
                        <el-switch
                            @change="changeStatus($event, row)"
                            v-model="row.status"
                            active-color="#13ce66"
                            inactive-color="#ff4949"
                            :active-value="1"
                            :inactive-value="0">
                        </el-switch>
                    </template>
                </el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:dispatchunit:update', 'business:dispatchunit:delete'])"
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.dispatchUnitDetails.open('派遣单位详情', row)" v-permissions="['business:dispatchunit:update']">查看详情</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaDispatchUnitWindow ref="operaDispatchUnitWindow" @success="handlePageChange"/>
        <!-- è¯¦æƒ… -->
        <dispatchUnitDetails ref="dispatchUnitDetails" @success="handlePageChange"/>
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaDispatchUnitWindow from '@/components/enterprise/OperaDispatchUnitWindow'
import dispatchUnitDetails from '@/components/enterprise/dispatchUnitDetails'
import { updateById } from '@/api/business/dispatchUnit'
export default {
  name: 'DispatchUnit',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaDispatchUnitWindow, dispatchUnitDetails },
  data () {
    return {
      // æœç´¢
      searchForm: {
        name: '',
        dataType: 0
      }
    }
  },
  created () {
    this.config({
      module: '派遣单位信息表',
      api: '/business/dispatchUnit',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    // ä¿®æ”¹çŠ¶æ€
    changeStatus(status, row) {
      updateById({ status, id: row.id })
        .then(res => {
          this.search()
        })
        .catch(err => {
          row.status = row.status === 0 ? 1 : 0
        })
    }
  }
}
</script>
company/src/views/enterprise/insuranceApply.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
<template>
    <TableLayout :permissions="['business:insuranceapply:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择" @keypress.enter.native="search">
                    <el-option label="待审批" value="0"></el-option>
                    <el-option label="待签署" value="2"></el-option>
                    <el-option label="已签署" value="3"></el-option>
                    <el-option label="已撤销" value="7"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="保险方案" prop="baseSolutionId">
                <el-select v-model="searchForm.baseSolutionId" placeholder="请选择" @change="search">
                    <el-option
                        v-for="item in solutionList"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="提交日期" prop="createDate">
                <el-date-picker
                    v-model="searchForm.createDate"
                    @change="search"
                    type="daterange"
                    range-separator="至"
                    value-format="yyyy-MM-dd"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期">
                </el-date-picker>
            </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:dispatchunit:create']">
                <li><el-button type="primary" @click="$refs.OperaInsuranceApplyWindow.open('投保申请')">投保申请</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="status" label="状态"></el-table-column>
                <el-table-column prop="solutionsName" label="保险方案"></el-table-column>
                <el-table-column prop="insureNum" label="投保人数"></el-table-column>
                <el-table-column prop="serviceDays" label="投保时长(天)"></el-table-column>
                <el-table-column prop="fee" label="总费用(元)"></el-table-column>
                <el-table-column prop="createTimeS" label="提交日期"></el-table-column>
                <el-table-column prop="endTimeE" label="投保生效日期"></el-table-column>
                <el-table-column prop="endTimeS" label="投保失效日期"></el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:insuranceapply:update', 'business:insuranceapply:delete'])"
                    label="操作"
                    min-width="120"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.operaInsuranceApplyWindow.open('编辑投保申请信息表', row)" icon="el-icon-edit" v-permissions="['business:insuranceapply:update']">查看详情</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!--    æ–°å¢žæŠ•保    -->
        <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @sucess="handlePageChange" />
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaInsuranceApplyWindow from '@/components/enterprise/OperaInsuranceApplyWindow'
import { all as solutionAll} from '@/api/business/solutions'
export default {
    name: 'InsuranceApply',
    extends: BaseTable,
    components: { TableLayout, Pagination, OperaInsuranceApplyWindow },
    data () {
        return {
            // æœç´¢
            searchForm: {
                createTimeS: '',
                createTimeE: '',
                baseSolutionId: '',
                status: '2'
            },
            solutionList:[]
        }
    },
    created () {
        this.config({
            module: '投保申请信息表',
            api: '/business/insuranceApply',
            'field.id': 'id',
            'field.main': 'id'
        })
        this.search()
        this.loadSelectList()
    },
    methods:{
        loadSelectList() {
          solutionAll({ dataType:0 }).then(res => {
              this.solutionList = res
            })
        }
    }
}
</script>
platform/.env
@@ -5,8 +5,8 @@
# é¡¹ç›®ä¸Šä¸‹æ–‡è·¯å¾„
# preselect_admin/
VUE_APP_CONTEXT_PATH = './'
VUE_APP_CONTEXT_PATH = '/'
# æŽ¥å£å‰ç¼€
# VUE_APP_API_PREFIX = '/yunyibao_interface/'
VUE_APP_API_PREFIX = '/interface'
VUE_APP_API_PREFIX = '/api'
platform/.env.development
@@ -1,19 +1,5 @@
# å¼€å‘环境配置
NODE_ENV = 'development'
<<<<<<< HEAD
VUE_APP_API = 'http://192.168.0.134:10025/'
=======
VUE_APP_CONTEXT_PATH = '/'
VUE_APP_API_PREFIX = '/api'
# ä»»åº·
# VUE_APP_API = 'http://192.168.0.15:10017/'
# ç„¦æ¾
#VUE_APP_API = 'http://192.168.0.36:10023'
# æ±Ÿè
VUE_APP_API = 'http://192.168.0.154:10023'
# #测试服务器
#VUE_APP_API = 'https://dmtest.ahapp.net/preselect_admin_interface'
>>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
VUE_APP_API = 'http://192.168.0.134:10025/'
platform/src/api/business/goods.js
ÎļþÒÑɾ³ý
platform/src/api/business/solutions.js
platform/src/api/system/menu.js
@@ -1,6 +1,5 @@
import request from '@/utils/request'
<<<<<<< HEAD
// æŸ¥è¯¢----平台菜单
export function fetchTree () {
  return request.post('/system/menu/treeList/0')
@@ -9,11 +8,6 @@
// æŸ¥è¯¢----企业菜单
export function fetchTree1 () {
  return request.post('/system/menu/treeList/1')
=======
// æŸ¥è¯¢
export function fetchTree (data, type) {
  return request.post(`/system/menu/treeList/${type}`, data)
>>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
}
// æ–°å»º
@@ -46,13 +40,8 @@
}
// æŸ¥è¯¢èœå•æ ‘
<<<<<<< HEAD
export function fetchMenuTree () {
  return request.get('/system/menu/treeNodes?type=1')
=======
export function fetchMenuTree (params) {
  return request.get('/system/menu/treeNodes', { params })
>>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
}
// æŽ’序
platform/src/components/business/OperaBaseDataWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaBrandWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaCategoryWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaCompanyUserWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaCompanyValidDateWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaCompanyWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/OperaDispatchUnitWindow.vue
@@ -1,6 +1,7 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
platform/src/components/business/OperaGoodsWindow.vue
ÎļþÒÑɾ³ý
platform/src/components/business/dispatchUnitDetails.vue
@@ -1,6 +1,7 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
platform/src/components/business/selectProduct.vue
ÎļþÒÑɾ³ý
platform/src/components/business/selectProductItem.vue
ÎļþÒÑɾ³ý
platform/src/views/business/anchor.vue
ÎļþÒÑɾ³ý
platform/src/views/business/baseData.vue
ÎļþÒÑɾ³ý
platform/src/views/business/brand.vue
ÎļþÒÑɾ³ý
platform/src/views/business/category.vue
ÎļþÒÑɾ³ý
platform/src/views/business/company.vue
ÎļþÒÑɾ³ý
platform/src/views/business/companyUser.vue
ÎļþÒÑɾ³ý
platform/src/views/business/fileRecord.vue
ÎļþÒÑɾ³ý
platform/src/views/business/goods.vue
ÎļþÒÑɾ³ý
platform/src/views/business/role.vue
ÎļþÒÑɾ³ý
platform/vue.config.js
@@ -1,24 +1,9 @@
const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length)
// const proxyMiddleware = require('http-proxy-middleware');
module.exports = {
  publicPath: './',
  outputDir: outputDir || 'web',
  outputDir: 'web',
  assetsDir: 'static',
  lintOnSave: false,
  devServer: {
    // before(app) {
    //   app.use(
    //     [process.env.VUE_APP_API_PREFIX],
    //     proxyMiddleware({
    //       target: process.env.VUE_APP_API,
    //       changeOrigin: true,
    //       pathRewrite: {
    //         [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
    //       }
    //     })
    //   );
    // },
    host: '0.0.0.0',
    port: 10086,
    proxy: {