zhengkaixin há 2 anos atrás
pai
commit
47a8ac2268

+ 1 - 1
.env.development

@@ -8,7 +8,7 @@ VUE_APP_LOCAL_PREFIX_MAIN=ga_file_xpgj_
 
 #VUE_APP_BACKEND_URL=https://ykt-test.xiaoxinda.com/jp-housekeeper-server/
 #VUE_APP_BACKEND_URL=http://localhost:8086/jp-housekeeper-server/
-VUE_APP_BACKEND_URL=https://xpgjapi.xiaoxinda.com/
+VUE_APP_BACKEND_URL=http://47.98.231.198:8081/jp-housekeeper-server
 
 VUE_APP_BACKEND_URL51=https://51team.xiaoxinda.com/charging-parking/
 VUE_APP_MIRROR_BACKEND_URL=https://mirror.xiaoxinda.com/xpgjapi/

+ 1 - 1
.env.production

@@ -6,7 +6,7 @@ VUE_APP_LOCAL_STORAGE_PREFIX=prod
 #项目缓存抬头
 VUE_APP_LOCAL_PREFIX_MAIN=ga_file_xpgj_
 
-VUE_APP_BACKEND_URL=https://xpgjapi.xiaoxinda.com/
+VUE_APP_BACKEND_URL=http://47.98.231.198:8081/jp-housekeeper-server
 VUE_APP_BACKEND_URL51=https://51team.xiaoxinda.com/charging-parking/
 VUE_APP_MIRROR_BACKEND_URL=https://mirror.xiaoxinda.com/xpgjapi/
 

+ 1 - 1
.env.test

@@ -6,7 +6,7 @@ VUE_APP_LOCAL_STORAGE_PREFIX=test
 #项目缓存抬头
 VUE_APP_LOCAL_PREFIX_MAIN=ga_file_xpgj_
 
-VUE_APP_BACKEND_URL=https://ykt-test.xiaoxinda.com/jp-housekeeper-server/
+VUE_APP_BACKEND_URL=http://47.98.231.198:8081/jp-housekeeper-server
 VUE_APP_BACKEND_URL51=https://51team.xiaoxinda.com/charging-parking/
 
 VUE_APP_MIRROR_BACKEND_URL=https://ykt-test.xiaoxinda.com/jp-housekeeper-server/

+ 2 - 0
.gitignore

@@ -1,6 +1,7 @@
 .DS_Store
 node_modules
 /dist
+/dist_prod
 /config/project.js
 *.lock
 
@@ -23,3 +24,4 @@ pnpm-debug.log*
 *.sln
 *.sw?
 /node_modules/
+/dist_prod/

+ 18 - 0
src/apis/Oa/doc.js

@@ -43,6 +43,14 @@ export function checkPageList(data) {
 }
 
 
+export function fileCatalogueList() {
+	return request({
+		url: '/mobile/docFileSharingApi/fileCatalogueList' ,
+	//	data: Qs.stringify(data),
+		method: 'post',
+	})
+}
+
 export function fileList(data) {
 	return request({
 		url: '/mobile/docFileSharingApi/fileList' ,
@@ -59,6 +67,16 @@ export function checkSubmit(data) {
 	})
 }
 
+export function loadLastStepPerson(data) {
+	return request({
+		url: '/mobile/doc/loadLastStepPerson/'+data ,
+		//data: Qs.stringify(data),
+		method: 'get',
+	})
+}
+
+
+
 export function edit(data) {
 	return request({
 		url: '/mobile/doc/edit/'+data ,

+ 2 - 2
src/commin.js

@@ -46,8 +46,8 @@
 		},
 		data() {
 			return {
-				//testOpenid:"oHjCawjpLV6Dbdit8MVkShB6G58w",
-				testOpenid:"oHjCawigqi8SEAwutwkQ-VEgdp3k",//zkx
+				testOpenid:"oHjCawmHqG44pqUW54iBlenaHYB8",//ys
+				//testOpenid:"oHjCawigqi8SEAwutwkQ-VEgdp3k",//zkx
 				//testOpenid:"oHjCawsxTJkxixR74OVp7aCKahj8",//ylm
 				//testOpenid:"oHjCawgwCGen5k1-hAsimdEX5lZo",//sz
 				

+ 9 - 0
src/router/oa.js

@@ -64,6 +64,15 @@ const routes = [
 							title: '公文审批列表',
 						}
 					},
+					//抄送文件
+					{
+						path: 'ViewList',
+						name: 'OaDocumentViewList',
+						component: () => import('../views-oa/Document/ViewList.vue'),
+						meta: {
+							title: '公文抄送列表',
+						}
+					},
 				],
 			}
 			

+ 1 - 1
src/utils/request.js

@@ -58,7 +58,7 @@ var BACKEND_URL = baseApiList[apiTypeIndex];
 if (process.env.VUE_APP_NODE_NAME == 'devlopment') {			
 	//BACKEND_URL = 'http://192.168.77.162:8086/jp-housekeeper-server/'
 	//baseApiList = ['http://127.0.0.1:8086/jp-housekeeper-server/']
-	BACKEND_URL="http://192.168.33.220:8086/jp-housekeeper-server/";
+	//BACKEND_URL="http://192.168.33.220:8086/jp-housekeeper-server/";
 }
 
 // 创建axios实例

+ 19 - 4
src/views-home/User/Login.vue

@@ -36,7 +36,7 @@
 			</div>
 			<div class="vongi-btn vongi-login-btn">
 				<button class="mui-btn mui-btn-primary" @click="nextStep">
-					注册/登录
+					 登录
 				</button>
 			</div>
 		</div>
@@ -167,13 +167,16 @@
 			},
 			//下一步
 			nextStep() {
+				const prefix = process.env.VUE_APP_LOCAL_PREFIX_MAIN;
+				console.log(prefix)
 				if (!this.verifyCode) {
 					mui.toast('请获取并填写验证码');
 				} else {
 					this.isLoading = true;
 					var openid=this.openId;
 					if(!openid){
-						openid=window.localStorage.getItem("xpgj_xsy_wx_openid");
+						
+						openid=window.localStorage.getItem(prefix+"wx_openid");
 						
 						if(openid){
 							openid=JSON.parse(openid);
@@ -192,8 +195,19 @@
 						if (response.token) {
 							this.set_token(response.token);
 							if (response.personInfo.faceImageUrl) {
+								//上传头像
+								// this.$router.push({
+								// 	name: 'master',
+								// 	query: {
+								// 		personId: response.personInfo.id,
+								// 		project: this.project
+								// 	}
+								// })
+								this.$router.push({
+														name: 'Master'
+								})
 								//跳转到项目主页上去
-								window.location.href = '../' + this.project + '/#/master';
+								//window.location.href = '../' + this.project + '/#/master';
 							} else {
 								//上传头像					
 								this.$router.push({
@@ -207,8 +221,9 @@
 						} else {
 							
 							//注册
-							this.confirmRegister();	
+							//this.confirmRegister();	
 							
+							mui.alert('当前用户不存在,请联系管理员注册')
 						 
 						}
 

+ 85 - 5
src/views-oa/Document/Browse.vue

@@ -23,9 +23,8 @@
 				</div>
 			</div>
 
-			<NullList :remark="'暂无审批记录'" v-if="!recordList.length"></NullList>
 
-			<div v-if="recordList.length" id="slider" class="mui-slider mui-fullscreen vongi-over">
+			<div  id="slider" class="mui-slider mui-fullscreen vongi-over">
 
 				<div class="mui-slider-group">
 
@@ -33,6 +32,46 @@
 						<div class="mui-scroll-wrapper vongi-over-hei"  style="margin-top: 10px;" >
 							<div class="mui-scroll">
 								<form class="mui-input-group ">
+									
+									<div v-if="listForm.type!=''"  class="mui-input-row  mui-left"
+									 @click="backitem()"  >
+										
+										<div class="doclist  ">
+												
+											<img  src="@/assets/img/icon_xiewuchuchang.png">
+										
+											
+											<div class="mui-media-body2" style="overflow: hidden;margin-left: 10px;">
+												
+												<p class='mui-ellipsis' style="    color: #333;overflow: hidden;">返回</p>
+												
+												<!-- <p class='mui-ellipsis'  style="  font-size: 12px;" >{{item.createTime}}</p> -->
+											
+											</div>
+										</div>
+									</div>
+									
+									<div v-for="(item,index) in fileCatalogueListTemp" :key="'s0_'+item.id"
+									 
+									 style="margin-top: 0px;"
+									 class="mui-input-row  mui-left" 
+									 @click="openitem(item)"  >
+										
+										<div class="doclist  ">
+												
+											<img  src="@/assets/img/icon_xiewuchuchang.png">
+										
+											
+											<div class="mui-media-body2" style="overflow: hidden;margin-left: 10px;">
+												
+												<p class='mui-ellipsis' style="    color: #333;overflow: hidden;">{{item.name}}</p>
+												
+												<!-- <p class='mui-ellipsis'  style="  font-size: 12px;" >{{item.createTime}}</p> -->
+											
+											</div>
+										</div>
+									</div>
+									
 									<div v-for="(item,index) in recordList" :key="'s0_'+item.id" class="mui-input-row  mui-left"  @click="downitem(item)"  >
 										
 										<div class="doclist  ">
@@ -57,11 +96,10 @@
 						</div>
 					</div>
 
-					
-	
 					</div>
 				
 				</div>
+			<NullList :remark="'暂无文件记录'" v-if="!recordList.length&&!fileCatalogueListTemp.length"></NullList>
 
 			
 		</div>
@@ -123,7 +161,8 @@
 					pageSize: 20,
 					totalPage: 1,
 					orderSort:2,
-					orderType:1
+					orderType:1,
+					type:'',
 				},
 				recordList: [],
 				selectIdList: [],
@@ -133,6 +172,8 @@
 					content: '',
 					status: ''
 				},
+				fileCatalogueList:[],
+				fileCatalogueListTemp:[],
 				//审批内容弹窗显示
 				openFromVisible: false,
 				firstRecordsTotal: 0,
@@ -143,6 +184,26 @@
 
 		},
 		methods: {
+			backitem(){
+				this.listForm.pageIndex=1
+				this.recordList=[]
+				this.listForm.type="";
+				
+				this.fileCatalogueListTemp=[]
+				for(var i in this.fileCatalogueList){
+					this.fileCatalogueListTemp.push(this.fileCatalogueList[i])
+				}
+				
+				this.getList();
+			},
+			openitem(item){
+				this.listForm.pageIndex=1
+				this.recordList=[]
+				
+				this.fileCatalogueListTemp=[]
+				this.listForm.type=item.id;
+				this.getList();
+			},
 			downitem(item){
 				
 				window.location.href=item.fileUrl
@@ -172,8 +233,26 @@
 					
 				})
 			},
+			getfile() {
+				API.fileCatalogueList().then(response => {
+					
+					this.fileCatalogueList=response.fileCatalogueList;
+					
+					this.fileCatalogueListTemp=[]
+					for(var i in this.fileCatalogueList){
+						this.fileCatalogueListTemp.push(this.fileCatalogueList[i])
+					}
+				}).catch(error => {
+				
+					mui.toast(error);
+				})
+			},
+			
 			//获取列表
 			getList() {
+				if(!this.listForm.type){
+					return
+				}
 				this.isLoading = true;
 				API.fileList(this.listForm).then(response => {
 					
@@ -242,6 +321,7 @@
 			},
 		},
 		mounted() {
+			this.getfile();
 			this.getList();
 			//监控下拉加载事件
 			var _this = this;

+ 45 - 3
src/views-oa/Document/ExamineDetail.vue

@@ -12,7 +12,12 @@
 
 		<div v-show="!showPerson">
 			<div class="mui-content-padded">
-				<h5>审核记录
+				<h5>审核记录
+				<span v-show="edit&&examineDetail.examineStepDTOList.length==0" @click="getList()"  style="
+					float: right;
+					color: #3385FF;
+				" >使用上次审批人</span>
+				
 					<span v-show="view&&!edit"  @click="edit=true" style="
 							float: right;
 							color: #3385FF;
@@ -168,7 +173,11 @@
 			Person
 
 		},
-		props: {
+		props: {
+			docType:{
+				require: false,
+				default: false,
+			},
 			list: {
 				require: false,
 				default: false,
@@ -190,6 +199,39 @@
 			}
 		},
 		methods: {
+			getList(){
+				if(this.docType){
+					this.isLoading = true;
+					API.loadLastStepPerson(this.docType).then(response => {
+						this.isLoading = false;
+						this.list=response;
+						//this.list.examineStepDTOList=response.stepPersonList
+						var  list=this.list.examineStepDTOList;
+						
+						list.sort(function(a,b){
+							return a.examineStep.examineStep-b.examineStep.examineStep
+						})
+						for (var i in list) {
+							var obj = list[i];
+							obj.examineStep.examineStatus=0;
+							obj.opinion="";
+							obj.examineStep.examineStep = parseInt(i)+1;
+							for (var j in obj.stepPersonList) {
+								var obj2 = obj.stepPersonList[j];
+								obj2.sortNo = parseInt(j)+1;
+								obj2.status=0;
+							}
+						
+						}
+						this.init()
+					}).catch(error => {
+						this.isLoading = false;
+						mui.toast(error);
+					})
+				}else{
+					mui.toast("请选择文件类型");
+				}
+			},
 			save(){
 				this.isLoading = true;
 				this.list.examineStepDTOList=this.getData();
@@ -260,7 +302,7 @@
 						if (this.selectIndex == -1) {
 							this.examineDetail.examineStepDTOList.push(obj.selectObj)
 						} else {
-							this.examineDetail.examineStepDTOList.splice(this.selectIndex, 0, obj.selectObj)
+							this.examineDetail.examineStepDTOList.splice(this.selectIndex+1, 0, obj.selectObj)
 						}
 					} else {
 						this.examineDetail.examineStepDTOList[this.selectIndex] = obj.selectObj

+ 2 - 2
src/views-oa/Document/Form.vue

@@ -50,7 +50,7 @@
 			</div>
 		</div>
 		<div class="mui-content vongi-wordcard" style=" background-color: #ffffff;margin-top: 10px;    padding-top: 0px;">
-			<examineDetail :edit="true"  ref="examineDetail"   ></examineDetail>	
+			<examineDetail :edit="true" :docType="tjForm.docType"  ref="examineDetail"   ></examineDetail>	
 		</div>
 
 			
@@ -96,7 +96,7 @@
 			return {
 				
 				only: "test",
-				pageTitle: '请假',
+				pageTitle: '公文提报',
 			 
 				isLoading: false,
 				leaveTypeList: [],

+ 307 - 0
src/views-oa/Document/ViewList.vue

@@ -0,0 +1,307 @@
+<template>
+	<div>
+		<common @asynCallBack="asynCallBack"></common>
+		<top-header :pageTitle="pageTitle" :routeName="'Master'"></top-header>
+
+		<div class="mui-content ">
+		
+
+			<NullList :remark="'暂无抄送记录'" v-if="!recordList.length"></NullList>
+
+			<div v-if="recordList.length" id="slider" class="mui-slider  vongi-over">
+
+				<div class="mui-slider-group">
+
+					<div  class="mui-slider-item mui-control-content">
+						<div class="mui-scroll-wrapper vongi-over-hei">
+							<div class="mui-scroll">
+								<form class="mui-input-group ">
+									<div v-for="(item,index) in recordList" :key="'s0_'+item.id">
+										<div class="mui-content-padded" style="margin: 12px 12px !important;" >
+													
+											<ul class="mui-table-view fyy-view" @click="detail(item.id)">
+												<li class="mui-table-view-cell" >
+													<label>公文标题:</label>
+													<span>{{item.docTitle}}<span class="mui-pull-right " :class="statusColor[item.docStatus]">{{status[item.docStatus]}}</span></span>
+												</li>
+												<li class="mui-table-view-cell" >
+													<label>公文类型:</label>
+													<span>{{item.typeName}}</span>
+												</li>
+												<li class="mui-table-view-cell"  >
+													<label>提交时间:</label>
+													<span>{{item.createTime}}</span>
+												</li>
+											
+													
+											</ul>
+													
+										</div>
+									
+										<!-- <router-link :to="{name:'MasterAttendanceVerifyInfo',query:{id:item.id}}" class="mui-navigate-right">
+											<div class="mui-media-object mui-pull-left vongi-buka"><img :src="item.faceImageUrl"></div>
+											<div class="mui-media-body">
+												{{item.personName}}
+												<p class='mui-ellipsis'><span class="colorfe616c" v-text="item.typeN"></span>申请</p>
+												<p class='mui-ellipsis' v-if="item.type=='1' && item.address">打卡位置:{{item.address}}</p>
+												<p class='mui-ellipsis' v-if="item.type=='2' && item.content">申请理由:{{item.content}}</p>
+												<h5 class="vongi-bksp-time" v-text="item.createTime.substr(5)"></h5>
+											</div>
+										</router-link> -->
+										
+<!-- 										<input name="checkbox" v-model="selectIdList" :value="item.id" type="checkbox">
+ -->									</div>
+								</form>
+							</div>
+
+						</div>
+					</div>
+
+				
+
+				</div>
+			</div>
+
+			
+		</div>
+
+	
+		<loading :visible="isLoading"></loading>
+	</div>
+</template>
+
+<script>
+	import * as API from '@/apis/Oa/doc'
+	import Common from '@/components/Common.vue'
+	import Loading from '@/components/Loading.vue'
+	import TopHeader from '@/components/TopHeader.vue'
+	import isReachBottom from '@/utils/isReachBottom'
+	import NullList from '@/components/NullList.vue'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	export default {
+		name: 'MasterAttendanceVerifyList',
+		components: {
+			Common,
+			Loading,
+			TopHeader,
+			NullList
+		},
+		data() {
+			return {
+				pageTitle: '公文抄送',
+
+				isLoading: false,
+
+				listForm: {
+					pageIndex: 1,
+					pageSize: 20,
+					totalPage: 1,
+					type: 9,
+				},
+				recordList: [],
+				selectIdList: [],
+				allSelect: [],
+				status: ['待审核', '已通过', '未通过', '已撤销'],
+				statusColor: ['classFF8400', 'class389E0D', 'classFF6666','classA5A5A5'],
+				
+				subForm: {
+					ids: '',
+					content: '',
+					status: ''
+				},
+				//审批内容弹窗显示
+				openFromVisible: false,
+				firstRecordsTotal: 0,
+
+			}
+		},
+		created() {
+
+		},
+		methods: {
+			detail(id) {
+				this.$router.push({
+					name: 'OaDocumentVerifyInfo',
+					query: {
+						id: id
+					}
+				})
+			},
+			//获取列表
+			getList() {
+				this.isLoading = true;
+				API.checkPageList(this.listForm).then(response => {
+					if (response) {
+						if (this.listForm.pageIndex == 1) {
+							this.recordList = response.data;
+							this.listForm.pageIndex = response.pageNumber;
+							this.listForm.totalPage = response.totalPage;
+						} else {
+							this.recordList = [
+								...this.recordList,
+								...response.data
+							];
+						}
+					}
+				
+					if (this.listForm.type == 0) {
+						this.firstRecordsTotal = response.recordsTotal;
+					}
+
+					this.listForm.pageIndex++;
+					this.isLoading = false;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},
+			//下拉事件
+			handleScrool() {
+				if (isReachBottom()) {
+					console.log('到达底部')
+					if (this.listForm.pageIndex <= this.listForm.totalPage && this.isLoading == false) {
+						this.getList();
+					} else {
+						return;
+					}
+				}
+			},
+			//切换
+			reloadList(status) {
+				this.listForm.type = status;
+				this.listForm.pageIndex = 1;
+				this.getList();
+			},
+			//选择所有
+			selectAll() {
+				if (this.allSelect.length) {
+					this.selectIdList = [];
+				} else {
+					var selectIdList = [];
+					this.recordList.forEach(function(item, index) {
+						selectIdList.push(item.id);
+					})
+					this.selectIdList = selectIdList;
+				}
+			},
+			//显示内容表单
+			openFrom(status) {
+				if (!this.selectIdList.length) {
+					mui.toast('请选择要处理的信息');
+				} else {
+					this.subForm.status = status;
+					this.subForm.content = status == 1 ? '同意' : '拒绝';
+					this.openFromVisible = true;
+					//直接点击处理,不需要弹窗理由框,又需要弹窗理由框了
+					//this.doAction();
+				}
+			},
+			//检测表单
+			checkForm() {
+				if (!this.subForm.ids) {
+					mui.toast('请选择要处理的信息');
+					return false;
+				} else {
+					return true;
+				}
+			},
+			//同意拒绝
+			doAction() {
+				this.subForm.ids = this.selectIdList.join(',');
+				if (this.checkForm()) {
+					this.isLoading = true;
+					API_Attendance.doVerify(this.subForm).then(response => {
+						this.isLoading = false;
+
+						this.openFromVisible = false;
+						this.listForm.pageIndex = 1;
+						this.getList();
+					}).catch(error => {
+						this.isLoading = false;
+						mui.toast(error);
+					})
+				}
+			},
+			asynCallBack() {
+
+			},
+		},
+		mounted() {
+			this.getList();
+			//监控下拉加载事件
+			var _this = this;
+			window.addEventListener('scroll', _this.handleScrool);
+		},
+		destroyed() {
+			//销毁监听事件
+			var _this = this;
+			window.removeEventListener('scroll', _this.handleScrool);
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+			})
+		},
+		watch: {
+			//本页面监听到路由(参数)改变
+			/* '$route': function(to, from) {
+				this.reloadList(to.query.status ? to.query.status : 0)
+			} */
+		},
+		//keepalive监控判断
+		beforeRouteLeave(to, from, next) {
+			console.log(to.name);
+			if (['MasterAttendanceVerifyInfo'].indexOf(to.name) > -1) {
+				this.$store.commit('SET_KEEP_ALIVE_COMPONENTS', ['MasterAttendanceVerifyList'])
+			} else {
+				this.$store.commit('SET_KEEP_ALIVE_COMPONENTS', [])
+			}
+			next()
+		},
+	}
+</script>
+
+<style scoped src="@/assets/css/xpwyfyy-oa.css"></style>
+<style src="@/assets/css/iconfont.css"></style>
+<style scoped>
+	.status_r {
+		color: #fe616c !important;
+		border: 1px solid #fe616c !important;
+	}
+
+	.status_a {
+		color: #05c8af !important;
+		border: 1px solid #05c8af !important;
+	}
+
+	.mui-segmented-control {
+		position: fixed;
+		top: 44px;
+		z-index: 99;
+		background-color: #eee;
+	}
+
+	.mui-fullscreen {
+		position: unset;
+		margin-top: 45px;
+	}
+</style>
+
+<style scoped >
+	.classFF8400 {
+		color: #FF8400 ;
+	}
+	.class389E0D  {
+		color: #389E0D  ;
+	}
+	.classFF6666  {
+		color: #FF6666  ;
+	}
+	.classA5A5A5  {
+		color: #A5A5A5  ;
+	}
+</style>

+ 1 - 1
src/views/Master/Home.vue

@@ -410,7 +410,7 @@
 	}
 </script>
 
-<style scoped src="@/assets/css/xpgj.css"></style>
+<style  scoped src="@/assets/css/xpgj.css"></style>
 <style src="@/assets/css/iconfont.css"></style>
 <style src="@/assets/css/mui.picker.min.css"></style>
 <style scoped>

+ 10 - 0
src/views/Master/Mine/Message.vue

@@ -27,6 +27,16 @@
 						<span v-if="item.total" class="mui-badge mui-badge-danger" v-text="item.total"></span>
 					</router-link>
 				</li>
+				<li  class="mui-table-view-cell mui-media">
+					<router-link :to="{name:'OaDocumentViewList'}">
+						<img class="mui-media-object mui-pull-left" src="~@/assets/img/icon_chaosong.png">
+						<div class="mui-media-body">
+							<h3 class="flew-sp">审批抄送</h3>
+							
+						</div>
+						
+					</router-link>
+				</li>
 			</ul>
 		</div>