| | |
| | | <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button> |
| | | </div> |
| | | <div class="search_thing btns" style="padding-left: 30px;"> |
| | | <el-button size="small" type="primary" v-if="downPower" @click="configTime" :loading="downLoading">时间配置</el-button> |
| | | <el-button size="small" type="primary" v-if="downPower" @click="handleDown" :loading="downLoading">导 出</el-button> |
| | | <el-button size="small" type="primary" @click="schedulingVisible = true" v-if="addPower">排 班</el-button> |
| | | </div> |
| | |
| | | </scroll-pagination> |
| | | <span style="color:#909399;font-size:14px;position: absolute;left:50%;top: 50%;transform: translate(-59%,-50%);" v-if="(query.month&&list.length==0)||(!query.month&&yearList.length==0)">暂无数据</span> |
| | | </div> |
| | | <el-dialog title="时间配置" :visible.sync="configTimeVisible" width="620px"> |
| | | <div v-loading="configTimeVisibleLoading" ></div> |
| | | <div v-if="!configTimeVisibleLoading"> |
| | | <div v-for="(item, index) in timeQuery"> |
| | | <div class="form_title"> |
| | | <span>{{`班次${transFromNumber(index + 1)}`}}</span> |
| | | <span style="margin-right: 10px"> |
| | | <i class="el-icon-circle-check" v-if="item.isEdit" style="margin-left: 10px; color: #4b79f2" @click="saveEdit(item, index)"></i> |
| | | <i class="el-icon-edit" v-if="!item.isEdit" style="margin-left: 10px; color: #4b79f2" @click="item.isEdit = true"></i> |
| | | <i class="el-icon-delete" v-if="!item.isEdit && timeQuery.length > 1" style="margin-left: 10px; color: #FF4902" @click="deleteTime(item, index)"></i> |
| | | </span> |
| | | </div> |
| | | <div class="form"> |
| | | <div style="margin-bottom: 12px"> |
| | | <span class="form_label">班次:</span> |
| | | <span v-if="!item.isEdit"> {{item.type}} </span> |
| | | <span class="form_input" v-if="item.isEdit"> |
| | | <el-select v-model="item.shift" placeholder="请选择" style="width: 70%;" clearable size="small"> |
| | | <el-option v-for="obj in timeTypeList" |
| | | :key="obj.value" |
| | | :label="obj.label" |
| | | :value="obj.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </span> |
| | | </div> |
| | | <div> |
| | | <span class="form_label">时间:</span> |
| | | <span v-if="!item.isEdit"> {{item.time === null ? '' : item.time[0] + '~' + item.time[1]}} </span> |
| | | <span class="form_input" v-if="item.isEdit"> |
| | | <el-time-picker |
| | | style="width: 70%;" |
| | | is-range |
| | | size="small" |
| | | v-model="item.time" |
| | | range-separator="~" |
| | | format="HH:mm" |
| | | value-format="HH:mm" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | placeholder="选择时间范围"> |
| | | </el-time-picker> |
| | | </span> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | </div> |
| | | <div @click="addTimeForm" style="color: #4b79f2" v-if="index === timeQuery.length - 1">添加时间配置</div> |
| | | </div> |
| | | <div @click="addTimeForm" style="color: #4b79f2" v-if="timeQuery.length === 0">添加时间配置</div> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog title="排班" :visible.sync="schedulingVisible" width="400px"> |
| | | <div class="search_thing"> |
| | | <div class="search_label" style="width:90px"><span style="color: red;margin-right: 4px;">*</span>周次:</div> |
| | |
| | | yearList:[], |
| | | downLoading:false, |
| | | keyMap:{}, |
| | | configTimeVisible: false, // 时间配置弹框 |
| | | configTimeVisibleLoading: false, // 时间配置弹框loading |
| | | timeTypeList: [], |
| | | timeQuery: [], |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | this.yearList = [] |
| | | this.initYear() |
| | | } |
| | | }, |
| | | transFromNumber(num){ |
| | | let changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; //changeNum[0] = "零" |
| | | let unit = ["", "十", "百", "千", "万"]; |
| | | num = parseInt(num); |
| | | let getWan = (temp) => { |
| | | let strArr = temp.toString().split("").reverse(); |
| | | let newNum = ""; |
| | | for (var i = 0; i < strArr.length; i++) { |
| | | newNum = (i == 0 && strArr[i] == 0 ? "" : (i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i]))) + newNum; |
| | | } |
| | | return newNum; |
| | | } |
| | | let overWan = Math.floor(num / 10000); |
| | | let noWan = num % 10000; |
| | | if (noWan.toString().length < 4) noWan = "0" + noWan; |
| | | return overWan ? getWan(overWan) + "万" + getWan(noWan) : getWan(num) |
| | | }, |
| | | init(){ |
| | | const key = `_${this.currentPage}` |
| | |
| | | this.refresh() |
| | | }) |
| | | }, |
| | | configTime () { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "班次类型" |
| | | }).then(res => { |
| | | console.log('res---', res) |
| | | this.timeTypeList = res.data |
| | | }) |
| | | this.getTimeList() |
| | | this.configTimeVisible = true |
| | | }, |
| | | getTimeList () { |
| | | this.configTimeVisibleLoading = true |
| | | this.$axios.get(this.$api.performanceShift.getList).then(res => { |
| | | if (res.code === 200) { |
| | | this.timeQuery = res.data |
| | | this.timeQuery.forEach(item => { |
| | | item.isEdit = false |
| | | }) |
| | | } |
| | | this.configTimeVisibleLoading = false |
| | | }).catch(e => { |
| | | this.configTimeVisibleLoading = false |
| | | console.log('e--',e) |
| | | }) |
| | | }, |
| | | addTimeForm () { |
| | | this.timeQuery.push({ |
| | | type: '', |
| | | shift: '', |
| | | time: null, |
| | | isEdit: true |
| | | }) |
| | | }, |
| | | saveEdit (item, index) { |
| | | if (item.shift) { |
| | | const index = this.timeTypeList.findIndex(val => val.value === item.shift) |
| | | if (index > -1) { |
| | | item.type = this.timeTypeList[index].label |
| | | } |
| | | } |
| | | const isEmpty = this.isObjectEmpty(item) |
| | | if (isEmpty) { |
| | | this.$message.error('请填写完整') |
| | | return |
| | | } |
| | | let newObj = {} |
| | | let url = '' |
| | | newObj.shift = item.shift |
| | | newObj.startTime = item.time[0] |
| | | newObj.endTime = item.time[1] |
| | | url = this.$api.performanceShift.shiftAdd |
| | | if (item.id) { |
| | | // 有id为修改 |
| | | newObj.id = item.id |
| | | url = this.$api.performanceShift.shiftUpdate |
| | | } |
| | | this.$axios.post(url, newObj, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 201) return |
| | | this.$message.success('操作成功') |
| | | }) |
| | | this.getTimeList() |
| | | }, |
| | | deleteTime (item, index) { |
| | | this.$axios.post(this.$api.performanceShift.shiftRemove, { |
| | | id: item.id |
| | | },{ |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 201) return |
| | | this.$message.success('操作成功') |
| | | }) |
| | | this.getTimeList() |
| | | }, |
| | | isObjectEmpty(obj) { |
| | | return Object.keys(obj).some(key => !obj[key]); |
| | | }, |
| | | saveTimeQuery () { |
| | | this.timeQuery.forEach(item => { |
| | | if (this.isObjectEmpty(item)) { |
| | | return this.$message.error('请填写完整') |
| | | } |
| | | }) |
| | | console.log('???') |
| | | }, |
| | | closeConfigTimeVisible () { |
| | | this.configTimeVisible = false |
| | | this.timeQuery = [{ |
| | | type: '', |
| | | time: null, |
| | | isEdit: false |
| | | }] |
| | | }, |
| | | handleDown(){ |
| | | let year = this.query.year.getFullYear() |
| | | let time = ''; |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form_title { |
| | | height: 36px; |
| | | display: flex; |
| | | flex-direction: row; |
| | | justify-content: space-between; |
| | | font-weight: 800; |
| | | } |
| | | .search { |
| | | height: 50px; |
| | | display: flex; |