This commit is contained in:
何美荣 2026-06-05 14:16:55 +08:00
commit 13987a3163
4 changed files with 235 additions and 123 deletions

View File

@ -202,6 +202,23 @@
getUserLists(json).then(res => {
if (res.IsSuccessful) {
this.selfDepartmentUsers = res.Data
let num = 0
for (let task of this.selfDepartmentUsers) {
const itemJson = this.defaultChecked.filter(i => !i.IS_DELETED).find((item) => {
return item.NAME == task.NAME
})
if (itemJson) {
num = num + 1
}
}
this.checkedByAll = this.defaultChecked
if (num == this.selfDepartmentUsers.length && num !== 0) {
this.checkedByAll.push({
NAME: '全选',
IS_DELETED: false,
USER_ID: 'all',
})
}
}
})
}
@ -209,23 +226,7 @@
// findAndAddUser(this.orgTree)
// }
findAndAddUser(this.orgTree)
let num = 0
for (let task of this.selfDepartmentUsers) {
const itemJson = this.defaultChecked.filter(i => !i.IS_DELETED).find((item) => {
return item.NAME == task.NAME
})
if (itemJson) {
num = num + 1
}
}
this.checkedByAll = this.defaultChecked
if (num == this.selfDepartmentUsers.length && num !== 0) {
this.checkedByAll.push({
NAME: '全选',
IS_DELETED: false,
USER_ID: 'all',
})
}
},
@ -385,16 +386,6 @@
})
}
}
// arrayC.forEach(item => {
// this.checkedByAll.push({
// NAME: item.NAME,
// IS_DELETED: item.IS_DELETED,
// USER_ID: item.USER_ID,
// })
// })
// TODO:
} else {
if (e.type === 'dep') {
this.handleExpandOrg({
@ -430,6 +421,7 @@
// NAME: e.name
// }
})
this.checkAndUpdateAllSelectStatus()
}
}
} else {
@ -471,10 +463,47 @@
item.IS_DELETED = true
}
})
this.checkAndUpdateAllSelectStatus()
}
}
}
},
//
checkAndUpdateAllSelectStatus() {
//
if (!this.selfDepartmentUsers || this.selfDepartmentUsers.length === 0) return
// ID
const allUserIds = this.selfDepartmentUsers.map(user => user.ID)
// ID
//
const selectedUserIds = this.checkedByAll
.filter(item => !item.IS_DELETED && item.USER_ID && item.USER_ID !== 'all')
.map(item => item.USER_ID)
//
const isAllSelected = allUserIds.length > 0 &&
allUserIds.every(id => selectedUserIds.includes(id))
//
const allItem = this.checkedByAll.find(item => item.USER_ID === 'all')
const hasAllItem = allItem && !allItem.IS_DELETED
if (isAllSelected && !hasAllItem) {
//
this.checkedByAll.push({
NAME: '全选',
IS_DELETED: false,
USER_ID: 'all',
})
} else if (!isAllSelected && hasAllItem) {
//
if (allItem) {
allItem.IS_DELETED = true
}
}
},
removeChecked(value) {
this.checkedByAll.forEach(item => {
if (item.USER_ID === value.USER_ID) {

View File

@ -2,8 +2,8 @@
"name" : "矿山安全生产标准化系统",
"appid" : "__UNI__DE7034E", //BBB1077
"description" : "厦钨矿山安全app",
"versionName" : "1.0.009",
"versionCode" : 10009,
"versionName" : "1.0.010",
"versionCode" : 10010,
"transformPx" : false,
/* 5+App */
"app-plus" : {

View File

@ -33,11 +33,19 @@
<u--textarea v-model="model.OTHER_CONTENT" placeholder="请输入其他内容" border="surround"></u--textarea>
<view class="upload-title">附件</view>
<full-upload v-model="model.Nav_Files" :isShowBtn='true' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
<u-form-item label="参会人员" @click="handleShowUserSelector">
<u-icon name="man-add" size="24" color="#3d9cff" slot="right"></u-icon>
</u-form-item>
<view class="tag-view" v-if="model.Nav_Users">
<view v-for="(i, k) in model.Nav_Users.filter(i => !i.IS_DELETED)">
<u-tag plain class="tag" :key="k" :inverted="true" :text="i.Nav_User.NAME" type="primary" />
</view>
</view>
</u--form>
<!-- </uni-card> -->
</view>
<u-sticky offset-top="20">
<!-- <u-sticky offset-top="20">
<view class="sub-form" style="margin:20px 16px 20px 16px;padding-bottom: 100px;">
<view class="sub-form-wrap">
<view class="sub-form-btns">
@ -61,11 +69,13 @@
</u--form>
</view>
</view>
</u-sticky>
</u-sticky> -->
<u-modal :show="showDelModalIndex >= 0" @confirm="confirmDel" @cancel="cancelDel" showCancelButton title="确认删除?"></u-modal>
<query-selector :show="showPopup" :lists="userLists" :defaultValue="currentOperateUser.NAME" @close="handleClosePopup" @search="handleSearchUser" @select="handleSelectedUser" />
<query-selector :show="showPopupMonitor" :total="curTotalMonitor" :lists="monitorLists" :defaultValue="currentOperateMonitor.NAME" @close="handleClosePopupMonitor" @search="handleSearchMonitor"
@select="handleSelectedMonitor" />
<people-selector :defaultChecked="peopleSelectOption.defaultChecked" :show="peopleSelectOption.showSelector" @select="handleSelectorPeople" @close="peopleSelectOption.showSelector = false">
</people-selector>
<u-picker :show="comPickerInfo.showSheet" :columns="comPickerInfo.columns" @confirm="onConfirmPicker" @close="closePicker" @cancel="closePicker" keyName="NAME"></u-picker>
<!-- <view class="bottom-button">
<button type="primary" @click="submit('Save')" style="width: 45%;float: left;">保存</button>
@ -162,6 +172,11 @@
TaskID: '',
isLoadOK: false,
showDelModalIndex: undefined,
peopleSelectOption: {
showSelector: false,
value: null,
defaultChecked: []
},
dateTimePickerInfo: {
showCheckDate: false,
dataIndex: undefined,
@ -191,6 +206,36 @@
}
},
methods: {
handleSelectorPeople(e) {
const {
index: key
} = this.peopleSelectOption
this.model.Nav_Users= e.map(i => {
return {
USER_ID: i.USER_ID,
IS_DELETED: i.IS_DELETED,
PRE_SHIFT_MEETING_RECORD_ID: this.model.ID,
NAME: i.NAME,
Nav_User: {
NAME: i.NAME,
ID: i.USER_ID
}
}
})
},
handleShowUserSelector() {
this.peopleSelectOption = {
showSelector: true,
value: this.model.Nav_Users,
defaultChecked: this.model.Nav_Users?.map(i => {
return {
...i,
NAME: i.Nav_User.NAME,
USER_ID: i.USER_ID,
}
})
}
},
handleAdd() {
this.model.Nav_Users.unshift({
PRE_SHIFT_MEETING_RECORD_ID: this.model.ID,
@ -535,7 +580,7 @@
}
.card {
margin: 20px 16px 20px 16px;
margin: 20px 16px 140px 16px;
/* border: 1px solid #EBEEF5; */
padding: 20px 30px 40px 30px;
/* box-shadow: rgba(0, 0, 0, 0.08) 0px 0px 3px 1px; */

View File

@ -1,86 +1,91 @@
<template>
<view class="todo-page" v-bind:style="{paddingBottom:paddingBottom+'px'}">
<view class="card">
<view class="background"></view>
<view>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm">
<u-form-item label="开始时间:" prop="START_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.START_TIME" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="结束时间:" prop="END_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.END_TIME" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="编号 " prop="Nav_User" borderBottom>
<u--input v-if="model.Nav_User" v-model="model.Nav_User.CODE" border="none" slot="right"
inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="姓名:" prop="Nav_User.NAME" borderBottom>
<u--input v-if="model.Nav_User" v-model="model.Nav_User.NAME" border="none" slot="right"
inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="身份证号 " prop="Nav_User" borderBottom>
<u--input v-model="model.ID_CARD_NUMBER" border="none" slot="right" inputAlign="right" disabled
disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="入职时间 " prop="IN_TIME" borderBottom>
<u--input v-model="model.IN_TIME" border="none" inputAlign="right" disabled
disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训地点:" prop="TAINNING_ADDR" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TAINNING_ADDR" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训学时:" prop="TRAINNING_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TRAINNING_TIME" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训老师:" prop="TEACHER" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TEACHER" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训形式:" prop="TRAIN_MODEL" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TRAIN_MODEL" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<view class="background"></view>
<view>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm">
<u-form-item label="发起部门:" prop="Nav_LaunchDepartment" borderBottom>
<u--input v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_Department.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="发起人:" prop="Nav_LaunchUser.NAME" borderBottom>
<u--input v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_User.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训层级:" prop="START_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TRAIN_STATUS_NAME" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="开始时间:" prop="START_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.START_TIME" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="结束时间:" prop="END_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.END_TIME" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="部门:" prop="depName" borderBottom>
<u--input v-if="model.Nav_Department" v-model="model.Nav_Department.NAME" border="none" slot="right"
inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="岗位:" prop="Nav_Post.NAME" borderBottom>
<u--input v-if="model.Nav_Post" v-model="model.Nav_Post.NAME" border="none" slot="right"
inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核结果:" prop="EXAMINATION_RESULTS" borderBottom>
<u--input disabled disabledColor="#fff" v-model="model.EXAMINATION_RESULTS" border="none"
slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核分数:" prop="SCORE" borderBottom>
<u--input disabled disabledColor="#fff" v-model="model.SCORE" border="none" slot="right"
inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="发起部门:" prop="Nav_LaunchDepartment" borderBottom>
<u--input v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_Department.NAME"
border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="发起人:" prop="Nav_LaunchUser.NAME" borderBottom>
<u--input v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_User.NAME" border="none"
slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核内容:" prop="Nav_Content" >
</u-form-item>
<u--textarea autoHeight disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_Content.NAME"
border="none"></u--textarea>
</u--form>
</view>
<u-form-item label="培训地点:" prop="TAINNING_ADDR" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TAINNING_ADDR" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训学时:" prop="TRAINNING_TIME" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TRAINNING_TIME" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训老师:" prop="TEACHER">
<!-- <u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TEACHER" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input> -->
</u-form-item>
<view class="tag-view" v-if="model.Nav_NewUser&&model.Nav_NewUser.Nav_Teachers">
<view v-for="(i, k) in model.Nav_NewUser.Nav_Teachers.filter(i => !i.IS_DELETED)">
<u-tag plain class="tag" :key="k" :inverted="true" :text="i.Nav_User.NAME" type="primary" />
</view>
</view>
<u-form-item label="培训形式:" prop="TRAIN_MODEL" borderBottom>
<u--input disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.TRAINTYPE_NAME" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="培训内容:" prop="Nav_Content">
</u-form-item>
<u--textarea autoHeight disabled disabledColor="#fff" v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_Content.NAME" border="none"></u--textarea>
<u-form-item label="附件" prop="CHECKSTANDARD">
</u-form-item>
<full-upload v-if="model.Nav_NewUser" v-model="model.Nav_NewUser.Nav_Files" :isShowBtn='false' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
</u--form>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm">
<u-form-item label="工号 " prop="Nav_User" borderBottom>
<u--input v-if="model.Nav_User" v-model="model.Nav_User.CODE" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="姓名:" prop="Nav_User.NAME" borderBottom>
<u--input v-if="model.Nav_User" v-model="model.Nav_User.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="身份证号 " prop="Nav_User" borderBottom>
<u--input v-model="model.ID_CARD_NUMBER" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="入职时间 " prop="IN_TIME" borderBottom>
<u--input v-model="model.IN_TIME" border="none" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="部门:" prop="depName" borderBottom>
<u--input v-if="model.Nav_Department" v-model="model.Nav_Department.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="岗位:" prop="Nav_Post.NAME" borderBottom>
<u--input v-if="model.Nav_Post" v-model="model.Nav_Post.NAME" border="none" slot="right" inputAlign="right" disabled disabledColor="#ffffff" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核分数:" prop="SCORE" borderBottom>
<u--input disabled disabledColor="#fff" v-model="model.SCORE" border="none" slot="right" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="考核结果:" prop="EXAMINATION_RESULTS" borderBottom>
<u--input v-if="model.EXAMINATION_RESULTS&&model.SCORE" disabled disabledColor="#fff" v-model="model.EXAMINATION_RESULTS_NAME" border="none" slot="right" inputAlign="right"
fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="附件" prop="CHECKSTANDARD">
</u-form-item>
<full-upload v-model="model.Nav_Files" :isShowBtn='false' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
</u--form>
</view>
</view>
<view class="bottom-button">
<u-button type="primary" v-if='isLoadOK&&tableKey==1'
@click="onTableBtnAgree" color="#3d4b70">签到</u-button>
<u-button type="primary" v-if='isLoadOK&&tableKey==1' @click="onTableBtnAgree" color="#3d4b70">签到</u-button>
</view>
</view>
</template>
@ -89,48 +94,75 @@
import {
initFilter,
extendRule,
extendInclude
extendInclude,
transformData
} from '../../../../utils/common'
import {
getRequest,
} from '../../../../services/apply/FOServices/FOServices'
import {
GetEnumAnyOrder
} from '../../../../services/common';
import '../../../../utils/showMsg.js'
import config from '../../../../config/common'
export default {
data() {
return {
ID: "",
listPropUpload: [],
listPropValUpload: [],
model: {},
TaskID: "",
tableKey: '0',
isLoadOK: false,
paddingBottom: '170',
orgId: uni.getStorageSync('orgId'),
enumsData: {}, //
enumsText: {} //
}
},
onLoad(option) {
this.ID = option.ID;
this.TaskID = option.taskID;
this.tableKey = option.tableKey ? option.tableKey : '0'
this.loadData()
this.fetchEnums(['SEThreeLevelSafeTrainType', 'TrainType', 'SEExaminationResultsEnum']);
},
methods: {
fetchEnums(enumNames) {
var dataParm = {
'name': enumNames.join('|')
}
GetEnumAnyOrder(dataParm).then(res => {
let newd = transformData(res, enumNames)
this.enumsData = newd[0];
//
this.enumsText = newd[1]
this.loadData();
})
},
loadData() {
const json = initFilter(this.orgId, "", "CODE", 1)
extendRule(json, 'ID', 1, this.ID);
extendInclude(json, 'Nav_User');
extendInclude(json, 'Nav_Department');
extendInclude(json, 'Nav_Post');
extendInclude(json, 'Nav_NewUser.Nav_Department');
extendInclude(json, 'Nav_NewUser.Nav_User');
extendInclude(json, 'Nav_NewUser.Nav_Content');
extendInclude(json, 'Nav_NewUser.Nav_Files.Nav_ImgFile');
extendInclude(json, 'Nav_NewUser.Nav_Teachers.Nav_User');
extendInclude(json, 'Nav_User');
extendInclude(json, 'Nav_Department');
extendInclude(json, 'Nav_Post');
extendInclude(json, 'Nav_Files.Nav_ImgFile');
getRequest(json, "/SE/NewUserDetail/Get").then(res => {
let currUserId = uni.getStorageSync('appInfo')?.User?.ID;
res.Nav_NewUser.TRAIN_MODEL = this.returnModel(res.Nav_NewUser.TRAIN_MODEL);
res.EXAMINATION_RESULTS = res.EXAMINATION_RESULTS == 0 ? "不合格" : "合格";
this.model = res
this.model.IN_TIME = this.model.IN_TIME.substring(0, 10);
if (this.model.Nav_NewUser) {
this.model.Nav_NewUser.TRAIN_STATUS_NAME = res.Nav_NewUser.TRAIN_STATUS !== undefined ? this.enumsData['SEThreeLevelSafeTrainType'].find(item => item.code === res.Nav_NewUser.TRAIN_STATUS)
.name : '';
this.model.Nav_NewUser.TRAINTYPE_NAME = res.Nav_NewUser.TRAINTYPE !== undefined ? this.enumsData['TrainType'].find(item => item.code === res.Nav_NewUser.TRAINTYPE).name : '';
}
this.model.EXAMINATION_RESULTS_NAME = res.EXAMINATION_RESULTS !== undefined ? this.enumsData['SEExaminationResultsEnum'].find(item => item.code === res.EXAMINATION_RESULTS).name : '';
this.isLoadOK = true;
})
},
@ -171,10 +203,12 @@
</script>
<style>
/* @import url("@/style/css/editTemplate.css"); */
.todo-page {
@import url("@/style/css/newTemplate.css");
.todo-page {
/* padding: 16px 16px 70px; */
}
.background {
position: fixed;
top: 0;
@ -184,7 +218,7 @@
background: #edf1fd;
z-index: -1;
}
.card {
margin: 20px 16px 140px 16px;
/* border: 1px solid #EBEEF5; */
@ -193,30 +227,33 @@
background-color: #ffffff;
border-radius: 10px;
}
.upload-title {
font-size: 14px;
color: #8e8b9c;
line-height: 22px;
padding: 8px 0px;
}
.demo-ruleForm>>>.u-form-item__body__left__content__label {
font-size: 14px;
color: #8e8b9c;
/* justify-content: flex-start; */
}
.demo-ruleForm>>>.u-form-item__body__left__content__ {
left: -11px;
top: 0px
}
.demo-ruleForm>>>.u-textarea__field {
font-size: 14px;
}
.demo-ruleForm>>>.u-cell__title-text {
font-size: 14px;
}
.btn-wrap {
position: fixed;
bottom: 0;
@ -238,6 +275,7 @@
.buttons .first-btn {
margin-right: 20px;
}
.bottom-button {
position: fixed;
bottom: 0;