This commit is contained in:
Paidax
2024-07-24 15:10:07 +08:00
parent e2f6a9f4b1
commit 020b6c48ed
79 changed files with 7733 additions and 3760 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,608 @@
<template>
<div class="slide-verify" :style="'width:' + canvaswidth + 'px'" onselectstart="return false;">
<!-- 图片加载遮蔽罩 -->
<div :class="isLoading ? 'img-loading' : ''" :style="'height:' + canvasheight + 'px'" v-if="isLoading"></div>
<!-- 认证成功后的文字提示 -->
<div class="success-hint" :style="'height:' + canvasheight + 'px'" v-if="verifySuccess">{{ successHint }}</div>
<!--前端生成-->
<template v-if="isFrontCheck">
<!--验证图片-->
<canvas ref="canvas" class="slide-canvas" :width="canvaswidth" :height="canvasheight"/>
<!--阻塞块-->
<canvas ref="block" class="slide-block" :width="canvaswidth" :height="canvasheight"/>
</template>
<!--后端生成-->
<template v-else>
<!--验证图片-->
<img ref="canvas" class="slide-canvas" :width="canvaswidth" :height="canvasheight"/>
<!--阻塞块-->
<img ref="block" :class="verifyFail ? 'slide-block verify-fail' : 'slide-block'"/>
</template>
<!--刷新按钮-->
<div class="refresh" @click="refresh"><i class="el-icon-refresh-right"></i>刷新</div>
<!-- 滑动条 -->
<div :class="getClass()">
<!--滑块-->
<div class="slider-box" :style="'width:' + sliderBoxWidth">
<!-- 按钮 -->
<div class="slider-button" id="slider-button" :style="'left:' + sliderButtonLeft">
<!-- 按钮图标 -->
<div class="slider-button-icon"></div>
</div>
</div>
<!--滑动条提示文字-->
<span class="slider-hint">{{ sliderhint }}</span>
</div>
</div>
</template>
<script>
function sum(x, y) {
return x + y;
}
function square(x) {
return x * x;
}
module.exports = {
props: {
// 阻塞块长度
blocklength: {
type: Number,
default: 42,
},
// 阻塞块弧度
blockradius: {
type: Number,
default: 10,
},
// 画布宽度
canvaswidth: {
type: Number,
default: 320,
},
// 画布高度
canvasheight: {
type: Number,
default: 155,
},
// 滑块操作提示
sliderhint: {
type: String,
default: '向右滑动',
},
// 可允许的误差范围小;为1时,则表示滑块要与凹槽完全重叠,才能验证成功。默认值为5,若为 -1 则不进行机器判断
accuracy: {
type: Number,
default: 3,
},
// 图片资源数组
imagelist: {
type: Array,
default: () => [],
},
},
data() {
return {
// 前端校验
isFrontCheck: false,
// 校验进行状态
verifyActive: false,
// 校验成功状态
verifySuccess: false,
// 校验失败状态
verifyFail: false,
// 阻塞块对象
blockObj: null,
// 图片画布对象
canvasCtx: null,
// 阻塞块画布对象
blockCtx: null,
// 阻塞块宽度
blockWidth: this.blocklength * 2,
// 阻塞块的横轴坐标
blockX: undefined,
// 阻塞块的纵轴坐标
blockY: undefined,
// 图片对象
image: undefined,
// 移动的X轴坐标
originX: undefined,
// 移动的Y轴做坐标
originY: undefined,
// 拖动距离数组
dragDistanceList: [],
// 滑块箱拖动宽度
sliderBoxWidth: 0,
// 滑块按钮距离左侧起点位置
sliderButtonLeft: 0,
// 鼠标按下状态
isMouseDown: false,
// 图片加载提示,防止图片没加载完就开始验证
isLoading: true,
// 时间戳,计算滑动时长
timestamp: null,
// 成功提示
successHint: '',
// 随机字符串
nonceStr: undefined,
};
},
mounted() {
this.init();
},
methods: {
getClass() {
let str = 'slider '
if(this.verifyActive) {
str += 'verify-active '
}
if(this.verifySuccess) {
str += 'verify-success '
}
if(this.verifyFail) {
str += 'verify-fail '
}
return str
},
/* 初始化*/
init() {
this.initDom();
this.bindEvents();
},
/* 初始化DOM对象*/
initDom() {
this.blockObj = this.$refs.block;
if (this.isFrontCheck) {
this.canvasCtx = this.$refs.canvas.getContext('2d');
this.blockCtx = this.blockObj.getContext('2d');
this.initImage();
} else {
this.getCaptcha();
}
},
/* 后台获取验证码*/
async getCaptcha() {
let self = this;
//取后端默认值
const response = await $.post('/captcha/get-captcha')
const data = response.data;
self.nonceStr = data.nonceStr;
self.$refs.block.src = data.blockSrc;
self.$refs.block.style.top = data.blockY + 'px';
self.$refs.canvas.src = data.canvasSrc;
self.isLoading = false;
},
/* 前端获取验证码*/
initImage() {
const image = this.createImage(() => {
this.drawBlock();
let {canvaswidth, canvasheight, blockX, blockY, blockradius, blockWidth} = this;
this.canvasCtx.drawImage(image, 0, 0, canvaswidth, canvasheight);
this.blockCtx.drawImage(image, 0, 0, canvaswidth, canvasheight);
// 将抠图防止最左边位置
let yAxle = blockY - blockradius * 2;
let ImageData = this.blockCtx.getImageData(blockX, yAxle, blockWidth, blockWidth);
this.blockObj.width = blockWidth;
this.blockCtx.putImageData(ImageData, 0, yAxle);
// 图片加载完关闭遮蔽罩
this.isLoading = false;
// 前端校验设置特殊值
this.nonceStr = 'loyer';
});
this.image = image;
},
/* 创建image对象*/
createImage(onload) {
const image = document.createElement('img');
image.crossOrigin = 'Anonymous';
image.onload = onload;
image.onerror = () => {
image.src = '/assets/platform/img/bjt.jpg';
};
image.src = this.getImageSrc();
return image;
},
/* 获取imgSrc*/
getImageSrc() {
const len = this.imagelist.length;
return len > 0 ? this.imagelist[this.getNonceByRange(0, len)] : `https://loyer.wang/view/ftp/wallpaper/${this.getNonceByRange(1, 1000)}.jpg`;
},
/* 根据指定范围获取随机数*/
getNonceByRange(start, end) {
return Math.round(Math.random() * (end - start) + start);
},
/* 绘制阻塞块*/
drawBlock() {
this.blockX = this.getNonceByRange(this.blockWidth + 10, this.canvaswidth - (this.blockWidth + 10));
this.blockY = this.getNonceByRange(10 + this.blockradius * 2, this.canvasheight - (this.blockWidth + 10));
this.draw(this.canvasCtx, 'fill');
this.draw(this.blockCtx, 'clip');
},
/* 绘制事件*/
draw(ctx, operation) {
const PI = Math.PI;
let {blockX: x, blockY: y, blocklength: l, blockradius: r} = this;
// 绘制
ctx.beginPath();
ctx.moveTo(x, y);
ctx.arc(x + l / 2, y - r + 2, r, 0.72 * PI, 2.26 * PI);
ctx.lineTo(x + l, y);
ctx.arc(x + l + r - 2, y + l / 2, r, 1.21 * PI, 2.78 * PI);
ctx.lineTo(x + l, y + l);
ctx.lineTo(x, y + l);
ctx.arc(x + r - 2, y + l / 2, r + 0.4, 2.76 * PI, 1.24 * PI, true);
ctx.lineTo(x, y);
// 修饰
ctx.lineWidth = 2;
ctx.fillStyle = 'rgba(255, 255, 255, 0.9)';
ctx.strokeStyle = 'rgba(255, 255, 255, 0.9)';
ctx.stroke();
ctx[operation]();
ctx.globalCompositeOperation = 'destination-over';
},
/* 事件绑定*/
bindEvents() {
// 监听鼠标按下事件
document.getElementById('slider-button').addEventListener('mousedown', (event) => {
this.startEvent(event.clientX, event.clientY);
});
// 监听鼠标移动事件
document.addEventListener('mousemove', (event) => {
this.moveEvent(event.clientX, event.clientY);
});
// 监听鼠标离开事件
document.addEventListener('mouseup', (event) => {
this.endEvent(event.clientX);
});
// 监听触摸开始事件
document.getElementById('slider-button').addEventListener('touchstart', (event) => {
this.startEvent(event.changedTouches[0].pageX, event.changedTouches[0].pageY);
});
// 监听触摸滑动事件
document.addEventListener('touchmove', (event) => {
this.moveEvent(event.changedTouches[0].pageX, event.changedTouches[0].pageY);
});
// 监听触摸离开事件
document.addEventListener('touchend', (event) => {
this.endEvent(event.changedTouches[0].pageX);
});
},
/* 校验图片是否存在*/
checkImgSrc() {
if (this.isFrontCheck) {
return true;
}
return !!this.$refs.canvas.src;
},
/* 滑动开始事件*/
startEvent(originX, originY) {
if (!this.checkImgSrc() || this.isLoading || this.verifySuccess) {
return;
}
this.originX = originX;
this.originY = originY;
this.isMouseDown = true;
this.timestamp = +new Date();
},
/* 滑动事件*/
moveEvent(originX, originY) {
if (!this.isMouseDown) {
return false;
}
const moveX = originX - this.originX;
const moveY = originY - this.originY;
if (moveX < 0 || moveX + 40 >= this.canvaswidth) {
return false;
}
this.sliderButtonLeft = moveX + 'px';
let blockLeft = (this.canvaswidth - 40 - 20) / (this.canvaswidth - 40) * moveX;
this.blockObj.style.left = blockLeft + 'px';
this.verifyActive = true;
this.sliderBoxWidth = moveX + 'px';
this.dragDistanceList.push(moveY);
},
/* 滑动结束事件*/
endEvent(originX) {
if (!this.isMouseDown) {
return false;
}
this.isMouseDown = false;
if (originX === this.originX) {
return false;
}
// 开始校验
this.isLoading = true;
// 校验结束
this.verifyActive = false;
// 滑动时长
this.timestamp = +new Date() - this.timestamp;
// 移动距离
const moveLength = parseInt(this.blockObj.style.left);
// 限制操作时长10S,超出判断失败
if (this.timestamp > 10000) {
this.verifyFailEvent();
} else
// 人为操作判定
if (!this.turingTest()) {
this.verifyFail = true;
this.$emit('again');
} else
// 是否前端校验
if (this.isFrontCheck) {
const accuracy = this.accuracy <= 1 ? 1 : this.accuracy > 10 ? 10 : this.accuracy; // 容错精度值
const spliced = Math.abs(moveLength - this.blockX) <= accuracy; // 判断是否重合
if (!spliced) {
this.verifyFailEvent();
} else {
// 设置特殊值,后台特殊处理,直接验证通过
this.$emit('success', {nonceStr: this.nonceStr, value: moveLength});
}
} else {
this.$emit('success', {nonceStr: this.nonceStr, value: moveLength});
}
},
/* 图灵测试*/
turingTest() {
const arr = this.dragDistanceList; // 拖动距离数组
const average = arr.reduce(sum) / arr.length; // 平均值
const deviations = arr.map((x) => x - average); // 偏离值
const stdDev = Math.sqrt(deviations.map(square).reduce(sum) / arr.length); // 标准偏差
return average !== stdDev; // 判断是否人为操作
},
/* 校验成功*/
verifySuccessEvent() {
this.isLoading = false;
this.verifySuccess = true;
const elapsedTime = (this.timestamp / 1000).toFixed(1);
if (elapsedTime < 1) {
this.successHint = `仅仅${elapsedTime}S,你的速度快如闪电`;
} else if (elapsedTime < 2) {
this.successHint = `只用了${elapsedTime}S,这速度简直完美`;
} else {
this.successHint = `耗时${elapsedTime}S,争取下次再快一点`;
}
},
/* 校验失败*/
verifyFailEvent(msg) {
this.verifyFail = true;
this.$emit('fail', msg);
this.refresh();
},
/* 刷新图片验证码*/
refresh() {
// 延迟class的删除,等待动画结束
setTimeout(() => {
this.verifyFail = false;
}, 500);
this.isLoading = true;
this.verifyActive = false;
this.verifySuccess = false;
this.blockObj.style.left = 0;
this.sliderBoxWidth = 0;
this.sliderButtonLeft = 0;
if (this.isFrontCheck) {
// 刷新画布
let {canvaswidth, canvasheight} = this;
this.canvasCtx.clearRect(0, 0, canvaswidth, canvasheight);
this.blockCtx.clearRect(0, 0, canvaswidth, canvasheight);
this.blockObj.width = canvaswidth;
// 刷新图片
this.image.src = this.getImageSrc();
} else {
this.getCaptcha();
}
},
},
};
</script>
<style scoped>
.slide-verify {
position: relative;
}
/*图片加载样式*/
.img-loading {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
z-index: 999;
animation: loading 1.5s infinite;
background-image: url(/assets/platform/img/captcha/loading.gif);
background-repeat: no-repeat;
background-position: center center;
background-size: 100px;
background-color: #737c8e;
border-radius: 5px;
}
@keyframes loading {
0% {
opacity: .7;
}
100% {
opacity: 9;
}
}
/*认证成功后的文字提示*/
.success-hint {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 999;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.8);
color: #2CD000;
font-size: large;
}
/*刷新按钮*/
.refresh-icon {
position: absolute;
right: 0;
top: 0;
width: 35px;
height: 35px;
cursor: pointer;
background: url("/assets/platform/img/captcha/refresh.svg") 0 -432px;
background-size: 35px 470px;
}
/*验证图片*/
.slide-canvas {
border-radius: 5px;
}
/*阻塞块*/
.slide-block {
position: absolute;
left: 0;
top: 0;
}
/*校验失败时的阻塞块样式*/
.slide-block.verify-fail {
transition: left 0.5s linear;
}
/*滑动条*/
.slider {
position: relative;
text-align: center;
width: 100%;
height: 40px;
line-height: 40px;
margin-top: 15px;
background: #f7f9fa;
color: #45494c;
border: 1px solid #e4e7eb;
border-radius: 5px;
}
/*滑动盒子*/
.slider-box {
position: absolute;
left: 0;
top: 0;
height: 40px;
border: 0 solid #1991FA;
background: #D1E9FE;
border-radius: 5px;
}
/*滑动按钮*/
.slider-button {
position: absolute;
top: 0;
left: 0;
width: 40px;
height: 40px;
background: #fff;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
cursor: pointer;
transition: background .2s linear;
border-radius: 5px;
}
/*鼠标悬浮时的按钮样式*/
.slider-button:hover {
background: #1991FA
}
/*鼠标悬浮时的按钮图标样式*/
.slider-button:hover .slider-button-icon {
/*background-position: 0 -13px*/
background-image: url("/assets/platform/img/captcha/white_right.svg");
}
/*滑动按钮图标*/
.slider-button-icon {
position: absolute;
top: 15px;
left: 13px;
width: 15px;
height: 13px;
background-image: url("/assets/platform/img/captcha/right.svg");
background-repeat: no-repeat;
background-position: center center;
}
/*校验时的按钮样式*/
.verify-active .slider-button {
height: 38px;
top: -1px;
border: 1px solid #1991FA;
}
/*校验时的滑动箱样式*/
.verify-active .slider-box {
height: 38px;
border-width: 1px;
}
/*校验成功时的滑动箱样式*/
.verify-success .slider-box {
height: 38px;
border: 1px solid #52CCBA;
background-color: #D2F4EF;
}
/*校验成功时的按钮样式*/
.verify-success .slider-button {
height: 38px;
top: -1px;
border: 1px solid #52CCBA;
background-color: #52CCBA !important;
}
/*校验成功时的按钮图标样式*/
.verify-success .slider-button-icon {
/*background-position: 0 0 !important;*/
background-image: url("/assets/platform/img/captcha/ok.svg");
}
/*校验失败时的滑动箱样式*/
.verify-fail .slider-box {
height: 38px;
border: 1px solid #f57a7a;
background-color: #fce1e1;
transition: width 0.5s linear;
}
/*校验失败时的按钮样式*/
.verify-fail .slider-button {
height: 38px;
top: -1px;
border: 1px solid #f57a7a;
background-color: #f57a7a !important;
transition: left 0.5s linear;
}
/*校验失败时的按钮图标样式*/
.verify-fail .slider-button-icon {
top: 14px;
/*background-position: 0 -82px !important;*/
background-image: url("/assets/platform/img/captcha/close.svg");
}
/*校验状态下的提示文字隐藏*/
.verify-active .slider-hint,
.verify-success .slider-hint,
.verify-fail .slider-hint {
display: none;
}
.refresh {
text-align: right;
font-size: 16px;
cursor: pointer;
}
</style>
@@ -37,11 +37,14 @@
</el-form-item>
<el-form-item prop="type" label="变更类型">
<dict-select v-model="formData.type" style="width: 100%" clearable placeholder="变更类型"
code="MemberChangeType" @change="typeChange"></dict-select>
<!-- <dict-select v-model="formData.type" style="width: 100%" clearable placeholder="变更类型"-->
<!-- code="MemberChangeType" @change="typeChange"></dict-select>-->
<el-select v-model="formData.type" style="width: 100%" clearable placeholder="变更类型" @change="typeChange">
<el-option v-for="item in userChangeTypeList" :label="item.name" :value="item.code" :key="item.id"></el-option>
</el-select>
</el-form-item>
<!--单位异动-->
<!--异动-->
<div v-if="formData.type==='1'">
<el-form-item prop="type" label="新&ensp;单&ensp;位">
<el-select v-model="formData.currentUnitId" style="width: 100%" filterable clearable
@@ -81,30 +84,102 @@
</el-form-item>
</el-col>
</el-row>
</div>
<!--离校 离退休-->
<div v-if="formData.type && !['1','7','8'].includes(formData.type)">
<div>
<el-form-item prop="updateMember" label="工会会员资格">
<el-switch
v-model="formData.updateMember"
active-text="移除"
inactive-text="添加">
</el-switch>
</el-form-item>
</div>
<el-form-item prop="updateWelfare" label="福利会员资格">
<el-switch
v-model="formData.updateWelfare"
active-text="移除"
inactive-text="添加">
</el-switch>
<div v-else-if="welfare_member&&['2'].includes(formData.type)">
<el-form-item prop="updateWelfareMember" label="福利会员">
<el-radio-group v-model="formData.updateWelfareMember" size="small">
<el-radio :label="true" border>享受福利</el-radio>
<el-radio :label="false" border>不享受福利</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="insertMember" label="工会会员">
<el-radio-group v-model="formData.insertMember" size="small">
<el-radio :label="true" border>成为会员</el-radio>
<el-radio :label="false" border>不成为会员</el-radio>
</el-radio-group>
</el-form-item>
</div>
<div v-else-if="welfare_member&&['7'].includes(formData.type)">
<el-form-item prop="updateWelfareMember" label="福利会员">
<el-radio-group v-model="formData.updateWelfareMember" size="small">
<el-radio :label="true" border>享受福利</el-radio>
<el-radio :label="false" border>不享受福利</el-radio>
</el-radio-group>
</el-form-item>
</div>
<div v-else-if="welfare_member&&['3','4','5','6','8'].includes(formData.type)">
<el-form-item prop="updateWelfare" label="福利会员">
<el-radio-group v-model="formData.updateWelfare" size="small">
<el-radio :label="true" border>取消享受福利</el-radio>
<el-radio :label="false" border>保留享受福利</el-radio>
</el-radio-group>
<!-- <span style="color: red">&emsp;&emsp;&emsp;温馨提醒:此操作将取消该教工正式会员资格</span>-->
</el-form-item>
<el-form-item prop="updateMember" label="工会会员">
<el-radio-group v-model="formData.updateMember" size="small">
<el-radio :label="true" border>取消会员资格</el-radio>
<el-radio :label="false" border>保留会员资格</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="updateUserState" label="是否改变在职状态" style="width: 100%"
v-if="welfare_member&&['3','4','5','6','8'].includes(formData.type)">
<dict-select v-model="formData.userState" style="width: 100%" clearable placeholder="变更类型"
code="userState"></dict-select>
</el-form-item>
<el-form-item prop="updateUserState" label="是否改变人员类型" style="width: 100%"
v-if="welfare_member&&['3','4','5','6','8'].includes(formData.type)">
<dict-select v-model="formData.personType" style="width: 100%" clearable
placeholder="人员类型"
code="UserType"></dict-select>
</el-form-item>
</div>
<div v-else-if="formData.type==='10'">
<el-form-item prop="oldIdCard" label="原身份证号" style="width: 100%">
<el-input v-model="formData.oldIdCard" readonly type="text"></el-input>
</el-form-item>
<el-form-item prop="idCard" label="新的身份证号" style="width: 100%">
<el-input v-model="formData.idCard" placeholder="请输入新的身份证号" type="text"></el-input>
</el-form-item>
</div>
<div v-else-if="formData.type==='11'">
<el-form-item prop="oldMobile" label="原手机号码" style="width: 100%">
<el-input v-model="formData.oldMobile" readonly type="text"></el-input>
</el-form-item>
<el-form-item prop="mobile" label="新的手机号码" style="width: 100%">
<el-input v-model="formData.mobile" placeholder="请输入新的手机号码" type="text"></el-input>
</el-form-item>
</div>
<div v-else-if="formData.type==='12'">
<el-form-item prop="oldEducation" label="原学历" style="width: 100%">
<el-input v-model="formData.oldEducation" readonly type="text"></el-input>
</el-form-item>
<el-form-item prop="education" label="新的学历" style="width: 100%">
<dict-select v-model="formData.education" style="width: 100%" clearable placeholder="请选择新的学历"
code="Education"></dict-select>
</el-form-item>
</div>
<!-- <div v-else-if="welfare_member&&['2','7'].includes(formData.type)">
<el-form-item prop="updateWelfareMember" label="是否享受福利">
<el-switch
v-model="formData.updateWelfareMember"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<span style="color: red">&emsp;&emsp;&emsp;温馨提醒:此操作将该教工设为正式会员</span>
</el-form-item>
</div>-->
<el-form-item prop="remark" label="变化原因">
<el-input v-model="formData.remark" placeholder="变化原因" type="textarea" :rows="4"></el-input>
</el-form-item>
@@ -122,10 +197,11 @@
<script>
module.exports = {
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
props: {
userid: {type: String},
welfare_member: {type: Boolean, default: false},
welfare_member: {type: Boolean, default: true},
},
data() {
return {
@@ -136,18 +212,22 @@ module.exports = {
formData: {},
formRules: {
type: [{required: true, message: '必选', trigger: ['blur', 'change']}],
updateWelfareMember: [{required: true, message: '必选', trigger: ['blur', 'change']}],
updateMember: [{required: true, message: '必选', trigger: ['blur', 'change']}],
updateWelfare: [{required: true, message: '必选', trigger: ['blur', 'change']}],
currentUnitId: [{required: true, message: '必选', trigger: ['blur', 'change']}],
currentThreeUnitId: [{required: true, message: '请选择新三级单位', trigger: 'change'}]
currentThreeUnitId: [{required: true, message: '请选择新三级单位', trigger: 'change'}],
idCard: [{required: true, message: '必填', trigger: ['blur', 'change']}],
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
insertMember: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
unitOptions: [],
threeUnits: [],
isThreeUnit: false,
memberChangeTypeOptions: []
userChangeTypeList:[],
}
},
watch: {
@@ -157,16 +237,14 @@ module.exports = {
},
methods: {
typeChange() {
console.log(this.formData.type)
this.$set(this.formData, "updateWelfare", ['3', '5'].includes(this.formData.type))
this.$set(this.formData, "updateMember", ['3', '5'].includes(this.formData.type))
this.$set(this.formData, "updateWelfareMember", ['2','7'].includes(this.formData.type))
this.$set(this.formData, "updateWelfare", ['2', '3', '4', '5', '6', '8'].includes(this.formData.type))
this.$set(this.formData, "updateMember", ['2', '3', '4', '5', '6', '8'].includes(this.formData.type))
this.$set(this.formData, "insertMember", ['2'].includes(this.formData.type))
},
async doSubmit() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.formData.type != 1) {
this.formData.userState = this.memberChangeTypeOptions.find(v => v.code === this.formData.type)?.name
}
this.submitLoading = true
this.$emit("submit", this.formData)
}
@@ -239,9 +317,13 @@ module.exports = {
originUnitId: resp.data.unitid,
originThreeUnitId: resp.data.threeUnitId,
originUnionId: resp.data.unionid,
// userState: resp.data.userState,
userState: resp.data.userState,
personType: resp.data.personType,
auditTime: moment().format('YYYY-MM-DD'),
notes: null
notes: null,
oldIdCard:resp.data.idcard,
oldMobile:resp.data.mobile,
oldEducation:resp.data.education
}
this.disabled = false
} else {
@@ -258,17 +340,19 @@ module.exports = {
if (resp.code === 0) {
this.unitOptions = resp.data
}
}
},
async getUserChangeType(){
const resp = await $.get('/platform/member/common/getUserChangType')
if (resp.code === 0){
this.userChangeTypeList = resp.data
}
},
},
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
this.getUnits()
this.flush()
getDictOptions('MemberChangeType').then(res => {
this.memberChangeTypeOptions = res
})
await this.getUnits()
await this.flush()
await this.getUserChangeType()
// getUnits(null).then(res => this.unitOptions = res)
}
}
@@ -34,7 +34,7 @@
<script>
module.exports = {
components: {
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
},
props: {
records: {type: Array, default: []},
@@ -84,16 +84,30 @@
<el-input v-model="formData.birthPlace" placeholder="出生地点"></el-input>
</el-form-item>
<el-form-item label="婚&emsp;&emsp;否">
<el-radio-group v-model="formData.marriage" size="small">
<el-form-item label="婚姻状况">
<dict-select v-model="formData.marriage" style="width: 100%" placeholder="请选择婚姻状况"
code="maritalStatus"></dict-select>
<!-- <el-radio-group v-model="formData.marriage" size="small">
<el-radio label="已婚" border></el-radio>
<el-radio label="未婚" border></el-radio>
</el-radio-group>
</el-radio-group>-->
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="schoolTime" label="入校时间">
<el-date-picker style="width: 100%" v-model="formData.schoolTime" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" type="date"
placeholder="入校时间"></el-date-picker>
</el-form-item>
<el-form-item prop="startSalaryDate" label="起薪日期">
<el-date-picker style="width: 100%" v-model="formData.startSalaryDate" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" type="date"
placeholder="起薪日期"></el-date-picker>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="education" label="学&emsp;&emsp;历">
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历"
code="Education"></dict-select>
@@ -125,8 +139,10 @@
</el-select>
</el-form-item>
<el-form-item prop="political" label="政治面貌">
<el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>
<dict-select v-model="formData.political" style="width: 100%" placeholder="请选择政治面貌"
code="JobTitle"></dict-select>
<!-- <el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>-->
</el-form-item>
</div>
@@ -211,6 +227,17 @@
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="renewTime" label="更新时间">
<el-date-picker style="width: 100%" v-model="formData.renewTime" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" type="date"
placeholder="更新时间"></el-date-picker>
</el-form-item>
<el-form-item prop="email" label="邮箱号">
<el-input v-model="formData.email" placeholder="邮箱号" maxlength="50"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="householdType" label="户籍类型">
<dict-select
@@ -272,9 +299,9 @@
<!-- </el-form>-->
</el-tab-pane>
<el-tab-pane label="工作信息" :name="2">
<!-- <el-tab-pane label="工作信息" :name="2">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="140px" v-loading="loading">-->
&lt;!&ndash; <el-form :model="formData" ref="form" :rules="formRules" label-width="140px" v-loading="loading">&ndash;&gt;
<vi-title title="工作信息"></vi-title>
@@ -339,7 +366,7 @@
</el-tab-pane>
<el-tab-pane label="会员信息" :name="3">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="160px" v-loading="loading">-->
&lt;!&ndash; <el-form :model="formData" ref="form" :rules="formRules" label-width="160px" v-loading="loading">&ndash;&gt;
<vi-title title="会员信息"></vi-title>
<div class="is-flex">
@@ -428,8 +455,8 @@
</el-date-picker>
</el-form-item>
</div>
<!-- </el-form>-->
</el-tab-pane>
&lt;!&ndash; </el-form>&ndash;&gt;
</el-tab-pane>-->
<el-tab-pane label="家庭及社会信息" :name="4">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="120px" v-loading="loading">-->
@@ -521,12 +548,25 @@
</template>
</el-table-column>
<el-table-column prop="unit" label="单位" align="center" header-align="center">
<el-table-column prop="isCondolence" label="是否慰问" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入单位" maxlength="100" v-model="scope.row.unit"
clearable></el-input>
<el-radio-group v-model="scope.row.isCondolence" size="mini">
<el-radio label="是">是</el-radio>
<el-radio label="否">否</el-radio>
</el-radio-group>
<!-- <el-input placeholder="请输入单位" maxlength="100" v-model="scope.row.unit"
clearable></el-input>-->
</template>
</el-table-column>
<el-table-column prop="condolenceTime" label="慰问时间" align="center" header-align="center">
<template slot-scope="scope">
<el-date-picker style="width: 100%" v-model="scope.row.condolenceTime" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" type="date"
placeholder="慰问时间"></el-date-picker>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入备注" maxlength="100" v-model="scope.row.remark"
@@ -555,192 +595,58 @@
</div>
<div v-else>
<el-form label-width="100px" v-loading="loading" label-position="left" label-suffix=":">
<el-row gutter="20">
<el-col :span="18">
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="姓&emsp;&emsp;名">
{{ formData.username }}
</el-form-item>
</el-col>
<h3 style="text-align: center; letter-spacing: 6px;">工会会员登记表</h3>
<div style="text-align: right; letter-spacing: 2px;">填表日期:{{ moment(formData.applyTime).format('YYYY年MM月DD日') }}</div>
<el-col :span="8">
<el-form-item label="工&emsp;&emsp;号">
{{ formData.loginname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性&emsp;&emsp;别">
{{ formData.sex }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="所在科室">
{{ formData.threeUnitName }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在单位">
{{ formData.unitname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在工会">
{{ formData.unionname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="政治面貌">
{{ formData.political }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入校时间">
{{ formData.schoolTime }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生日期">
{{ formData.birthday }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="籍&emsp;&emsp;贯">
{{ formData.hometown }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="民&emsp;&emsp;族">
{{ formData.nation }}
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-image :src="APP_DOMAIN+FILE_STREAM_PREVIEW_ADDRESS + '?id=' +formData.avatar"
style="width: 180px;height: 180px;display: flex;justify-content: center;align-items: center;background-color: #f5f7fa">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" style="font-size: 24px"></i>
</div>
</el-image>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="兴趣爱好">
{{ formData.hobby }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="婚&emsp;&emsp;否">
{{ formData.marriage }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="学&emsp;&emsp;历">
{{ formData.education }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工&emsp;&emsp;资">
{{ formData.wage }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="人事编制">
{{ formData.preparedBy }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="职&emsp;&emsp;务">
{{ formData.position }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="职&emsp;&emsp;称">
{{ formData.jobTitle }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="在职状态">
{{ formData.userState }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="人员类型">
{{ formData.personType }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="手&ensp;机&ensp;号">
{{ formData.mobile }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="银行账号">
{{ formData.bank_number }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="身份证号">
{{ formData.idcard }}
</el-form-item>
</el-col>
</el-row>
<el-form-item label="个人简历">
<div v-html="formData.vita"></div>
</el-form-item>
<el-form-item label="家庭成员">
<el-table
v-if="formData.family&&formData.family.length"
:data="formData.family"
size="mini" border :header-cell-style="{background:'#eff3f6'}"
style="width: 100%">
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
</el-table-column>
<el-table-column prop="name" label="姓名" align="center" header-align="center">
</el-table-column>
<el-table-column prop="unit" label="单位" align="center" header-align="center">
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" header-align="center">
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<el-descriptions :column="3" border class="descriptions-form">
<el-descriptions-item label="姓名">{{ formData.username}}</el-descriptions-item>
<el-descriptions-item label="性别">{{ formData.sex}}</el-descriptions-item>
<el-descriptions-item label="民族">{{ formData.nation}}</el-descriptions-item>
<el-descriptions-item label="学历">{{ formData.education}}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ formData.political}}</el-descriptions-item>
<el-descriptions-item label="婚姻状况">{{ formData.marriage}}</el-descriptions-item>
<el-descriptions-item label="身份证号码" span="2">{{ formData.idcard}}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ formData.mobile}}</el-descriptions-item>
<el-descriptions-item label="户口所在地" span="3">
<template slot="label">户口所在地</template>
<div class="text-left" v-html="formData.registeredResidence"></div>
</el-descriptions-item>
<el-descriptions-item label="现居住地" span="3">
<template slot="label">现居住地</template>
<div class="text-left" v-html="formData.homeAddress"></div>
</el-descriptions-item>
<el-descriptions-item label="工作部门(学院)及岗位" span="3">
<template slot="label">工作部门(学院)及岗位</template>
<div class="text-left">{{ formData.unitname + '' + (formData.jobTitle ? '、' + formData.jobTitle : "") }}</div>
</el-descriptions-item>
<el-descriptions-item label="简历" span="3">
<template slot="label">简历</template>
<div class="text-left" v-html="formData.vita"></div>
</el-descriptions-item>
<el-descriptions-item label="有何特长" span="3">
<template slot="label">有何特长</template>
<div class="text-left" v-html="formData.specialSkill"></div>
</el-descriptions-item>
</el-descriptions>
<vi-title title="家庭成员" class="mt20"></vi-title>
<el-table
v-if="formData.family&&formData.family.length"
:data="formData.family"
size="mini" border :header-cell-style="{background:'#eff3f6'}"
style="width: 100%">
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
</el-table-column>
<el-table-column prop="name" label="姓名" align="center" header-align="center">
</el-table-column>
<el-table-column prop="isCondolence" label="是否慰问" align="center" header-align="center">
</el-table-column>
<el-table-column prop="condolenceTime" label="慰问时间" align="center" header-align="center">
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" header-align="center">
</el-table-column>
</el-table>
<el-empty v-else description="暂无家庭成员信息"></el-empty>
</div>
</div>
</template>
@@ -1001,4 +907,9 @@ module.exports = {
.el-picker-panel {
z-index: 9999999 !important;
}
.el-descriptions-item__cell {
width: 200px;
text-align: center !important;
}
</style>
@@ -13,15 +13,16 @@
<van-field label="性别" :value="viewData.sex" left-icon="ellipsis"></van-field>
<van-field label="民族" left-icon="bar-chart-o" :value="viewData.nation"></van-field>
<van-field label="学历" left-icon="coupon-o" :value="viewData.education"></van-field>
<van-field label="学位" left-icon="comment-o" :value="viewData.academicDegree"></van-field>
<!-- <van-field label="学位" left-icon="comment-o" :value="viewData.academicDegree"></van-field>-->
<van-field label="政治面貌" left-icon="label-o" :value="viewData.political"></van-field>
<van-field :value="viewData.personType" label="人员类型" left-icon="label-o"></van-field>
<van-field label="身份证" left-icon="idcard" :value="viewData.idcard"></van-field>
<van-field label="婚否" left-icon="label-o" :value="viewData.marriage"></van-field>
<!-- <van-field :value="viewData.personType" label="人员类型" left-icon="label-o"></van-field>-->
<van-field label="身份证号码" left-icon="idcard" :value="viewData.idcard"></van-field>
<van-field label="联系电话" left-icon="phone-o" :value="viewData.mobile"></van-field>
<van-field label="户口所在地" left-icon="wap-home-o" :value="viewData.registeredResidence"></van-field>
<van-field label="现居住地" left-icon="home-o" :value="viewData.homeAddress"></van-field>
<van-field label="工作单位" left-icon="cluster-o" :value="viewData.unitname"></van-field>
<van-field label="职务" left-icon="debit-pay" :value="viewData.position"></van-field>
<van-field label="工作部门(学院)及岗位" left-icon="cluster-o" :value="viewData.unitname + '、' + viewData.jobTitle"></van-field>
<!-- <van-field label="职务" left-icon="debit-pay" :value="viewData.position"></van-field>-->
</van-cell-group>
</van-form>
<van-cell-group class="mt10 up_down">
@@ -31,7 +32,7 @@
<i class="van-icon van-icon-notes-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>个人工作简历</span>
<span>简历</span>
</div>
</div>
@@ -39,11 +40,10 @@
<van-field readonly>
<template #input>
<div v-html="viewData.position"></div>
<div v-html="viewData.vita"></div>
</template>
</van-field>
</div>
</van-cell-group>
<van-cell-group class="mt10 up_down">
@@ -53,7 +53,7 @@
<i class="van-icon van-icon-award-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>特长</span>
<span>有何特长</span>
</div>
</div>
<van-divider></van-divider>
@@ -74,7 +74,7 @@
<i class="van-icon van-icon-friends-o"></i>
</div>
<div class="van-cell__title van-field__label" style="width: auto">
<span>家庭主要成员及联系方式</span>
<span>家庭成员</span>
</div>
</div>
</div>
@@ -87,14 +87,16 @@
<span>成员{{ toChinesNum(i + 1) }}</span>
</div>
<van-form readonly input-align="right">
<van-field label="关系" :value="o.relation" left-icon="exchange"></van-field>
<van-field label="与本人关系" :value="o.relation" left-icon="exchange"></van-field>
<van-field label="姓名" :value="o.name" left-icon="user-o"></van-field>
<van-field label="联系方式" :value="o.mobile" left-icon="phone-o"></van-field>
<van-field label="是否慰问" :value="o.isCondolence" left-icon="shield-o"></van-field>
<van-field label="慰问时间" :value="o.condolenceTime" left-icon="guide-o"></van-field>
<van-field label="备注" :value="o.remark" left-icon="coupon-o"></van-field>
</van-form>
</div>
</div>
<div v-else style="height: 100px">
暂无家庭成员信息
</div>
</div>
@@ -102,9 +104,9 @@
<template v-if="unionAudit!=null">
<div class="van-cell-group__title mt20">
<div class="van-cell-group__title mt5">
<div class="van-sidebar-item van-sidebar-item--select">
院级工会审核信息
部门工会审核信息
</div>
</div>
<van-cell-group>
@@ -112,11 +114,17 @@
<van-field label="审核时间" :value="moment(unionAudit.auditTime).format('YYYY-MM-DD')" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o" :value="unionAudit.auditOpinion" readonly></van-field>
<van-field name="auditSign" left-icon="friends-o" label="签&emsp;&emsp;字">
<template #input>
<van-image width="200" height="100" :src="unionAudit.auditSign" v-if="unionAudit.auditSign"/>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
<template v-if="schoolAudit!=null">
<div class="van-cell-group__title mt20">
<div class="van-cell-group__title mt5">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
@@ -126,6 +134,12 @@
<van-field label="审核时间" :value="moment(schoolAudit.auditTime).format('YYYY-MM-DD')" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o" :value="schoolAudit.auditOpinion" readonly></van-field>
<van-field name="auditSign" left-icon="friends-o" label="签&emsp;&emsp;字">
<template #input>
<van-image width="200" height="100" :src="schoolAudit.auditSign" v-if="schoolAudit.auditSign"/>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
@@ -205,4 +219,4 @@ module.exports = {
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
</style>
@@ -0,0 +1,220 @@
<template>
<div style="padding: 20px 50px">
<el-timeline>
<el-timeline-item timestamp="下载模板" placement="top">
<el-card>
<el-button size="medium" style="width: 200px"
@click="location.href=temp_url"
icon="el-icon-download">下载模板
</el-button>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="上传文件" placement="top">
<el-card>
<el-form>
<el-form-item label="请选择更新模式" v-if="is_show_radio">
<el-radio-group v-model="importData.isFlag">
<el-radio-button label="true">清空更新</el-radio-button>
<el-radio-button label="false">追加</el-radio-button>
</el-radio-group>
</el-form-item>
<el-upload
name="file"
ref="upload"
:on-remove="(file, fileList) => {
importData.fileList = fileHandleRemove(file, fileList);
importResult={
errorCount:0,
successCount:0,
totalCount:0,
errorList:[]
}
}"
:on-change="(file, fileList) => {
importData.fileList = fileHandleChange(file, fileList,{type:['xls','xlsx']})
}"
:auto-upload="false"
:limit="1"
:file-list="importData.fileList">
<el-button size="medium" type="" icon="el-icon-upload"
style="width: 200px">选择文件
</el-button>
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
只能上传 xls/xlsx 文件
</div>
</el-upload>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="导入结果">
<el-card shadow="never">
<p>总记录数:{{ errorInfoData.totalCount }}</p>
<p>成功数:<span class="text-success">{{ errorInfoData.successCount }}</span></p>
<p>错误数:<span class="text-danger">{{ errorInfoData.errorCount }}</span></p>
<el-link @click="exportErrors" type="primary" v-if="errorInfoData.errorCount>0">下载错误记录
</el-link>
</el-card>
</el-timeline-item>
</el-timeline>
<div style="text-align: right">
<span slot="footer" class="dialog-footer">
<!-- <el-button @click="importVisible = false" :disabled="importLoading">取 消</el-button>-->
<el-button type="primary" @click="doImport" :loading="importLoading">确 定</el-button>
</span>
</div>
</div>
</template>
<script>
module.exports = {
props: {
temp_url: {type: String},
post_url: {type: String},
project_id: {type: String, default: ''},
is_show_radio: {type: Boolean, default: false}
},
mounted() {
const s = document.createElement('script');
s.type = 'text/javascript';
s.src = '/assets/platform/js/xlsx.full.min.js';
document.body.appendChild(s);
},
data() {
return {
// importVisible: false,
importLoading: false,
importData: {
fileList: [],
isFlag: false
},
errorInfoData: {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0,
},
}
},
methods: {
resetImportData() {
this.importData = {
fileList: [],
isFlag: false
}
this.errorInfoData = {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0,
}
this.importLoading = false
},
doImport() {
if (this.importData.fileList.length === 0) {
this.$notify.error({
title: '错误',
message: '请选择文件!'
});
// this.notifyWarning("请选择文件!")
return
}
const data = new FormData();
data.append("isFlag", this.importData.isFlag)
data.append("projectId", this.project_id)
this.importData.fileList.forEach((val) => {
data.append("file", val.raw, val.raw.name);
});
this.importLoading = true
$.ajax({
url: this.post_url,
type: "post",
data: data,
processData: false,
contentType: false,
success: (data) => {
this.importLoading = false
if (data.code === 0 && data.data === null) {
this.$notify.success("导入成功")
this.importVisible = false
this.$emit("flush")
} else {
this.$notify.warning("导入失败")
this.errorInfoData = data.data
}
},
error: (data) => {
this.$notify.warning("导入失败")
this.importLoading = false
}
});
this.importLoading = false
},
exportErrors() {
const data = this.errorInfoData.errorList
// 创建工作簿
const workbook = XLSX.utils.book_new();
// 创建工作表
const worksheet = XLSX.utils.json_to_sheet(data);
// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 将工作簿转换为二进制对象
const excelBuffer = XLSX.write(workbook, {bookType: 'xlsx', type: 'array'});
// 将二进制对象转换为Blob对象
const blob = new Blob([excelBuffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
// 创建下载链接并设置相关属性
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = '错误记录.xlsx';
// 模拟点击下载链接
document.body.appendChild(link);
link.click();
// 清理下载链接
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
},
fileHandleRemove(file, fileList) {
return fileList;
},
fileHandleChange(file, fileList, {type, size}) {
const removeFile = () => {
fileList.splice(fileList.findIndex(v => v === file))
}
if (!file.size) {
this.$notify.warning('您选择的是空文件!')
removeFile()
}
if (type && type.length && !type.includes(file.name.split('.').pop().toLowerCase())) {
this.$notify.warning(`文件只能是 ${type.map(v => v.toUpperCase()).join('/')} 格式!`)
removeFile()
}
if (size && !file.size < size) {
this.$notify.warning(`文件大小不能超过 ${size / 1024 / 1024}MB!`)
removeFile()
}
return fileList;
},
}
}
</script>
<style>
.el-card__body {
padding: 25px;
}
</style>
@@ -0,0 +1,327 @@
<template>
<el-card style="margin: 20px" shadow="never" v-loading="loading">
<template #header v-if="!formData.zcid">
<h3 style="color: #1867b0">资产登记</h3>
</template>
<el-form :model="formData" :rules="ruleForm" label-width="120px" ref="AddForm"
class="formClass">
<el-descriptions :column="3" border class="table_fixed">
<el-descriptions-item label="资产名称">
<div slot="label" class="required-form-item">资产名称</div>
<el-form-item prop="zcmc" label-width="0">
<el-input placeholder="资产名称" v-model="formData.zcmc"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="单价">
<div slot="label" class="required-form-item">单价</div>
<el-form-item prop="zcdj" label-width="0">
<el-input-number :precision="2" placeholder="单价" style="width: 100%"
v-model="formData.zcdj">
</el-input-number>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="数量">
<div slot="label" class="required-form-item">数量</div>
<el-form-item prop="sl" label-width="0">
<el-input-number :precision="2" placeholder="数量" style="width: 100%"
v-model="formData.sl">
</el-input-number>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="资产类型">
<div slot="label" class="required-form-item">资产类型</div>
<el-form-item prop="zcghlx" label-width="0">
<el-radio-group @change="zcghlxChange" v-model="formData.zcghlx">
<el-radio label="1">院级工会</el-radio>
<el-radio label="2">校工会</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="资产规格型号">
<el-form-item prop="zcxh" label-width="0">
<el-input placeholder="资产规格型号" v-model="formData.zcxh"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="资产所属类别">
<div slot="label" class="required-form-item">资产所属类别</div>
<el-form-item prop="contentCode" label-width="0">
<el-select @change="contentCodeChange" clearable placeholder="所属类别"
style="width: 100%" v-model="formData.contentCode">
<el-option :label="item.content+'('+item.contentCode+')'"
:value="item.contentCode"
v-for="item in lbList"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="厂家">
<el-form-item prop="zccj" label-width="0">
<el-input placeholder="厂家" v-model="formData.zccj"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="存放地点">
<el-form-item prop="zccfdmc" label-width="0">
<el-input placeholder="存放地点" v-model="formData.zccfdmc"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="购置日期">
<div slot="label" class="required-form-item">购置日期</div>
<el-form-item prop="zcgzrq" label-width="0">
<el-date-picker @change="zcrksjChange" placeholder="购置日期"
style="width: 100%" v-model="formData.zcgzrq"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="折旧到期时间">
<el-form-item prop="depreciationDate" label-width="0">
<el-date-picker disabled placeholder="折旧到期时间"
style="width: 100%"
v-model="formData.depreciationDate"
value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="资产编号">
<el-form-item prop="zcbh" label-width="0">
<el-input placeholder="不填为系统自动生成或自己编写"
v-model="formData.zcbh"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="分类号">
<el-form-item prop="zcgbflh" label-width="0">
<el-input placeholder="分类号" v-model="formData.zcgbflh"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="领用人">
<el-form-item prop="zclyrid" label-width="0">
<el-select :loading="loading"
:remote-method="searchLyr"
@change="zclyrChange"
clearable
filterable
placeholder="可输入姓名或者工资号查询"
remote
style="width: 100%"
v-model="formData.zclyrid">
<el-option :label="item.username+'-'+item.loginname"
:value="item.id"
v-for="item in LyrOption"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="领用工会">
<template v-if="formData.zcghlx==='2'">
<el-form-item prop="zclydwh" label-width="0">
<el-input :value="formData.zclydwh" disabled
></el-input>
</el-form-item>
</template>
<template v-else>
<el-form-item prop="zclydwhid" label-width="0">
<el-select @change="zclydwhidChange" clearable
filterable="true" placeholder="所属工会"
style="width: 100%"
v-model="formData.zclydwhid">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</el-form-item>
</template>
</el-descriptions-item>
<el-descriptions-item label="资产状态">
<el-form-item prop="zczt" label-width="0">
<dict-select v-model="formData.zczt" style="width: 100%" placeholder="请选择资产状态"
code="zczt"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="经费科目" span="1">
<el-form-item prop="fundingSubject" label-width="0">
<el-select clearable placeholder="请选择经费科目"
style="width: 100%"
v-model="formData.fundingSubject">
<el-option label="行政" value="行政"></el-option>
<el-option label="自筹" value="自筹"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<div style="float: right;margin: 20px 0" v-if="!formData.zcid">
<el-button @click="doSubmit" type="primary">确 定
</el-button>
</div>
</el-card>
</template>
<script>
module.exports = {
data() {
return {
loading: false,
lbList: [],
formData: {},
LyrOption: [],
ruleForm: {
zcmc: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcgg: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcdj: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcgzrq: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zclyrname: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcrksj: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcjfkh: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcjfkje: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcfph: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sl: [{required: true, message: '必填', trigger: ['blur', 'change']}],
contentCode: [{required: true, message: '必填', trigger: ['blur', 'change']}],
zcghlx: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
unions: [],
}
},
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
zclydwhidChange(val) {
const union = this.unions.find(v => v.id === val)
if (union) {
this.$set(this.formData, "zclydwh", union.unionname)
} else {
this.$set(this.formData, "zclydwh", null)
}
},
zcghlxChange(val) {
if (val === "2") {
this.$set(this.formData, "zclydwh", "工会")
} else {
this.$set(this.formData, "zclydwh", null)
this.$set(this.formData, "zclydwhid", null)
}
},
contentCodeChange() {
if (this.formData.zcgzrq) {
this.zcrksjChange(this.formData.zcgzrq)
} else {
this.$set(this.formData, "zcgzrq", null);
}
},
zcrksjChange(val) {
if (!this.formData.contentCode) {
this.$message.warning('请选择资产所属类别');
this.formData.zcgzrq = null
return
}
const lbList = clone(this.lbList)
const data = lbList.find(v => v.contentCode === this.formData.contentCode)
const depreciationDate = moment(val).add(data.depreciationYear, 'y').format('YYYY-MM-DD')
this.$set(this.formData, "depreciationDate", depreciationDate)
},
zclyrChange(val) {
const {
loginname,
unionname,
username,
unionid
} = this.LyrOption.find(v => v.id === val)
this.formData.zclyrgh = loginname
this.formData.zclydwhid = unionid
this.formData.zclyrname = username
if (this.formData.zcghlx === '2') {
this.formData.zclydwh = "工会"
} else {
this.formData.zclydwh = unionname
}
},
async searchLyr(query) {
if (query != '') {
this.loading = true;
this.LyrOption = await searchUser(query)
this.loading = false;
}
},
doSubmit() {
this.$refs["AddForm"].validate((valid) => {
if (valid) {
let url = this.formData.zcid ? "/platform/zcgl/zcdj/doEdit" : "/platform/zcgl/zcdj/doSubmit"
$.post(url, this.formData).then(resp => {
if (resp.code === 0) {
this.$refs.AddForm.resetFields()
this.$message.success(resp.msg);
} else {
this.$message.warning(resp.msg);
}
})
}
})
},
async findOne(id) {
this.loading = true;
const resp = await $.post("/platform/zcgl/zcdj/findOne", {id})
if (resp.code === 0) {
await this.searchLyr(resp.data.zclyrgh);
this.formData = resp.data;
}
this.loading = false
},
async findLb() {
const data = await $.post("/platform/zcgl/zclb/queryLb")
this.lbList = data.data
}
},
async created() {
await this.findLb();
this.unions = await getUnions(null)
},
}
</script>
<style>
.formClass .el-form-item {
margin-bottom: 0px !important;
}
.required-form-item::before {
content: '*';
color: #f56c6c;
margin-right: 3px;
}
</style>
@@ -0,0 +1,222 @@
<template>
<div>
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
<el-tab-pane label="基本信息" name="1" class="tabPane">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="资产编号">
{{ viewData.zcbh }}
</el-descriptions-item>
<el-descriptions-item label="名称">
{{ viewData.zcmc }}
</el-descriptions-item>
<el-descriptions-item label="单价">
{{ viewData.zcdj }}元
</el-descriptions-item>
<el-descriptions-item label="数量">
{{ viewData.sl }}
</el-descriptions-item>
<el-descriptions-item label="规格型号">
{{ viewData.zcxh }}
</el-descriptions-item>
<el-descriptions-item label="资产所属类别">
<template v-if="viewData.contentCode">
{{ viewData.content }}({{ viewData.contentCode }})
</template>
</el-descriptions-item>
<el-descriptions-item label="厂家">
{{ viewData.zccj }}
</el-descriptions-item>
<el-descriptions-item label="存放地名称">
{{ viewData.zccfdmc }}
</el-descriptions-item>
<el-descriptions-item label="购置日期">
{{ viewData.zcgzrq }}
</el-descriptions-item>
<el-descriptions-item label="折旧到期时间">
{{ viewData.depreciationDate }}
</el-descriptions-item>
<el-descriptions-item label="分类号">
{{ viewData.zcgbflh }}
</el-descriptions-item>
<el-descriptions-item label="领用人">
{{ viewData.zclyrname }}
</el-descriptions-item>
<el-descriptions-item label="领用工会">
{{ viewData.zclydwh }}
</el-descriptions-item>
<el-descriptions-item label="资产状态">
{{ viewData.zczt }}
</el-descriptions-item>
<el-descriptions-item label="经费科目">
{{ viewData.fundingSubject }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="盘点信息" name="2">
<el-table :data="viewData.bdData"
class="tabInfo"
header-align="center"
size="small"
style="width: 100%"
>
<el-table-column
align="center"
header-align="center"
label="院级工会"
prop="zcnowlydwh"
show-overflow-tooltip>
</el-table-column>
<!-- <el-table-column
align="center"
header-align="center"
label="账面价值"
prop="zmjz" show-overflow-tooltip>
</el-table-column>-->
<el-table-column
align="center"
header-align="center"
label="购置日期" prop="zcgzrq"
show-overflow-tooltip>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="责任人" prop="shrname"
show-overflow-tooltip>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="联系方式" prop="mobile"
show-overflow-tooltip>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="存放地点" prop="zcnowcfdmc"
show-overflow-tooltip>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="资产照片"
prop="zcfile"
width="250">
<template scope="{row}">
<span v-if="!row.zcfile">暂无</span>
<div v-else>
<file-upload :files.sync="row.zcfile"
view></file-upload>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="盘点情况" prop="pdzt"
show-overflow-tooltip
width="100">
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="情况说明" prop="wpdzt"
show-overflow-tooltip
width="100">
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="使用情况"
prop="zczt" show-overflow-tooltip
width="100">
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="盘点时间" prop="zcbdsj"
show-overflow-tooltip>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane v-if="handle" :label="label" name="999">
<slot name="handle"></slot>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
module.exports = {
props: {
id: String,
handle: {
type: Boolean,
default: false,
},
label: {
type: String,
default: '审核'
},
panes: {
type: Array,
default: []
}
},
data() {
return {
loading: true,
viewData: {},
activeName: '1',
}
},
methods: {
hasPane(name) {
if (!this.handle) {
return true
}
return this.panes.includes(name)
},
async findOne(id) {
const resp = await $.get("/platform/zcgl/tzgl/findOne", {id})
if (resp.code === 0) {
const pdData = await $.post("/platform/zcgl/gdzcbg/queryChangeData", {zcid: id})
if (pdData.code === 0) {
pdData.data.forEach(v => {
if (v.zcfile) {
v.zcfile = JSON.parse(v.zcfile)
}
})
resp.data.bdData = pdData.data
} else {
resp.data.bdData = []
}
this.viewData = resp.data
} else {
}
this.loading = false
}
}
}
</script>
<style>
.tabPane .el-descriptions-item__label.is-bordered-label {
display: flex;
justify-content: center;
}
</style>
@@ -129,6 +129,10 @@
Vue.component('dict-tag', httpVueLoader('/components/plugins/sysDict/DictTag.vue'))
Vue.component('border-table', httpVueLoader('/components/plugins/BorderTable.vue'))
Vue.component('text-editor', httpVueLoader('/components/plugins/TextEditor.vue'))
Vue.component('el-tab-plus', httpVueLoader('/components/plugins/ELTabPlus.vue'))
Vue.component('dict-select', httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.1'))
Vue.component('enum-select', httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'))
Vue.component('custom-message', httpVueLoader('/components/plugins/CustomMessage.vue'))
Vue.use(httpVueLoader)
Vue.component(VueQrcode.name, VueQrcode)
+199 -103
View File
@@ -19,6 +19,7 @@ layout("/mobile/platform.html"){
@click="sexPicker = true"
placeholder="请选择性别"
clickable
:rules="[{ required:true, message: '请选择性别' }]"
left-icon="ellipsis"></van-field>
<van-popup v-model="sexPicker" position="bottom">
<van-picker
@@ -55,89 +56,66 @@ layout("/mobile/platform.html"){
></van-picker>
</van-popup>
<van-field label="学位" v-model="formData.academicDegree" readonly clickable
left-icon="comment-o"
@click="academicDegreePicker = true" placeholder="请选择学位"
:rules="[{ required:true, message: '请选择学位' }]"></van-field>
<van-popup v-model="academicDegreePicker" position="bottom">
<van-field label="政治面貌" v-model="formData.political" readonly clickable
left-icon="label-o"
@click="politicalPicker = true" placeholder="请选择政治面貌"
:rules="[{ required:true, message: '请选择政治面貌' }]"></van-field>
<van-popup v-model="politicalPicker" position="bottom">
<van-picker
show-toolbar
:columns="academicDegreeColumns"
@confirm="(v)=>{formData.academicDegree = v;academicDegreePicker = false}"
@cancel="academicDegreePicker = false"
:columns="politicalColumns"
@confirm="(v)=>{formData.political = v;politicalPicker = false}"
@cancel="politicalPicker = false"
></van-picker>
</van-popup>
<van-field label="婚否" v-model="formData.marriage" readonly clickable
left-icon="flower-o"
@click="marriagePicker = true" placeholder="请选择婚否"
:rules="[{ required:true, message: '请选择婚否' }]"></van-field>
<van-popup v-model="marriagePicker" position="bottom">
<van-picker
show-toolbar
:columns="marriageColumns"
@confirm="(v)=>{formData.marriage = v;marriagePicker = false}"
@cancel="marriagePicker = false"
></van-picker>
</van-popup>
<van-field label="政治面貌" v-model="formData.political" placeholder="请填写政治面貌"
left-icon="label-o"
:rules="[{ required:true, message: '请填写政治面貌' }]"></van-field>
<van-field label="身份证" v-model="formData.idcard" placeholder="请填写身份证号码"
left-icon="idcard"
:rules="[{ required:true, message: '请填写身份证号码' }]"></van-field>
:rules="[{ required:true, message: '请填写身份证号码' },{pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: '身份证号码格式错误'}]"></van-field>
<van-field label="联系电话" v-model="formData.mobile" type="tel" placeholder="请填写联系电话"
left-icon="phone-o"
:rules="[{ required:true, message: '请填写联系电话' }]"></van-field>
</van-cell-group>
:rules="[{ required:true, message: '请填写联系电话' },{pattern: /^1[3456789]\d{9}$/, message: '联系电话格式错误'}]"></van-field>
<van-field label="所属单位" v-model="formData.unitname" readonly clickable
left-icon="flower-o"
@click="unitPicker = true" placeholder="请选择所属单位"
:rules="[{ required:true, message: '请选择所属单位' }]"></van-field>
<van-popup v-model="unitPicker" position="bottom">
<van-picker
show-toolbar
value-key="name"
:columns="unitColumns"
@confirm="(v)=>{formData.unitname = v.name;formData.unitid = v.id;unitPicker = false}"
@cancel="unitPicker = false"
></van-picker>
</van-popup>
<van-cell-group inset class="mt10">
<van-field label="户口所在地" v-model="formData.registeredResidence" placeholder="请填写户口所在地"
left-icon="wap-home-o"
:rules="[{ required:true, message: '请填写户口所在地' }]"></van-field>
<van-field label="现居住地" v-model="formData.homeAddress" placeholder="请填写现居住地"
left-icon="home-o"
:rules="[{ required:true, message: '请填写现居住地' }]"></van-field>
<van-field label="工作单位" value="${@shiro.getPrincipalProperty('unit').getName()}"
left-icon="cluster-o"
readonly></van-field>
<van-field label="职务" v-model="formData.position" placeholder="请填写职务"
<!-- <van-field label="工作单位" value="${@shiro.getPrincipalProperty('unit').getName()}"-->
<!-- left-icon="cluster-o"-->
<!-- readonly></van-field>-->
<van-field label="岗位" placeholder="请填写岗位" v-model="formData.jobTitle"
left-icon="debit-pay"
:rules="[{ required:true, message: '请填写职务' }]"></van-field>
</van-cell-group>
<van-cell-group inset class="mt10 up_down">
<div class="van-cell">
<div class="van-cell__title van-field__label" style="display: flex;justify-content: space-between">
<div style="display: flex;">
<div class="van-field__left-icon">
<i class="van-icon van-icon-friends-o"></i>
</div>
<div class="van-cell__title van-field__label" style="width: auto">
<span>家庭主要成员及联系方式</span>
</div>
</div>
<van-button v-if="family && family.length>0 && family.length<3" style="width: 40px"
icon="plus" type="primary" round size="mini"
@click="family.push({})"
native-type="button"></van-button>
</div>
<van-divider></van-divider>
<template v-if="family && family.length>0">
<div v-for="o,i in family" class="mt5">
<div style="font-weight: 700;display: flex;justify-content: space-between">
<span>成员{{toChinesNum(i+1)}}</span>
<van-button style="width: 40px"
icon="minus" type="danger" round size="mini"
@click="family.splice(i,1)"
native-type="button"></van-button>
</div>
<van-field label="关系" v-model="o.relation" placeholder="请填写与本人关系"
:rules="[{ required:true, message: '请填写与本人关系' }]"></van-field>
<van-field label="姓名" v-model="o.name" placeholder="请填写姓名"
:rules="[{ required:true, message: '请填写姓名' }]"></van-field>
<van-field label="联系方式" v-model="o.mobile" type="tel" placeholder="请填写联系方式"
:rules="[{ required:true, message: '请填写联系方式' }]"></van-field>
</div>
</template>
<template v-else>
<div style="padding: 50px;text-align: center">
<van-button style="width: 50px"
icon="plus" type="primary" round size="mini"
@click="family.push({})"
native-type="button"></van-button>
</div>
</template>
</div>
:rules="[{ required:true, message: '请填写岗位' }]"></van-field>
</van-cell-group>
<van-cell-group inset class="mt10 up_down">
@@ -147,14 +125,14 @@ layout("/mobile/platform.html"){
<i class="van-icon van-icon-notes-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>个人工作简历</span>
<span>工作经历</span>
</div>
</div>
<van-divider></van-divider>
<van-field
v-model="formData.vita"
:rules="[{ required:true, message: '请填写个人工作简历' }]"
:rules="[{ required:true, message: '请填写工作经历' }]"
style="padding: 0"
input-align="left"
autosize
@@ -162,7 +140,7 @@ layout("/mobile/platform.html"){
autosize
type="textarea"
maxlength="200"
placeholder="请输入个人工作简历"
placeholder="请输入工作经历"
show-word-limit
></van-field>
</div>
@@ -176,7 +154,7 @@ layout("/mobile/platform.html"){
<i class="van-icon van-icon-award-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>特长</span>
<span>有何特长</span>
</div>
</div>
@@ -197,9 +175,84 @@ layout("/mobile/platform.html"){
</div>
</van-cell-group>
<van-cell-group class="mt10" inset>
<van-field label="签字" required style="flex-flow: column">
<template #label>
<div class="mb10">签&emsp;&emsp;字</div>
</template>
<template #input>
<mobile-sign :my_sign.sync="formData.sign" ref="signature"></mobile-sign>
</template>
</van-field>
</van-cell-group>
<van-cell-group inset class="mt10 up_down">
<div class="van-cell">
<div class="van-cell__title van-field__label" style="display: flex;justify-content: space-between">
<div style="display: flex;">
<div class="van-field__left-icon">
<i class="van-icon van-icon-friends-o"></i>
</div>
<div class="van-cell__title van-field__label" style="width: auto">
<span>家庭成员</span>
</div>
</div>
<van-button v-if="formData.family && formData.family.length>0 && formData.family.length<3"
style="width: 40px"
icon="plus" type="primary" round size="mini"
@click="formData.family.push({})"
native-type="button"></van-button>
</div>
<van-divider></van-divider>
<template v-if="formData.family && formData.family.length>0">
<div v-for="o,i in formData.family" class="mt5">
<div style="font-weight: 700;display: flex;justify-content: space-between">
<span>成员{{toChinesNum(i+1)}}</span>
<van-button style="width: 40px"
icon="minus" type="danger" round size="mini"
@click="formData.family.splice(i,1)"
native-type="button"></van-button>
</div>
<van-field label="与本人关系" v-model="o.relation" placeholder="请填写与本人关系"
:rules="[{ required:true, message: '请填写与本人关系' }]"></van-field>
<van-field label="姓名" v-model="o.name" placeholder="请填写姓名"
:rules="[{ required:true, message: '请填写姓名' }]"></van-field>
<van-field name="isCondolence" label="是否慰问">
<template #input>
<van-radio-group v-model="o.isCondolence" direction="horizontal">
<van-radio name="是">是</van-radio>
<van-radio name="否">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="慰问时间" v-model="o.condolenceTime"
placeholder="请选择慰问时间" @click="doShowCondolenceCalendar(i)"></van-field>
<van-calendar v-model="condolenceShow" :min-date="new Date('1999-01-01')" :show-confirm="false"
@confirm="condolenceConfirm"></van-calendar>
<van-field label="备注" v-model="o.remark" type="tel" placeholder="请填写备注"></van-field>
</div>
</template>
<template v-else>
<div style="padding: 50px;text-align: center">
<van-button style="width: 50px"
icon="plus" type="primary" round size="mini"
@click="formData.family.push({})"
native-type="button"></van-button>
</div>
</template>
</div>
</van-cell-group>
<div style="margin: 20px 20px 10px;">
<van-button native-type="submit" style="border-radius: 10px" block type="info" :color="themeColor">
提 交
<van-button
:disabled="!(unionInfo.apply||unionInfo.reApply)"
native-type="submit" style="border-radius: 10px" block type="info" :color="themeColor">
<span v-if="unionInfo.apply||unionInfo.reApply">{{unionInfo.reApply?'重新申请':'申请加入'}}</span>
<span v-else-if="unionInfo.record">{{unionInfo.record.stateName}}</span>
<span v-else>您已是会员</span>
</van-button>
</div>
</van-form>
@@ -212,16 +265,14 @@ layout("/mobile/platform.html"){
mixins: [mobileMixins],
data() {
return {
unionInfo: {},
sexPicker: false,
applyRecords: [],
formData: {},
nationPicker: false,
educationPicker: false,
academicDegreePicker: false,
family: [],
educationColumns: [
'博士研究生', '硕士研究生', '本科', '专科', '中专中技', '高中', '初中以下'
],
educationColumns: [],
academicDegreeColumns: [
'学士', '硕士', '博士'
],
@@ -231,30 +282,83 @@ layout("/mobile/platform.html"){
APPLYING: 2,
NOTMEBMER: 3,
},
memberStatus: null
memberStatus: null,
politicalPicker: false,
politicalColumns: [],
marriagePicker: false,
marriageColumns: [],
unitPicker: false,
unitColumns: [],
condolenceShow: false,
familyIndex: null,
}
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
doShowCondolenceCalendar(index){
console.log(index)
this.condolenceShow = true
this.familyIndex = index
},
condolenceConfirm(val){
if (val) {
this.formData.family[this.familyIndex].condolenceTime = moment(val).format('YYYY-MM-DD')
this.condolenceShow = false
this.familyIndex = null
}
console.log(val)
},
async doSubmit() {
this.$refs.signature.submitSign()
if (this.$refs.signature.checkNull()) {
vant.Toast('请签字')
return
}
await this.$refs.signature.updateSign()
const formData = clone(this.formData)
formData.family = JSON.stringify(this.family)
formData.family = JSON.stringify(this.formData.family)
const loading = this.$toast.loading({
message: '数据提交中...',
forbidClick: true,
overlay: true,
duration: 0
})
const resp = await $.post("/platform/member/apply/submit/doEdit", formData)
const data = await $.get("/platform/member/apply/submit/doApply", {memberStates: 1})
const data = await $.post("/platform/member/apply/submit/doApply", {
memberStates: 1,
sign: formData.sign,
})
setTimeout(() => {
this.$toast.success('提交成功');
loading.close()
setTimeout(() => {
location.replace('/mobile/index')
}, 300)
}, 500)
},
addFamily() {
this.family.push({})
}
async getUnionInfo() {
const resp = await $.get("/platform/member/apply/submit/unionInfo")
if (resp.code === 0) {
this.unionInfo = resp.data
this.formData = resp.data
this.$set(this.formData, "family", resp.data.family ? JSON.parse(resp.data.family) : [])
this.formData = resp.data
} else {
this.$toast(resp.msg)
}
},
},
async created() {
this.$set(this.formData, "isMember", "${@shiro.getPrincipalProperty('member')}")
this.$set(this.formData, "sex", "${@shiro.getPrincipalProperty('sex')}")
if ("${@shiro.getPrincipalProperty('sex')}" === '未知') {
this.$set(this.formData, "sex", '')
} else {
this.$set(this.formData, "sex", "${@shiro.getPrincipalProperty('sex')}")
}
this.$set(this.formData, "position", "${@shiro.getPrincipalProperty('position')}")
this.$set(this.formData, "marriage", "${@shiro.getPrincipalProperty('marriage')}")
this.$set(this.formData, "nation", "${@shiro.getPrincipalProperty('nation')}")
this.$set(this.formData, "mobile", "${@shiro.getPrincipalProperty('mobile')}")
this.$set(this.formData, "political", "${@shiro.getPrincipalProperty('political')}")
@@ -266,25 +370,21 @@ layout("/mobile/platform.html"){
this.$set(this.formData, "homeAddress", "${@shiro.getPrincipalProperty('homeAddress')}")
this.$set(this.formData, "vita", "${@shiro.getPrincipalProperty('vita')}")
this.$set(this.formData, "specialSkill", "${@shiro.getPrincipalProperty('specialSkill')}")
// const {data} = await $.get("/mobile/member/getAllNation");
/* this.nationColumns = data.map(v => {
return v.mzmc
}) */
this.$set(this.formData, "jobTitle", "${@shiro.getPrincipalProperty('jobTitle')}")
this.$set(this.formData, "unitname", "${@shiro.getPrincipalProperty('unit').getName()}")
this.$set(this.formData, "unitid", "${@shiro.getPrincipalProperty('unit').getId()}")
this.nationColumns = nation
const resp = await $.get("/platform/member/apply/submit/unionInfo")
this.applyRecords = resp.data.records
if (resp.data.member === 1) {
this.memberStatus = this.memberStatusColumn.MEMBER
} else {
if (resp.data.record != null) {
this.memberStatus = this.memberStatusColumn.APPLYING
} else {
this.memberStatus = this.memberStatusColumn.NOTMEBMER
}
}
const education = await getDictByCode('Education')
this.educationColumns = education.map(o => o.code)
const political = await getDictByCode('political')
this.politicalColumns = political.map(o => o.code)
const marriage = await getDictByCode('maritalStatus')
this.marriageColumns = marriage.map(o => o.code)
this.unitColumns = await getUnionUnits()
await this.getUnionInfo()
}
})
</script>
@@ -298,10 +398,6 @@ layout("/mobile/platform.html"){
width: 100%;
}
.van-cell, .van-picker button, .submit .van-button--normal {
font-size: 16px;
}
.van-divider {
margin: 10px 0;
}
@@ -309,4 +405,4 @@ layout("/mobile/platform.html"){
</style>
<!--#
}
#-->
#-->
@@ -98,28 +98,94 @@ layout("/mobile/platform.html"){
</div>
</div>
<van-cell-group>
<van-cell title="姓名">{{ viewData.username }}</van-cell>
<van-cell title="性别">{{ viewData.sex }}</van-cell>
<van-cell title="年龄">{{ viewData.birthday }}</van-cell>
<van-cell title="民族">{{ viewData.mz }}</van-cell>
<van-cell title="文化程度">{{ viewData.xl }}</van-cell>
<van-cell title="政治面貌">{{ viewData.zzmm }}</van-cell>
<van-cell title="部门">{{ viewData.unitname }}</van-cell>
<van-cell title="职称">{{ viewData.zc }}</van-cell>
<van-cell title="职务">{{ viewData.zw }}</van-cell>
<van-field :value="viewData.loginname" label="工号" left-icon="contact"></van-field>
<van-field label="姓名" :value="viewData.username" left-icon="contact"></van-field>
<van-field label="性别" :value="viewData.sex" left-icon="ellipsis"></van-field>
<van-field label="民族" left-icon="bar-chart-o" :value="viewData.nation"></van-field>
<van-field label="学历" left-icon="coupon-o" :value="viewData.education"></van-field>
<!-- <van-field label="学位" left-icon="comment-o" :value="viewData.academicDegree"></van-field>-->
<van-field label="政治面貌" left-icon="label-o" :value="viewData.political"></van-field>
<van-field label="婚否" left-icon="label-o" :value="viewData.marriage"></van-field>
<!-- <van-field :value="viewData.personType" label="人员类型" left-icon="label-o"></van-field>-->
<van-field label="身份证号码" left-icon="idcard" :value="viewData.idcard"></van-field>
<van-field label="联系电话" left-icon="phone-o" :value="viewData.mobile"></van-field>
<van-field label="户口所在地" left-icon="wap-home-o" :value="viewData.registeredResidence"></van-field>
<van-field label="现居住地" left-icon="home-o" :value="viewData.homeAddress"></van-field>
<van-field label="工作部门(学院)及岗位" left-icon="cluster-o" :value="viewData.unitname + '、' + viewData.jobTitle"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
个人简历
<van-cell-group class="mt10 up_down">
<div class="van-cell" style="flex-flow: column">
<div style="display: flex">
<div class="van-field__left-icon">
<i class="van-icon van-icon-notes-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>简历</span>
</div>
</div>
<van-divider></van-divider>
<van-field readonly>
<template #input>
<div v-html="viewData.vita"></div>
</template>
</van-field>
</div>
</van-cell-group>
<van-cell-group class="mt10 up_down">
<div class="van-cell" style="flex-flow: column">
<div style="display: flex">
<div class="van-field__left-icon">
<i class="van-icon van-icon-award-o"></i>
</div>
<div class="van-cell__title van-field__label">
<span>有何特长</span>
</div>
</div>
<van-divider></van-divider>
<van-field readonly>
<template #input>
<div v-html="viewData.specialSkill"></div>
</template>
</van-field>
</div>
</van-cell-group>
<van-cell-group class="mt10 up_down">
<div class="van-cell" style="flex-flow: column">
<div class="van-cell__title van-field__label" style="display: flex;justify-content: space-between">
<div style="display: flex;">
<div class="van-field__left-icon">
<i class="van-icon van-icon-friends-o"></i>
</div>
<div class="van-cell__title van-field__label" style="width: auto">
<span>家庭成员</span>
</div>
</div>
</div>
<van-divider></van-divider>
<div v-if="family && family.length>0">
<div v-for="(o,i) in family" class="mt5">
<div style="font-weight: 700;display: flex;justify-content: space-between">
<span>成员{{ toChinesNum(i + 1) }}</span>
</div>
<van-form readonly input-align="right">
<van-field label="与本人关系" :value="o.relation" left-icon="exchange"></van-field>
<van-field label="姓名" :value="o.name" left-icon="user-o"></van-field>
<van-field label="是否慰问" :value="o.isCondolence" left-icon="shield-o"></van-field>
<van-field label="慰问时间" :value="o.condolenceTime" left-icon="guide-o"></van-field>
<van-field label="备注" :value="o.remark" left-icon="coupon-o"></van-field>
</van-form>
</div>
</div>
<div v-else style="height: 100px">
暂无家庭成员信息
</div>
</div>
</div>
<van-cell-group>
<van-cell>
<template>
<div v-html="viewData.grjl" v-if="viewData.grjl!=null"></div>
<div v-else>暂无</div>
</template>
</van-cell>
</van-cell-group>
</van-popup>
@@ -142,6 +208,7 @@ layout("/mobile/platform.html"){
unionList: [],
unitList: [],
viewData: {},
family: []
}
},
methods: {
@@ -170,9 +237,10 @@ layout("/mobile/platform.html"){
}, 300)
},
async viewInfo(id) {
const resp = await $.post('/mobile/member/viewInfo', {id: id})
const resp = await $.post('/platform/member/common/userInfo', {userId: id})
if (resp.code === 0) {
this.viewData = resp.data
this.family = JSON.parse(resp.data.family)
this.infoShow = true
}
},
@@ -225,4 +293,4 @@ layout("/mobile/platform.html"){
<!--#
}
#-->
#-->
@@ -34,6 +34,14 @@ layout("/mobile/platform.html"){
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" style="flex-flow: column">
<template #label>
<div class="mb10">签&emsp;&emsp;字</div>
</template>
<template #input>
<mobile-sign ref="signature" :my_sign.sync="formData.auditSign"></mobile-sign>
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="12">
@@ -69,6 +77,7 @@ layout("/mobile/platform.html"){
},
components: {
'member-menber-info': httpVueLoader('/components/mobile/member/MobileMemberInfo.vue?v=' + new Date().getTime()),
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
async doAudit(pass) {
@@ -109,4 +118,4 @@ layout("/mobile/platform.html"){
<!--#
}
#-->
#-->
@@ -35,6 +35,14 @@ layout("/mobile/platform.html"){
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" style="flex-flow: column">
<template #label>
<div class="mb10">签&emsp;&emsp;字</div>
</template>
<template #input>
<mobile-sign ref="signature" :my_sign.sync="formData.auditSign"></mobile-sign>
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="12">
@@ -69,6 +77,7 @@ layout("/mobile/platform.html"){
},
components: {
'member-menber-info': httpVueLoader('/components/mobile/member/MobileMemberInfo.vue?v=' + new Date().getTime()),
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
@@ -111,4 +120,4 @@ layout("/mobile/platform.html"){
<!--#
}
#-->
#-->
@@ -0,0 +1,690 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-card {
background: #ffffff;
margin: 10px auto 0;
width: 96%;
border-radius: 10px;
padding: 14px 12px;
}
.van-card__thumb {
display: flex;
align-items: center;
justify-content: center;
}
.van-card__content > div {
height: 100%;
display: flex;
flex-direction: column;
}
.train-title {
flex: 0.6;
margin-top: 4px;
}
.van-doc-card {
margin: 14px;
padding: 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 12px;
}
.van-divider {
margin: 6px 0 5px 0px;
border-color: #081776;
}
.van-tabs {
z-index: 0 !important;
}
.van-empty {
height: 70%;
top: 54%;
background-color: #F6F7F9;
}
</style>
<div id="app" v-cloak>
<van-nav-bar
@click-left="history.back()"
fixed
left-arrow
placeholder
title="资产列表"
></van-nav-bar>
<div class="search-fixed">
<van-dropdown-menu :active-color="themeColor">
<van-dropdown-item :options="yearOption" @change="getPdPlan"
v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="pdPlanList" v-model="pageForm.zcpdid"></van-dropdown-item>
<van-dropdown-item :options="zcLxList" @change="doSearch"
v-model="pageForm.zcghlx"></van-dropdown-item>
</van-dropdown-menu>
</div>
<van-tabs @click="doSearch" style="margin-top: 53px" v-model="pageForm.isPd">
<van-tab title="全部"></van-tab>
<van-tab title="已盘点"></van-tab>
<van-tab title="未盘点"></van-tab>
</van-tabs>
<div style="margin: 0px auto 0 auto">
<van-list
:finished="finished"
:finished-text="tableData.length>0?'没有更多了':''"
:loading="mLoading"
@load="onLoad" v-if="tableData.length>0"
v-model="mLoading">
<div class="van-doc-card" v-for="o in tableData">
<div @click="welfareClick(o)" style="position: relative">
<div>
<div class="van-ellipsis"
style="margin-top: 6px; font-size: 15px;font-weight: bold;flex: 1">
{{o.zcmc}}({{o.zcbh}})
</div>
</div>
<div>
<div class="train-title"><span
style="color: grey">资产规格:</span>{{o.zcxh?o.zcxh:'暂无'}}
</div>
<div class="train-title"><span style="color: grey">资产类型:</span>{{o.zcghlx==='1'?'院级工会':'校工会'}}
</div>
<div class="train-title"><span style="color: grey">购置日期:</span>{{o.zcgzrq}}
</div>
<div class="train-title"><span style="color: grey">存放地名称:</span>{{o.zccfdmc}}
</div>
<van-divider></van-divider>
</div>
<div class="train-title"><span style="color: grey">领用人:</span>
{{o.zclyrname?o.zclyrname:'暂无'}}
</div>
<div class="train-title"><span style="color: grey">领用工会:</span>
{{o.zclydwh}}
</div>
<van-button :color="themeColor" @click.stop="openView(o)" plain round
size="mini"
style="position: absolute; left: 55%; bottom: 0%; width: 74px; height: 28px"
type="primary">
查看
</van-button>
<van-button :color="themeColor"
:disabled="pdPlanList.length==0||!pageForm.zcpdid||!pdPlanList.find(p=>p.id===pageForm.zcpdid).isShow"
@click.stop="openPd(o)"
round size="mini"
style="position: absolute; left: 77%; bottom: 0%; width: 74px; height: 28px"
type="primary"
v-if="!o.isPd">
开始盘点
</van-button>
<van-button
:disabled="pdPlanList.length==0||!pageForm.zcpdid||!pdPlanList.find(p=>p.id===pageForm.zcpdid).isShow"
@click.stop="doDelete(o)"
round size="mini"
style="position: absolute; left: 77%; bottom: 0%; width: 74px; height: 28px"
type="danger"
v-if="o.isPd">
删除盘点
</van-button>
</div>
</div>
</van-list>
<div :style="{color:themeColor}"
style="text-align: right;position: fixed;bottom: 20px;right: 20px">
<van-button :color="themeColor" hairline size="mini" type="primary">
总:{{pageForm.totalCount}}条
</van-button>
<van-button :color="themeColor" @click="doHzExcel" hairline size="mini" type="primary">
导出盘点汇总表
</van-button>
</div>
<van-empty
class="custom-image"
description="暂无数据"
image="/none.svg"
v-if="mLoading==false&&tableData.length==0"
></van-empty>
</div>
<van-popup :style="{ height: '100%',width:'100%' }" position="right" v-model="addPdShow">
<van-nav-bar
@click-left="addPdShow=false;doSearch()"
fixed
left-arrow
placeholder
title="新增盘点"
></van-nav-bar>
<van-form @submit="onSubmit">
<van-field :value="formData.zcbh" label="资产编号" readonly required></van-field>
<van-field :value="formData.zcmc" label="资产名称" readonly required></van-field>
<!-- <van-field :value="formData.zmjz" @touchstart.native.stop="zmjzShow = true" clickable
label="账面价值" placeholder="请输入账面价值"
readonly></van-field>
<van-number-keyboard
:show="zmjzShow"
@blur="zmjzShow = false"
close-button-text="完成"
extra-key="."
hide-on-click-outside
safe-area-inset-bottom
theme="custom"
v-model="formData.zmjz"
></van-number-keyboard>-->
<van-field :rules="[{ required: true, message: '' }]" :value="formData.zcgzrq"
@click="zcrksjShow = true"
clickable label="购置日期" placeholder="请输入购置日期"
readonly
required></van-field>
<van-calendar :color="themeColor" :min-date="new Date('1999-01-01')"
@confirm="onConfirmZcrksj" v-model="zcrksjShow"></van-calendar>
<van-field :rules="[{ required: true, message: '' }]" :value="formData.zcbdsj"
@click="zcbdsjShow = true"
clickable label="盘点日期" placeholder="请输入盘点日期"
readonly
required></van-field>
<van-calendar :color="themeColor" :min-date="new Date('1999-01-01')"
@confirm="onConfirmZcbdsj"
required v-model="zcbdsjShow"></van-calendar>
<van-field :rules="[{ required: true, message: '' }]"
@input="userRemoteMethod"
clickable
label="责任人" placeholder="请输入责任人"
required
v-model="formData.zcbdshr_name"></van-field>
<van-action-sheet :actions="userList"
:close-on-click-overlay="false"
@cancel="userList = []"
@select="onUserSelect"
cancel-text="重新输入姓名或工号查询"
v-model="zcbdshrShow">
</van-action-sheet>
<van-field :rules="[{ required: true, message: '' }]" :value="formData.zcnowlydwh"
label="院级工会" placeholder="输入责任人联动"
readonly required></van-field>
<template v-if="formData.zcghlx==='2'">
<van-field @input="lyrRemoteMethod"
clickable
label="领用人" placeholder="请输入领用人"
v-model="formData.zclyrname"></van-field>
<van-action-sheet :actions="userList"
:close-on-click-overlay="false"
@cancel="userList = []"
@select="onLyrUserSelect"
cancel-text="重新输入姓名或工号查询"
v-model="zclyrnameShow">
</van-action-sheet>
</template>
<van-field :rules="[{ required: true, message: '' }]"
clickable
label="存放地点"
maxlength="20" placeholder="请输入存放地点"
required
v-model="formData.zcnowcfdmc"></van-field>
<van-field :rules="[{ required: true, message: '' }]" :value="formData.pdzt"
@click="pdztShow = true"
clickable label="盘点情况" placeholder="请选择盘点情况"
readonly
required></van-field>
<van-popup :style="{ height: '40%' }" position="bottom" v-model="pdztShow">
<van-picker
:columns="pdztColumns"
@cancel="pdztShow = false"
@confirm="(v)=>{formData.pdzt = v;pdztShow = false}"
show-toolbar
title="盘点情况"
></van-picker>
</van-popup>
<van-field :rules="[{ required: true, message: '' }]" clickable label="盘点情况"
placeholder="请输入盘点情况"
required v-if="formData.pdzt!='已盘点'&&formData.pdzt!=null"
v-model="formData.wpdzt"
></van-field>
<!-- <van-popup :style="{ height: '40%' }" position="bottom" v-model="wpdztShow">
<van-picker
:columns="wpdztColumns"
@cancel="wpdztShow = false"
@confirm="(v)=>{formData.wpdzt = v;wpdztShow = false}"
show-toolbar
title="盘点情况"
></van-picker>
</van-popup>-->
<van-field :rules="[{ required: true, message: '' }]" :value="formData.zczt"
@click="zcztShow = true"
clickable label="使用现状" placeholder="请选择使用现状"
readonly
required></van-field>
<van-popup :style="{ height: '40%' }" position="bottom" v-model="zcztShow">
<van-picker
:columns="zcztColumns"
@cancel="zcztShow = false"
@confirm="(v)=>{formData.zczt = v;zcztShow = false}"
show-toolbar
show-toolbar
title="使用现状"
></van-picker>
</van-popup>
<van-field :rules="[{ required: true, message: '请上传资产照片' }]" input-align="left"
label="资产照片"
name="files" required
style="flex-flow: column">
<template #label>
<div class="mb10">资产照片</div>
</template>
<template #input>
<vant-file-upload :files.sync="formData.zcFile" :max="1"></vant-file-upload>
</template>
</van-field>
<div style="margin: 16px;">
<van-button :color="themeColor" block native-type="submit" round type="info">提交
</van-button>
</div>
</van-form>
</van-popup>
<van-popup :style="{ height: '100%',width:'100%' }" position="right" v-model="viewPdShow">
<van-nav-bar
@click-left="viewPdShow=false"
fixed
left-arrow
placeholder
title="查看盘点信息"
></van-nav-bar>
<van-tabs @click="openVIewTab" v-model="viewTabs">
<van-tab :name="1" title="基本信息">
<van-cell-group>
<van-field :value="viewData.zcmc" label="资产名称" readonly></van-field>
<van-field :value="viewData.zcbh" label="资产编号" readonly></van-field>
<van-field :value="viewData.zcdj" label="单价" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.sl" label="数量" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zcghlx==='1'?'院级工会':'校工会'" label="资产类型"
readonly></van-field>
<van-field :value="viewData.zcxh" label="规格型号" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.contentCode" label="类别编号" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.content" label="类别名称" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zccfdmc" label="存放地点" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zcgzrq" label="购置日期" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zclyrname" label="领用人" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zclydwh" label="领用工会" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.pdzt" label="盘点情况" placeholder="暂无"
readonly></van-field>
<van-field :value="viewData.zczt" label="使用现状" placeholder="暂无"
readonly></van-field>
</van-cell-group>
</van-tab>
<van-tab :name="2" title="盘点信息">
<van-collapse accordion v-if="viewData.bdData&&viewData.bdData.length>0"
v-model="collapseName">
<van-collapse-item :name="i" :title="o.zcbdsj" v-for="(o,i) in viewData.bdData">
<van-field :value="o.zcnowlydwh" label="院级工会" readonly></van-field>
<!-- <van-field :value="o.zmjz" label="账面价值" placeholder="暂无"
readonly></van-field>-->
<van-field :value="o.zcgzrq" label="购置日期" placeholder="暂无"
readonly></van-field>
<van-field :value="o.shrname" label="责任人" placeholder="暂无"
readonly></van-field>
<van-field :value="o.mobile" label="联系方式" placeholder="暂无"
readonly></van-field>
<van-field :value="o.pdzt" label="盘点情况" placeholder="暂无"
readonly></van-field>
<van-field :value="o.wpdzt" label="情况说明" placeholder="暂无"
readonly></van-field>
<van-field :value="o.zczt" label="使用现状" placeholder="暂无"
readonly></van-field>
<van-field abel="资产照片" name="zcfile"
required style="flex-flow: column">
<template #label>
<div class="mb10">资产照片</div>
</template>
<template #input>
<vant-file-upload :del="false" :files.sync="o.zcfile"
view></vant-file-upload>
</template>
</van-field>
</van-collapse-item>
</van-collapse>
<van-empty class="custom-image"
description="暂无数据"
image="/none.svg"
style="z-index: 1;position: fixed;height: 75%"
v-if="viewData.bdData&&viewData.bdData.length==0"
></van-empty>
</van-tab>
</van-tabs>
</van-popup>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
collapseName: "",
viewTabs: 1,
viewData: {
bdData: []
},
viewPdShow: false,
zcztColumns: ["在用", "闲置", '未使用', '报废', '校外转入', '校内转入', '其它'],
zcztShow: false,
pdztColumns: ["已盘点", "盘亏", "盘盈", "报废"],
pdztShow: false,
wpdztColumns: ["盘亏", "报废已清拖", "其他"],
wpdztShow: false,
userList: [],
zcbdshrShow: false,
zcbdsjShow: false,
zcrksjShow: false,
zmjzShow: false,
addPdShow: false,
yearOption: [],
pdPlanList: [],
zcLxList: [
{value: '', text: "全部类型"},
{value: 2, text: "校工会"},
{value: 1, text: "院级工会"},
],
pageForm: {
isPd: 2,
zcghlx: ''
},
zclyrnameShow: false
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
doHzExcel() {
window.open("/platform/zcgl/gdzcbg/doHzExcel?zcpdid=" + this.pageForm.zcpdid + "&zcghlx=" + this.pageForm.zcghlx)
},
doDelete(o) {
vant.Dialog.confirm({
title: '温馨提示',
message: '确认要删除本次盘点吗?',
}).then(async () => {
const loading = this.$toast.loading({
message: '删除中...',
forbidClick: true,
overlay: true,
duration: 0
})
const resp = await $.post("/platform/zcgl/gdzcbg/doPdDelete", {zcbdid: o.zcbdid})
if (resp.code === 0) {
await this.doSearch()
this.$toast.success(resp.msg);
} else {
this.$toast.fail(resp.msg);
}
loading.close()
})
},
async openVIewTab(val) {
if (val === 2) {
await this.getPdData(this.viewData.zcid)
if (this.viewData.bdData && this.viewData.bdData.length > 0) {
this.collapseName = 0
}
} else {
this.collapseName = ""
}
},
async openView(row) {
this.viewTabs = 1
this.viewData = clone(row)
this.viewPdShow = true
},
async getPdData(zcid) {
const data = await $.post("/platform/zcgl/gdzcbg/queryChangeData", {zcid: zcid})
if (data.code === 0) {
data.data.forEach(v => {
if (v.zcfile) {
v.zcfile = JSON.parse(v.zcfile)
}
})
this.$set(this.viewData, "bdData", data.data)
} else {
this.$set(this.viewData, "bdData", [])
}
},
onUserSelect(u) {
this.$set(this.formData, 'zcbdshrid', u.id)
this.$set(this.formData, 'zcbdshr_name', u.name)
if (this.formData.zcghlx === "2") {
this.$set(this.formData, "zcnowlydwh", "工会")
} else {
this.$set(this.formData, "zcnowlydwh", u.unionname)
this.$set(this.formData, "zcnowlydwhid", u.unionid)
}
this.$set(this.formData, "mobile", u.mobile)
this.zcbdshrShow = false
},
onLyrUserSelect(u) {
console.log(u)
this.$set(this.formData, "zclyrgh", u.loginname)
this.$set(this.formData, "zclyrname", u.username)
if (this.formData.zcghlx === "2") {
this.$set(this.formData, "zclydwh", "工会")
} else {
this.$set(this.formData, "zclydwh", u.unionname)
}
this.$set(this.formData, "zclydwhid", u.unionid)
this.zclyrnameShow = false
},
onConfirmZcbdsj(date) {
this.$set(this.formData, "zcbdsj", moment(date).format('YYYY/MM/DD'))
this.zcbdsjShow = false
},
onConfirmZcrksj(date) {
this.$set(this.formData, "zcgzrq", moment(date).format('YYYY/MM/DD'))
this.zcrksjShow = false
},
async onSubmit() {
let formData = clone(this.formData)
formData.pdPlanId = this.pageForm.zcpdid
formData.zcFile = JSON.stringify(formData.zcFile)
const resp = await $.post("/platform/zcgl/gdzcbg/doSubmit", formData)
if (resp.code === 0) {
this.$toast.success('新增盘点成功');
// await this.doSearch();
this.tableData = this.tableData.filter(t => t.zcid !== formData.zcid)
this.pageForm.totalCount = this.pageForm.totalCount - 1
this.addPdShow = false
} else {
this.$toast.fail('新增盘点失败');
}
},
async openPd(row) {
this.formData = row
this.$set(this.formData, "zcgzrq", row.zcgzrq)
this.$set(this.formData, "zcbdsj", moment(new Date()).format('YYYY/MM/DD'))
this.$set(this.formData, "zcnowcfdmc", row.zccfdmc)
this.addPdShow = true
},
async userRemoteMethod(event) {
if (event) {
let arr = []
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}") {
arr = await searchUser(event, null, null, null, null)
} else {
arr = await searchUser(event, "${@shiro.getPrincipalProperty('unit').getUnionid()}", null, null, null)
}
this.userList = arr.map(v => {
return {
name: v.username + "(" + v.loginname + ")",
id: v.id,
mobile: v.mobile,
unionname: v.unionname,
loginname: v.loginname,
username: v.username,
}
})
this.zcbdshrShow = true
}
},
async lyrRemoteMethod(event) {
if (event) {
let arr = []
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}") {
arr = await searchUser(event, null, null, null, null)
} else {
arr = await searchUser(event, "${@shiro.getPrincipalProperty('unit').getUnionid()}", null, null, null)
}
this.userList = arr.map(v => {
return {
name: v.username + "(" + v.loginname + ")",
id: v.id,
mobile: v.mobile,
unionname: v.unionname,
loginname: v.loginname,
username: v.username,
unionid: v.unionid,
}
})
this.zclyrnameShow = true
}
},
async doSearch() {
this.tableKey = new Date().getTime()
this.pageForm.pageNumber = 1
this.finished = false;
this.pageForm.totalCount = 0
this.tableData = []
await this.onLoad();
},
async onLoad() {
this.mLoading = true
const res = await $.post('/platform/zcgl/gdzcbg/data', this.pageForm)
const {code, data} = res
if (this.refreshing) {
this.tableData = [];
this.refreshing = false;
}
this.mLoading = false;
if (code === 0) {
this.tableData = this.tableData.concat(data.list)
this.pageForm.totalCount = data.totalCount
if (this.tableData.length === 0) {
this.finished = true;
} else {
if (this.tableData.length >= this.pageForm.totalCount) {
this.finished = true;
this.pageForm.pageNumber++
} else {
this.pageForm.pageNumber++
}
}
}
},
async getPdPlan() {
const resp = await $.post("/platform/zcgl/gdzcbg/getPdPlan", {year: this.pageForm.year})
resp.data.forEach(v => {
const startDate = moment(v.startDate).format('YYYY-MM-DD')
const endDate = moment(v.endDate).format('YYYY-MM-DD')
v.text = startDate + "至" + endDate
v.value = v.id
v.isShow = (moment().format('YYYY-MM-DD hh:mm:ss') > v.startDate && moment().format('YYYY-MM-DD hh:mm:ss') < v.endDate)
})
this.pdPlanList = resp.data
if (this.pdPlanList && this.pdPlanList.length > 0) {
this.$set(this.pageForm, "zcpdid", this.pdPlanList[0].id)
} else {
this.$set(this.pageForm, "zcpdid", '')
}
//
}
},
async created() {
const toast = vant.Toast.loading({
duration: 0, // 持续展示 toast
forbidClick: true,
message: '数据查询中',
});
this.mLoading = true
for (let i = new Date().getFullYear() - 5; i <= new Date().getFullYear(); i++) {
this.yearOption.unshift({value: i, text: i + '年'},)
}
this.$set(this.pageForm, "year", this.yearOption[0].value)
await this.getPdPlan();
setTimeout(async () => {
toast.clear();
this.mLoading = false
await this.doSearch()
}, 500)
}
})
</script>
<!--#
}
#-->
@@ -72,40 +72,41 @@
</div>
</div>
<div class="search-item">
<div class="search-item-label">工会小组:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unionGroupId" style="width: 100%"
filterable
clearable
@change="getThreeUnits"
placeholder="请选择">
<el-option
v-for="item in unionGroups"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
<template v-if="isThreeUnit">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unionGroupId" style="width: 100%"
filterable
clearable
@change="getThreeUnits"
placeholder="请选择">
<el-option
v-for="item in unionGroups"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
<div class="search-item">
<div class="search-item-label">组成科室:</div>
<div class="search-item-option">
<el-select v-model="pageForm.threeUnitId" style="width: 100%" filterable
clearable
placeholder="请选择">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<div class="search-item">
<div class="search-item-label">组成科室:</div>
<div class="search-item-option">
<el-select v-model="pageForm.threeUnitId" style="width: 100%" filterable
clearable
placeholder="请选择">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
@@ -203,69 +204,8 @@
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<div style="float: right;margin: 20px 0">
<el-button @click="doAudit(false)" :loading="submitLoading">拒
绝
</el-button>
<el-button type="primary" @click="doAudit(true)"
:loading="submitLoading">通
过
</el-button>
</div>
</template>
<template v-else>
<el-row :gutter="20" v-if="info&&info.unionAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ info.unionAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ info.unionAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ info.unionAudit.auditOpinion }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
</el-row>
</template>
</el-form>
</el-tab-pane>
<el-tab-pane label="校工会审核" name="school"
v-if="info.unionAudit">
<el-form class="demo-table-expand" :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<vi-title title="审核信息"></vi-title>
<template v-if="!info.schoolAudit&&source==2">
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
<el-form-item prop="auditSign" label="签字">
<sign v-model="formData.auditSign"></sign>
</el-form-item>
<div style="float: right;margin: 20px 0">
@@ -279,24 +219,77 @@
</div>
</template>
<template v-else>
<el-row :gutter="20" v-if="info&&info.schoolAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ info.schoolAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ info.schoolAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-descriptions :column="2" border class="descriptions-form" v-if="info&&info.unionAudit">
<el-descriptions-item label="审核人员">{{ info.unionAudit.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ info.unionAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核意见" span="2">{{ info.unionAudit.auditOpinion }}</el-descriptions-item>
<el-descriptions-item label="签字" span="2">
<el-image
v-if="info.unionAudit.auditSign"
:src="info.unionAudit.auditSign"
style="width: 100px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ info.schoolAudit.auditOpinion }}</span>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
</el-row>
</template>
</el-form>
</el-tab-pane>
<el-tab-pane label="校工会审核" name="school"
v-if="info.unionAudit">
<el-form class="demo-table-expand" :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<vi-title title="审核信息"></vi-title>
<template v-if="!info.schoolAudit&&source==2">
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<el-form-item prop="auditSign" label="签字">
<sign v-model="formData.auditSign"></sign>
</el-form-item>
<div style="float: right;margin: 20px 0">
<el-button @click="doAudit(false)" :loading="submitLoading">拒
绝
</el-button>
<el-button type="primary" @click="doAudit(true)"
:loading="submitLoading">通
过
</el-button>
</div>
</template>
<template v-else>
<el-descriptions :column="2" border class="descriptions-form" v-if="info&&info.schoolAudit">
<el-descriptions-item label="审核人员">{{ info.schoolAudit.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ info.schoolAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核意见" span="2">{{ info.schoolAudit.auditOpinion }}</el-descriptions-item>
<el-descriptions-item label="签字" span="2">
<el-image
v-if="info.schoolAudit.auditSign"
:src="info.schoolAudit.auditSign"
style="width: 100px; height: 100px"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
@@ -348,12 +341,13 @@
{prop: 'mobile', label: '联系电话'},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true},
{prop: 'unionGroupName', label: '工会小组', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true ,checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true ,checked: 0},
{prop: 'applyDate', label: '申请时间', sortable: true},
{prop: 'stateId', label: '状态', sortable: true},
],
units: []
units: [],
isThreeUnit: null,
}
},
components: {
@@ -367,10 +361,10 @@
this.submitLoading = true
const resp = await $.post("/platform/member/apply/audit/doAudit", this.formData)
this.submitLoading = false
if(resp.code===0){
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
}else{
} else {
this.notifyWarning(resp.msg)
}
},
@@ -378,8 +372,8 @@
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findApplyInfo", {id: row.id})
this.$set(row, "loading", false)
if(resp.code===0){
const data = resp.data
if (resp.code === 0) {
const data = resp.data
data.audit = audit
this.info = data
@@ -403,7 +397,7 @@
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
}else{
} else {
this.notifyWarning(resp.msg)
this.info = {}
}
@@ -438,6 +432,15 @@
}
},
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
if (this.isThreeUnit) {
this.tableColumns.forEach(v => {
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
v.checked = 1
}
})
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
@@ -71,7 +71,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-button
:disabled="!((unionInfo.apply||unionInfo.reApply)&&reading)"
:disabled="!((unionInfo.apply||unionInfo.reApply))"
type="primary"
@click="apply"
style="width: 70%;margin-left: 15%;margin-top: 20px">
@@ -80,12 +80,15 @@ layout("/layouts/platform.html"){
<span v-else>您已是会员</span>
</el-button>
<el-radio
<!--<el-radio
style="width: 70%;margin-left: 15%;margin-top: 20px;color: #F56C6C"
v-model="reading" :label="true">
阅读须知:我自愿加入工会
</el-radio>
</el-radio>-->
<el-button style="width: 70%;margin-top: 10px;margin-left: 15%;" type="primary" @click="exportApply">
导出申请表
</el-button>
</div>
</el-card>
</div>
@@ -209,8 +212,18 @@ layout("/layouts/platform.html"){
</template>
<template #edit>
<el-form :model="formData" :rules="rules" ref="AddForm" label-width="170px">
<div style="width: 800px;margin: 0 auto;">
<h3 style="text-align: center">中华全国总工会</h3>
<h3 style="text-align: center">入会申请书</h3>
<p style="text-indent: 2em">
我自愿加入中华全国总工会,遵守工会章程,执行工会决议,积极参加工会活动,为全面建成小康社会、把我国建设成为富强民主文明和谐美丽的社会主义现代化强国、实现中华民族伟大复兴的中国梦而奋斗。
</p>
</div>
<el-divider></el-divider>
<el-form :model="formData" :rules="rules" ref="AddForm" label-width="170px">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="姓名" prop="username">
@@ -219,13 +232,6 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工号" prop="loginname">
<el-input disabled placeholder="工号"
v-model="formData.loginname"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-radio v-model="formData.sex" label="男" border size="small">男
@@ -237,7 +243,7 @@ layout("/layouts/platform.html"){
<el-col :span="8">
<el-form-item prop="nation" label="民族">
<el-select placeholder="民族" style="width: 100%" filterable v-model="formData.nation">
<el-select placeholder="请选择民族" style="width: 100%" filterable v-model="formData.nation">
<el-option v-for="nation in nationOptions" :key="nation" :value="nation"
:label="nation"></el-option>
</el-select>
@@ -246,31 +252,24 @@ layout("/layouts/platform.html"){
<el-col :span="8">
<el-form-item prop="education" label="学历">
<dict-select v-model="formData.education" style="width: 100%"
placeholder="请选择学历"
code="Education"></dict-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="academicDegree" label="学位">
<dict-select v-model="formData.academicDegree" style="width: 100%"
placeholder="请选择学位"
code="academicDegree"></dict-select>
<dict-select code="Education" placeholder="请选择学历"
style="width: 100%"
v-model="formData.education"></dict-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="political" label="政治面貌">
<el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>
<dict-select code="political" placeholder="请选择政治面貌"
style="width: 100%"
v-model="formData.political"></dict-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="userState" label="人员类型">
<dict-select v-model="formData.personType" style="width: 100%" placeholder="请选择人员类型"
code="UserType"></dict-select>
<el-form-item prop="marriage" label="婚姻状况">
<dict-select v-model="formData.marriage" style="width: 100%" placeholder="请选择婚姻状况"
code="maritalStatus"></dict-select>
</el-form-item>
</el-col>
@@ -301,42 +300,52 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="8">
<el-form-item prop="registeredResidence" label="户口所在地">
<el-input maxlength="50" placeholder="请填写户口所在地"
v-model="formData.registeredResidence" type="textarea"
rows="3"></el-input>
v-model="formData.registeredResidence"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="homeAddress" label="现居住地">
<el-input placeholder="请填写现居住地"
v-model="formData.homeAddress"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="jobTitle" label="岗位">
<el-input placeholder="请填写岗位"
v-model="formData.jobTitle"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="homeAddress" label="现居住地">
<el-input maxlength="50" placeholder="请填写现居住地"
v-model="formData.homeAddress" type="textarea"
rows="3"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="vita" label="个人工作简历">
<el-input maxlength="50" placeholder="请填写个人工作简历"
<el-form-item prop="vita" label="简历">
<el-input maxlength="500" placeholder="请填写简历"
v-model="formData.vita" type="textarea"
rows="3"></el-input>
</el-form-item>
<div style="margin: -10px 0 10px 170px">
<span style="color: #ac3111">填写简历时请从大学开始填写,并填写毕业院校</span>
</div>
</el-col>
<el-col :span="24">
<el-form-item prop="specialSkill" label="特长">
<el-form-item prop="specialSkill" label="有何特长">
<el-input maxlength="50" placeholder="请填写特长"
v-model="formData.specialSkill" type="textarea"
rows="3"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="签&emsp;&emsp;字" prop="sign">
<sign :qz.sync="formData.sign" prefix="memberApply"></sign>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="家庭成员">
<span style="color: red">(已结婚填配偶信息,未结婚填父母信息)</span>
<el-button style="float: right;margin-bottom: 10px" icon="el-icon-plus"
size="mini"
@click="formData.family.push({})"> 添加成员
</el-button>
<el-table
:data="formData.family"
border
@@ -358,13 +367,27 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column prop="unit" label="单位" align="center"
<el-table-column prop="isCondolence" label="是否慰问" align="center"
header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入单位" maxlength="100"
v-model="scope.row.unit" clearable></el-input>
<el-radio-group v-model="scope.row.isCondolence" size="mini">
<el-radio label="是">是</el-radio>
<el-radio label="否">否</el-radio>
</el-radio-group>
<!--<el-input placeholder="请输入单位" maxlength="100"
v-model="scope.row.unit" clearable></el-input>-->
</template>
</el-table-column>
<el-table-column prop="condolenceTime" label="慰问时间" align="center"
header-align="center">
<template slot-scope="scope">
<el-date-picker style="width: 100%" v-model="scope.row.condolenceTime" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" type="date"
placeholder="慰问时间"></el-date-picker>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center"
header-align="center">
<template slot-scope="scope">
@@ -375,8 +398,17 @@ layout("/layouts/platform.html"){
<el-table-column label="操作" width="100px" align="center"
header-align="center">
<template slot="header" slot-scope="scope">
<el-button type="primary"
size="mini"
icon="el-icon-plus"
@click="formData.family.push({})">
</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" circle
<el-button type="danger" icon="el-icon-delete"
size="mini"
:disabled="formData.family.length===0"
@click="formData.family.splice(scope.$index,1)"></el-button>
</template>
@@ -387,12 +419,11 @@ layout("/layouts/platform.html"){
</el-row>
</el-form>
<!-- <member ref="member" :id="'${@shiro.getPrincipalProperty('id')}'" @save="doApply"></member>-->
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()">取消</el-button>
<el-button type="primary" @click="doSubmit">提交</el-button>
</el-row>
</template>
<template #view>
@@ -516,6 +547,9 @@ layout("/layouts/platform.html"){
}
},
exportApply() {
window.open(loc() + '/exportApply')
}
},
async created() {
this.getUnionInfo()
@@ -11,6 +11,9 @@ layout("/layouts/platform.html"){
.div-enum .el-select__caret{
line-height: 10px;
}
.search .search-query{
width: 300px;
}
</style>
<div id="app" v-cloak>
@@ -187,6 +190,8 @@ layout("/layouts/platform.html"){
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
</el-button>
<el-button v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
type="primary" icon="el-icon-printer" @click="openImport">导入会员</el-button>
<more v-model="searchMore"></more>
</div>
</div>
@@ -217,8 +222,10 @@ layout("/layouts/platform.html"){
</el-radio-group>
<div v-if="pageForm.changed == '1'" class="div-enum">
<enum-select clearable enum="UserChangeType"
<enum-select enum="UserChangeType"
label="description"
clearable
style="width: 100%"
placeholder="异动类型"
@change="doSearch"
v-model="pageForm.changeTypes"
@@ -738,6 +745,10 @@ layout("/layouts/platform.html"){
<user-change-history ref="userChangeHistory"></user-change-history>
<el-dialog title="会员导入" :visible.sync="dialogVisible" width="50%" :close-on-click-modal="false">
<file-import ref="viewImport" :temp_url="tempUrl"
:post_url="postUrl" :is_show_radio="isShowRadio"></file-import>
</el-dialog>
</div>
<script>
@@ -839,6 +850,11 @@ layout("/layouts/platform.html"){
batchFormDataUserState: {},
batchEditVisibleUserState: false,
dialogVisible:false,
tempUrl:'/platform/member/change/mange/downloadImport',
postUrl:'/platform/member/change/mange/doImport',
isShowRadio:false,
}
},
components: {
@@ -850,8 +866,12 @@ layout("/layouts/platform.html"){
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
'member-user-select': httpVueLoader('/components/plugins/MemberUserTableSelect.vue?v=1.0.0'),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
'file-import': httpVueLoader('/components/plugins/FileImport.vue')
},
methods: {
openImport(){
this.dialogVisible = true;
},
async openUserChangeInfo({hisId}) {
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
},
@@ -1136,6 +1156,9 @@ layout("/layouts/platform.html"){
sublime.showLoadingbar();
this.tableLoading = true
const pageForm = clone(this.pageForm)
if (pageForm.changeTypes === ""){
pageForm.changeTypes = []
}
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
$.post(loc() + '/pageData', pageForm, (data) => {
sublime.closeLoadingbar();
@@ -1171,7 +1194,6 @@ layout("/layouts/platform.html"){
this.unitMoveUnions = clone(this.unions)
this.campusOptions = await getCampus()
this.changeType = await this.getChangeType()
}
})
</script>
@@ -78,40 +78,42 @@ layout("/layouts/platform.html"){
</div>
<template v-if="searchMore">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unionGroupId" style="width: 100%"
filterable
clearable
@change="getThreeUnits"
placeholder="请选择">
<el-option
v-for="item in unionGroups"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">组成科室:</div>
<div class="search-item-option">
<el-select v-model="pageForm.threeUnitId" style="width: 100%" filterable
clearable
placeholder="请选择">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<template v-if="isThreeUnit">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
<div class="search-item-option">
<el-select v-model="pageForm.unionGroupId" style="width: 100%"
filterable
clearable
@change="getThreeUnits"
placeholder="请选择">
<el-option
v-for="item in unionGroups"
:key="item.id"
:label="item.groupName"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
<div class="search-item">
<div class="search-item-label">组成科室:</div>
<div class="search-item-option">
<el-select v-model="pageForm.threeUnitId" style="width: 100%" filterable
clearable
placeholder="请选择">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<!--<div class="search-item">
<div class="search-item-label">人员类型:</div>
@@ -386,8 +388,8 @@ layout("/layouts/platform.html"){
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true},
{prop: 'unionGroupName', label: '工会小组', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'campusName', label: '所属校区', sortable: true, checked: 0},
{prop: 'marriage', label: '婚否', checked: 0},
{prop: 'education', label: '学历', checked: 0},
@@ -407,6 +409,7 @@ layout("/layouts/platform.html"){
);
}
},
isThreeUnit: null,
}
},
components: {
@@ -559,6 +562,14 @@ layout("/layouts/platform.html"){
},
},
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
if (this.isThreeUnit) {
this.tableColumns.forEach(v => {
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
v.checked = 1
}
})
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
@@ -574,4 +585,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
+216 -77
View File
@@ -114,19 +114,19 @@
}
}
.login-code{
.icp {
color: black;
bottom: 33px;
position: absolute;
display: inline-block;
float: right;
width: 38%;
height: 38px;
left: 50%;
transform: translateX(-50%);
}
.login-code img{
vertical-align: middle;
cursor: pointer;
.icp a {
text-decoration: none;
color: black;
}
</style>
</head>
@@ -151,6 +151,7 @@
<div class="login-container">
<div class="login-content">
<div class="mobile-login-img">
<embed src="/m-login.svg" style="width: 100%" type="image/svg+xml"/>
</div>
@@ -160,79 +161,112 @@
${AppName!}系统登录
</h4>
<el-tabs class="login-tabs">
<el-tab-pane label="用户名登录">
<el-form :model="loginForm" :rules="loginRules" auto-complete="on"
class="login-form"
<!--<el-tab-pane label="用户名登录" name="1">
<el-form v-if="activeName == '1'" :model="loginForm" :rules="loginRules" auto-complete="on" class="login-form"
ref="loginForm">
<el-form-item prop="username">
<el-input
placeholder="账号或手机号码"
placeholder="请输入用户名"
prefix-icon="el-icon-user"
type="text"
v-model="loginForm.username"
>
v-model="loginForm.username">
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
@keyup.enter.native="doLogin"
placeholder="密码"
placeholder="请输入密码"
prefix-icon="el-icon-lock"
type="password"
v-model="loginForm.password"
>
v-model="loginForm.password">
</el-input>
</el-form-item>
<el-form-item prop="platformCaptcha">
<el-input
@keyup.enter.native="doLogin"
placeholder="验证码"
prefix-icon="el-icon-lock"
style="width: 60%"
type="password"
v-model="loginForm.platformCaptcha"
>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" alt="">
</div>
</el-form-item>
<el-form-item>
<el-button :disabled="disabled"
:loading="loading"
@click.native.prevent="doLogin"
@click.native.prevent="handleLogin"
class="login-button"
type="primary">
<span v-if="!loading">登 录</span>
<span v-else>登录中...</span>
</el-button>
</el-form-item>
</el-form>
</el-tab-pane>-->
<el-tab-pane label="短信快捷登陆">
<el-form :model="loginForm" :rules="loginRules" auto-complete="on" class="login-form"
ref="loginForm">
<el-form-item prop="mobile">
<el-input
placeholder="请输入手机号"
prefix-icon="el-icon-phone-outline"
type="text" maxlength="11"
v-model.number="loginForm.mobile">
</el-input>
</el-form-item>
<el-form-item prop="platformCaptcha">
<el-input @keyup.enter.native="doLogin" placeholder="请输入手机动态码" prefix-icon="el-icon-unlock" v-model="loginForm.platformCaptcha">
<el-button @click="sendCode()" type="primary" slot="append">{{ codeMsg }}</el-button>
</el-input>
</el-form-item>
<el-form-item>
<el-button :disabled="disabled"
:loading="loading"
@click.native.prevent="handleLogin"
class="login-button"
type="primary">
<span v-if="!loading">登 录</span>
<span v-else>登录中...</span>
</el-button>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</div>
<!--滑块验证-->
<el-dialog title="请拖动滑块完成拼图" width="360px" :visible.sync="isShowSliderVerify" :close-on-click-modal="false" @closed="refresh" append-to-body>
<slider-verify ref="sliderVerify" @success="onSuccess" @fail="onFail" @again="onAgain"></slider-verify>
</el-dialog>
<!--<div class="icp">
ICP证:<a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备16009506号-5</a>
</div>-->
</div>
</div>
</body>
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
<script src="${base!}/assets/platform/plugins/jquery/jquery-3.5.1.min.js"></script>
<script src="${base!}/assets/platform/plugins/vue-loader/httpVueLoader.js"></script>
<script>
var vue = new Vue({
Vue.use(httpVueLoader)
</script>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
// 是否禁用按钮
codeDisabled: false,
// 倒计时秒数
countdown: 60,
// 按钮上的文字
codeMsg: '获取动态码',
// 定时器
timer: null,
// 是否显示滑块验证
isShowSliderVerify: false,
loginForm: {
username: '',
password: '',
platformKey: '',
platformCaptcha: "",
platformCaptcha: '',
// 随机字符串
nonceStr: '',
// 验证值
value: '',
},
loginRules: {
username: [
@@ -241,46 +275,159 @@
password: [
{required: true, trigger: ['blur', 'change'], message: '密码不能为空'},
],
mobile: [
{ required: true, message: '手机号不能为空', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '手机号格式不正确', trigger: 'blur' }
],
platformCaptcha: [
{required: true, trigger: ['blur', 'change'], message: '验证码不能为空'},
{required: true, trigger: ['blur', 'change'], message: '动态码不能为空'},
],
},
loading: false,
disabled: false,
codeUrl: "${base!}/platform/login/captcha",
}
},
components: {
'slider-verify': httpVueLoader('/components/captcha/sliderVerify.vue'),
},
methods: {
async doLogin() {
try {
const valid = await this.$refs['loginForm'].validate()
if (valid) {
this.loading = true
const resp = await $.post("${base!}/platform/login/doLogin", this.loginForm)
this.loading = false
if (resp.code === 0) {
this.$message.success(resp.msg)
this.disabled = true
setTimeout(() => {
const redirect = this.getQueryString("redirect")
if (redirect) {
window.location.href = redirect
} else if (this.isMobile()) {
window.location.href = "${base!}/mobile/index"
} else {
window.location.href = "${base!}/platform/home"
}
}, 1000)
sendCode() {
if(this.codeDisabled) {
return
}
this.$refs.loginForm.validateField('mobile', async (valid) => {
if(!valid) {
const resp = await this.validMobile();
if (resp.code !== 0){
this.$message.warning(resp.msg)
return
}
/*发送验证码功能*/
//若发送验证码成功,则调用倒计时函数
const {code, data} = await $.post('/platform/login/mobileCaptcha', {mobile: this.loginForm.mobile})
if(code === 0) {
this.loginForm.platformKey = data.key
this.getCode();
} else {
this.$message.error(resp.msg)
this.getCode()
this.$message({showClose: true, type: 'warning', message: '动态码发送失败,请联系管理员'});
}
}
} catch (e) {
console.log(e)
})
},
// 获取验证码
getCode() {
// 验证码60秒倒计时
if (!this.timer) {
this.timer = setInterval(() => {
if (this.countdown > 0 && this.countdown <= 60) {
this.countdown--;
if (this.countdown !== 0) {
this.codeDisabled = true;
this.codeMsg = "重新发送(" + this.countdown + ")";
} else {
clearInterval(this.timer);
this.codeMsg = "获取动态码";
this.countdown = 60;
this.timer = null;
this.codeDisabled = false;
}
}
}, 1000)
}
},
//验证手机号是否存在
async validMobile() {
return await $.post('${base!}/platform/login/validMobile', {mobile: this.loginForm.mobile})
},
//验证图片滑动
async validVerify() {
return await $.post('${base!}/platform/login/validVerify', {
nonceStr: this.loginForm.nonceStr,
value: this.loginForm.value,
})
},
/* 滑动验证成功*/
async onSuccess(captcha) {
Object.assign(this.loginForm, captcha);
const resp = await this.validVerify()
if(resp.code === 0) {
await this.doLogin();
} else {
this.$refs.sliderVerify.verifyFailEvent(resp.msg);
}
},
/* 滑动验证失败*/
onFail(msg) {
this.message('error', msg || '验证失败,请控制拼图对齐缺口');
},
/* 滑动验证异常*/
onAgain() {
this.message('error', '滑动操作异常,请重试');
this.$refs.sliderVerify.refresh();
},
/* 刷新验证码*/
refresh() {
this.$refs.sliderVerify.refresh();
},
/* 提示弹框*/
message(type, message) {
this.$message({
showClose: true,
type: type,
message: message,
duration: 1500,
});
},
handleLogin() {
let self = this;
self.$refs.loginForm.validate((flag) => {
self.isShowSliderVerify = flag;
});
},
async doLogin() {
const valid = await this.$refs['loginForm'].validate()
if (valid) {
this.loginForm.loginType = 'SMS_CODE'
const resp = await $.post('${base!}/platform/login/doLogin', this.loginForm)
if (resp.code === 0) {
this.$message.success(resp.msg)
setTimeout(() => {
const redirect = this.getQueryString("redirect")
if (redirect) {
window.location.href = redirect
} else if (this.isMobile()) {
window.location.href = "${base!}/mobile/index"
} else {
window.location.href = "${base!}/platform/home"
}
}, 1000)
} else {
this.$message.error(resp.msg)
this.isShowSliderVerify = false;
}
}
/*$.post(url, self.loginForm, function (d) {
if (d.code == 0) {
self.$refs.sliderVerify.verifySuccessEvent();
self.$message({
showClose: true,
type: 'success',
message: '登录成功,正在跳转首页...',
duration: 1000
});
setTimeout(() => {
window.location.href = "${base!}/platform/home"
}, 500);
} else {
self.$message({
message: d.msg,
type: 'error'
})
self.isShowSliderVerify = false;
}
}, "json");*/
},
getQueryString(name) {
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
let r = window.location.search.substr(1).match(reg);
@@ -303,24 +450,16 @@
isMobile = true;
}
return isMobile;
},
async getCode() {
const {data} = await $.get('/platform/login/captcha')
this.codeUrl = data.codeUrl
this.loginForm.platformKey = data.key
}
},
created() {
this.year = new Date().getFullYear()
},
mounted() {
window.addEventListener('pageshow', (event) => {
console.log(event)
this.loading = false
this.disabled = false
})
},
created(){
this.getCode()
}
})
</script>
@@ -674,7 +674,7 @@ layout("/layouts/platform.html"){
'user-select': httpVueLoader('/components/plugins/UserTableSelect.vue?v=1.0.0'),
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=1.0.1'),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=1.0.1'),
},
methods: {
async openUserChangeInfo({hisId}) {
@@ -466,7 +466,7 @@ layout("/layouts/platform.html"){
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.2'),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=1.0.1'),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=1.0.1'),
},
data() {
return {
@@ -412,7 +412,7 @@ layout("/layouts/platform.html"){
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
'user-select': httpVueLoader('/components/plugins/UserTableSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.4'),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=1.0.1'),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=1.0.1'),
},
computed: {
allowOperationTask() {
@@ -1,355 +1,63 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.card-title {
margin-bottom: 20px;
letter-spacing: 2px;
display: flex;
justify-content: space-between;
height: 30px;
line-height: 30px;
}
.card-title .title-left {
font-size: 25px;
}
.card-title .title-right {
text-align: right;
font-size: 15px;
color: #0e78c5;
cursor: pointer;
}
.card-title .title-right:hover {
text-decoration: underline;
}
.el-date-editor.el-input, .el-select, .el-input-number {
width: 100%;
}
.addFormCard {
}
.excelCard {
min-height: 650px;
}
.excelBack {
font-size: 15px;
color: #0e78c5;
cursor: pointer;
}
.excelBack:hover {
text-decoration: underline;
}
.el-icon-loading {
font-size: 30px;
}
.el-input-number__decrease, .el-input-number__increase {
display: none;
}
.el-input-number .el-input__inner {
padding: 0 15px;
text-align: left;
}
.el-icon-eleme:before {
content: '元';
}
.submitClass {
text-align: right;
}
.ivu-upload {
display: inline;
}
.el-table th.gutter {
display: table-cell !important
}
</style>
<div id="app" v-cloak>
<guava>
<template>
<el-card shadow="never">
<div slot="header" class="clearfix">
<span style="color: #409EFF;font-size: 18px"><h3>资产登记</h3></span>
<zc-add ref="zcAdd"></zc-add>
<div style="padding: 20px;margin-top: 10px">
<el-form :model="formData" ref="form" :rules="formRules" label-width="140px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="assetNumber" label="资产编号">
<el-input v-model="formData.assetNumber" placeholder="资产编号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="assetName" label="资产名称">
<el-input v-model="formData.assetName" placeholder="资产名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="financeSixName" label="财政六大类名称">
<el-input v-model="formData.financeSixName" placeholder="财政六大类名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="unitId" label="所属学院">
<el-select placeholder="所属单位" v-model="formData.unitId" style="width: 100%;"
clearable="true"
@change="flushUnits"
filterable="true">
<el-option v-for="item in units" :label="item.name"
:key="item.id" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="threeUnitId" label="领用单位(科室)">
<el-select placeholder="请选择领用单位(科室)"
v-model="formData.threeUnitId" style="width: 100%;"
clearable="true"
filterable="true">
<el-option v-for="item in threeUnits" :key="item.id"
:label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="assetModel" label="型号">
<el-input v-model="formData.assetModel" placeholder="型号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="originalValue" label="原值">
<el-input-number v-model="formData.originalValue"
:min="0"
:max="9999999"
:precision="2"
placeholder="原值"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="assetSources" label="资产来源">
<el-input v-model="formData.assetSources" placeholder="资产来源"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="assetStatus" label="现状">
<el-select placeholder="请选择现状" v-model="formData.assetStatus" style="width: 100%;"
clearable="true"
multiple
filterable="true">
<el-option v-for="item in asseStatusList" :label="item.categoryName"
:key="item.contentCode" :value="item.contentCode"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="minimumUsageYear" label="最低使用年限">
<el-input-number v-model="formData.minimumUsageYear"
placeholder="最低使用年限"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="recipientUserId" label="领用人">
<el-select v-model="formData.recipientUserId" placeholder="可根据工号或姓名搜索领用人"
filterable
remote
clearable
reserve-keyword
:remote-method="remoteMethod"
:loading="selectLoading"
style="width: 100%">
<el-option
v-for="item in userList"
:key="item.id"
:label="item.username+'-'+item.loginname+'-'+item.unitname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col span="24">
<el-form-item prop="remark" label="备注">
<el-input v-model="formData.remark"
rows="2" type="textarea"
placeholder="请填写备注"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col span="12">
<el-form-item prop="storageLocation" label="存放地">
<el-input v-model="formData.storageLocation"
placeholder="存放地"></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="purchaseDate" label="购置日期">
<el-date-picker
style="width: 100%"
v-model="formData.purchaseDate"
value-format="yyyy-MM-dd"
type="datetime"
placeholder="请选择购置日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="storageDate" label="入库日期">
<el-date-picker
style="width: 100%"
v-model="formData.storageDate"
value-format="yyyy-MM-dd"
type="datetime"
placeholder="请选择入库日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col span="24">
<el-form-item prop="competentDepartmentRemark" label="主管部门备注">
<el-input v-model="formData.competentDepartmentRemark"
rows="2" type="textarea"
placeholder="请填写主管部门备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row justify="center" type="flex">
<el-button @click="history.go(-1)" type="primary"
v-if="this.formData.id"
style="width: 200px">返 回</el-button>
<!--<el-button @click="doSave" type="primary"
style="width: 200px">保 存</el-button>-->
<el-button @click="doSubmit" type="primary"
style="width: 200px">提 交</el-button>
</el-button>
</el-row>
</div>
</div>
</el-card>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins:[initTableMixins],
data(){
return{
id:GetQueryString("id"),
units: [],
threeUnits: [],
asseStatusList:[],
userList:[],
selectLoading: false,
formRules: {
assetNumber: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
}
data() {
return {}
},
components: {
'zc-add': httpVueLoader('/components/zcgl/zcAdd.vue?v=' + new Date().getTime()),
},
methods: {
async doSubmit(){
let postUrl = this.formData.id ? '/platform/zcgl/zcdj/doEdit' : '/platform/zcgl/zcdj/doSubmit'
this.$refs["form"].validate(async (valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
doSubExcel: function () {
var self = this;
if (!self.tableData.length > 0) {
self.$message.warning('请先上传excel');
return;
}
const loading = this.$loading({
lock: true,
text: '上传中',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.post(base + '/platform/zcgl/zcdj/doExcelSubmit', {data: JSON.stringify(self.tableData)}, function (data) {
if (data.code == 0) {
self.$message({
message: data.msg,//提示的信息
type: 'success',  //类型是成功
offset: 225,  //距离窗口顶部的偏移量
duration: 2000,  //显示时间, 毫秒。设为 0 则不会自动关闭
onClose: () => {
self.tableData = [];
self.file = null;
window.location.href = '/platform/zcgl/tzgl';
}
});
this.formData.assetStatus = JSON.stringify(this.formData.assetStatus)
const resp = await $.post(postUrl, this.formData)
loading.close()
if (resp.code === 0) {
this.$message.success('操作成功')
setTimeout(()=>{
window.location.href = '/platform/zcgl/tzgl'
},500)
} else {
this.$message.warning('操作失败')
}
}
})
},
async remoteMethod(query) {
if (query) {
this.selectLoading = true;
this.userList = await searchUser(query, '${@shiro.getPrincipalProperty("union").getId()}', null, null, null)
this.selectLoading = false;
}
},
async getAllAsseStatus(){
const resp = await $.post('/platform/zcgl/zclb/queryLb')
if (resp.code === 0){
this.asseStatusList = resp.data
}
},
async findOne(){
const resp = await $.post('/platform/zcgl/zcdj/findOne',{id:this.formData.id})
if (resp.code === 0){
this.formData.assetStatus = []
this.formData = resp.data
this.formData.assetStatus = resp.data.assetStatus
if (this.formData.recipientUserId) {
this.userList = await searchUser(this.formData.recipientLoginName, null, null, null, null)
console.log(this.userList)
} else {
this.formData.recipientUserId = resp.data.recipientUsername
this.formData.threeUnitId = resp.data.threeUnitName
this.formData.unitId = resp.data.unitName
self.$message.error(data.msg);
}
}
},
async flushUnits() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.units = await getUnits()
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(this.formData.unitId,null)
} else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(this.formData.unitId,null)
}
}).complete(function () {
loading.close();
});
},
},
async created() {
if (GetQueryString("id")) {
this.formData.id = this.id
await this.findOne()
}
this.flushUnits()
await this.getAllAsseStatus();
},
},
});
</script>
<!--#
@@ -0,0 +1,129 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-date-picker
@change="doSearch"
placeholder="选择年度"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</el-card>
<el-card class="mt20" shadow="never">
<table-tool :app="this" label="报废列表">
<template #func>
</template>
</table-tool>
<el-table :data="tableData"
header-align="center" ref="table"
row-key="zcbdid">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
</el-table-column>
<el-table-column label="操作" width="300">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<el-button @click="exportDetails(row)" size="mini" type="primary">
导出报废申请表
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<el-table :data="findData.zcxxs"
header-align="center" ref="table"
row-key="zcbdid">
<el-table-column label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column align="center" header-align="center" label="资产编号"
prop="zcbh"></el-table-column>
<el-table-column align="center" header-align="center" label="资产名称"
prop="zcmc"></el-table-column>
<el-table-column align="center" header-align="center" label="单价"
prop="zcdj"></el-table-column>
<el-table-column align="center" header-align="center" label="台件"
prop="sl"></el-table-column>
<el-table-column align="center" header-align="center" label="资产规格型号"
prop="zcxh"></el-table-column>
<el-table-column align="center" header-align="center" label="购置日期"
prop="zcgzrq"></el-table-column>
<el-table-column align="center" header-align="center" label="领用人"
prop="zclyrname"></el-table-column>
</el-table>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
year: moment().format('YYYY') + ""
},
tableColumns: [
{prop: 'zcbdsj', label: '报废时间'},
{prop: 'bfNum', label: '报废条数'},
{prop: 'slSum', label: '报废总台件'},
{prop: 'djSum', label: "报废资产总价"},
],
findData: [],
}
},
methods: {
exportDetails(row) {
window.open("/platform/zcgl/bfList/exportDetails?zcbdid=" + row.zcbdid)
},
openView(row) {
this.findData = row
this.$refs.guava.view()
}
},
async created() {
this.pageData();
}
})
</script>
<!--#
}
#-->
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,224 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-date-picker
@change="doSearch"
placeholder="选择年度"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</el-card>
<el-card class="mt20" shadow="never">
<table-tool :app="this" label="计划列表">
<template #func>
<el-button @click="openAdd" icon="el-icon-s-promotion" size="small"
type="primary">新建盘点计划
</el-button>
</template>
</table-tool>
<el-table :data="tableData"
class="vi-table"
ref="table"
row-key="id" style="width: 100%">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
</el-table-column>
<el-table-column label="操作" width="300">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<el-button @click="openEdit(row)" size="mini" type="primary">编辑
</el-button>
<el-button @click="doDelete(row)" size="mini" type="danger">删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
</guava>
<el-dialog
:close-on-click-modal="false"
:title="title"
:visible.sync="dialogVisible"
width="40%">
<el-form :model="formData" :rules="formRules" label-width="100px" ref="addForm">
<el-form-item label="年度" prop="year">
<el-date-picker
:disabled="isView"
placeholder="选择年度"
style="width: 100%"
type="year"
v-model="formData.year"
value-format="yyyy">
</el-date-picker>
</el-form-item>
<el-form-item label="计划时间" prop="planDate">
<el-date-picker
:disabled="isView"
end-placeholder="结束日期"
start-placeholder="开始日期"
style="width: 100%"
type="datetimerange"
v-model="formData.planDate"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="说明" prop="note">
<el-input
:disabled="isView"
:rows="3"
placeholder="请输入说明"
type="textarea"
v-model="formData.note">
</el-input>
</el-form-item>
</el-form>
<span class="dialog-footer" slot="footer" v-if="!isView">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button @click="doSubmit" type="primary">确 定</el-button>
</span>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
isView: false,
title: "",
dialogVisible: false,
pageForm: {
year: moment().format('YYYY') + ""
},
formData: {
year: null,
planDate: [],
note: null,
},
formRules: {
year: [{required: true, message: '必选', trigger: ['blur', 'change']}],
planDate: [{
required: true,
message: '必选',
trigger: ['blur', 'change']
}],
},
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'startDate', label: '开始时间'},
{prop: 'endDate', label: '结束时间'},
{prop: 'createDate', label: "创建时间"},
],
}
},
methods: {
openView(row) {
this.isView = true
this.title = "查看计划"
this.formData = {
year: row.year,
planDate: [row.startDate, row.endDate],
note: row.note
}
this.dialogVisible = true
},
openEdit(row) {
this.isView = false
this.title = "编辑计划"
this.formData = {
id: row.id,
year: row.year,
planDate: [row.startDate, row.endDate],
note: row.note
}
this.dialogVisible = true
},
async doDelete(row) {
const confirm = await this.$confirm('确定删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === 'confirm') {
const resp = await $.post(loc() + '/doDelete', {id: row.id})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
} else {
this.notifyError(resp.msg)
}
}
},
doSubmit() {
this.$refs["addForm"].validate(async (valid) => {
if (valid) {
const formData = clone(this.formData)
formData.startDate = formData.planDate[0]
formData.endDate = formData.planDate[1]
const resp = await $.post('/platform/zcgl/zcdj/plan/doSubmit', formData)
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyError(resp.msg)
}
this.dialogVisible = false
}
})
},
openAdd() {
this.title = "新增计划"
this.formData = {
year: moment().format('YYYY') + "",
planDate: [],
note: null
}
this.dialogVisible = true
},
},
async created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -6,30 +6,36 @@ layout("/layouts/platform.html"){
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">状态名称</div>
<div class="search-item-option">
<el-input v-model="pageForm.categoryName" placeholder="请输入状态名称" clearable></el-input>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable @keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 120px;">
<el-option label="内容" value="content"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select v-model="pageForm.category" clearable placeholder="所属类别">
<el-option v-for="item in categoryList" :label="item" :value="item"></el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button type="primary" @click="openAdd">
<i class="ti-plus"></i>
新增内容
</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="状态列表" :app="this">
<template #func>
<el-button type="primary" size="small" @click="openAdd">
<i class="ti-plus"></i>
新增
</el-button>
</template>
</table-tool>
<table-tool label="类别列表" :app="this"></table-tool>
<el-table :data="tableData" :size="tableSize" style="width: 100%">
<el-table-column type="index" label="序号" width="80px"></el-table-column>
<el-table-column
@@ -41,6 +47,7 @@ layout("/layouts/platform.html"){
:prop="column.prop"
:sortable="column.sortable"
>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="250">
<template scope="{row}">
@@ -55,17 +62,25 @@ layout("/layouts/platform.html"){
</guava>
<el-dialog
:title="dialogTitle"
title=""
:visible.sync="dialogVisible"
width="40%"
:close-on-click-modal="false">
<el-form :model="formData" :rules="rules" ref="ruleForm" label-width="80px">
<el-form :model="formData" :rules="rules" ref="ruleForm" label-width="120px">
<el-form-item label="编码" prop="contentCode">
<el-input v-model="formData.contentCode" maxlength="30" placeholder="编码" type="number"></el-input>
<el-input v-model="formData.contentCode" maxlength="30" placeholder="编码"></el-input>
</el-form-item>
<el-form-item label="状态名称" prop="categoryName">
<el-input v-model="formData.categoryName" maxlength="30" placeholder="状态名称"></el-input>
<el-form-item label="内容" prop="content">
<el-input v-model="formData.content" maxlength="30" placeholder="内容"></el-input>
</el-form-item>
<el-form-item label="折旧年限(年)" prop="depreciationYear">
<el-input v-model="formData.depreciationYear" maxlength="30" placeholder="折旧年限(年)"></el-input>
</el-form-item>
<el-form-item label="所属类别" prop="content">
<el-select v-model="formData.category" clearable placeholder="所属类别" style="width: 100%">
<el-option v-for="item in categoryList" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
</el-form>
@@ -84,20 +99,29 @@ layout("/layouts/platform.html"){
return {
tableColumns: [
{prop: 'contentCode', label: '编码'},
{prop: 'categoryName', label: '状态名称'},
{prop: 'content', label: '内容'},
{prop: 'category', label: '所属类别'},
{prop: 'depreciationYear', label: '折旧年限(年)'},
],
dialogVisible: false,
categoryList: ['房屋及构筑物', '通用设备', '专用设备', '家具、用具及装具'],
pageForm: {
searchName: 'content'
},
rules: {
contentCode: [{required: true, message: '请输入编码', trigger: ['change', 'blur']}],
categoryName: [{required: true, message: '请输入状态名称', trigger: ['change', 'blur']}],
content: [{required: true, message: '请输入内容', trigger: ['change', 'blur']}],
category: [{required: true, message: '请选择所属类别', trigger: ['change', 'blur']}],
depreciationYear: [{required: true, message: '请输入折旧年限', trigger: ['change', 'blur']}],
},
dialogTitle:'',
}
},
methods: {
openEdit(row) {
this.dialogTitle = '编辑状态'
this.formData = clone(row)
const data = clone(row)
this.formData = data
this.$set(this.formData, "oldContentCode", data.contentCode)
this.$set(this.formData, "oldDepreciationYear", data.depreciationYear)
this.dialogVisible = true
},
openAdd() {
@@ -105,7 +129,6 @@ layout("/layouts/platform.html"){
if (this.$refs['ruleForm']) {
this.$refs['ruleForm'].resetFields()
}
this.dialogTitle = '新增状态'
this.dialogVisible = true
},
async doDelete(id) {
@@ -117,7 +140,7 @@ layout("/layouts/platform.html"){
if (confirm === 'confirm') {
const resp = await $.post(loc() + '/doDelete', {id})
if (resp.code === 0) {
this.$message.success(resp.msg)
this.$notify.success(resp.msg)
this.doSearch()
}
}
@@ -125,14 +148,27 @@ layout("/layouts/platform.html"){
async doEdit() {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
const resp = await $.post(loc() + "/doEdit", this.formData)
let resp = {}
if (this.formData.oldDepreciationYear !== this.formData.depreciationYear) {
const confirm = await this.$confirm('修改了折旧年限将会同步修改资产的折旧到期时间!是否修改?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === 'confirm') {
resp = await $.post(loc() + "/doEdit", this.formData)
}
}
resp = await $.post(loc() + "/doEdit", this.formData)
if (resp.code === 0) {
this.$message.success(resp.msg)
this.notifySuccess(resp.msg)
this.doSearch()
this.dialogVisible = false
} else {
this.$message.warning(resp.msg)
this.notifyError(resp.msg)
}
}
},
async doAdd() {
@@ -140,12 +176,13 @@ layout("/layouts/platform.html"){
if (valid) {
const resp = await $.post(loc() + "/doAdd", this.formData)
if (resp.code === 0) {
this.$message.success(resp.msg)
this.notifySuccess(resp.msg)
this.doSearch()
this.dialogVisible = false
} else {
this.$message.warning(resp.msg)
this.notifyError(resp.msg)
}
}
}
},
@@ -160,4 +197,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
+287 -209
View File
@@ -2,245 +2,323 @@
layout("/layouts/platform.html"){
#-->
<style>
* {
margin: 0;
padding: 0;
}
.el-card {
margin-bottom: 30px;
}
</style>
<div id="app" v-cloak>
<div class="p10">
<guava ref="guava">
<el-card shadow="never">
<div id="zttj" style="width: 47%;height: 450px;display: inline-block;"></div>
<div style="height: 400px;width: 1px;background-color: gainsboro;display: inline-block;"></div>
<div id="jgtj" style="width: 47%;height: 450px;display: inline-block;"></div>
<dict-select @change="data" code="zczt" placeholder="请选择资产状态" style="width: 20%"
v-model="pageForm.zczt"></dict-select>
</el-card>
<!-- <el-card>
<div id="fghtj" style="width: 100%;height: 450px;display: inline-block;"></div>
</el-card>-->
<el-card shadow="never">
<div id="nftj" style="width: 100%;height: 450px;display: inline-block;"></div>
<el-card class="mt20" shadow="never">
<el-table
:data="tableData"
:summary-method="getSummaries"
header-align="center"
ref="table"
row-key="typeCode"
show-summary
style="width: 100%">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="分类" prop="type"></el-table-column>
<el-table-column label="数量(台件)" prop="sl"></el-table-column>
<el-table-column label="金额(元)" prop="je"></el-table-column>
</el-table>
</el-card>
</div>
</guava>
<!-- <el-card>
<div id="zttj" style="width: 47%;height: 450px;display: inline-block;"></div>
<div style="height: 400px;width: 1px;background-color: gainsboro;display: inline-block;"></div>
<div id="jgtj" style="width: 47%;height: 450px;display: inline-block;"></div>
</el-card>
&lt;!&ndash; <el-card>
<div id="fghtj" style="width: 100%;height: 450px;display: inline-block;"></div>
</el-card>&ndash;&gt;
<el-card>
<div id="nftj" style="width: 100%;height: 450px;display: inline-block;"></div>
</el-card>-->
</div>
<script>
const vue = new Vue({
el: "#app",
data: function () {
data() {
return {
pageForm: {
zczt: "正常"
},
ghlist: [],
nflist: []
nflist: [],
tableData: []
}
},
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
data: function () {
var self = this;
$.post(base + "/platform/zcgl/sjkb/data", function (data) {
self.initZttj(data.data.zttj);
var union = data.data.fghtj;
var sl = []
union.forEach(function (val) {
self.ghlist.push(val.unionname);
sl.push(val.sl)
})
var jg = data.data.jgtj[0];
var jgsl = [];
jgsl.push(jg.a);
jgsl.push(jg.b);
jgsl.push(jg.c);
jgsl.push(jg.d);
jgsl.push(jg.e);
jgsl.push(jg.f);
/* data: function () {
var self = this;
$.post(base + "/platform/zcgl/sjkb/data", function (data) {
self.initZttj(data.data.zttj);
var union = data.data.fghtj;
var sl = []
union.forEach(function (val) {
self.ghlist.push(val.unionname);
sl.push(val.sl)
})
var jg = data.data.jgtj[0];
var jgsl = [];
jgsl.push(jg.a);
jgsl.push(jg.b);
jgsl.push(jg.c);
jgsl.push(jg.d);
jgsl.push(jg.e);
jgsl.push(jg.f);
var nf = data.data.nftj;
var nfsl = []
nf.forEach(function (val) {
self.nflist.push(val.year);
nfsl.push(val.sl);
})
//self.initFghtj(sl)
self.initjgtj(jgsl);
self.initNftj(nfsl);
var nf = data.data.nftj;
var nfsl = []
nf.forEach(function (val) {
self.nflist.push(val.year);
nfsl.push(val.sl);
})
//self.initFghtj(sl)
self.initjgtj(jgsl);
self.initNftj(nfsl);
})
},
initZttj: function (data) {
var self = this;
var lmxjHj = echarts.init(document.getElementById("zttj"));
var option = {
title: {
text: '固定资产状态统计',
subtext: '',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: ['在用', '异地存放', '待报废', '已报废']
},
series: [
{
name: '资产状态',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [
{value: data[0].zy, name: '在用'},
{value: data[0].ydcf, name: '异地存放'},
{value: data[0].dbf, name: '待报废'},
{value: data[0].ybf, name: '已报废'}
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
lmxjHj.setOption(option);
})
},
initZttj: function (data) {
var self = this;
var lmxjHj = echarts.init(document.getElementById("zttj"));
var option = {
title: {
text: '固定资产状态统计',
subtext: '',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: ['在用', '闲置', '未使用', '待报废', '校外转入', '校内转入', '其它']
},
series: [
{
name: '资产状态',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [
{value: data[0].zy, name: '在用'},
{value: data[0].xz, name: '闲置'},
{value: data[0].wsy, name: '未使用'},
{value: data[0].dbf, name: '待报废'},
{value: data[0].xwzr, name: '校外转入'},
{value: data[0].xnzr, name: '校内转入'},
{value: data[0].qt, name: '其它'}
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
lmxjHj.setOption(option);
},
initFghtj: function (data) {
var dom = document.getElementById("fghtj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
title: {
text: '固定资产所属分工会统计',
},
grid: { // 控制图的大小,调整下面这些值就可以,
x: 40,
x2: 100,
y2: 150,// y2可以控制 X轴跟Zoom控件之间的间隔,避免以为倾斜后造成 label重叠到zoom上
},
xAxis: {
type: 'category',
data: this.ghlist,
axisLabel: {
interval: 0,
formatter: function (value) {
return value.split("").join("\n");
},
},
initFghtj: function (data) {
var dom = document.getElementById("fghtj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
title: {
text: '固定资产所属分工会统计',
},
grid: { // 控制图的大小,调整下面这些值就可以,
x: 40,
x2: 100,
y2: 150,// y2可以控制 X轴跟Zoom控件之间的间隔,避免以为倾斜后造成 label重叠到zoom上
},
xAxis: {
type: 'category',
data: this.ghlist,
axisLabel: {
interval: 0,
formatter: function (value) {
return value.split("").join("\n");
},
}
}
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
}
},
type: 'bar'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
}
},
type: 'bar'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
}
},
initjgtj: function (data) {
var dom = document.getElementById("jgtj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
title: {
text: '固定资产购置价格统计',
},
xAxis: {
type: 'category',
data: ["2000以下", "2000-4000", "4000-6000", "6000-8000", "8000-10000", "10000以上"],
axisLabel: {
interval: 0,
}
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
}
},
type: 'bar'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
}
},
initNftj: function (data) {
var dom = document.getElementById("nftj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
title: {
text: '固定资产年度数量统计',
},
xAxis: {
type: 'category',
data: this.nflist,
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
}
},
type: 'line'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
}
}*/
async data() {
const resp = await $.post(loc() + "/pageData", this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data
}
},
initjgtj: function (data) {
var dom = document.getElementById("jgtj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}
},
title: {
text: '固定资产购置价格统计',
},
xAxis: {
type: 'category',
data: ["2000以下", "2000-4000", "4000-6000", "6000-8000", "8000-10000", "10000以上"],
axisLabel: {
interval: 0,
}
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
getSummaries(param) {
const {columns, data} = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
},
type: 'bar'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
}
},
initNftj: function (data) {
var dom = document.getElementById("nftj");
var myChart = echarts.init(dom);
optionwwrstj = null;
//加载柱状图
optionwwrstj = {
color: ['#3398DB'],
tooltip: {
trigger: 'axis',
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
}, 0);
if (index === 3) {
sums[index] = sums[index].toFixed(2)
sums[index] += ' 元';
}
},
title: {
text: '固定资产年度数量统计',
},
xAxis: {
type: 'category',
data: this.nflist,
},
yAxis: {
type: 'value'
},
series: [{
data: data,
label: {
normal: {
show: true,
position: 'top'
}
},
type: 'line'
}]
};
if (optionwwrstj && typeof optionwwrstj === "object") {
myChart.setOption(optionwwrstj, true);
}
if (index === 2) {
sums[index] += ' 台件';
}
} else {
sums[index] = '';
}
});
return sums;
}
},
created: function () {
created() {
this.data();
},
mounted: function () {
}
,
mounted() {
}
})
</script>
+157 -184
View File
@@ -16,122 +16,117 @@ layout("/layouts/platform.html"){
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">条件查询</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
style="width: 120px;">
<el-option label="资产编号" value="xx.assetNumber"></el-option>
<el-option label="资产名称" value="xx.assetName"></el-option>
<el-option label="存放地" value="xx.storageLocation"></el-option>
</el-select>
</el-input>
</div>
</div>
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select clearable placeholder="查询类型" slot="prepend"
style="width: 120px;"
v-model="pageForm.searchName">
<el-option label="编号" value="zcbh"></el-option>
<el-option label="名称" value="zcmc"></el-option>
<el-option label="存放地" value="zccfdmc"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<dict-select v-model="pageForm.zczt" style="width: 100%" placeholder="请选择资产状态"
code="zczt"></dict-select>
</div>
<div class="btn-group tool-button mt5">
<el-date-picker
end-placeholder="购置日期"
format="yyyy 年 MM 月 dd 日"
range-separator="-"
start-placeholder="购置日期"
type="daterange"
v-model="time"
value-format="yyyy-MM-dd">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-select clearable placeholder="请选择资产类型" v-model="pageForm.zcghlx">
<el-option label="工会固定资产" value="2"></el-option>
<el-option label="分工会固定资产" value="1"></el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5" v-if="pageForm.zcghlx==='1'">
<el-select clearable placeholder="领用工会" style="width: 180px;"
v-model="pageForm.ghid">
<el-option :label="item.unionname" :value="item.id"
v-for="item in ghlist"></el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
<div class="search-item">
<div class="search-item-label">资产状态</div>
<div class="search-item-option">
<el-select v-model="pageForm.assetStatus" slot="prepend"
clearable
@change="doSearch"
placeholder="查询类型"
style="width: 100%">
<el-option v-for="item in lbList" :label="item.categoryName"
:key="item.contentCode" :value="item.contentCode"></el-option>
</el-select>
</div>
</div>
<div class="pull-right offscreen-right mt5">
<el-button @click="doAllExport" icon="el-icon-download" type="primary">总账导出
</el-button>
</div>
<div class="search-item">
<div class="search-item-label">购置日期</div>
<div class="search-item-option">
<el-date-picker
v-model="purchaseTime"
type="daterange"
range-separator="-"
style="width: 100%;"
start-placeholder="购置日期"
end-placeholder="购置日期"
format="yyyy年MM月dd日"
value-format="yyyy-MM-dd">
</el-date-picker>
</div>
</div>
</el-card>
<div class="search-item">
<div class="search-item-label">入库日期</div>
<div class="search-item-option">
<el-date-picker
v-model="storageTime"
type="daterange"
range-separator="-"
style="width: 100%;"
start-placeholder="购置日期"
end-placeholder="购置日期"
format="yyyy年MM月dd日"
value-format="yyyy-MM-dd">
</el-date-picker>
</div>
</div>
<el-card class="mt20" shadow="never">
<!--个人-->
<el-table
:data="tableData"
header-align="center"
style="width: 100%">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号"
type="index"
width="80px"></el-table-column>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool label="资产列表" :app="this">
<template #func>
<el-button type="primary" size="small" @click="doAllExport" icon="el-icon-download">总账导出
</el-button>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
<template scope="{row}" v-if="column.prop=='zcghlx'">
{{row.zcghlx==='1'?'院级工会':'校工会'}}
</template>
</table-tool>
<el-table :data="tableData" header-align="center" style="width: 100%">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='assetStatusName'">
<span style="color: #0e78c5;cursor: pointer">
{{getAssetTypes(row.assetStatus)}}
</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="操作"
width="200">
<template slot-scope="scope">
<el-button @click="viewInfo(scope)" size="mini" type="primary">查看
</el-button><!--
<el-button @click="doExport(scope.row.zcid)" size="mini" type="primary">导出
</el-button>-->
</template>
</el-table-column>
</template>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</el-row>
</el-card>
<el-table-column
width="200"
label="操作"
header-align="center"
align="center">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="viewInfo(scope)">查看</el-button>
<!--<el-button size="mini" type="primary" @click="doExport(scope.row.id)">导出</el-button>-->
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<asset-management ref="asset"></asset-management>
<zc-info ref="zcInfo"></zc-info>
</template>
</guava>
</div>
<script>
@@ -141,112 +136,90 @@ layout("/layouts/platform.html"){
data() {
return {
pageForm: {
searchName: "xx.assetName",
searchKeyword: "",
assetStatus:'',
purchaseDate : '',
storageDate:'',
searchName: "zcmc",
zczt: "",
startTime: "",
endTime: "",
zcghlx: "",
ghid: ''
},
viewData: {},
zcid: "",
ghlist: [],
time: [],
tableColumns: [
{prop: 'assetNumber', label: '编号', sortable: true},
{prop: 'assetName', label: '名称', sortable: true},
{prop: 'financeSixName', label: '财政六大类名称', sortable: true,checked: 0},
{prop: 'assetModel', label: '型号', sortable: true},
{prop: 'originalValue', label: '原值', sortable: true},
// {prop: 'purchaseDate', label: '购置日期', sortable: true},
{prop: 'storageDate', label: '入库日期', sortable: true},
{prop: 'minimumUsageYear', label: '最低使用年限', sortable: true},
{prop: 'yearsAndMonths', label: '已使用年限', sortable: true},
{prop: 'assetStatusName', label: '当前状态', sortable: true},
{prop: 'recipientUsername', label: '领用人', sortable: true},
{prop: 'remark', label: '备注', sortable: true},
{prop: 'zcbh', label: '资产编号'},
{prop: 'zcmc', label: '资产名称'},
{prop: 'zcxh', label: '资产规格型号'},
{prop: 'content', label: '资产所属类别'},
{prop: 'zcgzrq', label: '购置日期'},
{prop: 'zclyrname', label: '领用人'},
{prop: 'zclydwh', label: '领用单位'},
{prop: 'fundingSubject', label: '经费科目'},
{prop: 'zczt', label: '资产状态'},
{prop: 'zcghlx', label: '资产类型'},
],
purchaseTime: [],
storageTime: [],
lbList: [],
}
},
components: {
'asset-management': httpVueLoader('/components/zgfw/zcgl/AssetManagement.vue?v=1.0.2'),
'zc-info': httpVueLoader('/components/zcgl/zcInfo.vue?v=' + new Date().getTime()),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
getAssetTypes(assetTypes) {
if (assetTypes) {
const c = JSON.parse(assetTypes)
return this.lbList.filter(item =>
c.includes(item.contentCode))
.map(item => item.categoryName).join(',')
}
return null
},
doAllExport() {
const {searchKeyword, searchName , assetStatus } = this.pageForm
//购置时间
let purchaseStartTime = ''
let purchaseEndTime = ''
if (this.purchaseTime && this.purchaseTime.length > 0) {
purchaseStartTime = this.purchaseTime[0];
purchaseEndTime = this.purchaseTime[1];
const {searchKeyword, searchName, zczt, zcghlx, ghid} = this.pageForm
let startTime = ''
let endTime = ''
if (this.time && this.time.length > 0) {
startTime = this.time[0];
endTime = this.time[1];
}
//入库时间
let storageStartTime = ''
let storageEndTime = ''
if (this.storageTime && this.storageTime.length > 0) {
storageStartTime = this.storageTime[0];
storageEndTime = this.storageTime[1];
}
window.open('/platform/zcgl/zhcx/doExport?searchName=' + searchName + '&searchKeyword=' + searchKeyword +
'&assetStatus=' + assetStatus + '&purchaseStartTime=' + purchaseStartTime + '&purchaseEndTime=' + purchaseEndTime +
'&storageStartTime=' + storageStartTime + '&storageEndTime=' + storageEndTime)
// window.location.href = '/platform/zcgl/zhcx/doExport?searchKeyword=' + searchKeyword +
// '&searchName=' + searchName +
// '&zczt=' + zczt +
// '&zcghlx=' + zcghlx +
// "&ghid=" + ghid +
// '&startTime=' + startTime +
// '&endTime=' + endTime
window.location.href = '/platform/zcgl/zhcx/doExport?searchKeyword=' + searchKeyword +
'&searchName=' + searchName +
'&zczt=' + zczt +
'&zcghlx=' + zcghlx +
"&ghid=" + ghid +
'&startTime=' + startTime +
'&endTime=' + endTime
},
doExport(id) {
window.location.href = '/platform/zcgl/tzgl/downloadrzd?id=' + id
},
doSearch() {
if (this.purchaseTime && this.purchaseTime.length > 0) {
this.pageForm.purchaseStartTime = this.purchaseTime[0];
this.pageForm.purchaseEndTime = this.purchaseTime[1];
if (!this.time) {
this.pageForm.startTime = this.time[0];
this.pageForm.endTime = this.time[1];
} else {
this.pageForm.purchaseStartTime = null;
this.pageForm.purchaseEndTime = null;
this.pageForm.startTime = null;
this.pageForm.endTime = null;
}
if (this.storageTime && this.storageTime.length > 0) {
this.pageForm.storageStartTime = this.storageTime[0];
this.pageForm.storageEndTime = this.storageTime[1];
} else {
this.pageForm.storageStartTime = null;
this.pageForm.storageEndTime = null;
}
this.pageForm.pageNumber = 1;
this.pageData();
},
async getAllAsseStatus() {
const resp = await $.post("/platform/zcgl/zclb/queryLb")
if (resp.code === 0) {
this.lbList = resp.data
}
pageData() {
sublime.showLoadingbar();
this.tableLoading = true
$.post("/platform/zcgl/zhcx/data", this.pageForm, (data) => {
sublime.closeLoadingbar();
this.tableLoading = false
if (data.code == 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message.error(data.msg);
}
}, "json");
},
viewInfo(scope) {
this.$refs.asset.getInfo(scope.row.id)
async viewInfo(scope) {
this.$refs.guava.view()
await this.$refs.zcInfo.findOne(scope.row.zcid)
},
},
async created() {
this.pageData();
await this.getAllAsseStatus();
this.ghlist = await getUnions(null)
}
})
</script>
@@ -9,51 +9,64 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-date-picker
placeholder="年度"
value-format="yyyy"
format="yyyy年"
placeholder="年度"
type="year"
v-model="pageForm.year"
type="year">
value-format="yyyy">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable @keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 120px;">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 120px;"
v-model="pageForm.searchName">
<el-option label="内容" value="zcmc"></el-option>
<el-option label="编号" value="zcbh"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select v-model="pageForm.contentCode" clearable placeholder="所属类别">
<el-option v-for="item in lbList" :label="item.content+'('+item.contentCode+')'"
:value="item.contentCode"></el-option>
<el-select clearable placeholder="所属类别" v-model="pageForm.contentCode">
<el-option :label="item.content+'('+item.contentCode+')'"
:value="item.contentCode"
v-for="item in lbList"></el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button @click="doSearch();getZcMoney()" icon="el-icon-search" type="primary">
搜索
</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="资产折旧信息" :app="this"></table-tool>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="资产折旧信息">
<template #func>
<span style="color: #1867B0;font-weight: bold">
现固定资产原值为{{zcMoney.allMoney}}元,累计折旧{{zcMoney.depreciationMoney}}元,固定资产净值{{zcMoney.surplusMoney}}元。
</span>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" style="width: 100%">
<el-table-column type="index" label="序号" width="80px"></el-table-column>
<el-table-column label="序号" type="index" width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="150">
<template scope="{row}">
<el-button size="mini" type="danger" @click="doDelete(row.id)">删除</el-button>
<el-button @click="doDelete(row.zjjlId)" size="mini" type="danger">删除
</el-button>
</template>
</el-table-column>
</el-table>
@@ -71,6 +84,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
zcMoney: {},
pageForm: {
searchName: 'zcmc'
},
@@ -78,17 +92,25 @@ layout("/layouts/platform.html"){
tableColumns: [
{prop: 'zcbh', label: '编号'},
{prop: 'zcmc', label: '名称'},
{prop: 'zcxh', label: '型号规格'},
{prop: 'zcxh', label: '资产规格型号'},
{prop: 'content', label: '资产所属类别'},
{prop: 'zcgzrq', label: '购置日期'},
{prop: 'zcrksj', label: '入库日期'},
{prop: 'zdrDepreciationDate', label: '折旧到期时间'},
{prop: 'surplus', label: '折旧到期时间(月)'},
{prop: 'zdrSurplusMoney', label: '剩余价值(元)'},
{prop: 'operationTime', label: '折旧时间'},
],
}
},
methods: {
async getZcMoney() {
const resp = await $.get("/platform/zcgl/zjlb/getZcMoney", {
contentCode: this.pageForm.contentCode
})
if (resp.code === 0) {
this.zcMoney = resp.data
}
},
async doDelete(id) {
const confirm = await this.$confirm('确定要删除当前折旧信息吗?', '提示', {
confirmButtonText: '确定',
@@ -96,7 +118,7 @@ layout("/layouts/platform.html"){
type: 'warning'
})
if (confirm === "confirm") {
const data = await $.post(loc()+"/doDelete", {id:id})
const data = await $.post(loc() + "/doDelete", {id: id})
if (data.code == 0) {
this.$message({
message: data.msg,
@@ -116,6 +138,7 @@ layout("/layouts/platform.html"){
const data = await $.post("/platform/zcgl/zclb/queryLb")
this.lbList = data.data
this.pageData()
await this.getZcMoney()
}
})
</script>
@@ -123,4 +146,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->