licp
2024-05-13 c5f70afac4dd35b3a6033eef8aae530d674425e0
完成工时管理前端
已修改7个文件
277 ■■■■■ 文件已修改
src/components/do/b1-ins-order/add.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b3-work-time-management/work-time-config.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b3-work-time-management/work-time-management.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b3-work-time-management/work-time-statistics.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b3-classes.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b3-work-time-management.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue
@@ -667,6 +667,10 @@
          this.addObj.sampleNum = this.sampleList.length
          this.$nextTick(() => {
            this.$refs.sampleTable.doLayout()
            if(this.addObj.sampleNum>0){
              this.$refs.sampleTable.setCurrentRow(this.sampleList[0],true)
              this.rowClick(this.sampleList[0])
            }
          })
        })
      }
src/components/do/b3-work-time-management/work-time-config.vue
@@ -8,7 +8,7 @@
            </div>
            <div class="search_thing">
                <div class="search_label">实验室:</div>
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small">
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
                    <el-option v-for="item in laboratoryList" :key="item.value" :label="item.label" :value="item.value">
                    </el-option>
                </el-select>
@@ -16,7 +16,7 @@
            <div class="search_thing">
                <div class="search_label">部门:</div>
                <div class="search_input">
          <el-select v-model="componentData.entity.department" placeholder="全部" size="small">
          <el-select v-model="componentData.entity.department" placeholder="全部" size="small" @change="refreshTable()">
                      <el-option v-for="item in partList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
src/components/do/b3-work-time-management/work-time-management.vue
@@ -13,13 +13,13 @@
            </div>
            <div class="search_thing" style="width: 200px;">
                <div class="search_label">星期:</div>
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small">
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
                    <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
                    </el-option>
                </el-select>
            </div>
            <div class="search_thing">
                <div class="search_label">时间范围:</div>
                <div class="search_label" style="width: 90px;">时间范围:</div>
                <div class="search_input">
          <el-date-picker
            style="width: 100%;"
@@ -28,7 +28,7 @@
            type="daterange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
            end-placeholder="结束日期" @change="refreshTable()">
          </el-date-picker>
        </div>
            </div>
@@ -36,11 +36,11 @@
      <div class="search_thing" style="width: 200px;">
                <div class="search_label" >名字:</div>
                <el-input size="small" placeholder="请输入" clearable
                        v-model="componentData.entity.number"></el-input>
                        v-model="componentData.entity.number" @keyup.enter.native="refreshTable()"></el-input>
            </div>
      <div class="search_thing" style="width: 200px;">
                <div class="search_label">状态:</div>
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small">
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
                    <el-option v-for="item in stateList" :key="item.value" :label="item.label" :value="item.value">
                    </el-option>
                </el-select>
src/components/do/b3-work-time-management/work-time-statistics.vue
@@ -1,19 +1,246 @@
<template>
  <div class="work-time-statistics">
    工时统计
    <div class="search">
      <div class="search_thing">
                <div class="search_label">日期:</div>
                <div class="search_input" style="display: flex;align-items: center;">
          <el-date-picker
            v-model="componentData.entity.laboratory"
            type="month"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
            placeholder="选择月" size="small" style="width: 100%;">
          </el-date-picker>
        </div>
            </div>
            <div class="search_thing">
                <div class="search_label">员工:</div>
                <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
                    <el-option v-for="item in personList" :key="item.id" :label="item.name" :value="item.id">
                    </el-option>
                </el-select>
            </div>
            <div class="search_thing">
                <div class="search_label">部门:</div>
                <div class="search_input">
          <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
                    <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
                    </el-option>
                </el-select>
        </div>
            </div>
            <div class="search_thing" style="padding-left: 30px;width: 100px;">
                <el-button size="small" @click="refresh()">重 置</el-button>
                <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
            </div>
      <el-button size="small" type="primary" style="position: absolute;right: 50px;" @click="handleDown">导 出</el-button>
      <el-button size="small" type="primary" style="position: absolute;right: 120px;" @click="handleUp" v-show="currentTable == 'value0'">导 入</el-button>
        </div>
    <el-radio-group v-model="currentTable" size="small" :key="'111'" style="margin-top: 10px;">
      <el-radio-button label="value0">
        原始工时
      </el-radio-button>
      <el-radio-button label="value1">
        修正工时
      </el-radio-button>
    </el-radio-group>
    <div class="table">
      <ValueTable ref="ValueTable0"
        v-show="currentTable == 'value0'"
                :url="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours"
                :componentData="componentData" :inputUrl="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" :downUrl="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" :key="upIndex" />
      <ValueTable ref="ValueTable1"
        v-show="currentTable == 'value1'"
                :url="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours"
                :componentData="componentData0" :key="upIndex" />
    </div>
  </div>
</template>
<script>
import ValueTable from '../../tool/value-table.vue'
export default {
  components: {
    ValueTable
  },
  data () {
    return{
      componentData: {
                    entity: {
                        number: null,
                        department: null,
                        laboratory: null,
                        orderBy: {
                            field: 'id',
                            order: 'desc'
                        }
                    },
                    isIndex: true,
                    showSelect: false,
                    select: false,
                    do: [],
                    tagField: {
                        deviceStatus: {
                            select: []
                        },
                        equipmentManager: {
                            select: []
                        },
                        authorizedPerson: {
                            select: []
                        },
            insProductIds:{
              select:[]
            }
                    },
                    linkEvent: {
                        deviceName: {
                            method: 'selectAllByOne'
                        }
                    },
                    selectField: {
                        authorizedPerson: {
                            select: [],
                            choose: true
                        },
                        equipmentManager: {
                            select: []
                        },
            insProductIds:{
              select:[],
              choose: true
            }
                    },
                    requiredAdd: [],
                    requiredUp: []
            },
      componentData0: {
                    entity: {
                        number: null,
                        department: null,
                        laboratory: null,
                        orderBy: {
                            field: 'id',
                            order: 'desc'
                        }
                    },
                    isIndex: true,
                    showSelect: false,
                    select: false,
                    do: [],
                    tagField: {
                        deviceStatus: {
                            select: []
                        },
                        equipmentManager: {
                            select: []
                        },
                        authorizedPerson: {
                            select: []
                        },
            insProductIds:{
              select:[]
            }
                    },
                    linkEvent: {
                        deviceName: {
                            method: 'selectAllByOne'
                        }
                    },
                    selectField: {
                        authorizedPerson: {
                            select: [],
                            choose: true
                        },
                        equipmentManager: {
                            select: []
                        },
            insProductIds:{
              select:[],
              choose: true
            }
                    },
                    requiredAdd: [],
                    requiredUp: []
            },
      upIndex:0,
      weekList:[],
      personList:[],
      currentTable:'value0'
    }
  },
  mounted(){
    this.getUsers()
  },
  methods: {
    refresh(){},
    refreshTable(){},
    getUsers(){
      this.$axios.post(this.$api.user.selectUserList, {
                    page: {
            current: -1,
            size: -1,
          },
                    entity: {
            name: null,
          }
                }, {
                    headers: {
                        'Content-Type': 'application/json'
                    }
                }).then(res => {
                    if (res.code === 201) {
                        return
                    }
          let arr = res.data.body.records
          this.personList = arr
        })
    },
    handleDown(){
      if(this.currentTable == 'value0'){
        this.$refs.ValueTable0.downFile(false)
      }else{
        this.$refs.ValueTable1.downFile(false)
      }
    },
    handleUp(){
      this.$refs.ValueTable0.openUpload()
    }
  }
}
</script>
<style>
<style scoped>
.work-time-statistics{
  height: 100%;
}
.search {
        background-color: #fff;
        height: 80px;
        display: flex;
        align-items: center;
    }
    .search_thing {
        width: 270px;
        display: flex;
        align-items: center;
    }
    .search_label {
        width: 60px;
        font-size: 14px;
        text-align: right;
    }
    .search_input {
        width: calc(100% - 60px);
    }
  .table {
        margin-top: 10px;
        background-color: #fff;
        width: calc(100% - 40px);
        height: calc(100% - 60px - 80px - 10px - 40px - 25px);
        padding: 20px;
    }
</style>
src/components/view/b3-classes.vue
@@ -75,7 +75,7 @@
                <span class="month" style="position: absolute;top: 4px;" v-if="item.week=='周日'">{{ item.weekNum }}周</span>
                <p style="height: 26px;position: absolute;bottom: 12px;">
                  <span class="day">{{ item.day }}</span>
                  <span class="week">{{ item.week }}</span>
                  <span class="week">{{ item.week.charAt(1) }}</span>
                </p>
              </div>
            </div>
@@ -83,13 +83,13 @@
            v-on:mouseenter="onMouseEnter(index)"
          v-on:mouseleave="currentUserIndex=null">
              <div class="content-body-item" v-for="(m,i) in item.list" :key="'d'+i" :class="{hoverType:currentUserIndex==index}">
                <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',}">
                <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',type5:m.shift==='5',}">
                  <!-- <div class="work-box-left">
                    <span>{{ getShiftByDic(m.shift) }}</span>
                  </div> -->
                  <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!downPower">
                    <!-- <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i> -->
                    <span style="cursor: pointer;">{{ getShiftByDic(m.shift) }}</span>
                    <span style="cursor: pointer;" :style="`opacity: ${getShiftByDic(m.shift)=='无'?0:1};`">{{ getShiftByDic(m.shift) }}</span>
                    <el-dropdown-menu slot="dropdown">
                      <el-dropdown-item v-for="(n,j) in classType" :key="'h'+j" :command="n.value">{{ n.label }}</el-dropdown-item>
                    </el-dropdown-menu>
@@ -583,7 +583,7 @@
      if(obj){
        return obj.label
      }
      return '未排班'
      return '无'
    }
  }
}
@@ -664,7 +664,7 @@
}
.content-title-item{
  height: 100%;
  width: 60px;
  width: 50px;
  flex-shrink: 0;
  border-bottom: 1px solid #EEEEEE;
  box-sizing: border-box;
@@ -699,8 +699,9 @@
}
.content-body-item{
  height: 70px;
  width: 60px;
  width: 50px;
  flex-shrink: 0;
  font-size: 12px;
  box-sizing: border-box;
  padding: 4px;
  border-right: 1px solid #EEEEEE;
@@ -752,6 +753,13 @@
.work-box.type4 span{
  color: #F56C6C !important;
}
.work-box.type5{
  background: #ff46c145;
  color: #ff46c0 !important;
}
.work-box.type5 span{
  color: #ff46c0 !important;
}
/* .el-icon-arrow-down::before{
  color: #c6c4c4;
} */
src/components/view/b3-work-time-management.vue
@@ -27,7 +27,7 @@
  },
  data() {
    return{
      currentComponent:'workTimeConfig'
      currentComponent:'workTimeStatistics'
    }
  }
}
src/main.js
@@ -14,8 +14,8 @@
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// const javaApi = 'http://192.168.11.200:8001';//李
const javaApi = 'http://10.20.102.168:8001';//张
// const javaApi = 'http://172.20.10.3:8001';//姜
// const javaApi = 'http://10.20.102.168:8001';//张
const javaApi = 'http://172.20.10.3:8001';//姜
// const javaApi = 'http://192.168.11.2:8001';//柴
// const javaApi = 'http://114.132.189.42:1234';//测试服
//胜云服务器