zhouwenxuan
2024-02-27 eb5d50f5ce1ddc9c32ca54276952e68d0f132e0e
bug修改
已修改21个文件
已添加7个文件
475 ■■■■■ 文件已修改
src/assets/images/back1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bg1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bg2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/cardHeader1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/cardHeader2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/choosed.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/choosed2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/itemStatus2-1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/menu.js 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/TagsView/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/homePage.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/originLogin.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/confirmEnd.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/employNoticeRecord.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/evaluatePlan.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/expertsList.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/mapLocation.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/projectArchive.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/rateConclusion.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/signConfirm.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/siteCheckRcd.vue 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/components/uploadReviewRcd.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/projectManage/process.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/components/projectDialog.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/back1.png
src/assets/images/bg1.png
src/assets/images/bg2.png
src/assets/images/cardHeader1.png
src/assets/images/cardHeader2.png
src/assets/images/choosed.png

src/assets/images/choosed2.png
src/assets/images/itemStatus2-1.png
src/layout/components/Sidebar/menu.js
@@ -9,86 +9,86 @@
        {
            path: '/institution',
            name: 'Institution',
            meta: { title: '机构公示',icon: 'form',affix: true }
            meta: { title: '机构公示',icon: 'chart',affix: true }
        },
        {
            path: '/notice',
            name: 'Notice',
            meta: { title: '公告发布',icon: 'form', affix: true }
            meta: { title: '公告发布',icon: 'email', affix: true }
        },
        {
            path: '/law',
            name: 'Law',
            meta: { title: '法律法规',icon: 'form', affix: true }
            meta: { title: '法律法规',icon: 'excel', affix: true }
        },
        {
            path: '/userManage',
            redirect: '/userManage/supervise',
            meta: { title: '用户管理',icon: 'form'},
            meta: { title: '用户管理',icon: 'peoples'},
            children: [
                {
                    path: 'supervise',
                    name: 'supervise',
                    meta: { title: '监管用户管理',icon: 'form'}
                    meta: { title: '监管用户管理',icon: 'monitor'}
                },
                {
                    path: 'institutionUser',
                    name: 'institutionUser',
                    meta: { title: '机构用户管理',icon: 'form'}
                    meta: { title: '机构用户管理',icon: 'list'}
                },
                {
                    path: 'expertUsers',
                    name: 'expertUsers',
                    meta: { title: '专家用户管理',icon: 'form'}
                    meta: { title: '专家用户管理',icon: 'logininfor'}
                }
            ]
        },
        {
            path: '/expertManage',
            redirect: '/expertManage/experts',
            meta: { title: '厅专家库管理',icon: 'form'},
            meta: { title: '厅专家库管理',icon: 'post'},
            children: [
                {
                    path: 'experts',
                    name: 'experts',
                    meta: { title: '厅专家库',icon: 'form'}
                    meta: { title: '厅专家库',icon: 'server'}
                },
                {
                    path: 'applyRecords',
                    name: 'applyRecords',
                    meta: { title: '专家申请记录',icon: 'form'}
                    meta: { title: '专家申请记录',icon: 'skill'}
                }
            ]
        },
        {
            path: '/baseSet',
            redirect: '/baseSet/evaluate',
            meta: { title: '基础设置',icon: 'form'},
            meta: { title: '基础设置',icon: 'dict'},
            children: [
                {
                    path: 'evaluate',
                    name: 'evaluate',
                    meta: { title: '评价类型管理',icon: 'form'}
                    meta: { title: '评价类型管理',icon: 'build'}
                },
                {
                    path: 'expertsType',
                    name: 'expertsType',
                    meta: { title: '专家类型管理',icon: 'form'}
                    meta: { title: '专家类型管理',icon: 'clipboard'}
                },
                {
                    path: 'business',
                    name: 'business',
                    meta: { title: '业务范围管理',icon: 'form'}
                    meta: { title: '业务范围管理',icon: 'cascader'}
                },
                {
                    path: 'area',
                    name: 'area',
                    meta: { title: '地区维护管理',icon: 'form'}
                    meta: { title: '地区维护管理',icon: 'component'}
                },
                {
                    path: 'major',
                    name: 'major',
                    meta: { title: '专业方向管理',icon: 'form'}
                    meta: { title: '专业方向管理',icon: 'documentation'}
                }
            ]
@@ -104,12 +104,12 @@
        {
            path: '/userManage',
            redirect: '/userManage/supervise',
            meta: { title: '用户管理',icon: 'form'},
            meta: { title: '用户管理',icon: 'peoples'},
            children: [
                {
                    path: 'expertUsers',
                    name: 'expertUsers',
                    meta: { title: '专家用户管理',icon: 'form'}
                    meta: { title: '专家用户管理',icon: 'logininfor'}
                } ,
            ]
        },
src/layout/components/TagsView/index.vue
@@ -335,4 +335,4 @@
    }
  }
}
</style>
</style>
src/layout/index.vue
@@ -27,7 +27,8 @@
const sideTheme = computed(() => settingsStore.sideTheme);
const sidebar = computed(() => useAppStore().sidebar);
const device = computed(() => useAppStore().device);
const needTagsView = computed(() => settingsStore.tagsView);
// const needTagsView = computed(() => settingsStore.tagsView);
const needTagsView = false;
const fixedHeader = computed(() => settingsStore.fixedHeader);
const classObj = computed(() => ({
@@ -108,4 +109,4 @@
.mobile .fixed-header {
  width: 100%;
}
</style>
</style>
src/views/homePage.vue
@@ -5,7 +5,7 @@
    <div class="main-content">
      <div class="top" style="z-index: 1">
        <div class="top-cont">
          <div class="logo blueFont">智慧安评</div>
          <div class="logo blueFont">新疆维吾尔自治区智慧安评服务平台</div>
          <div class="time">
            <div>
              <span>{{state.date}}</span>
@@ -48,7 +48,7 @@
    </div>
    <!--  底部  -->
    <div class="el-login-footer">
      <span>Copyright © All Rights Reserved.</span>
      <span>Copyright ©2023-{{nowYear}} All Rights Reserved.</span>
    </div>
  </div>
</template>
@@ -64,6 +64,7 @@
const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const nowYear = ref();
// 时间格式化
const timeForm = {
  hour12: false,
@@ -92,6 +93,7 @@
const getDateTime = () => {
  const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-');
  state.date = curTime.slice(0, 10);
  nowYear.value = curTime.slice(0, 4);
  let week = ['日', '一', '二', '三', '四', '五', '六'];
  let day = new Date().getDay();
  state.weekDay = '星期' + week[day];
src/views/originLogin.vue
@@ -7,7 +7,7 @@
        <img :src="loginImgPng">
      </div>
      <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
        <h3 class="title">智慧安评</h3>
        <h3 class="title">新疆维吾尔自治区智慧安评服务平台</h3>
        <el-form-item prop="username">
          <el-input
            v-model="loginForm.username"
src/views/safetyReview/projectManage/components/confirmEnd.vue
@@ -3,7 +3,7 @@
    <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top">
      <el-row :gutter="30">
        <el-col :span="6">
          <el-button type="primary" @click="addRectify('add',{})">新增整改</el-button>
          <el-button type="primary" @click="addRectify('add',{})" :disabled="projectType.value ==='detail'">新增整改</el-button>
        </el-col>
      </el-row>
      <el-table :data="state.recitificationList" :border="true" style="margin: 20px 0">
@@ -19,8 +19,8 @@
        </el-table-column>
        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
          <template #default="scope">
            <el-button link type="primary" @click="addRectify('edit',scope.row)">编辑</el-button>
            <el-button link type="danger" @click="del(scope.row)">删除</el-button>
            <el-button link type="primary" @click="addRectify('edit',scope.row)" :disabled="projectType.value ==='detail'">编辑</el-button>
            <el-button link type="danger" @click="del(scope.row)" :disabled="projectType.value ==='detail'">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -89,8 +89,10 @@
  }
}
const projectType = ref('')
const riskOpen = async (type,val) => {
  // await  getList(val);
  projectType.value = type;
  state.formData.projectId = val;
  if(type === 'confirm') {
    const res = await doConfirm({projectId: val});
src/views/safetyReview/projectManage/components/employNoticeRecord.vue
@@ -51,7 +51,7 @@
        <el-table-column label="未到现场勘验原因" prop="reason" align="center" class-name="small-padding fixed-width"></el-table-column>
        <el-table-column label="是否已告知" align="center" class-name="small-padding fixed-width">
          <template #default="scope">
            <el-radio-group v-model="scope.row.informed" size="large" @change="(value)=>changePerson(value,scope.row)">
            <el-radio-group v-model="scope.row.informed" size="large" @change="(value)=>changePerson(value,scope.row)" :disabled="projectType==='detail'">
              <el-radio :label="1" size="large">是</el-radio>
              <el-radio :label="0" size="large">否</el-radio>
            </el-radio-group>
@@ -102,9 +102,11 @@
});
const projectType = ref('');
const riskOpen = async (type,val) => {
  state.formData.projectId = val
  state.projectId = val
  projectType.value = type;
  // await getWorksList(val)
  if(type === 'detail' || type === 'edit' ){
    const res = await getWorkDetail({projectId: val})
src/views/safetyReview/projectManage/components/evaluatePlan.vue
@@ -80,7 +80,7 @@
        </el-col>
        <el-col :span="6">
          <div style="width: 100%;display: flex;justify-content: right">
            <el-button type="primary" icon="Plus" @click="openWorksDialog('add',{})">添加成员</el-button>
            <el-button type="primary" icon="Plus" @click="openWorksDialog('add',{})" :disabled="projectType==='detail'">添加成员</el-button>
          </div>
        </el-col>
      </el-row>
@@ -102,8 +102,8 @@
        <el-table-column label="未到现场勘验原因" prop="reason" align="center" class-name="small-padding fixed-width"></el-table-column>
        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
          <template #default="scope">
            <el-button link @click="openWorksDialog('edit',scope.row)">修改</el-button>
            <el-button link type="danger" @click="delMember(scope.row)">删除</el-button>
            <el-button link @click="openWorksDialog('edit',scope.row)" :disabled="projectType==='detail'">修改</el-button>
            <el-button link type="danger" @click="delMember(scope.row)" :disabled="projectType==='detail'">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -113,7 +113,7 @@
        </el-col>
        <el-col :span="6">
          <div style="width: 100%;display: flex;justify-content: right">
            <el-button type="primary" icon="Plus" @click="openDeviceDialog('add',{})">添加设备</el-button>
            <el-button type="primary" icon="Plus" @click="openDeviceDialog('add',{})" :disabled="projectType==='detail'">添加设备</el-button>
          </div>
        </el-col>
      </el-row>
@@ -132,8 +132,8 @@
        </el-table-column>
        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
          <template #default="scope">
            <el-button link @click="openDeviceDialog('edit',scope.row)">修改</el-button>
            <el-button link type="danger" @click="delDeviceItem(scope.row)">删除</el-button>
            <el-button link @click="openDeviceDialog('edit',scope.row)" :disabled="projectType==='detail'">修改</el-button>
            <el-button link type="danger" @click="delDeviceItem(scope.row)" :disabled="projectType==='detail'">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -279,10 +279,11 @@
  }
})
const projectType = ref('');
const riskOpen = async (type,val) => {
  state.formData.projectId = val
  state.projectId = val
  projectType.value = type;
  for(let i of state.formData.estimateSchedules){
    i.projectId = val
  }
src/views/safetyReview/projectManage/components/expertsList.vue
@@ -38,7 +38,7 @@
              </el-select>
            </el-form-item>
            <el-form-item label="专业方向">
              <el-select v-model="queryParams.major" value-key="id" style="width: 250px" placeholder="专业方向">
              <el-select v-model="queryParams.major" clearable value-key="id" style="width: 250px" placeholder="专业方向">
                <el-option
                    v-for="item in majorList"
                    :key="item.id"
@@ -47,8 +47,8 @@
                />
              </el-select>
            </el-form-item>
            <el-form-item label="专业方向">
              <el-select v-model="queryParams.post" style="width: 250px" placeholder="请选择职务">
            <el-form-item label="职务">
              <el-select v-model="queryParams.post" clearable style="width: 250px" placeholder="请选择职务">
                <el-option
                    v-for="item in postList"
                    :key="item.id"
@@ -130,8 +130,14 @@
            <el-table-column label="职称" prop="jobTitle" align="center"  />
            <el-table-column label="专业方向" prop="majorNames" align="center" width="100" />
            <el-table-column label="评价师等级" prop="level" align="center" width="100" />
            <el-table-column label="业绩汇总" prop="summary" align="center"  />
            <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" />
            <el-table-column label="业绩汇总" prop="summary" align="center">
              <template #default="scope">
                <div style="cursor:pointer;color: #3b82f6;" @click="openList(scope.row)">
                  <span>{{scope.row.projectCount}}</span>
                </div>
              </template>
            </el-table-column>
            <el-table-column label="最近评价时间" prop="lastEstimateTime" align="center" width="120" />
          </el-table>
          <pagination
@@ -148,12 +154,14 @@
                    </span>
            </template>
        </el-dialog>
      <project-dialog ref="projectRef" @getList="getList"></project-dialog>
    </div>
</template>
<script setup>
import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue";
import {getDictList} from "@/api/backManage/evaluate";
import {ElMessage, ElMessageBox} from "element-plus";
import projectDialog from "@/views/safetyReview/userManage/expertUsers/components/projectDialog.vue"
import Cookies from "js-cookie";
import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers";
const { proxy } = getCurrentInstance();
@@ -243,7 +251,9 @@
        ...item,
        socialAttach: item.socialAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
        medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
        salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path})
        salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
        lastEstimateTime: item.personProjectVO ? item.personProjectVO.lastEstimateTime.slice(0,10) : '',
        projectCount: item.personProjectVO ? item.personProjectVO.projectCount : ''
      }
    })
    console.log('RES',data.dataList)
@@ -253,6 +263,10 @@
  }
  loading.value = false
}
const projectRef = ref();
const openList = (val) => {
  projectRef.value.openDialog(val);
}
const getMajor = async () => {
  const queryParams = {
src/views/safetyReview/projectManage/components/mapLocation.vue
@@ -1,41 +1,41 @@
<template>
    <el-dialog
        v-model="state.mapLocationVisible"
        append-to-body
        :close-on-click-modal="false"
        width="75%"
        :title="state.title"
    >
        <div class="mapLocation_head">
            <div>
                <el-alert
                    title="点击地点获取经纬度信息"
                    type="info"
                    :closable="false"
                >
                </el-alert>
            </div>
            <div class="mapLocation_latlng">
                <span>经度:</span>
                <el-input class="mapLocation_latlng_input" id="lng" v-model="state.longitude"></el-input>
            </div>
            <div class="mapLocation_latlng">
                <span>纬度:</span>
                <el-input class="mapLocation_latlng_input" id="lat" v-model="state.latitude"></el-input>
            </div>
        </div>
        <div class="mapLocation_body">
          <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition">
            <bm-marker :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
              <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
            </bm-marker>
          </baidu-map>
        </div>
        <div  align="right" style="margin-top: 10px">
            <el-button @click="state.mapLocationVisible = false">取消</el-button>
            <el-button type="primary" @click="submitLatLng()">确认</el-button>
        </div>
    </el-dialog>
  <el-dialog
      v-model="state.mapLocationVisible"
      append-to-body
      :close-on-click-modal="false"
      width="75%"
      :title="state.title"
  >
    <div class="mapLocation_head">
      <div>
        <el-alert
            title="点击地点获取经纬度信息"
            type="info"
            :closable="false"
        >
        </el-alert>
      </div>
      <div class="mapLocation_latlng">
        <span>经度:</span>
        <el-input class="mapLocation_latlng_input" id="lng" v-model="state.longitude"></el-input>
      </div>
      <div class="mapLocation_latlng">
        <span>纬度:</span>
        <el-input class="mapLocation_latlng_input" id="lat" v-model="state.latitude"></el-input>
      </div>
    </div>
    <div class="mapLocation_body">
      <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition">
        <bm-marker :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
          <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
        </bm-marker>
      </baidu-map>
    </div>
    <div  align="right" style="margin-top: 10px">
      <el-button @click="state.mapLocationVisible = false">取消</el-button>
      <el-button type="primary" @click="submitLatLng()">确认</el-button>
    </div>
  </el-dialog>
</template>
<script setup>
@@ -100,19 +100,19 @@
  }
}
.mapLocation_head{
    width:100%;
    height:100px;
  width:100%;
  height:100px;
}
.mapLocation_body{
    width:100%;
    height:500px
  width:100%;
  height:500px
}
.mapLocation_latlng{
    padding-top:10px;
    display:inline-block;
    margin-right: 20px;
  padding-top:10px;
  display:inline-block;
  margin-right: 20px;
}
.mapLocation_latlng_input{
    width:250px;
  width:250px;
}
</style>
src/views/safetyReview/projectManage/components/projectArchive.vue
@@ -32,10 +32,10 @@
          <template #default="scope">
            <el-upload accept=".pdf,.doc,.docx"
                       :action="state.uploadUrl"
                       :disabled="state.disabled"
                       :disabled="projectType === 'detail'"
                       :headers="state.header"
                       method="post"
                       :on-success="handleAvatarSuccess"
                       :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,scope.row)"
                       v-model:file-list="scope.row.fileList"
                       :on-remove="handleRemove"
                       :data="state.uploadData"
@@ -198,7 +198,8 @@
        ElMessage.warning("当前用户暂无权限");
        return;
      }
      if(state.actualContract.actualContractMoney == '') {
      if(state.actualContract.actualContractMoney == '' || !state.actualContract.actualContractMoney) {
        ElMessage.warning("请输入项目合同额");
        return;
      }
@@ -293,14 +294,15 @@
  }
};
const handleAvatarSuccess = (res, uploadFile) => {
const handleAvatarSuccess = (res, uploadFile,val) => {
  if(res.code === 200){
    console.log("if",state.uploadList)
    // ElMessage({
    //   type: 'success',
    //   message: '文件上传成功'
    // })
    ElMessage({
      type: 'success',
      message: '文件上传成功'
    })
  }else {
    const delVal = state.uploadList.findIndex(i => i.id === val.id);
    state.uploadList[delVal].fileList.splice(state.uploadList[delVal].fileList.indexOf(uploadFile),1)
    ElMessage({
      type: 'warning',
      message: res.message
src/views/safetyReview/projectManage/components/rateConclusion.vue
@@ -23,18 +23,20 @@
      <el-row :gutter="30">
        <el-col :span="18">
          <el-form-item>
            <el-upload accept="image/*,.pdf,.doc,.docx,.xlsx,.xls"
                       :action="state.uploadUrl"
                       :disabled="state.disabled"
                       :headers="state.header"
                       method="post"
                       :on-success="handleAvatarSuccess"
                       :on-exceed="showTip"
                       v-model:file-list="state.fileList"
                       :on-remove="handleRemove"
                       :data="state.uploadData"
                       :on-preview="handlePreview"
                       :limit='1'
            <el-upload
                v-if="state.formData.isReviseManual === 1"
                accept="image/*,.pdf,.doc,.docx,.xlsx,.xls"
                 :action="state.uploadUrl"
                 :disabled="state.disabled"
                 :headers="state.header"
                 method="post"
                 :on-success="handleAvatarSuccess"
                 :on-exceed="showTip"
                 v-model:file-list="state.fileList"
                 :on-remove="handleRemove"
                 :data="state.uploadData"
                 :on-preview="handlePreview"
                 :limit='1'
            >
              <el-button type="primary">附件上传</el-button>
              <template #tip>
@@ -175,17 +177,18 @@
const handleAvatarSuccess = (res) => {
  if(res.code === 200){
    getProcessFiles()
    console.log("if",state.fileList)
    // ElMessage({
    //   type: 'success',
    //   message: '文件上传成功'
    // })
    ElMessage({
      type: 'success',
      message: '文件上传成功'
    })
  }else {
    state.fileList.splice(state.fileList.indexOf(uploadFile),1)
    ElMessage({
      type: 'warning',
      message: '文件上传失败'
      message: res.message
    })
  }
}
const handlePreview = (file) => {
  let path = "";
src/views/safetyReview/projectManage/components/signConfirm.vue
@@ -10,7 +10,8 @@
          <span>{{ scope.row.planPerson.playRole === 1?'项目负责人': scope.row.planPerson.playRole === 2?
              '项目组成员':scope.row.planPerson.playRole === 3?
                  '过程控制负责人':scope.row.planPerson.playRole === 4?
                      '机构评价负责人':scope.row.planPerson.playRole === 5?'技术负责人':''}}
                      '机构评价负责人':scope.row.planPerson.playRole === 5?
                          '技术负责人':scope.row.planPerson.playRole === 6?'内部审核员':''}}
          </span>
        </template>
      </el-table-column>
@@ -24,7 +25,7 @@
      <el-table-column label="扫脸时间" prop="faceRecord.updateTime" align="center" width="120"/>
      <el-table-column label="是否扫脸" prop="username" align="center">
        <template #default="scope">
          <span v-if="scope.row.facePic">是</span>
          <span v-if="scope.row.facePic.length>0">是</span>
          <span v-else>否</span>
        </template>
      </el-table-column>
@@ -135,7 +136,7 @@
        commitPic: item.insurancePath ? [import.meta.env.VITE_APP_BASE_API + '/' + item.insurancePath] : [],
      }
    })
   console.log("res",res)
   console.log("res", state.tableData)
  }else {
    ElMessage.warning(res.message)
  }
src/views/safetyReview/projectManage/components/siteCheckRcd.vue
@@ -38,7 +38,7 @@
        </el-col>
        <el-col :span="6">
          <el-form-item prop="isSafetyCheck" label="编制现场安全检查表">
            <el-radio-group v-model="state.formData.isSafetyCheck" size="large" @change="changeRadio">
            <el-radio-group v-model="state.formData.isSafetyCheck" size="large" @change="changeRadio" :disabled="projectType==='detail'">
              <el-radio :label="1" size="large">是</el-radio>
              <el-radio :label="0" size="large">否</el-radio>
            </el-radio-group>
@@ -48,7 +48,7 @@
      <el-row :gutter="30">
        <el-col :span="24" v-if="state.formData.isSafetyCheck == 1">
          <el-form-item label="安全检查表上传" prop="assAccessoryFiles">
            <el-upload accept="image/*,.pdf,.doc,.docx,.xlsx,.xls" :action="state.uploadUrl" :data="{moduleType: 5,projectId: props.projectId}" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,5)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.safetyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)">
            <el-upload  :disabled="projectType==='detail'" accept="image/*,.pdf,.doc,.docx,.xlsx,.xls" :action="state.uploadUrl" :data="{moduleType: 5,projectId: props.projectId}" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,5)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.safetyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)">
              <el-button type="primary">附件上传</el-button>
              <template #tip>
                <div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div>
@@ -71,7 +71,7 @@
      <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px">
        <el-col :span="24">
          <el-form-item label="主要装置前合影照片" prop="deviceImages">
            <el-upload accept="image/*" :action="state.uploadUrl" :data="{moduleType: 1,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,1)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.beforeDeviceList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,1)" >
            <el-upload accept="image/*" :disabled="projectType === 'detail'" :action="state.uploadUrl" :data="{moduleType: 1,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,1)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.beforeDeviceList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,1)" >
              <el-icon><Plus /></el-icon>
              <template #tip>
                <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div>
@@ -83,7 +83,7 @@
      <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px">
        <el-col :span="24">
          <el-form-item label="现场勘验照片" prop="investingationImages">
            <el-upload accept="image/*" :action="state.uploadUrl" :data="{moduleType: 2,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,2)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.siteCheckList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,2)" >
            <el-upload accept="image/*" :disabled="projectType === 'detail'" :action="state.uploadUrl" :data="{moduleType: 2,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,2)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.siteCheckList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,2)" >
              <el-icon><Plus /></el-icon>
              <template #tip>
                <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div>
@@ -95,7 +95,7 @@
      <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px;margin-bottom: 20px">
        <el-col :span="24">
          <el-form-item label="企业陪同人员照片" prop="ccompanyImages">
            <el-upload accept="image/*" :action="state.uploadUrl" :data="{moduleType: 3,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,3)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.companyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,3)" >
            <el-upload :disabled="projectType === 'detail'" accept="image/*" :action="state.uploadUrl" :data="{moduleType: 3,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,3)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.companyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,3)" >
              <el-icon><Plus /></el-icon>
              <template #tip>
                <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div>
@@ -253,10 +253,11 @@
  }
}
const projectType = ref('');
const riskOpen = async (type,val) => {
  state.formData.projectId = val
  state.projectId = val
  projectType.value = type;
  if(type === 'detail' || type === 'edit' ){
    // await getDetail(val)
  }
@@ -464,54 +465,56 @@
}
const handleRemove = async (file, uploadFiles,type) => {
  ElMessageBox.confirm(
      '确定删除该附件?',
      '提示',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
      .then( async() => {
        const res = await delFile(file.id)
        if(res.code == 200){
          ElMessage({
            type: 'success',
            message: '文件已删除'
          })
    ElMessageBox.confirm(
        '确定删除该附件?',
        '提示',
        {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
        .then( async() => {
          const res = await delFile(file.id)
          if(res.code == 200){
            ElMessage({
              type: 'success',
              message: '文件已删除'
            })
            if(type == 1){
              await getBeforeFiles()
            }
            if(type == 2){
              await getSiteCheckFiles()
            }
            if(type == 3){
              await getCompanyFiles()
            }
            if(type == 5){
              await getSafetyFiles()
            }
          }else{
            ElMessage({
              type: 'warning',
              message: res.message
            })
          }
        })
        .catch(()=>{
          if(type == 1){
            await getBeforeFiles()
            getBeforeFiles()
          }
          if(type == 2){
            await getSiteCheckFiles()
            getSiteCheckFiles()
          }
          if(type == 3){
            await getCompanyFiles()
            getCompanyFiles()
          }
          if(type == 5){
            await getSafetyFiles()
            getSafetyFiles()
          }
        }else{
          ElMessage({
            type: 'warning',
            message: res.message
          })
        }
      })
      .catch(()=>{
        if(type == 1){
          getBeforeFiles()
        }
        if(type == 2){
          getSiteCheckFiles()
        }
        if(type == 3){
          getCompanyFiles()
        }
        if(type == 5){
          getSafetyFiles()
        }
      })
        })
}
defineExpose({
@@ -527,4 +530,5 @@
  }
}
</style>
src/views/safetyReview/projectManage/components/uploadReviewRcd.vue
@@ -4,7 +4,7 @@
      <el-row :gutter="30">
        <el-col :span="18">
          <el-form-item label="附件上传">
            <el-upload accept="image/*,.pdf,.doc,.docx" :action="state.uploadUrl" :data="{moduleType: 6,projectId: props.projectId}" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="handleRemove">
            <el-upload :disabled="projectType === 'detail'" accept="image/*,.pdf,.doc,.docx" :action="state.uploadUrl" :data="{moduleType: 6,projectId: props.projectId}" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="handleRemove">
              <el-button type="primary">上传评审记录</el-button>
              <template #tip>
                <div class="el-upload__tip">上传文件尺寸尺寸小于2M</div>
@@ -19,7 +19,7 @@
        <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width" width="120">
          <template #default="scope">
            <el-button link type="primary" @click="checkFile(scope.row)">查看</el-button>
            <el-button link type="danger" @click="handleRemove(scope.row,[])">删除</el-button>
            <el-button link type="danger" @click="handleRemove(scope.row,[])" :disabled="projectType === 'detail'">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -58,10 +58,13 @@
  getReviewFiles(props.projectId)
})
const projectType = ref('');
const riskOpen = async (type,val) => {
  projectType.value = type;
  if(type === 'detail' || type === 'edit' ){
    await getReviewFiles
  }
  if(type === 'add' || type === 'clickEdit') {
    const valid = await formRef.value.validate();
    if(valid){
@@ -159,9 +162,10 @@
  if(res.code == 200){
    getReviewFiles()
  }else{
    state.fileList.splice(state.fileList.indexOf(uploadFile),1)
    ElMessage({
      type: 'warning',
      message: '文件上传失败'
      message: res.message
    })
  }
}
src/views/safetyReview/projectManage/index.vue
@@ -119,7 +119,7 @@
      <el-table-column label="归档确认" prop="" align="center"  width="150">
        <template #default="scope">
          <div style="cursor:pointer;color: #3b82f6;" >
            <span   @click="goMenu('toThirteen',scope.row)">{{scope.row.activeConfirm}}</span>
            <span  v-if="scope.row.process === 5" @click="goMenu('toThirteen',scope.row)">{{scope.row.activeConfirm}}</span>
<!--            <span v-else></span>-->
          </div>
        </template>
@@ -493,10 +493,6 @@
});
const goMenu = (toPath,val) => {
  console.log("val",val)
  if(toPath ==='toThirteen' && val.personRecognition && val.personRecognition. recognitionCnt === 0){
    ElMessage.warning('未进行签字确认,无法查看!')
    return;
  }
  toProcess('edit',val,toPath);
}
src/views/safetyReview/projectManage/process.vue
@@ -3,8 +3,10 @@
    <div class="flow">
      <div class="content"  :class="{show: isShowMenu}" >
        <div class="content-middle" @click="clickMenu(true)">
          <div style="margin-right:20px;height: 85px;display: flex;align-items: center;flex-shrink: 1;">
            <img :src="projectPng">
          <div class="project-title">
<!--            <img :src="projectPng">-->
            <span>项目</span>
            <span>阶段</span>
          </div>
          <div v-for="item in menuList" :key="item.id" style="flex: 1" :class="{choose: item.status === 1 || item.status === 2}">
            <div class="header-item">
@@ -53,7 +55,7 @@
            <sign-confirm ref="signConfirmRef" v-if="selectedObj.id === 13" @getNextStatus="getNextStatus" :projectId="projectId"></sign-confirm>
            <confirm-end ref="confirmEndRef" v-if="selectedObj.id === 14" @getNextStatus="getNextStatus" :projectId="projectId"></confirm-end>
          </div>
          <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -20px">
          <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -30px;margin-top: 10px">
            <el-button type="primary" v-if="selectedObj.id !== 1" style="width: 80px" @click="back">上一步</el-button>
            <el-button type="warning" style="width: 80px"  v-if="(projectStatus === 'add'   && selectedObj.status === 1 && selectedObj.id !== 14)||(projectStatus === 'edit' && selectedObj.status === 1 && selectedObj.id !== 14) " @click="save">保存</el-button>
            <el-button type="warning" style="width: 80px"  v-if="(projectStatus === 'edit' && selectedObj.status !== 1 && selectedObj.id !== 13 && selectedObj.id !== 14 && reportProcess != 14) || (projectStatus === 'add'   && selectedObj.status !== 1 && selectedObj.id !== 14 && reportProcess != 14) " @click="clickEdit">变更</el-button>
@@ -83,7 +85,7 @@
import status0Png from "@/assets/images/status0.png"
import status1Png from "@/assets/images/status1.png"
import status2Png from "@/assets/images/status2.png"
import itemStatus2Png from "@/assets/images/itemStatus2.png"
import itemStatus2Png from "@/assets/images/itemStatus2-1.png"
import { useRoute } from 'vue-router'
import {getProjectStatus} from "@/api/projectManage/project"
import ContractManage from "./components/contractManage";
@@ -924,7 +926,7 @@
      max-height: 85px;
      cursor: pointer;
      background-color: hsla(0,0%,100%,.97);
      background-image: url(../../../assets/images/bg.png);
      //background-image: url(../../../assets/images/bg2.png);
      background-repeat: no-repeat;
      background-size: 100% 84px;
      overflow: hidden;
@@ -947,7 +949,7 @@
        pointer-events: auto;
        transform: translateX(-50%);
        width: 118px;
        background-image: url(../../../assets/images/back.png);
        background-image: url(../../../assets/images/back1.png);
      }
      .choose .header-item{
        color: #fff;
@@ -964,6 +966,18 @@
      display: flex;
      flex-direction: row;
      box-shadow: 0 0 18px 3px rgba(145,146,171,.2);
      .project-title{
        margin-right: 20px;
        height: 85px;
        display: flex;
        align-items: center;
        flex-shrink: 1;
        flex-direction: column;
        justify-content: center;
        font-size: 20px;
        font-weight: 700;
        color: rgb(255, 140, 138);
      }
    }
    .header-item{
      position: relative;
@@ -995,11 +1009,11 @@
      font-size: 19px;
      color: #626c8b;
      border: 1px solid #fff;
      background: rgba(198,230,255,.2);
      background: rgba(233 223 211 / 20%);
      border-radius: 8px;
      display: flex;
      align-items: center;
      width: 70%;
      width: 80%;
      padding-left: 20px;
      padding-right: 15px;
      cursor: pointer;
@@ -1011,13 +1025,13 @@
        line-height: 20px;
        text-align: center;
        border-radius: 50%;
        background: #b9c2d5;
        background: #f3ccb0;
        margin-right: 10px;
        min-width: 21px;
        min-height: 21px;
      }
      .item-icon-status1{
        color: #3b75ff;
        color: #f17235;
        background: #fff;
      }
      .item-icon-status2{
@@ -1031,13 +1045,13 @@
      cursor: pointer;
      color: #fff;
      border: 1px solid #c6e6ff;
      background: linear-gradient(90deg,#57b6ff,#3b75ff);
      background: linear-gradient(90deg,rgb(239, 186, 141),rgb(255, 140, 138));
    }
    .itemPrev{
      cursor: pointer;
      color: #3b75ff;
      border: 1px solid #c6e6ff;
      background: rgba(198,230,255,.4);
      color: #f38323;
      border: 1px solid #f5e4cf;
      background: rgb(249 210 170 / 40%);
    }
    .itemPrev:hover{
      transform: scale(1.1);
@@ -1056,7 +1070,7 @@
      padding: 12px 56px;
      font-size: 18px;
      color: #fff;
      background-image: url(../../../assets/images/cardHeader.png);
      background-image: url(../../../assets/images/cardHeader2.png);
      background-size: 100% 100%;
      background-repeat: no-repeat;
      margin: -20px;
@@ -1078,6 +1092,7 @@
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 16px;
  }
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
@@ -372,20 +372,25 @@
const isAgency = ref(false);
onMounted(()=>{
    const userInfo = JSON.parse(Cookies.get('userInfo'))
    if(userInfo.identity === 1){
      state.agencyName = userInfo.agentName;
      state.form.agencyId = userInfo.agentId;
      isAgency.value = true;
    }else {
      getAgency()
    }
    console.log("userinfo",userInfo)
})
const getUserInfoAgency = () => {
  const userInfo = JSON.parse(Cookies.get('userInfo'))
  if(userInfo.identity === 1){
    state.agencyName = userInfo.agentName;
    state.form.agencyId = userInfo.agentId;
    isAgency.value = true;
  }else {
    getAgency()
  }
  console.log("userinfo",userInfo)
}
const openDialog = async (type, value) => {
    getArea()
 await getUserInfoAgency();
  await getArea()
    state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ;
    if(type === 'edit') {
        const param = {
@@ -436,6 +441,13 @@
            ElMessage.warning(res.message)
        }
    }else if(type === 'add'){
      console.log("aa",props.majorList)
      props.majorList.forEach(item => {
        if(item.certificateNo){
          item.certificateNo = ''
        }
      })
    }
    if(type == 'pwd'){
        state.form.id = value.id
@@ -488,12 +500,9 @@
            if(res.code == 200){
                ElMessage.success(res.message)
                emit('getList')
                reset();
                superRef.value.clearValidate();
                superRef.value.resetFields();
                state.salaryList = [];
                state.medicalList = [];
                state.socialList = [];
                state.photoList = [];
                dialogVisible.value = false;
            }else{
                ElMessage.warning(res.message)
@@ -514,8 +523,9 @@
            if(res.code == 200){
                ElMessage.success(res.message)
                emit('getList')
                superRef.value.clearValidate();
                reset()
                superRef.value.clearValidate();
                dialogVisible.value = false;
            }else{
                ElMessage.warning(res.message)
@@ -528,8 +538,9 @@
            if(res.code == 200){
                ElMessage.success(res.message)
                emit('getList')
                superRef.value.clearValidate();
                reset()
                superRef.value.clearValidate();
                dialogVisible.value = false;
            }else{
                ElMessage.warning(res.message)
src/views/safetyReview/userManage/expertUsers/components/projectDialog.vue
@@ -60,7 +60,7 @@
        <el-table-column label="归档确认" prop="" align="center"  width="150">
          <template #default="scope">
            <div style="cursor:pointer;color: #3b82f6;" >
              <span v-if="scope.row.process === 5 && scope.row.personRecognition"  @click="goMenu('toThirteen',scope.row)">{{scope.row.personRecognition.recognitionCnt}}/{{scope.row.personRecognition.personCnt}}</span>
              <span  v-if="scope.row.process === 5" @click="goMenu('toThirteen',scope.row)">{{scope.row.activeConfirm}}</span>
              <span v-else></span>
            </div>
          </template>
@@ -129,6 +129,7 @@
        filingDate: item.filingDate ? item.filingDate : conversionDays(item.createTime),
        contractMoney: item.contract ? item.contract.contractMoney : '',
        actualContractMoney: item.contract ? item.contract.actualContractMoney : '',
        activeConfirm: item.personRecognition ? item.personRecognition.recognitionCnt + '/' +  item.personRecognition.personCnt: '',
        missingMaterialCnt:  3-item.materialCnt
      }
    })
@@ -157,10 +158,6 @@
}
const goMenu = (toPath,val) => {
  console.log("val",val)
  if(toPath ==='toThirteen' && val.personRecognition && val.personRecognition. recognitionCnt === 0){
    ElMessage.warning('未进行签字确认,无法查看!')
    return;
  }
  toProcess('edit',val,toPath);
}
const conversionDays = (createTime) => {
src/views/safetyReview/userManage/expertUsers/index.vue
@@ -56,7 +56,7 @@
        <!-- 表格数据 -->
        <el-table v-loading="loading" :data="dataList" :border="true">
            <el-table-column label="用户ID" prop="id" align="center"  />
            <el-table-column label="序号" type="index" align="center" width="60" />
            <el-table-column label="姓名" prop="name" align="center" width="110" />
            <el-table-column label="手机号" prop="phone" align="center" width="125" />
            <el-table-column label="用户名" prop="username" align="center" width="110" />
@@ -252,7 +252,7 @@
                medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
                salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}),
                idPhoto: item.idPhoto ? [import.meta.env.VITE_APP_BASE_API + '/' + item.idPhoto ] : [],
                lastEstimateTime: item.personProjectVO ? item.personProjectVO.lastEstimateTime : '',
                lastEstimateTime: item.personProjectVO ? item.personProjectVO.lastEstimateTime.slice(0,10) : '',
                projectCount: item.personProjectVO ? item.personProjectVO.projectCount : ''
            }
        })