237 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
	<view class="todo-page">
 | 
						|
		<view class="card">
 | 
						|
			<uni-card margin="0" :is-shadow="true">
 | 
						|
				<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" :rules="rules"
 | 
						|
					ref="wForm" errorType="border-bottom">
 | 
						|
					<u-form-item label="征集目的:" prop="NAME" borderBottom>
 | 
						|
						<u--input v-model="model.NAME" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="征集开始时间:" prop="START_TIME" borderBottom>
 | 
						|
						<u--input v-model="model.START_TIME" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="征集结束时间:" prop="END_TIME" borderBottom>
 | 
						|
						<u--input v-model="model.END_TIME" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="征集部门:" prop="Nav_Department" borderBottom>
 | 
						|
						<u--input v-if="model.Nav_Department" v-model="model.Nav_Department.NAME" disabled
 | 
						|
							disabledColor="#fff" border="none" inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="征集份数:" borderBottom>
 | 
						|
						<u--input v-model="count" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="回收份数:" borderBottom>
 | 
						|
						<u--input v-model="feedback" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="回收比例:" borderBottom>
 | 
						|
						<u--input v-model="rate" disabled disabledColor="#fff" border="none"
 | 
						|
							inputAlign="right"></u--input>
 | 
						|
					</u-form-item>
 | 
						|
					<u-form-item label="参与人员:" prop="Nav_User" borderBottom>
 | 
						|
					</u-form-item>
 | 
						|
					<rich-text v-html="strUserName"></rich-text>
 | 
						|
				</u--form>
 | 
						|
			</uni-card>
 | 
						|
		</view>
 | 
						|
		<u-sticky offset-top="20">
 | 
						|
			<view class="sub-form">
 | 
						|
				<view class="sub-form-wrap">
 | 
						|
					<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom"
 | 
						|
						ref="sForm">
 | 
						|
						<u-collapse :border="false" accordion>
 | 
						|
							<uni-card style="margin-bottom: 16px;" margin="0" spacing="0" :is-shadow="false"
 | 
						|
								v-if="model.Nav_Users" v-for="(item, index) in opinions">
 | 
						|
								<u-collapse-item
 | 
						|
									:title="(index + 1) + '. ' +getUserName(item)+': '+ item.OPINION_CONTENT">
 | 
						|
									<u-form-item label="受理意见:" prop="DESC" borderBottom>
 | 
						|
										<u-subsection activeColor="#0eacf5" mode="subsection" :list="list"
 | 
						|
											:current="item.RESULT" @change="sectionChange($event,item)"></u-subsection>
 | 
						|
									</u-form-item>
 | 
						|
									<u-form-item label="不认可解释:" prop="DESC" borderBottom>
 | 
						|
									</u-form-item>
 | 
						|
									<u-textarea v-model="item.REFUSE_DESCRIPTION" placeholder="请输入不认可解释"
 | 
						|
										:disabled="isAudit"></u-textarea>
 | 
						|
								</u-collapse-item>
 | 
						|
							</uni-card>
 | 
						|
						</u-collapse>
 | 
						|
					</u--form>
 | 
						|
				</view>
 | 
						|
			</view>
 | 
						|
		</u-sticky>
 | 
						|
		<view class="bottom-button">
 | 
						|
			<button type="primary" @click="submit" v-if="!isAudit">提交</button>
 | 
						|
			<button type="primary" @click="confirm" v-if="isAudit">确认</button>
 | 
						|
		</view>
 | 
						|
	</view>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
	import {
 | 
						|
		mapState,
 | 
						|
		mapMutations
 | 
						|
	} from 'vuex'
 | 
						|
	import {
 | 
						|
		extendFilterGroup,
 | 
						|
		extendGroupRule,
 | 
						|
		extendInclude,
 | 
						|
		extendOrder,
 | 
						|
		extendRule,
 | 
						|
		guid,
 | 
						|
		initFilter,
 | 
						|
		initFilterGroup
 | 
						|
	} from '../../../../utils/common'
 | 
						|
	import {
 | 
						|
		getRequest,
 | 
						|
	} from '../../../../services/apply/FOServices/FOServices';
 | 
						|
	import config from '../../../../config/common'
 | 
						|
	export default {
 | 
						|
		data() {
 | 
						|
			return {
 | 
						|
				model: {
 | 
						|
					ORG_ID: "",
 | 
						|
					Nav_Users: []
 | 
						|
				},
 | 
						|
				rules: {
 | 
						|
					'JOB_CONTENT': {
 | 
						|
						type: 'string',
 | 
						|
						required: true,
 | 
						|
						trigger: ['blur', 'change']
 | 
						|
					}
 | 
						|
				},
 | 
						|
				tableKey: '0',
 | 
						|
				TaskID: '',
 | 
						|
				ORG_ID: uni.getStorageSync('orgId'),
 | 
						|
				list: ['不认可', '认可'],
 | 
						|
				opinions: [],
 | 
						|
				map: [],
 | 
						|
				count: 0,
 | 
						|
				feedback: 0,
 | 
						|
				rate: "",
 | 
						|
				strUserName: "",
 | 
						|
				isAudit: false,
 | 
						|
			}
 | 
						|
		},
 | 
						|
		onLoad(option) {
 | 
						|
			this.TaskID = option.taskID ? option.taskID : '';
 | 
						|
			this.model.ID = option.ID ? option.ID : '';
 | 
						|
			this.loadData();
 | 
						|
		},
 | 
						|
		methods: {
 | 
						|
			sectionChange(index, item) {
 | 
						|
				if (this.isAudit) {
 | 
						|
					return
 | 
						|
				}
 | 
						|
				item.RESULT = index;
 | 
						|
			},
 | 
						|
			loadData() {
 | 
						|
				const json = initFilter(this.ORG_ID, "", "")
 | 
						|
				extendInclude(json, "Nav_User")
 | 
						|
				extendInclude(json, "Nav_Department")
 | 
						|
				extendInclude(json, "Nav_Users.Nav_User")
 | 
						|
				extendInclude(json, "Nav_Users.Nav_Opinions")
 | 
						|
				// TODO: id 未获取
 | 
						|
				extendRule(json, 'ID', 1, this.model.ID)
 | 
						|
				getRequest(json, "/OG/EmployeeOpinionCollection/Get").then(res => {
 | 
						|
					let map = {};
 | 
						|
					let opinions = [];
 | 
						|
					let opinion_user_map = {};
 | 
						|
					res.Nav_Users.forEach((it, idx) => {
 | 
						|
						map[it.ID] = idx;
 | 
						|
					})
 | 
						|
					res.Nav_Users.filter(t => t.STATUS !== 0).forEach((it, idx) => {
 | 
						|
						it.Nav_Opinions.forEach((op, idx) => {
 | 
						|
							opinions.push(op);
 | 
						|
							opinion_user_map[op.ID] = op;
 | 
						|
						})
 | 
						|
					})
 | 
						|
					let strUserName = '';
 | 
						|
					if (res.Nav_Users && res.Nav_Users.length > 0) {
 | 
						|
						for (let i = 0; i < res.Nav_Users.length; i++) {
 | 
						|
							if (res.Nav_Users[i].STATUS == 0) {
 | 
						|
								strUserName += (strUserName.length > 0 ? " " : "") +
 | 
						|
									"<view style='color:#E35D58;background-color:rgba(227,93,88,0.2);padding:5px;line-height:30px;white-space:nowrap;'>" +
 | 
						|
									res.Nav_Users[i].Nav_User.NAME + "</view>";
 | 
						|
							} else {
 | 
						|
								strUserName += (strUserName.length > 0 ? " " : "") +
 | 
						|
									"<text style='padding:5px;line-height:30px;white-space:nowrap;'>" +
 | 
						|
									res.Nav_Users[i].Nav_User.NAME + "</text>";
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
					this.strUserName = strUserName;
 | 
						|
					this.opinions = opinions;
 | 
						|
					this.map = map;
 | 
						|
					this.model = res;
 | 
						|
					this.count = res.Nav_Users.length;
 | 
						|
					this.feedback = res.Nav_Users.filter(t => t.STATUS !== 0).length;
 | 
						|
					this.rate = this.count !== 0 ? `${Math.round(this.feedback * 100 / this.count)}%` : '';
 | 
						|
					if (res.STATUS == 3 || res.STATUS == 4) {
 | 
						|
						this.isAudit = true;
 | 
						|
					}
 | 
						|
				})
 | 
						|
			},
 | 
						|
			submit() {
 | 
						|
				const ele = this.$refs
 | 
						|
				ele['wForm'].validate().then(res => {
 | 
						|
					this.model.PUBLISH = "SaveAndNotify";
 | 
						|
					if (this.TaskID != "") {
 | 
						|
						this.model.TaskID = this.TaskID;
 | 
						|
					}
 | 
						|
					if (this.model.ORG_ID == "") {
 | 
						|
						this.model.ORG_ID = this.ORG_ID;
 | 
						|
					}
 | 
						|
					getRequest(this.model, "/OG/OGEmployeeOpinionCollection/FullUpdate").then(res => {
 | 
						|
						if (res) {
 | 
						|
							uni.$showMsgFunc('操作成功!', () => {
 | 
						|
								uni.navigateBack()
 | 
						|
							}, 'success', 1000)
 | 
						|
						}
 | 
						|
					})
 | 
						|
				}).catch(err => {
 | 
						|
					uni.$showErrorInfo('请检查必填项,必填项不能为空')
 | 
						|
				})
 | 
						|
			},
 | 
						|
			confirm() {
 | 
						|
				const ele = this.$refs
 | 
						|
				ele['wForm'].validate().then(res => {
 | 
						|
					this.model.PUBLISH = "SaveAndNotify";
 | 
						|
					if (this.TaskID != "") {
 | 
						|
						this.model.Parameter1 = this.TaskID;
 | 
						|
					}
 | 
						|
					this.model.Keyword = this.model.ID
 | 
						|
					if (this.model.ORG_ID == "") {
 | 
						|
						this.model.ORG_ID = this.ORG_ID;
 | 
						|
					}
 | 
						|
					getRequest(this.model, "/OG/OGEmployeeOpinionCollection/Agree").then(res => {
 | 
						|
						if (res) {
 | 
						|
							uni.$showMsgFunc('操作成功!', () => {
 | 
						|
								uni.navigateBack()
 | 
						|
							}, 'success', 1000)
 | 
						|
						}
 | 
						|
					})
 | 
						|
				}).catch(err => {
 | 
						|
					uni.$showErrorInfo('请检查必填项,必填项不能为空')
 | 
						|
				})
 | 
						|
			},
 | 
						|
			getUserName(it) {
 | 
						|
				let id = it.COLLECTION_USER_ID;
 | 
						|
				let idx = this.map[id];
 | 
						|
				let t = this.model.Nav_Users[idx];
 | 
						|
				return t && t.Nav_User && t.Nav_User.NAME;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
</script>
 | 
						|
 | 
						|
<style scoped>
 | 
						|
	@import url("../../../../style/css/editTemplate.css");
 | 
						|
 | 
						|
	.todo-page {
 | 
						|
		padding: 16px 16px 70px;
 | 
						|
	}
 | 
						|
</style> |