403 lines
11 KiB
Vue
403 lines
11 KiB
Vue
<template>
|
|
<view class="page-wrap">
|
|
<view class="date-select">
|
|
<view class="previous-day" @click="handleChangeDay(-1)">
|
|
<u-icon name="arrow-left-double"></u-icon>
|
|
<text>前一天</text>
|
|
</view>
|
|
<uni-datetime-picker class="date-picker" type="date" :clear-icon="false" v-model="single"
|
|
@maskClick="maskClick" @change="onChangeTime" />
|
|
<view class="next-day" @click="handleChangeDay(1)">
|
|
<text>后一天</text>
|
|
<u-icon name="arrow-right-double"></u-icon>
|
|
</view>
|
|
</view>
|
|
<view class="card" v-for="(item, key) in workShopScheduling" :key="key">
|
|
<uni-card :is-shadow="false" margin="0">
|
|
<view slot="title">
|
|
<view class="custom-card-title">
|
|
<text class="text">{{item[0].DEPARTMENT_NAME}}</text>
|
|
</view>
|
|
</view>
|
|
<view v-for="(sub, index) in item" :key="index" class="class-list">
|
|
<view class="class-info">
|
|
<view class="class-name">{{sub.Nav_Team.NAME}}: </view>
|
|
<view class="subDep">{{sub.Nav_Class.NAME}}</view>
|
|
</view>
|
|
<view class="users-icon" @click="showUsers(sub,sub.ID,sub.Nav_Team.NAME)">
|
|
<uni-icons type="staff-filled" color="#007aff" size="24" />
|
|
</view>
|
|
</view>
|
|
</uni-card>
|
|
</view>
|
|
<u-modal :show="showModal" :title="currTeam ? currTeam + '人员' : '班组人员'" @confirm="onConfirm" style="width: 1em;" confirm-text="确认" showCancelButton="true" cancelText="关闭" @cancel="onCancelConfirm()">
|
|
<scroll-view scroll-y="true" class="user-list-wrap">
|
|
<view class="user-list" v-for="(item, key) in userLists" :key="key">
|
|
<view>
|
|
<u-form-item v-if="showDelete" label="" prop="personName" @click="handleChangeUser(item['Nav_Person'])">
|
|
<u--input disabled disabledColor="#fff" v-model="item['Nav_Person'].NAME" placeholder="请选择人员姓名" suffixIcon="arrow-right" suffixIconStyle="font-size:14px" fontSize="14px"
|
|
border="none">
|
|
</u--input>
|
|
</u-icon>
|
|
</u-form-item>
|
|
<u-form-item v-if="!showDelete">{{item.Nav_Person.NAME}}|{{item.Nav_Person.CODE}}({{item.Nav_Person.Nav_Post?item.Nav_Person.Nav_Post.NAME:''}})</u-form-item>
|
|
|
|
<u-icon @click="delUser(item)" style="float: right;" name="trash" color="#ff4d4f"
|
|
v-if="showDelete" size="21"></u-icon>
|
|
</view>
|
|
</view>
|
|
<u-button v-if="showDelete" type="primary" @click="handleAddUser(userLists[0])" color="#3d4b70" :plain="true" style="margin-right: 5px;">添加人员</u-button>
|
|
|
|
<!-- <view style="display: flex;align-items: center;justify-content: center;border-top: #e7e6e4 1px solid;" @click="handleAddUser">
|
|
<view style="display: flex;align-items: center;justify-content: center;">
|
|
<view style="font-size: 16px;color: #3d4b70;font-weight: bold;padding: 15px 0px;" v-if="this.userLists.length == 1">添加人员信息</view>
|
|
<view style="font-size: 16px;color: #3d4b70;font-weight: bold;padding: 15px 0px;" v-if="this.userLists.length !== 1">继续添加人员信息</view>
|
|
</view>
|
|
</view> -->
|
|
</scroll-view>
|
|
</u-modal>
|
|
<query-selector :show="showPopup" :total="curTotal" :lists="userListTemps" :defaultValue="currentOperateUser.NAME" @close="handleClosePopup" @search="handleSearchUser" @select="handleSelectedUser" />
|
|
<u-modal :show="delUserItem!=undefined" @confirm="confirmDel" @cancel="cancelDel" showCancelButton
|
|
title="确认删除?"></u-modal>
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getScheduleData,
|
|
getWorkShopData,
|
|
} from '../../../../services/apply/FMServices/FMServices'
|
|
import {
|
|
extendFilterGroup,
|
|
extendGroupRule,
|
|
extendInclude,
|
|
extendRule,
|
|
initFilter,
|
|
initFilterGroup,
|
|
guid,
|
|
} from '../../../../utils/common'
|
|
import {
|
|
getRequest,
|
|
getPersonLists,
|
|
} from '../../../../services/apply/FOServices/FOServices';
|
|
import request from '../../../../utils/request';
|
|
export default {
|
|
data() {
|
|
return {
|
|
showModal: false,
|
|
currTeam: {},
|
|
single: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
|
|
workShops: [],
|
|
workShopScheduling: [],
|
|
userLists: [],
|
|
delUserItem: undefined,
|
|
currUserPersonId: uni.getStorageSync('appInfo').User.PERSON_ID,
|
|
showDelete: false,
|
|
currentOperateUser: {},
|
|
showPopup: false,
|
|
curTotal: 0,
|
|
userListTemps: [],
|
|
currScheduling:{
|
|
Nav_DepartmentSchedulingDetail:{}
|
|
}
|
|
}
|
|
},
|
|
onLoad() {
|
|
this.loadWorkShopData()
|
|
},
|
|
methods: {
|
|
delUser(item) {
|
|
this.delUserItem = item;
|
|
},
|
|
cancelDel() {
|
|
this.delUserItem = undefined
|
|
},
|
|
confirmDel() {
|
|
let SchedulingId = this.delUserItem.DEPARTMENT_SCHEDULING_ID;
|
|
request.get("/FM/DepartmentSchedulingDetail/Delete?id=" + this.delUserItem.ID).then(res => {
|
|
if (res) {
|
|
this.showUsers(this.currScheduling,SchedulingId)
|
|
this.delUserItem = undefined;
|
|
}
|
|
})
|
|
},
|
|
handleClosePopup() {
|
|
this.showPopup = false
|
|
},
|
|
handleChangeUser(user) {
|
|
this.currentOperateUser = user
|
|
this.showPopup = true
|
|
this.handleSearchUser('init')
|
|
},
|
|
handleSearchUser(val, pageIndex) {
|
|
const orgId = uni.getStorageSync('orgId')
|
|
const json = initFilter(orgId, "", "NAME", '', pageIndex)
|
|
extendInclude(json, "Nav_Post")
|
|
if (val !== 'init') {
|
|
const tempGroup = initFilterGroup(false);
|
|
extendGroupRule(tempGroup, 'NAME', 9, val)
|
|
extendFilterGroup(json, tempGroup);
|
|
}
|
|
json.Limit = 20
|
|
if (pageIndex) {
|
|
json.Start = (pageIndex - 1) * 20;
|
|
}
|
|
|
|
getPersonLists(json).then(res => {
|
|
if (res.IsSuccessful) {
|
|
this.userListTemps = res.Data.map(i => {
|
|
return {
|
|
...i,
|
|
name: i.NAME,
|
|
code: i.CODE
|
|
}
|
|
})
|
|
this.curTotal = res.TotalCount
|
|
}
|
|
})
|
|
},
|
|
handleSelectedUser(val) {
|
|
// let numc = 0;
|
|
// this.userLists.map((item) => {
|
|
// if (item.PERSON_ID == val.ID) {
|
|
// numc = numc + 1
|
|
// return
|
|
// }
|
|
// })
|
|
// if (numc >= 1) {
|
|
// this.showPopup = false
|
|
// uni.$showErrorInfo('不能选择相同的人员')
|
|
// return
|
|
// }
|
|
this.showPopup = false
|
|
this.currentOperateUser.CODE = val.CODE
|
|
this.lists = []
|
|
const result = this.userLists.map((obj) => {
|
|
const {
|
|
Nav_Person
|
|
} = obj
|
|
if (Nav_Person.CODE === this.currentOperateUser.CODE) {
|
|
return Object.assign({}, obj, {
|
|
Nav_Person: val,
|
|
PERSON_ID: val.ID,
|
|
})
|
|
}
|
|
return obj
|
|
})
|
|
this.userLists = result
|
|
},
|
|
loadWorkShopData() {
|
|
const orgId = uni.getStorageSync('orgId')
|
|
const json = initFilter(orgId, "", "NAME", 0)
|
|
json.Level = -1
|
|
json.Limit = 100
|
|
getWorkShopData(json).then(res => {
|
|
this.workShops = res || []
|
|
this.loadScheduleData(res)
|
|
})
|
|
},
|
|
loadScheduleData(deps) {
|
|
const orgId = uni.getStorageSync('orgId')
|
|
const json = initFilter(orgId, "", "NUM", 0)
|
|
extendRule(json, 'DATE_TIME', 1, this.single)
|
|
const tempGroup = initFilterGroup(false)
|
|
deps.forEach(i => {
|
|
extendGroupRule(tempGroup, 'DEPARTMENT_ID', 1, i.Node.ID)
|
|
})
|
|
extendFilterGroup(json, tempGroup)
|
|
extendInclude(json, "Nav_Class")
|
|
extendInclude(json, "Nav_Class.Nav_ClassDetail")
|
|
extendInclude(json, 'Nav_DepartmentSchedulingDetail')
|
|
extendInclude(json, 'Nav_Team.Nav_ChargePerson')
|
|
json.Limit = 100
|
|
getScheduleData(json).then(res => {
|
|
res.forEach(r => {
|
|
deps.forEach(d => {
|
|
if (r.DEPARTMENT_ID === d.Node.ID) {
|
|
r.DEPARTMENT_NAME = d.Node.NAME
|
|
}
|
|
})
|
|
})
|
|
const groupData = this.depGroup(res || [], e => e.DEPARTMENT_ID)
|
|
this.workShopScheduling = groupData
|
|
})
|
|
},
|
|
depGroup(arr, fn) {
|
|
const obj = {};
|
|
arr.forEach(item => {
|
|
const key = JSON.stringify(fn(item));
|
|
obj[key] = obj[key] || [];
|
|
obj[key].push(item)
|
|
});
|
|
return Object.keys(obj).map(k => {
|
|
return obj[k];
|
|
})
|
|
},
|
|
handleAddUser(item) {
|
|
let temp= [];
|
|
temp.PERSON_ID=null
|
|
temp.Nav_Person={}
|
|
temp.CREATER_ID=uni.getStorageSync('appInfo').User?.ID
|
|
temp.CREATE_TIME=uni.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM:ss')
|
|
temp.MODIFIER_ID=uni.getStorageSync('appInfo').User?.ID
|
|
temp.MODIFY_TIME=uni.$u.timeFormat(new Date(), 'yyyy-mm-dd hh:MM:ss')
|
|
temp.ID=guid()
|
|
temp.DEPARTMENT_SCHEDULING_ID=item.DEPARTMENT_SCHEDULING_ID
|
|
temp.ENTITY_ORG_TPYE=item.ENTITY_ORG_TPYE
|
|
temp.FLOW_ID=item.FLOW_ID
|
|
temp.FLOW_SEND_STATUS=item.FLOW_SEND_STATUS
|
|
temp.FLOW_STATUS=item.FLOW_STATUS
|
|
temp.FORM_ID=item.FORM_ID
|
|
temp.IS_DELETED=item.IS_DELETED
|
|
temp.Nav_DepartmentScheduling=item.Nav_DepartmentScheduling
|
|
temp.ORG_ID=item.ORG_ID
|
|
temp.TaskID=item.TaskID
|
|
this.userLists.push(temp)
|
|
},
|
|
showUsers(item,ID, NAME) {
|
|
this.currScheduling = item
|
|
const orgId = uni.getStorageSync('orgId')
|
|
const json = initFilter(orgId, "", "Nav_Person.NAME")
|
|
if (NAME != undefined) {
|
|
this.currTeam = NAME
|
|
}
|
|
extendInclude(json, "Nav_Person.Nav_Post")
|
|
extendInclude(json, "Nav_DepartmentScheduling.Nav_Team")
|
|
extendRule(json, 'DEPARTMENT_SCHEDULING_ID', 1, ID)
|
|
getRequest(json, "/FM/DepartmentSchedulingDetail/OrderEntities").then(res => {
|
|
if (res && res.length) {
|
|
if (res[0].Nav_DepartmentScheduling.Nav_Team.CHARGE_PERSON_ID == this.currUserPersonId) {
|
|
this.showDelete = true;
|
|
} else {
|
|
this.showDelete = false;
|
|
}
|
|
this.showModal = true
|
|
this.userLists = res || []
|
|
}
|
|
})
|
|
},
|
|
onChangeTime(e) {
|
|
this.single = e
|
|
this.loadWorkShopData()
|
|
},
|
|
handleChangeDay(day) {
|
|
const stamp = new Date(this.single).getTime() + 24 * 60 * 60 * 1000 * day
|
|
this.single = uni.$u.timeFormat(stamp)
|
|
this.loadWorkShopData()
|
|
},
|
|
onCancelConfirm(){
|
|
this.showModal = false
|
|
this.currTeam = {}
|
|
this.userLists = []
|
|
},
|
|
onConfirm() {
|
|
// this.showModal = false
|
|
// this.currTeam = {}
|
|
// this.userLists = []
|
|
|
|
this.currScheduling.Nav_DepartmentSchedulingDetail = this.userLists
|
|
// let SchedulingId = this.delUserItem?.DEPARTMENT_SCHEDULING_ID;
|
|
getRequest(this.currScheduling,"/FM/DepartmentScheduling/FullUpdateDetail").then(res => {
|
|
if (res) {
|
|
// this.showUsers(SchedulingId)
|
|
// this.delUserItem = undefined;
|
|
this.showModal = false
|
|
this.currTeam = {}
|
|
this.userLists = []
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.page-wrap {
|
|
padding: 16px 16px 66px;
|
|
}
|
|
|
|
.date-picker {
|
|
/*margin-bottom: 16px;*/
|
|
}
|
|
|
|
.date-select {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.date-select .previous-day,
|
|
.date-select .next-day {
|
|
display: flex;
|
|
font-size: 14px;
|
|
width: 78px;
|
|
}
|
|
|
|
.date-select .next-day {
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.date-select .previous-day text {
|
|
margin-left: 4px;
|
|
}
|
|
|
|
.date-select .next-day text {
|
|
margin-right: 4px;
|
|
}
|
|
|
|
.card {
|
|
margin-bottom: 18px;
|
|
}
|
|
|
|
.custom-card-title {
|
|
display: flex;
|
|
border-bottom: 1px #EBEEF5 solid;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
padding: 10px;
|
|
overflow: hidden;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.custom-card-title .text {
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.class-list {
|
|
display: flex;
|
|
margin-bottom: 12px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.class-info {
|
|
display: flex;
|
|
flex: 1;
|
|
}
|
|
|
|
.users-icon {
|
|
width: 30px;
|
|
text-align: right;
|
|
}
|
|
|
|
.class-info .name {
|
|
flex: 1
|
|
}
|
|
|
|
.class-name {
|
|
font-weight: 500;
|
|
font-size: 16px;
|
|
margin-right: 8px;
|
|
}
|
|
|
|
.user-list-wrap {
|
|
max-height: 300px;
|
|
}
|
|
|
|
.user-list {
|
|
margin-bottom: 15px;
|
|
}
|
|
</style> |