296 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			296 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| 
								 | 
							
								<template>
							 | 
						||
| 
								 | 
							
									<view class='base-info'>
							 | 
						||
| 
								 | 
							
										<u--form
							 | 
						||
| 
								 | 
							
											labelPosition="left"
							 | 
						||
| 
								 | 
							
											labelWidth="auto"
							 | 
						||
| 
								 | 
							
											labelAlign="center"
							 | 
						||
| 
								 | 
							
											:model="dataModel"
							 | 
						||
| 
								 | 
							
											:rules="rules"
							 | 
						||
| 
								 | 
							
											ref="form"
							 | 
						||
| 
								 | 
							
											errorType="border-bottom"
							 | 
						||
| 
								 | 
							
											class='info-form'>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="姓名:"
							 | 
						||
| 
								 | 
							
												prop="name"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.UserName}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="编码:"
							 | 
						||
| 
								 | 
							
												prop="code"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.UserCode}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="手机:"
							 | 
						||
| 
								 | 
							
												prop="phone"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
											<!-- <u--input
							 | 
						||
| 
								 | 
							
												v-model="userInfo.PHONE" border="none"
							 | 
						||
| 
								 | 
							
												inputAlign="left"></u--input> -->
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.PHONE}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="身份证:"
							 | 
						||
| 
								 | 
							
												prop="phone"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
											<!-- <u--input
							 | 
						||
| 
								 | 
							
												v-model="userInfo.ID_CARD" border="none"
							 | 
						||
| 
								 | 
							
												inputAlign="left"></u--input> -->
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.ID_CARD}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="部门:"
							 | 
						||
| 
								 | 
							
												prop="department"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.DepartmentName}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="班组:"
							 | 
						||
| 
								 | 
							
												prop="post"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.TeamName}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<u-form-item
							 | 
						||
| 
								 | 
							
												label="岗位:"
							 | 
						||
| 
								 | 
							
												prop="job"
							 | 
						||
| 
								 | 
							
												border-bottom
							 | 
						||
| 
								 | 
							
											>
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.PostName}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item>
							 | 
						||
| 
								 | 
							
											<!-- <u-form-item label="角色" prop="role">
							 | 
						||
| 
								 | 
							
												<text>{{userInfo.RoleName}}</text>
							 | 
						||
| 
								 | 
							
											</u-form-item> -->
							 | 
						||
| 
								 | 
							
											<view class='top-label'>签名</view>
							 | 
						||
| 
								 | 
							
											<view class="signature-img">
							 | 
						||
| 
								 | 
							
												<image @click="reUpload" style="width: 100%" mode="widthFix" :src="userInfo.SignaturePhoto"></image>
							 | 
						||
| 
								 | 
							
											</view>
							 | 
						||
| 
								 | 
							
											<button @click="formSubmit" type="primary" class='save-btn'>确定</button>
							 | 
						||
| 
								 | 
							
										</u--form>
							 | 
						||
| 
								 | 
							
										<u-popup
							 | 
						||
| 
								 | 
							
											:show="show"
							 | 
						||
| 
								 | 
							
											mode="center"
							 | 
						||
| 
								 | 
							
											:customStyle="{width: '100%', height: '100%'}"
							 | 
						||
| 
								 | 
							
											:closeable="true"
							 | 
						||
| 
								 | 
							
											@open="() => {}"
							 | 
						||
| 
								 | 
							
											@close="() => {this.show = false}">
							 | 
						||
| 
								 | 
							
											<view style="width: 100% ;height: 100%; border: 1px solid #ddd;">
							 | 
						||
| 
								 | 
							
												<l-signature
							 | 
						||
| 
								 | 
							
													disableScroll
							 | 
						||
| 
								 | 
							
													backgroundColor="#fff"
							 | 
						||
| 
								 | 
							
													ref="signatureRef"
							 | 
						||
| 
								 | 
							
													:penColor="penColor"
							 | 
						||
| 
								 | 
							
													:penSize="penSize"
							 | 
						||
| 
								 | 
							
													:openSmooth="openSmooth"
							 | 
						||
| 
								 | 
							
													landscape
							 | 
						||
| 
								 | 
							
												></l-signature>
							 | 
						||
| 
								 | 
							
											</view>
							 | 
						||
| 
								 | 
							
											<view class="action">
							 | 
						||
| 
								 | 
							
												<view class="btn" @click="handleSignature('clear')">清空</view>
							 | 
						||
| 
								 | 
							
												<view class="btn" @click="handleSignature('undo')">撤消</view>
							 | 
						||
| 
								 | 
							
												<view class="btn" @click="handleSignature('save')">保存</view>
							 | 
						||
| 
								 | 
							
												<view class="btn" v-if="!userInfo.SignaturePhoto" @click="handleSignature('openSmooth')">压感{{openSmooth?'开':'关'}}</view>
							 | 
						||
| 
								 | 
							
												<view class="btn" v-else @click="handleCancel">取消</view>
							 | 
						||
| 
								 | 
							
											</view>
							 | 
						||
| 
								 | 
							
										</u-popup>
							 | 
						||
| 
								 | 
							
									</view>
							 | 
						||
| 
								 | 
							
								</template>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								  import { getUserLists,saveUser } from '../../../services/safe'
							 | 
						||
| 
								 | 
							
									import {
							 | 
						||
| 
								 | 
							
										initFilter,
							 | 
						||
| 
								 | 
							
										extendRule,
							 | 
						||
| 
								 | 
							
										extendInclude
							 | 
						||
| 
								 | 
							
									} from '../../../utils/common'
							 | 
						||
| 
								 | 
							
									import config from '../../../config/common'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									export default {
							 | 
						||
| 
								 | 
							
								    data() {
							 | 
						||
| 
								 | 
							
								      return {
							 | 
						||
| 
								 | 
							
												show: false,
							 | 
						||
| 
								 | 
							
												sourceUrl: config.uni_app_web_source_url,
							 | 
						||
| 
								 | 
							
												userInfo: {},
							 | 
						||
| 
								 | 
							
												// title: '',
							 | 
						||
| 
								 | 
							
												penColor: '#333',
							 | 
						||
| 
								 | 
							
												penSize: 5,
							 | 
						||
| 
								 | 
							
												openSmooth: true,
							 | 
						||
| 
								 | 
							
												dataModel: {},
							 | 
						||
| 
								 | 
							
												rules: {},
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    onLoad() {
							 | 
						||
| 
								 | 
							
											const orgId = uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
											const appInfoData = uni.getStorageSync('appInfo')
							 | 
						||
| 
								 | 
							
											const userId = appInfoData?.User?.ID || ''
							 | 
						||
| 
								 | 
							
											let json = initFilter(orgId)
							 | 
						||
| 
								 | 
							
											extendRule(json, 'ID', 1, userId);
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_ApproveRole');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_ProdutionUnit');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_BelongRoles');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_Department');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_Person.Nav_Post');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_Person.Nav_TeamPersons.Nav_Team');
							 | 
						||
| 
								 | 
							
											extendInclude(json, 'Nav_UserSignFiles.Nav_ImgFile');
							 | 
						||
| 
								 | 
							
											getUserLists(json).then(res => {
							 | 
						||
| 
								 | 
							
												if (res.IsSuccessful) {
							 | 
						||
| 
								 | 
							
													const result = res.Data[0] || {}
							 | 
						||
| 
								 | 
							
													let roles=result.Nav_BelongRoles
							 | 
						||
| 
								 | 
							
													let roleNames= ''
							 | 
						||
| 
								 | 
							
													let roleCodes= ''
							 | 
						||
| 
								 | 
							
													for(let i = 0; i < roles.length; i++)
							 | 
						||
| 
								 | 
							
													{
							 | 
						||
| 
								 | 
							
														if (roles[i].Nav_BelongRole) {
							 | 
						||
| 
								 | 
							
															if(roleCodes.indexOf(roles[i].Nav_BelongRole.CODE) == -1)
							 | 
						||
| 
								 | 
							
															{
							 | 
						||
| 
								 | 
							
																roleCodes += (roleCodes.length > 0 ? "," : "") + roles[i].Nav_BelongRole.CODE;
							 | 
						||
| 
								 | 
							
																roleNames += (roleNames.length > 0 ? "," : "") + roles[i].Nav_BelongRole.NAME;
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}  
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													this.userInfo = {
							 | 
						||
| 
								 | 
							
														...result,
							 | 
						||
| 
								 | 
							
														UserName: appInfoData?.User?.NAME,
							 | 
						||
| 
								 | 
							
														UserCode: appInfoData?.User?.CODE,
							 | 
						||
| 
								 | 
							
														DepartmentName: result.Nav_Department?.NAME,
							 | 
						||
| 
								 | 
							
														TeamName: result.Nav_Person?.Nav_TeamPersons[0]?.Nav_Team?.NAME,
							 | 
						||
| 
								 | 
							
														PostName: result.Nav_Person?.Nav_Post?.NAME,
							 | 
						||
| 
								 | 
							
														SignaturePhoto: result.Nav_UserSignFiles && this.sourceUrl + result.Nav_UserSignFiles[0]?.Nav_ImgFile?.FILE_PATH,
							 | 
						||
| 
								 | 
							
														RoleName: roleNames,
							 | 
						||
| 
								 | 
							
														// // #ifdef H5
							 | 
						||
| 
								 | 
							
														// SignaturePhoto: result.Nav_UserSignFiles && result.Nav_UserSignFiles[0]?.Nav_ImgFile?.FILE_PATH,
							 | 
						||
| 
								 | 
							
														// // #endif
							 | 
						||
| 
								 | 
							
														// // #ifndef H5
							 | 
						||
| 
								 | 
							
														// SignaturePhoto: result.Nav_UserSignFiles && result.Nav_UserSignFiles[0]?.Nav_ImgFile?.FILE_PATH,
							 | 
						||
| 
								 | 
							
														// // #endif
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											})
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    methods: {
							 | 
						||
| 
								 | 
							
											formSubmit() {
							 | 
						||
| 
								 | 
							
												// saveUser(this.userInfo).then(res => {
							 | 
						||
| 
								 | 
							
												// 	uni.$showMsgFunc('操作成功!', () => {
							 | 
						||
| 
								 | 
							
												// 		uni.navigateBack()
							 | 
						||
| 
								 | 
							
												// 	}, 'success', 1000)
							 | 
						||
| 
								 | 
							
												// })
							 | 
						||
| 
								 | 
							
												uni.navigateBack()
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											reUpload() {
							 | 
						||
| 
								 | 
							
												this.show = true
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											handleCancel() {
							 | 
						||
| 
								 | 
							
												this.show = false
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											handleSignature(type) {
							 | 
						||
| 
								 | 
							
												if (type === 'openSmooth') {
							 | 
						||
| 
								 | 
							
													this.openSmooth = !this.openSmooth
							 | 
						||
| 
								 | 
							
													return
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												if (type === 'save') {
							 | 
						||
| 
								 | 
							
													this.$refs.signatureRef.canvasToTempFilePath({
							 | 
						||
| 
								 | 
							
														success: async (res) => {
							 | 
						||
| 
								 | 
							
															// 是否为空画板 无签名
							 | 
						||
| 
								 | 
							
															if (!res.isEmpty) {
							 | 
						||
| 
								 | 
							
																// 生成图片的临时路径
							 | 
						||
| 
								 | 
							
																// H5 生成的是base64
							 | 
						||
| 
								 | 
							
																uni.showLoading({title: '正在上传图片...'})
							 | 
						||
| 
								 | 
							
																const result = await this.uploadFilePromise(res.tempFilePath)
							 | 
						||
| 
								 | 
							
																// #ifdef H5
							 | 
						||
| 
								 | 
							
																this.userInfo.SignaturePhoto = res.tempFilePath
							 | 
						||
| 
								 | 
							
																// #endif
							 | 
						||
| 
								 | 
							
																// #ifndef H5
							 | 
						||
| 
								 | 
							
																this.userInfo.SignaturePhoto = this.sourceUrl + result.imgFilePath
							 | 
						||
| 
								 | 
							
																// #endif
							 | 
						||
| 
								 | 
							
																this.show = false
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													})
							 | 
						||
| 
								 | 
							
													return
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												if (this.$refs.signatureRef) {
							 | 
						||
| 
								 | 
							
													this.$refs.signatureRef[type]()
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
											uploadFilePromise(url) {
							 | 
						||
| 
								 | 
							
												const appInfoData = uni.getStorageSync('appInfo')
							 | 
						||
| 
								 | 
							
												const userId = appInfoData?.User?.ID || ''
							 | 
						||
| 
								 | 
							
												const orgId = uni.getStorageSync('orgId')
							 | 
						||
| 
								 | 
							
												const tenant = uni.getStorageSync('Tenant') || ''
							 | 
						||
| 
								 | 
							
												const remoteUrl = config.serviceHost('/PF/File/UploadFileEditSign')
							 | 
						||
| 
								 | 
							
												return new Promise((resolve, reject) => {
							 | 
						||
| 
								 | 
							
													uni.uploadFile({
							 | 
						||
| 
								 | 
							
														url: remoteUrl,
							 | 
						||
| 
								 | 
							
														filePath: url,
							 | 
						||
| 
								 | 
							
														fileList: url,
							 | 
						||
| 
								 | 
							
														name: 'file',
							 | 
						||
| 
								 | 
							
														formData: {
							 | 
						||
| 
								 | 
							
															OrgId: orgId,
							 | 
						||
| 
								 | 
							
															userID: userId
							 | 
						||
| 
								 | 
							
														},
							 | 
						||
| 
								 | 
							
														header: {
							 | 
						||
| 
								 | 
							
															Tenant: tenant,
							 | 
						||
| 
								 | 
							
															userid: userId
							 | 
						||
| 
								 | 
							
														},
							 | 
						||
| 
								 | 
							
														success: (res) => {
							 | 
						||
| 
								 | 
							
															if (res.statusCode === 200) {
							 | 
						||
| 
								 | 
							
																uni.hideLoading()
							 | 
						||
| 
								 | 
							
																const uploadResult = JSON.parse(res.data)
							 | 
						||
| 
								 | 
							
																if (uploadResult.IsSuccessful) {
							 | 
						||
| 
								 | 
							
																	resolve(uploadResult.Data)
							 | 
						||
| 
								 | 
							
																} else {
							 | 
						||
| 
								 | 
							
																	reject(uploadResult.ErrorMessage)
							 | 
						||
| 
								 | 
							
																}
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													});
							 | 
						||
| 
								 | 
							
												})
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<style scoped>
							 | 
						||
| 
								 | 
							
									.base-info {
							 | 
						||
| 
								 | 
							
										padding: 16px;
							 | 
						||
| 
								 | 
							
										width: 100%;
							 | 
						||
| 
								 | 
							
										height: 100vh;
							 | 
						||
| 
								 | 
							
										position: relative;
							 | 
						||
| 
								 | 
							
										box-sizing: border-box;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.save-btn {
							 | 
						||
| 
								 | 
							
										margin-top: 20px;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.top-label {
							 | 
						||
| 
								 | 
							
										font-size: 14px;
							 | 
						||
| 
								 | 
							
										padding: 10px 0;
							 | 
						||
| 
								 | 
							
										line-height: 21px;
							 | 
						||
| 
								 | 
							
										text-align: center;
							 | 
						||
| 
								 | 
							
										color: #303133;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.signature-img {
							 | 
						||
| 
								 | 
							
										border: 1px solid #e5e5e5;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.action {
							 | 
						||
| 
								 | 
							
										display: flex;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.action .btn {
							 | 
						||
| 
								 | 
							
										width: 25%;
							 | 
						||
| 
								 | 
							
										text-align: center;
							 | 
						||
| 
								 | 
							
										padding: 10px 0;
							 | 
						||
| 
								 | 
							
										font-size: 14px;
							 | 
						||
| 
								 | 
							
										color: #333;
							 | 
						||
| 
								 | 
							
										border-right: 1px solid #e5e5e5;
							 | 
						||
| 
								 | 
							
										border-bottom: 1px solid #e5e5e5;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									.action .btn:first-child {
							 | 
						||
| 
								 | 
							
										border-left: 1px solid #e5e5e5;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								</style>
							 |