Merge remote-tracking branch 'origin/main'

This commit is contained in:
zhengziru
2025-02-24 19:23:23 +08:00
179 changed files with 11992 additions and 11479 deletions
@@ -77,7 +77,7 @@
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
}
.van-empty {
/*.van-empty {
background-color: #FFFFFF;
position: absolute;
left: 50%;
@@ -86,7 +86,7 @@
width: 100%;
height: 100%;
z-index: 0;
}
}*/
.van-dropdown-item__content {
border-bottom-right-radius: 15px;
@@ -0,0 +1 @@
<svg t="1706509236796" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3418" width="64" height="64"><path d="M281.5 308.4c-3.2-1.1-16.3 14.4-17.5 16.5s-10.3 68-10.3 68c0 8.6 7 36.2 26.3 39" fill="#E8B491" p-id="3419"></path><path d="M280.5 194.5h626v313.6h-626z" fill="#EA7657" p-id="3420"></path><path d="M303.1 236.1h626v313.6h-626z" fill="#FF8A65" p-id="3421"></path><path d="M683 422.9h-50.3v-33.4H683c9.3 0 16.7-7.4 16.7-16.7s-7.4-16.7-16.7-16.7h-34.3l32.5-60c4.2-7.6 1.6-17.3-5.5-21.8-7.2-4.3-16.3-1.8-20.4 5.8l-37.3 69c-1.2 2.3-1.8 4.6-1.9 7h-0.2c-0.2-2.4-0.8-4.8-1.9-7l-36.9-68.8c-4.1-7.6-13.2-10.1-20.2-5.8s-9.5 14.2-5.4 21.8l32.1 60h-34.3c-9.3 0-16.7 7.4-16.7 16.7s7.4 16.7 16.7 16.7h50.3V423h-50.3c-9.3 0-16.7 7.4-16.7 16.7s7.4 16.7 16.7 16.7h50.3v35.1c0 8.4 7.4 15.1 16.7 15.1 9.3 0 16.7-6.7 16.7-15.1v-35.1h50.3c9.3 0 16.7-7.4 16.7-16.7-0.1-9.3-7.8-16.8-17-16.8z" fill="#FCEAE6" p-id="3422"></path><path d="M134.2 609.4s8.7-239.3 14.6-251.2c5.8-11.9 131.7-143.8 131.7-143.8l-1.2 4.7 1.1 89.3c-3.2-1.1-16.3 14.4-17.5 16.5s-10.3 68-10.3 68c0 8.6 7 36.2 26.3 39 8.4 2.4 17.7-1.8 30.1-10.1 10.2-5.8 15.1-21.2 25.9-32.4 11.3-33.7 18.5-49.7 36-72 17.5-22.2 33.3-37 33.3-37l6.7-8.2c0.7-0.1 17.3-1.3 17.9-1.3 22.3-1.9 39.8 11.4 43 38.6 3.4 28.1-81.5 165.9-81.5 165.9s-21.9 38-27.7 117.7c-0.4 6-8.4 33.8-8.4 33.8-6.7 16.8-49.8 75.2-49.8 75.2-3.2 3.5-6.2 7.3-9.4 10.7-34.9 36.3-73.4 62.8-89.6 63.5-32 1.5-110.6-66.5-110.6-66.5l39.4-100.4z" fill="#FCD4B1" p-id="3423"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

@@ -0,0 +1 @@
<svg t="1706580209183" class="icon" viewBox="0 0 1147 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28392" width="128" height="128"><path d="M476.689655 1024C213.415724 1024 0 810.584276 0 547.310345S213.415724 70.62069 476.689655 70.62069s476.689655 213.415724 476.689655 476.689655-213.415724 476.689655-476.689655 476.689655z m224.803311-670.896552L437.848276 622.750897l-150.651586-154.07669L211.862069 545.703724 437.848276 776.827586 776.827586 430.150621 701.492966 353.103448zM927.744 131.566345L847.448276 105.931034l80.295724-25.63531L953.37931 0l25.635311 80.295724L1059.310345 105.931034l-80.295724 25.635311L953.37931 211.862069zM57.803034 983.852138L17.655172 971.034483l40.147862-12.817655L70.62069 918.068966l12.817655 40.147862L123.586207 971.034483l-40.147862 12.817655L70.62069 1024zM1081.803034 312.955586L1041.655172 300.137931l40.147862-12.817655L1094.62069 247.172414l12.817655 40.147862L1147.586207 300.137931l-40.147862 12.817655L1094.62069 353.103448z" fill="#FFFFFF" p-id="28393"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1 @@
<svg t="1706421773003" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8826" width="32" height="32"><path d="M337.387283 341.82659c-17.757225 0-35.514451 11.83815-35.514451 29.595375s17.757225 29.595376 35.514451 29.595376 29.595376-11.83815 29.595376-29.595376c0-18.49711-11.83815-29.595376-29.595376-29.595375zM577.849711 513.479769c-11.83815 0-22.936416 12.578035-22.936416 23.6763 0 12.578035 11.83815 23.676301 22.936416 23.676301 17.757225 0 29.595376-11.83815 29.595376-23.676301s-11.83815-23.676301-29.595376-23.6763zM501.641618 401.017341c17.757225 0 29.595376-12.578035 29.595376-29.595376 0-17.757225-11.83815-29.595376-29.595376-29.595375s-35.514451 11.83815-35.51445 29.595375 17.757225 29.595376 35.51445 29.595376zM706.589595 513.479769c-11.83815 0-22.936416 12.578035-22.936416 23.6763 0 12.578035 11.83815 23.676301 22.936416 23.676301 17.757225 0 29.595376-11.83815 29.595376-23.676301s-11.83815-23.676301-29.595376-23.6763z" fill="#28C445" p-id="8827"></path><path d="M510.520231 2.959538C228.624277 2.959538 0 231.583815 0 513.479769s228.624277 510.520231 510.520231 510.520231 510.520231-228.624277 510.520231-510.520231-228.624277-510.520231-510.520231-510.520231zM413.595376 644.439306c-29.595376 0-53.271676-5.919075-81.387284-12.578034l-81.387283 41.433526 22.936416-71.768786c-58.450867-41.433526-93.965318-95.445087-93.965317-159.815029 0-113.202312 105.803468-201.988439 233.803468-201.98844 114.682081 0 216.046243 71.028902 236.023121 166.473989-7.398844-0.739884-14.797688-1.479769-22.196532-1.479769-110.982659 1.479769-198.289017 85.086705-198.289017 188.67052 0 17.017341 2.959538 33.294798 7.398844 49.572255-7.398844 0.739884-15.537572 1.479769-22.936416 1.479768z m346.265896 82.867052l17.757225 59.190752-63.630058-35.514451c-22.936416 5.919075-46.612717 11.83815-70.289017 11.83815-111.722543 0-199.768786-76.947977-199.768786-172.393063-0.739884-94.705202 87.306358-171.653179 198.289017-171.65318 105.803468 0 199.028902 77.687861 199.028902 172.393064 0 53.271676-34.774566 100.624277-81.387283 136.138728z" fill="#28C445" p-id="8828"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1 @@
<svg t="1706500361500" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4266" width="64" height="64"><path d="M515.291429 832.548571a321.718857 321.718857 0 0 1-228.608-94.464 320 320 0 0 1-94.756572-228.096 320 320 0 0 1 94.72-228.059428 321.718857 321.718857 0 0 1 228.644572-94.464c46.226286 0 90.953143 9.508571 132.790857 28.452571 15.469714 6.948571 22.418286 25.161143 15.469714 40.594286a30.756571 30.756571 0 0 1-40.594286 15.469714 260.571429 260.571429 0 0 0-107.666285-23.04 260.388571 260.388571 0 0 0-185.124572 76.434286 258.925714 258.925714 0 0 0-76.653714 184.539429c0 69.668571 27.209143 135.277714 76.653714 184.502857a260.388571 260.388571 0 0 0 185.124572 76.434285 261.12 261.12 0 0 0 175.981714-67.84c47.908571-43.410286 77.897143-99.986286 84.443428-163.949714a30.829714 30.829714 0 0 1 33.645715-27.538286 30.829714 30.829714 0 0 1 27.538285 33.682286c-8.082286 79.104-45.129143 149.577143-104.265142 203.227429a321.755429 321.755429 0 0 1-217.344 84.114285z m290.377142-531.602285a30.72 30.72 0 0 0-43.483428-0.109715L512 550.326857l-108.470857-108.178286a30.72 30.72 0 1 0-43.373714 43.593143l130.157714 129.865143a30.683429 30.683429 0 0 0 43.52 0l271.725714-271.177143a30.72 30.72 0 0 0 0.109714-43.483428z" fill="#2A77FF" p-id="4267"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

@@ -0,0 +1 @@
<svg t="1706421982466" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9853" width="32" height="32"><path d="M230.404 576.536c-12.087 9.728-25.043 23.93-28.805 41.984-5.12 24.666-1.069 55.541 22.728 79.761 28.828 29.362 72.637 37.398 91.56 38.779 51.4 3.717 106.184-21.772 147.477-50.844 16.184-11.42 43.899-34.349 70.39-69.721-59.37-30.653-133.477-64.557-212.703-61.24-40.47 1.692-69.454 10.084-90.647 21.281z m752.859 135.545C1009.463 650.574 1024 582.968 1024 512 1024 229.688 794.335 0 512 0 229.665 0 0 229.688 0 512c0 282.335 229.665 512 512 512 170.385 0 321.491-83.723 414.631-212.124-87.997-43.742-233.027-115.734-322.36-159.299-42.63 48.596-105.65 97.303-176.84 118.495-44.722 13.29-85.037 18.365-127.199 9.75-41.739-8.548-72.481-28.093-90.401-47.683-9.127-9.995-19.612-22.706-27.203-37.82a71.25 71.25 0 0 0 1.202 3.049s-4.363-7.524-7.702-19.5a85.994 85.994 0 0 1-3.34-18.143 93.517 93.517 0 0 1-0.2-13.045c-0.378-7.702-0.066-15.783 1.67-24.064 4.185-20.235 12.822-43.81 35.172-65.692 49.063-48.039 114.777-50.621 148.814-50.42 50.421 0.289 138.04 22.35 211.812 48.439 20.436-43.52 33.547-90.068 42.007-121.1H305.308v-33.168h157.518v-66.337H272.139v-33.169h190.687v-66.315c0-9.105 1.803-16.584 16.584-16.584h74.619v82.899h207.293v33.169H554.029v66.337h165.82s-16.65 92.828-68.719 184.32c115.557 41.272 278.128 104.849 332.133 126.086z" fill="#1296DB" p-id="9854"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -67,4 +67,4 @@ window.activity = {
return false
},
},
}
}
@@ -1,192 +1,191 @@
<template>
<div style="padding-bottom: 20px;">
<div style="padding-bottom: 20px">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">申请信息</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.manager_name" label="申请人"></van-field>
<!-- <van-field readonly :value="viewData.apply_time" label="申请时间"></van-field>-->
<van-field readonly :value="viewData.be_username" label="慰问对象"></van-field>
<van-field readonly :value="viewData.typename" name="type" label="慰问类型"></van-field>
<van-field readonly :value="viewData.money" type="number" label="慰问金额"></van-field>
<van-field readonly :value="viewData.way" name="way" label="慰问方式"></van-field>
<van-field readonly :value="viewData.occur_time" name="occur_time" label="慰问时间"></van-field>
<van-field
readonly
:value="viewData.birth_child_num"
name="birth_child_num"
v-if="viewData.type === '2'"
label="生育孩次"
></van-field>
<template v-if="viewData.type === '3' || viewData.type === '4'">
<van-field readonly :value="viewData.the_hospital" name="the_hospital" label="治疗医院"></van-field>
<van-field readonly :value="viewData.the_hospital_house_num" name="the_hospital_house_num" label="病房号"></van-field>
<van-field readonly :value="viewData.the_hospital_house_bed_num" name="the_hospital_house_bed_num" label="床号"></van-field>
<van-field readonly :value="viewData.hospital_by" name="hospital_by" v-if="viewData.type === '4'" label="患病病种"></van-field>
</template>
<van-field
readonly
:value="viewData.deadImmediateFamily"
name="deadImmediateFamily"
v-if="viewData.type === '6'"
label="直系亲属"
></van-field>
<van-field
readonly
:value="viewData.remark"
label="申请事由"
input-align="left"
style="flex-flow: column"
rows="2"
maxlength="200"
type="textarea"
show-word-limit
autosize
></van-field>
<van-field label="附件" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">附&emsp;&emsp;件</div>
</template>
<template #input>
<vant-file-upload
:files.sync="viewData.files"
view
:del="false"
v-if="viewData.files && viewData.files.length"
></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
申请信息
</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.manager_name" label="申请人"></van-field>
<van-field readonly :value="viewData.apply_time" label="申请时间"></van-field>
<van-field readonly :value="viewData.be_username" label="慰问对象"></van-field>
<van-field readonly :value="viewData.typename" name="type" label="慰问类型"></van-field>
<van-field readonly :value="viewData.money" type="number" label="慰问金额"></van-field>
<van-field readonly :value="viewData.way" name="way" label="慰问方式"></van-field>
<van-field readonly :value="viewData.occur_time" name="occur_time" label="慰问时间"></van-field>
<van-field readonly :value="viewData.birth_child_num" name="birth_child_num" v-if="viewData.type === '2'" label="生育孩次"></van-field>
<template v-if="viewData.type === '3' || viewData.type === '4'">
<van-field readonly :value="viewData.the_hospital" name="the_hospital" label="治疗医院"></van-field>
<van-field readonly :value="viewData.the_hospital_house_num" name="the_hospital_house_num" label="病房号"></van-field>
<van-field readonly :value="viewData.the_hospital_house_bed_num" name="the_hospital_house_bed_num" label="床号"></van-field>
<van-field readonly :value="viewData.hospital_by" name="hospital_by" v-if="viewData.type === '4'" label="患病病种"></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.manager_sign_data" v-if="viewData.manager_sign_data" />
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</van-form>
<template v-if="viewData.ucr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">分工会审核信息</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.ucr.username" left-icon="contact" readonly></van-field>
<van-field label="审核时间" :value="viewData.ucr.time" left-icon="clock-o" readonly></van-field>
<van-field label="审核意见" left-icon="chat-o" :value="viewData.ucr.opinion ? viewData.ucr.opinion : '暂无'" readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.ucr.sign" v-if="viewData.ucr.sign" />
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<van-field readonly :value="viewData.deadImmediateFamily" name="deadImmediateFamily" v-if="viewData.type === '6'" label="直系亲属"></van-field>
<van-field readonly :value="viewData.remark" label="申请事由"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
<van-field label="附件" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">附&emsp;&emsp;件</div>
</template>
<template #input>
<vant-file-upload :files.sync="viewData.files" view :del="false"
v-if="viewData.files&&viewData.files.length"></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.manager_sign_data"
v-if="viewData.manager_sign_data"/>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</van-form>
<template v-if="viewData.fr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">校工会审核信息</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.fr.username" left-icon="contact" readonly></van-field>
<van-field label="审核时间" :value="viewData.fr.time" left-icon="clock-o" readonly></van-field>
<van-field label="审核意见" left-icon="chat-o" :value="viewData.fr.opinion ? viewData.fr.opinion : '暂无'" readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.fr.sign" v-if="viewData.fr.sign" />
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="viewData.ucr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.ucr.username" left-icon="contact"
readonly></van-field>
<van-field label="审核时间" :value="viewData.ucr.time" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.ucr.opinion ? viewData.ucr.opinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.ucr.sign"
v-if="viewData.ucr.sign"/>
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="viewData.vcr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">校工会主席审核信息</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.vcr.username" left-icon="contact" readonly></van-field>
<van-field label="审核时间" :value="viewData.vcr.time" left-icon="clock-o" readonly></van-field>
<van-field label="审核意见" left-icon="chat-o" :value="viewData.vcr.opinion ? viewData.vcr.opinion : '暂无'" readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.vcr.sign" v-if="viewData.vcr.sign" />
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="viewData.fr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.fr.username" left-icon="contact"
readonly></van-field>
<van-field label="审核时间" :value="viewData.fr.time" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.fr.opinion ? viewData.fr.opinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.fr.sign"
v-if="viewData.fr.sign"/>
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="viewData.vcr">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
校工会主席审核信息
</div>
</div>
<van-cell-group>
<div style="padding-left: 16px">
<van-field label="审&ensp;核&ensp;人" :value="viewData.vcr.username" left-icon="contact"
readonly></van-field>
<van-field label="审核时间" :value="viewData.vcr.time" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.vcr.opinion ? viewData.vcr.opinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.vcr.sign"
v-if="viewData.vcr.sign"/>
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
props: {
handle: {
type: Boolean,
default: false,
props: {
handle: {
type: Boolean,
default: false
},
title: {
type: String,
default: "审核"
},
id: {
type: String,
default: ""
}
},
title: {
type: String,
default: '审核'
data() {
return {
viewData: {}
}
},
id: {
type: String,
default: ''
components: {
"vant-file-upload": httpVueLoader("/components/plugins/VantFileUpload.vue")
},
},
data() {
return {
viewData: {},
methods: {
async getInfo(id) {
const { data, code, msg } = await $.get("/platform/fw/condolence/findOne", { id })
if (data) {
condolence.toFormData(data)
this.viewData = data
this.viewData.hospital_stay = data.starting_time + "-" + data.end_time
} else {
this.viewData = {}
this.$toast.fail("获取信息失败")
}
}
},
async created() {
if (this.id) {
await this.getInfo(this.id)
}
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
async getInfo(id) {
const {data, code, msg} = await $.get("/platform/fw/condolence/findOne", {id})
if (data) {
condolence.toFormData(data)
this.viewData = data
this.viewData.hospital_stay = data.starting_time + "-" + data.end_time
} else {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
},
},
async created() {
await this.getInfo(this.id)
}
}
</script>
<style>
.van-cell-group__title {
padding-left: 0 !important;
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
left: 5px !important;
}
</style>
@@ -1,369 +1,411 @@
<template>
<div style="display: flex;align-items: center;justify-content: center">
<el-form :model="formData" ref="form" :rules="formRules" v-loading="loading" label-width="170px"
style="width: 1000px">
<div style="display: flex;align-items: center;justify-content: center">
<el-form :model="formData" ref="form" :rules="formRules" v-loading="loading" label-width="170px"
style="width: 1000px">
<vi-title title="申请变更"></vi-title>
<vi-title title="申请变更"></vi-title>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工&emsp;&emsp;号">
<el-input :value="formData.loginname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓&emsp;&emsp;名">
<el-input :value="formData.username" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工&emsp;&emsp;号">
<el-input :value="formData.loginname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓&emsp;&emsp;名">
<el-input :value="formData.username" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所在单位">
<el-input :value="formData.unitname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在工会">
<el-input :value="formData.unionname"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所在单位">
<el-input :value="formData.unitname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在工会">
<el-input :value="formData.unionname"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="变更时间">
<el-input :value="formData.auditTime" disabled></el-input>
</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>-->
<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
@change="unitChange"
placeholder="请选择单位">
<el-option
v-for="item in unitOptions"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="type" label="新&ensp;工&ensp;会">
<el-input :value="formData.currentUnionName" disabled placeholder=""></el-input>
</el-form-item>
<el-row :gutter="20" v-if="isThreeUnit">
<el-col :span="12">
<el-form-item label="新科室" prop="currentThreeUnitId">
<el-select v-model="formData.currentThreeUnitId" clearable filterable
placeholder="请选择新科室"
@change="threeUnitChange"
style="width: 100%">
<el-option
v-for="item in threeUnits"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<el-form-item label="变更时间">
<el-input :value="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工会小组">
<el-input :value="formData.currentUnionGroupName" disabled></el-input>
<el-form-item prop="type" label="变更类型">
<!-- <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>
</el-col>
</el-row>
</div>
<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-if="formData.type==='1'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="type" label="新单位">
<el-select v-model="formData.currentUnitId" style="width: 100%" filterable clearable
@change="unitChange"
placeholder="请选择单位">
<el-option
v-for="item in unitOptions"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<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>
<el-col :span="12">
<el-form-item prop="type" label="新工会">
<el-input :value="formData.currentUnionName" readonly placeholder="选择单位后自动填充"></el-input>
</el-form-item>
</el-col>
</el-row>
<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-row :gutter="20" v-if="isThreeUnit">
<el-col :span="12">
<el-form-item label="新科室" prop="currentThreeUnitId">
<el-select v-model="formData.currentThreeUnitId" clearable filterable
placeholder="请选择新科室"
@change="threeUnitChange"
style="width: 100%">
<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 label="工会小组">
<el-input :value="formData.currentUnionGroupName" readonly placeholder="选择科室后自动填充"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<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>
<div v-else-if="welfare_member&&['2'].includes(formData.type)">
<el-row :gutter="20">
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
</div>
<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>
<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>
<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="welfare_member&&['3','4','5','6','8'].includes(formData.type)">
<el-row :gutter="20">
<el-col :span="12">
<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-col>
<el-col :span="12">
<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-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userState" label="原在职状态">
<el-input v-model="formData.userState" readonly placeholder="原在职状态"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="updateUserState" label="是否改变在职状态" style="width: 100%">
<dict-select v-model="formData.changeUserState" style="width: 100%" clearable
placeholder="是否改变在职状态"
code="userState"></dict-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="personType" label="原人员类型">
<el-input v-model="formData.personType" readonly placeholder="原人员类型"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="updateUserState" label="是否改变人员类型" style="width: 100%">
<dict-select v-model="formData.changePersonType" style="width: 100%" clearable
placeholder="是否改变人员类型"
code="UserType"></dict-select>
</el-form-item>
</el-col>
</el-row>
</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==='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.changeIdCard" 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==='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.changeMobile" 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="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.changeEducation" 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>-->
<!-- <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>
<el-form-item prop="remark" label="变化原因">
<el-input v-model="formData.remark" placeholder="变化原因" type="textarea" :rows="4"></el-input>
</el-form-item>
<el-row style="display: flex;justify-content:flex-end;">
<el-button @click="doSubmit" :loading="submitLoading" :disabled="disabled" type="primary">
提交
</el-button>
</el-row>
</el-form>
</div>
<el-row style="display: flex;justify-content:flex-end;">
<el-button @click="doSubmit" :loading="submitLoading" :disabled="disabled" type="primary">
提交
</el-button>
</el-row>
</el-form>
</div>
</template>
<script>
module.exports = {
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
props: {
userid: {type: String},
welfare_member: {type: Boolean, default: true},
},
data() {
return {
loading: true,
disabled: false,
submitLoading: false,
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'}],
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,
userChangeTypeList:[],
}
},
watch: {
userid(val) {
this.flush()
}
},
methods: {
typeChange() {
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))
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
async doSubmit() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.submitLoading = true
this.$emit("submit", this.formData)
props: {
userid: {type: String},
welfare_member: {type: Boolean, default: true},
},
data() {
return {
loading: true,
disabled: false,
submitLoading: false,
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'}],
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,
userChangeTypeList: [],
}
})
},
closeLoading() {
this.submitLoading = false
},
unitChange(v) {
// const unit = this.unitOptions.find(x => x.id === v)
// if (unit) {
// this.formData.currentUnionId = unit.unionid
// this.formData.currentUnionName = unit.unionname
// } else {
// this.formData.currentUnionId = ''
// this.formData.currentUnionName = ''
// }
this.$set(this.formData, 'currentThreeUnitId', null)
this.$set(this.formData, 'currentUnionGroupName', null)
this.threeUnits = []
if (v) {
this.getThreeUnits(v)
}
const unit = this.unitOptions.find(x => x.id === v)
if (unit) {
this.$set(this.formData, 'currentUnionId', unit.unionid)
this.$set(this.formData, 'currentUnionName', unit.unionname)
} else {
this.$set(this.formData, 'currentUnionId', null)
this.$set(this.formData, 'currentUnionName', null)
}
},
async getThreeUnits(val) {
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val, null)
},
async threeUnitChange(val) {
if (val) {
const threeUnit = this.threeUnits.find(v => v.id === val)
const groupName = threeUnit.groupname
this.$set(this.formData, 'currentUnionGroupName', groupName)
} else {
this.$set(this.formData, 'currentUnionGroupName', null)
}
},
async flush() {
this.loading = true
this.disabled = false
if (!this.userid) {
this.formData = {}
this.loading = false
this.disabled = true
return
}
const resp = await $.get("/platform/member/common/userInfo", {userId: this.userid})
if (resp.code === 0) {
if (this.$refs["form"])
this.$refs["form"].resetFields();
this.formData = {
userId: resp.data.id,
loginname: resp.data.loginname,
username: resp.data.username,
unitname: resp.data.unitname,
unionname: resp.data.unionname,
originUnitId: resp.data.unitid,
originThreeUnitId: resp.data.threeUnitId,
originUnionId: resp.data.unionid,
userState: resp.data.userState,
personType: resp.data.personType,
auditTime: moment().format('YYYY-MM-DD'),
notes: null,
oldIdCard:resp.data.idcard,
oldMobile:resp.data.mobile,
oldEducation:resp.data.education
watch: {
userid(val) {
this.flush()
}
this.disabled = false
} else {
this.disabled = true
this.$notify.error({
title: '错误',
message: '获取用户信息失败'
});
}
this.loading = false
},
async getUnits() {
const resp = await $.post('/platform/member/change/mange/units')
if (resp.code === 0) {
this.unitOptions = resp.data
}
methods: {
typeChange(val) {
if (val == '1') {
this.formData.updateWelfareMember = null
this.formData.updateMember = null
} else {
this.$set(this.formData, "updateWelfareMember", ['2', '7'].includes(this.formData.type))
this.$set(this.formData, "updateWelfareMember", !['3', '4', '5', '6', '8'].includes(this.formData.type))
this.$set(this.formData, "updateMember", ['2'].includes(this.formData.type))
this.$set(this.formData, "updateMember", !['3', '4', '5', '6', '8'].includes(this.formData.type))
}
},
async doSubmit() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.submitLoading = true
this.$emit("submit", this.formData)
}
})
},
closeLoading() {
this.submitLoading = false
},
unitChange(v) {
// const unit = this.unitOptions.find(x => x.id === v)
// if (unit) {
// this.formData.currentUnionId = unit.unionid
// this.formData.currentUnionName = unit.unionname
// } else {
// this.formData.currentUnionId = ''
// this.formData.currentUnionName = ''
// }
this.$set(this.formData, 'currentThreeUnitId', null)
this.$set(this.formData, 'currentUnionGroupName', null)
this.threeUnits = []
if (v) {
this.getThreeUnits(v)
}
const unit = this.unitOptions.find(x => x.id === v)
this.isThreeUnit = unit.unionname.includes("机关");
if (unit) {
this.$set(this.formData, 'currentUnionId', unit.unionid)
this.$set(this.formData, 'currentUnionName', unit.unionname)
} else {
this.$set(this.formData, 'currentUnionId', null)
this.$set(this.formData, 'currentUnionName', null)
}
},
async getThreeUnits(val) {
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val, null)
},
async threeUnitChange(val) {
if (val) {
const threeUnit = this.threeUnits.find(v => v.id === val)
const groupName = threeUnit.groupname
this.$set(this.formData, 'currentUnionGroupName', groupName)
} else {
this.$set(this.formData, 'currentUnionGroupName', null)
}
},
async flush() {
this.loading = true
this.disabled = false
if (!this.userid) {
this.formData = {}
this.loading = false
this.disabled = true
return
}
const resp = await $.get("/platform/member/common/userInfo", {userId: this.userid})
if (resp.code === 0) {
if (this.$refs["form"])
this.$refs["form"].resetFields();
this.formData = {
userId: resp.data.id,
loginname: resp.data.loginname,
username: resp.data.username,
unitname: resp.data.unitname,
unionname: resp.data.unionname,
originUnitId: resp.data.unitid,
originThreeUnitId: resp.data.threeUnitId,
originUnionId: resp.data.unionid,
userState: resp.data.userState,
personType: resp.data.personType,
auditTime: moment().format('YYYY-MM-DD'),
notes: null,
oldIdCard: resp.data.idcard,
oldMobile: resp.data.mobile,
oldEducation: resp.data.education
}
this.disabled = false
} else {
this.disabled = true
this.$notify.error({
title: '错误',
message: '获取用户信息失败'
});
}
this.loading = false
},
async getUnits() {
const resp = await $.post('/platform/member/change/mange/units')
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 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'
await this.getUnits()
await this.flush()
await this.getUserChangeType()
// getUnits(null).then(res => this.unitOptions = res)
}
async created() {
// this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
// this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
await this.getUnits()
await this.flush()
await this.getUserChangeType()
// getUnits(null).then(res => this.unitOptions = res)
}
}
</script>
<style>
.is-flex {
display: flex;
display: flex;
}
.is-flex .el-form-item {
width: 50%;
width: 50%;
}
</style>
@@ -1,151 +1,151 @@
<template>
<div>
<el-table :data="memberHistoryRecords" border>
<el-table-column type="index" label="序号" width="80px"></el-table-column>
<el-table-column label="工号" prop="loginname"></el-table-column>
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="变更来源" prop="changeOrigin">
<template scope="{row}">
{{ memberChangeOriginOptions.find(v => v.code == row.changeOrigin)?.description }}
</template>
</el-table-column>
<el-table-column label="变更时间" prop="changeTime"></el-table-column>
<el-table-column label="异动类型" prop="changeTypes">
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
{{
userChangeTypeOptions.filter(v => row.changeTypes.includes(v.code)).map(v => v.description).join()
}}
</span>
</template>
</el-table-column>
<el-table-column label="状态" prop="stateId">
<template scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
</template>
</el-table-column>
</el-table>
<div>
<el-table :data="memberHistoryRecords" border>
<el-table-column type="index" label="序号" width="80px"></el-table-column>
<el-table-column label="工号" prop="loginname"></el-table-column>
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="变更来源" prop="changeOrigin">
<template scope="{row}">
{{ memberChangeOriginOptions.find((v) => v.code == row.changeOrigin)?.description }}
</template>
</el-table-column>
<el-table-column label="变更时间" prop="changeTime"></el-table-column>
<el-table-column label="异动类型" prop="changeTypes">
<template scope="{row}">
<span style="color: #0e78c5; cursor: pointer" @click="openUserChangeInfo(row)">
{{
userChangeTypeOptions
.filter((v) => row.changeTypes.includes(v.code))
.map((v) => v.description)
.join()
}}
</span>
</template>
</el-table-column>
<el-table-column label="状态" prop="stateId">
<template scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
</template>
</el-table-column>
</el-table>
<user-change-history ref="userChangeHistory"></user-change-history>
</div>
<user-change-history ref="userChangeHistory"></user-change-history>
</div>
</template>
<script>
module.exports = {
components: {
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
},
props: {
records: {type: Array, default: []},
userid: {type: String},
audit_info_union: {type: Boolean, default: true},
audit_info_school: {type: Boolean, default: true}
},
model: {
prop: 'records',
event: 'change'
},
data() {
return {
isThreeUnit: false,
loading: true,
changeType: {},
changeOrigin: {},
components: {
"user-change-history": httpVueLoader("/components/userChangeHistory/userChangeHistory.vue?v=" + new Date().getTime())
},
props: {
records: { type: Array, default: [] },
userid: { type: String },
audit_info_union: { type: Boolean, default: true },
audit_info_school: { type: Boolean, default: true }
},
model: {
prop: "records",
event: "change"
},
data() {
return {
isThreeUnit: false,
loading: true,
changeType: {},
changeOrigin: {},
memberHistoryRecords: [],
memberHistoryRecords: [],
memberChangeOriginOptions: [],
userChangeTypeOptions: []
}
},
watch: {
userid(val) {
this.getMemberChangeRecords()
this.getMemberHistoryRecords()
}
},
methods: {
async getMemberHistoryRecords() {
const {code, msg, data} = await $.get("/platform/member/common/memberHistoryRecords", {userId: this.userid})
if (code === 0) {
data.forEach(v => {
if (v.changeTypes) {
v.changeTypes = JSON.parse(v.changeTypes)
}
memberChangeOriginOptions: [],
userChangeTypeOptions: []
}
},
watch: {
userid(val) {
this.getMemberChangeRecords()
this.getMemberHistoryRecords()
}
},
methods: {
async getMemberHistoryRecords() {
const { code, msg, data } = await $.get("/platform/member/common/memberHistoryRecords", { userId: this.userid })
if (code === 0) {
data.forEach((v) => {
if (v.changeTypes) {
v.changeTypes = JSON.parse(v.changeTypes)
}
})
this.memberHistoryRecords = data
}
},
openUserChangeInfo({ id }) {
this.$refs.userChangeHistory.openUserChangeInfo(id)
},
async onExpand(row, expandedRows) {
if (!expandedRows.includes(row)) {
return
}
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findChangeApplyInfo", { id: row.id })
this.$set(row, "loading", false)
if (resp.code === 0) {
this.$set(row, "info", resp.data)
} else {
this.$set(row, "info", {})
}
},
async getMemberChangeRecords() {
this.loading = true
if (!this.userid && this.records.length) {
this.loading = false
return
} else if (!this.userid) {
this.records = []
this.loading = false
return
}
const resp = await $.get("/platform/member/common/memberChangeRecords", { userId: this.userid })
this.loading = false
if (resp.code === 0) {
this.records = resp.data
} else {
this.$notify.error({
title: "错误",
message: "获取变更记录失败"
})
}
}
},
async created() {
this.isThreeUnit = (await getConfigKey("isThreeUnit")) === "true"
this.getMemberChangeRecords()
this.changeType = await member.getChangeType()
this.changeOrigin = await member.getChangeOrigin()
getEnumOptions("MemberChangeOrigin").then((res) => {
this.memberChangeOriginOptions = res
})
this.memberHistoryRecords = data
}
},
openUserChangeInfo({id}) {
this.$refs.userChangeHistory.openUserChangeInfo(id)
},
async onExpand(row, expandedRows) {
if (!expandedRows.includes(row)) {
return
}
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findChangeApplyInfo", {id: row.id})
this.$set(row, "loading", false)
if (resp.code === 0) {
this.$set(row, "info", resp.data)
} else {
this.$set(row, "info", {})
}
},
async getMemberChangeRecords() {
this.loading = true
if (!this.userid && this.records.length) {
this.loading = false
return
} else if (!this.userid) {
this.records = []
this.loading = false
return
}
const resp = await $.get("/platform/member/common/memberChangeRecords", {userId: this.userid})
this.loading = false
if (resp.code === 0) {
this.records = resp.data
} else {
this.$notify.error({
title: '错误',
message: '获取变更记录失败'
});
}
},
},
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
this.getMemberChangeRecords()
this.changeType = await member.getChangeType()
this.changeOrigin = await member.getChangeOrigin()
getEnumOptions('MemberChangeOrigin').then(res => {
this.memberChangeOriginOptions = res
})
getEnumOptions('UserChangeType').then(res => {
this.userChangeTypeOptions = res
})
}
getEnumOptions("UserChangeType").then((res) => {
this.userChangeTypeOptions = res
})
}
}
</script>
<style>
.is-flex {
display: flex;
display: flex;
}
.is-flex .el-form-item {
width: 50%;
width: 50%;
}
</style>
@@ -1,58 +1,51 @@
/**
*Desc:
*Create by: jug
*Create time:2023/6/8/10:29
*/
/** *Desc: *Create by: jug *Create time:2023/6/8/10:29 */
<template>
<div>
<el-input v-model="cnd.memberSearchKeyWord" placeholder="请输入值" style="width: 100%">
<el-select v-model="cnd.memberSearchName" slot="prepend" placeholder="请选择字段" style="width: 120px">
<el-option
v-for="column in columnInfos"
:key="column.COLUMN_NAME"
:label="column.COLUMN_COMMENT"
:value="column.COLUMN_NAME">
</el-option>
</el-select>
</el-input>
</div>
<div>
<el-input v-model="cnd.memberSearchKeyWord" placeholder="请输入值" style="width: 100%">
<el-select v-model="cnd.memberSearchName" slot="prepend" placeholder="请选择字段" style="width: 120px">
<el-option
v-for="column in columnInfos"
:key="column.COLUMN_NAME"
:label="column.COLUMN_COMMENT"
:value="column.COLUMN_NAME"
></el-option>
</el-select>
</el-input>
</div>
</template>
<script>
module.exports = {
name: "MemberCnd",
props: {},
data() {
return {
columnInfos: [],
cnd: {}
name: "MemberCnd",
props: {},
data() {
return {
columnInfos: [],
cnd: {}
}
},
watch: {
cnd: {
handler(val) {
this.$emit("cnd", val)
},
deep: true
}
},
methods: {
async getColumnInfo() {
const { data, msg, code } = await $.post("/platform/activity/basic/scope/getUserTableColumnInfo")
if (code !== 0) {
this.$notify.warning(msg)
return
}
this.columnInfos = data
}
},
created() {
this.getColumnInfo()
}
},
watch: {
cnd: {
handler(val) {
this.$emit('cnd', val)
},
deep: true
}
},
methods: {
async getColumnInfo() {
const {data, msg, code} = await $.post('/platform/activity/basic/scope/getUserTableColumnInfo')
if (code !== 0) {
this.$notify.warning(msg)
return
}
this.columnInfos = data
}
},
created() {
this.getColumnInfo()
}
}
</script>
<style scoped>
</style>
<style scoped></style>
@@ -204,12 +204,12 @@
placeholder="更新时间"
></el-date-picker>
</el-form-item>
<el-form-item prop="schoolTime" label="参加工作日期">
<el-form-item prop="workDate" label="参加工作日期">
<el-date-picker
style="width: 100%"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="formData.schoolTime"
v-model="formData.workDate"
type="date"
placeholder="选择参加工作日期"
></el-date-picker>
@@ -326,7 +326,7 @@
<div v-else>
<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>-->
<!-- <div style="text-align: right; letter-spacing: 2px">填表日期:{{ moment(formData.applyTime).format("YYYY年MM月DD日") }}</div>-->
<el-descriptions :column="3" border class="descriptions-form">
<el-descriptions-item label="姓名">{{ formData.username }}</el-descriptions-item>
@@ -1,189 +1,185 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
基础信息
</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.username" label="姓名"></van-field>
<van-field readonly :value="viewData.loginname" label="工资号"></van-field>
<van-field readonly :value="viewData.unitname" label="单位"></van-field>
<van-field readonly :value="viewData.unionname" label="工会"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
作品信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.zpzt" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.lname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.zname" label="作品类别"></van-field>
<van-field readonly :value="viewData.zpms" label="简介"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
<van-field label="照片" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">照&emsp;&emsp;片</div>
</template>
<template #input>
<vant-file-upload :files.sync="img2List" view :del="false"
v-if="img2List&&img2List.length>0"></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="videoList.length>0">
<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"
width="640" height="264"
data-setup="{}" webkit-playsinline='true' playsinline='true' x-webkit-airplay='true'
x5-video-player-type='h5' x5-video-player-fullscreen='true' x5-video-ignore-metadata='true'>
<source :src="FILE_DOMAIN+item.filepath" type="video/mp4">
</video>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有音频。
<div style="padding-bottom: 20px">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">基础信息</div>
</div>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="audioList.length>0">
<audio id="amusic" preload="auto" controls style="width: 100%;outline: none;">
<source :src="FILE_DOMAIN+item.filepath"/>
</audio>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有音频。
<van-cell-group>
<van-field readonly :value="viewData.username" label="姓名"></van-field>
<van-field readonly :value="viewData.loginname" label="工资号"></van-field>
<van-field readonly :value="viewData.unitname" label="单位"></van-field>
<van-field readonly :value="viewData.unionname" label="工会"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">作品信息</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.zpzt" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.lname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.zname" label="作品类别"></van-field>
<van-field
readonly
:value="viewData.zpms"
label="简介"
input-align="left"
style="flex-flow: column"
rows="2"
maxlength="200"
type="textarea"
show-word-limit
autosize
></van-field>
</template>
</van-field>
<van-field label="照片" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">照&emsp;&emsp;片</div>
</template>
<template #input>
<vant-file-upload :files.sync="img2List" view :del="false" v-if="img2List && img2List.length > 0"></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<template v-for="(item,index) in docList" v-if="docList.length>0">
<div class="text-nowrap color-puple"
@click="previewFile(item.filepath,item.filename,docList,index,item.id)">
{{ item.filename }}
</div>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有文档。
</div>
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="videoList.length > 0">
<video
id="myVideo"
class="video-js vjs-default-skin vjs-big-play-centered"
controls
preload="auto"
width="640"
height="264"
data-setup="{}"
webkit-playsinline="true"
playsinline="true"
x-webkit-airplay="true"
x5-video-player-type="h5"
x5-video-player-fullscreen="true"
x5-video-ignore-metadata="true"
>
<source :src="FILE_DOMAIN + item.filepath" type="video/mp4" />
</video>
</template>
<div v-else style="text-align: center; color: #c2bbbb; font-size: 10px">没有音频。</div>
</template>
</van-field>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="audioList.length > 0">
<audio id="amusic" preload="auto" controls style="width: 100%; outline: none">
<source :src="FILE_DOMAIN + item.filepath" />
</audio>
</template>
<div v-else style="text-align: center; color: #c2bbbb; font-size: 10px">没有音频。</div>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<template v-for="(item, index) in docList" v-if="docList.length > 0">
<div class="text-nowrap color-puple" @click="previewFile(item.filepath, item.filename, docList, index, item.id)">
{{ item.filename }}
</div>
</template>
<div v-else style="text-align: center; color: #c2bbbb; font-size: 10px">没有文档。</div>
</template>
</van-field>
</van-cell-group>
</van-form>
</van-cell-group>
</van-form>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
props: {
handle: {
type: Boolean,
default: false,
props: {
handle: {
type: Boolean,
default: false
},
title: {
type: String,
default: "审核"
},
id: {
type: String,
default: ""
}
},
title: {
type: String,
default: '审核'
data() {
return {
viewData: {},
videoList: [],
prevImgList: [],
img2List: [],
audioList: [],
docList: [],
imgtype: ["gif", "jpg", "png", "jpeg"],
videotype: ["flv", "swf", "mkv", "avi", "rm", "rmvb", "wmv", "mp4", "mov", "mpg", "mpeg"],
doctype: ["doc", "docx"],
audiotype: ["mp3", "wma", "flac", "wav", "m4a", "amr", "au"]
}
},
id: {
type: String,
default: ''
components: {
"vant-file-upload": httpVueLoader("/components/plugins/VantFileUpload.vue")
},
},
data() {
return {
viewData: {},
videoList: [],
prevImgList: [],
img2List: [],
audioList: [],
docList: [],
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg'],
doctype: ['doc', 'docx'],
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
async getInfo(id) {
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id})
const refs = await $.get("/mobile/cahd/list/findOne", {id})
methods: {
async getInfo(id) {
const { data, code, msg } = await $.get("/platform/hd/wmhd/findOneById", { id })
const refs = await $.get("/mobile/cahd/list/findOne", { id })
if (refs) {
this.viewData = refs[0]
data.forEach(val => {
val.fjname = val.filename
val.fjurl = val.filepath
val.url = FILE_DOMAIN + val.filepath
let filetype = val.fjname.substring(val.fjname.lastIndexOf('.') + 1, val.fjname.length).toLowerCase();
if (this.videotype.indexOf(filetype) > -1) {
this.videoList.push(val);
} else if (this.imgtype.indexOf(filetype) > -1) {
this.prevImgList.push(FILE_DOMAIN + val.filepath)
this.img2List.push(val);
} else if (this.doctype.indexOf(filetype) > -1) {
this.docList.push(val);
} else if (this.audiotype.indexOf(filetype) > -1) {
this.audioList.push(val);
}
})
} else {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
if (refs) {
this.viewData = refs[0]
data.forEach((val) => {
val.fjname = val.filename
val.fjurl = val.filepath
val.url = FILE_DOMAIN + val.filepath
let filetype = val.fjname.substring(val.fjname.lastIndexOf(".") + 1, val.fjname.length).toLowerCase()
if (this.videotype.indexOf(filetype) > -1) {
this.videoList.push(val)
} else if (this.imgtype.indexOf(filetype) > -1) {
this.prevImgList.push(FILE_DOMAIN + val.filepath)
this.img2List.push(val)
} else if (this.doctype.indexOf(filetype) > -1) {
this.docList.push(val)
} else if (this.audiotype.indexOf(filetype) > -1) {
this.audioList.push(val)
}
})
} else {
this.viewData = {}
this.$toast.fail("获取信息失败")
}
}
},
},
async created() {
}
async created() {}
}
</script>
<style>
.van-cell-group__title {
padding-left: 0 !important;
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
left: 5px !important;
}
</style>
</style>
@@ -31,7 +31,7 @@
<!-- <template v-if="viewData.upa">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item&#45;&#45;select">
分工会审核信息
院级工会审核信息
</div>
</div>
<van-cell-group class="mt10">
@@ -20,6 +20,8 @@
:readonly="['SELECT'].includes(column.columnFormType)"
:rules="[{ required: column.isRequired, message: (['SELECT'].includes(column.columnFormType) ? '请选择' : '请填写') + column.columnName }]"
:required="column.isRequired"
:clearable="true"
clear-trigger="always"
@click="selectFieldClick(column)"
></van-field>
@@ -47,7 +47,7 @@
<template v-if="viewData.upa">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
院级工会审核信息
</div>
</div>
<van-cell-group class="mt10">
@@ -1,189 +0,0 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
基础信息
</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.username" label="姓名"></van-field>
<van-field readonly :value="viewData.loginname" label="工资号"></van-field>
<van-field readonly :value="viewData.unitname" label="单位"></van-field>
<van-field readonly :value="viewData.unionname" label="工会"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
作品信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.zpzt" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.lname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.zname" label="作品类别"></van-field>
<van-field readonly :value="viewData.zpms" label="简介"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
<van-field label="照片" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">照&emsp;&emsp;片</div>
</template>
<template #input>
<vant-file-upload :files.sync="img2List" view :del="false"
v-if="img2List&&img2List.length>0"></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="videoList.length>0">
<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"
width="640" height="264"
data-setup="{}" webkit-playsinline='true' playsinline='true' x-webkit-airplay='true'
x5-video-player-type='h5' x5-video-player-fullscreen='true' x5-video-ignore-metadata='true'>
<source :src="FILE_DOMAIN+item.filepath" type="video/mp4">
</video>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有音频。
</div>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<template v-for="item in videoList" v-if="audioList.length>0">
<audio id="amusic" preload="auto" controls style="width: 100%;outline: none;">
<source :src="FILE_DOMAIN+item.filepath"/>
</audio>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有音频。
</div>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<template v-for="(item,index) in docList" v-if="docList.length>0">
<div class="text-nowrap color-puple"
@click="previewFile(item.filepath,item.filename,docList,index,item.id)">
{{ item.filename }}
</div>
</template>
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有文档。
</div>
</template>
</van-field>
</van-cell-group>
</van-form>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
id: {
type: String,
default: ''
},
},
data() {
return {
viewData: {},
videoList: [],
prevImgList: [],
img2List: [],
audioList: [],
docList: [],
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg'],
doctype: ['doc', 'docx'],
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
async getInfo(id) {
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id})
const refs = await $.get("/mobile/cahd/list/findOne", {id})
if (refs) {
this.viewData = refs[0]
data.forEach(val => {
val.fjname = val.filename
val.fjurl = val.filepath
val.url = FILE_DOMAIN + val.filepath
let filetype = val.fjname.substring(val.fjname.lastIndexOf('.') + 1, val.fjname.length).toLowerCase();
if (this.videotype.indexOf(filetype) > -1) {
this.videoList.push(val);
} else if (this.imgtype.indexOf(filetype) > -1) {
this.prevImgList.push(FILE_DOMAIN + val.filepath)
this.img2List.push(val);
} else if (this.doctype.indexOf(filetype) > -1) {
this.docList.push(val);
} else if (this.audiotype.indexOf(filetype) > -1) {
this.audioList.push(val);
}
})
} else {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
},
},
async created() {
}
}
</script>
<style>
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
@@ -1,50 +0,0 @@
<template>
<div class="card">
<div class="card-header" v-if="$slots.header">
<slot name="header"></slot>
</div>
<div class="card-body">
<slot></slot>
</div>
<div class="card-footer" v-if="$slots.footer">
<slot name="footer"></slot>
</div>
</div>
</template>
<script>
module.exports = {
name: "MCard"
}
</script>
<style scoped>
.card {
border: none;
border-radius: .5rem;
}
.card-header {
border-bottom:1px dashed rgba(0,0,0,.125);
font-size: 1.15rem;
}
.card-header:first-child {
border-radius: calc(.5rem - 1px) calc(.5rem - 1px) 0 0
}
.card-body>.van-cell{
padding: 5px 0;
}
.card-body{
padding-top: 0;
}
.card-header, .card-footer {
background-color: #FFFFFF;
}
</style>
@@ -1,89 +0,0 @@
<template>
<div class="loader"></div>
</template>
<script>
module.exports = {
name: "MLoading"
}
</script>
<style scoped>
.loader {
z-index: 10000;
position: relative;
width: 2.5em;
height: 2.5em;
transform: rotate(165deg);
}
.loader:before, .loader:after {
content: "";
position: absolute;
top: 50%;
left: 50%;
display: block;
width: 0.5em;
height: 0.5em;
border-radius: 0.25em;
transform: translate(-50%, -50%);
}
.loader:before {
animation: before 2s infinite;
}
.loader:after {
animation: after 2s infinite;
}
@keyframes before {
0% {
width: 0.5em;
box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
}
35% {
width: 2.5em;
box-shadow: 0 -0.5em rgba(225, 20, 98, 0.75), 0 0.5em rgba(111, 202, 220, 0.75);
}
70% {
width: 0.5em;
box-shadow: -1em -0.5em rgba(225, 20, 98, 0.75), 1em 0.5em rgba(111, 202, 220, 0.75);
}
100% {
box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
}
}
@keyframes after {
0% {
height: 0.5em;
box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
}
35% {
height: 2.5em;
box-shadow: 0.5em 0 rgba(61, 184, 143, 0.75), -0.5em 0 rgba(233, 169, 32, 0.75);
}
70% {
height: 0.5em;
box-shadow: 0.5em -1em rgba(61, 184, 143, 0.75), -0.5em 1em rgba(233, 169, 32, 0.75);
}
100% {
box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
}
}
/**
* Attempt to center the whole thing!
*/
html,
body {
height: 100%;
}
.loader {
position: absolute;
top: calc(50% - 1.25em);
left: calc(50% - 1.25em);
}
</style>
@@ -1,140 +0,0 @@
<template>
<figure>
<div class="dot white"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
</figure>
</template>
<script>
module.exports = {
name: "MTableLoading"
}
</script>
<style scoped>
body {
background: #222;
}
figure {
position: absolute;
margin: auto;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 6.250em;
height: 6.250em;
animation: rotate 2.4s linear infinite;
}
.white {
top: 0;
bottom: 0;
left: 0;
right: 0;
background: white;
animation: flash 2.4s linear infinite;
opacity: 0;
}
.dot {
position: absolute;
margin: auto;
width: 2.4em;
height: 2.4em;
border-radius: 100%;
transition: all 1s ease;
}
.dot:nth-child(2) {
top: 0;
bottom: 0;
left: 0;
background: #FF4444;
animation: dotsY 2.4s linear infinite;
}
.dot:nth-child(3) {
left: 0;
right: 0;
top: 0;
background: #FFBB33;
animation: dotsX 2.4s linear infinite;
}
.dot:nth-child(4) {
top: 0;
bottom: 0;
right: 0;
background: #99CC00;
animation: dotsY 2.4s linear infinite;
}
.dot:nth-child(5) {
left: 0;
right: 0;
bottom: 0;
background: #33B5E5;
animation: dotsX 2.4s linear infinite;
}
@keyframes rotate {
0% {
transform: rotate(0);
}
10% {
width: 6.250em;
height: 6.250em;
}
66% {
width: 2.4em;
height: 2.4em;
}
100% {
transform: rotate(360deg);
width: 6.250em;
height: 6.250em;
}
}
@keyframes dotsY {
66% {
opacity: .1;
width: 2.4em;
}
77% {
opacity: 1;
width: 0;
}
}
@keyframes dotsX {
66% {
opacity: .1;
height: 2.4em;
}
77% {
opacity: 1;
height: 0;
}
}
@keyframes flash {
33% {
opacity: 0;
border-radius: 0%;
}
55% {
opacity: .6;
border-radius: 100%;
}
66% {
opacity: 0;
}
}
</style>
@@ -1,186 +0,0 @@
<style>
.field .van-field__error-message {
display: none;
}
</style>
<template>
<div>
<van-form @submit="onSubmit" ref="form">
<template v-for="column in dynamicData">
<!-- 文本、数值、时间 -->
<template v-if="['VARCHAR','TEXT','INT','DATE','DATETIME'].includes(column.columnType)">
<van-field
class="field"
v-model="column.columnValue"
:clickable="['SELECT'].includes(column.columnFormType)"
:label="column.columnName"
:name="column.columnCode"
:type="['INT'].includes(column.columnType) ? 'digit' : ''"
:placeholder="(['SELECT'].includes(column.columnFormType) ? '请选择' : '请填写') + column.columnName"
:readonly="['SELECT'].includes(column.columnFormType)"
:rules="[{ required: column.isRequired, message: (['SELECT'].includes(column.columnFormType) ? '请选择' : '请填写') + column.columnName }]"
:required="column.isRequired"
:clearable="true"
clear-trigger="always"
@click="selectFieldClick(column)"
></van-field>
<van-popup v-if="['SELECT'].includes(column.columnFormType)"
v-model="pickerStates[column.columnCode + 'Picker']"
position="bottom">
<template v-if="['DATETIME','DATE'].includes(column.columnType)">
<van-datetime-picker
:title="column.columnName"
:type="column.columnType.toLocaleLowerCase()"
show-toolbar
@cancel="pickerStates[column.columnCode + 'Picker'] = false; column.columnValue = ''"
@confirm="(time)=>{dateTimePickerConfirm(time,column)}"
/>
</template>
<template v-else>
<van-picker
:columns="column.selectValues"
:title="column.columnName"
show-toolbar
@cancel="pickerStates[column.columnCode + 'Picker'] = false; column.columnValue = ''"
@confirm="(value)=>{ordinaryPickerConfirm(value,column)}"
/>
</template>
</van-popup>
</template>
<!-- 单选框 -->
<template v-else-if="['BOOLEAN'].includes(column.columnType)">
</template>
<!-- 文件 -->
<template v-else-if="['JSON'].includes(column.columnType)">
<van-field :required="column.isRequired" :label="column.columnName"
:rules="[{ required: column.isRequired, message: '请上传' + column.columnName }]">
<template #input>
<!-- <van-uploader v-model="fileList" :after-read="(file)=>{fileAfterRead(file,column)}"
:max-count="column.fileNumber"/>-->
<vant_file_upload :files.sync="column.columnValue" :max="column.fileNumber"
:type="column.fileType"></vant_file_upload>
</template>
</van-field>
</template>
</template>
</van-form>
</div>
</template>
<!-- 请在van-form中引用 -->
<script>
module.exports = {
name: "TrainDynamicForm",
components: {
'vant_file_upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
props: {
dynamicData: []
},
model: {
prop: 'dynamicData',
event: 'updateDynamicData'
},
watch: {
dynamicData: {
handler: function (newValue, oldValue) {
this.$emit('updateDynamicData', newValue)
},
deep: true
}
},
data() {
return {
//所有的picker状态
pickerStates: {},
fileList: []
}
},
methods: {
validForm() {
try {
this.$refs.form.validate().then(() => {
return true
}).catch(() => {
return false
})
} catch (e) {
return false
}
/*return new Promise(resolve => {
this.$refs.form.validate().then(() => {
resolve(true)
}).catch(() => {
resolve(false)
})
})*/
},
onSubmit() {
},
selectFieldClick(column) {
console.log(column)
this.$set(this.pickerStates, column.columnCode + 'Picker', true)
if (!['DATE', 'DATETIME'].includes(column.columnType)) {
//说明是普通的下拉框
// column.selectValues = ['1', '2', '3']
}
},
/**
* 时间picker确认
* @param time
* @param column
*/
dateTimePickerConfirm(time, column) {
if (column.columnType === 'DATE') {
column.columnValue = moment(time).format('YYYY-MM-DD')
} else if (column.columnType === 'DATETIME') {
column.columnValue = moment(time).format('YYYY-MM-DD HH:mm:ss')
} else {
//预留别的类型
column.columnValue = moment(time).format('YYYY-MM-DD HH:mm:ss')
}
this.pickerStates[column.columnCode + 'Picker'] = false
},
/**
* 普通picker确认
* @param value
* @param column
*/
ordinaryPickerConfirm(value, column) {
column.columnValue = value
this.pickerStates[column.columnCode + 'Picker'] = false
},
/**
* 文件读取
*/
fileAfterRead(file, column) {
console.log(file)
console.log(column)
}
},
created() {
// console.log(this.dynamicData)
// this.dynamicData.forEach(v => {
// if (v.columnFormType === 'SELECT') {
// v.columnPickerName = v.columnCode+'Picker'
// }
// })
// console.log(this.dynamicData)
}
}
</script>
<style scoped>
</style>
@@ -1,158 +0,0 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
申请信息
</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.sqrname" label="申请人"></van-field>
<van-field readonly :value="viewData.sqsj" label="申请时间"></van-field>
<van-field readonly :value="viewData.bbname" label="受补助人"></van-field>
<van-field readonly :value="viewData.idcard" label="身份证号"></van-field>
<van-field readonly name="type" :value="viewData.bbsex" label="性别"></van-field>
<van-field readonly name="type" :value="viewData.zc" label="职称"></van-field>
<van-field readonly name="type" :value="viewData.zw" label="职务"></van-field>
<van-field readonly :value="viewData.bbunit" label="所在单位"></van-field>
<van-field readonly name="way" :value="viewData.bbbirthday" label="出生日期"></van-field>
<van-field readonly :value="viewData.lxfs" label="手机号码"></van-field>
<van-field readonly :value="difficulty.subsidy[viewData.sq_bzlx]" label="补助类型"></van-field>
<van-field readonly :value=" difficulty.sq_knlx[viewData.sq_knlx] " label="困难类型"></van-field>
<van-field readonly :value="viewData.apply_reason" label="申请理由"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
<van-field label="附件" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">附&emsp;&emsp;件</div>
</template>
<template #input>
<vant-file-upload :files.sync="viewData.files" view :del="false"
v-if="viewData.files&&viewData.files.length"></vant-file-upload>
<span v-else>暂无</span>
</template>
</van-field>
<van-field name="sign" label="申请人签字">
<template #input>
<van-image width="200" height="100" :src="viewData.sqsign" v-if="viewData.sqsign!=null"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</van-form>
<template v-if="viewData.upa">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group class="mt10">
<div style="padding-left: 16px">
<van-field label="审核人员" :value="viewData.upa.username" left-icon="contact" readonly></van-field>
<van-field label="审核时间" :value="viewData.upa.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.upa.auditOpinion ? viewData.upa.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.upa.auditSign"
v-if="viewData.upa.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="viewData.sma">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group class="mt10">
<div style="padding-left: 16px">
<van-field label="审核人员" :value="viewData.sma.username" left-icon="contact" readonly></van-field>
<van-field label="审核时间" :value="viewData.sma.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.sma.auditOpinion ? viewData.sma.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.sma.auditSign"
v-if="viewData.sma.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</div>
</van-cell-group>
</template>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
id: {
type: String,
default: ''
},
},
data() {
return {
viewData: {},
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
async getInfo(id) {
const {data, code, msg} = await $.get("/platform/fw/difficulty/applylist/findOne", {id})
if (data) {
condolence.toFormData(data)
this.viewData = data
} else {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
},
},
async created() {
await this.getInfo(this.id)
}
}
</script>
<style>
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
@@ -1,214 +0,0 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
申请信息
</div>
</div>
<van-cell-group>
<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 :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-cell-group>
</van-form>
<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.position"></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.mobile" left-icon="phone-o"></van-field>
</van-form>
</div>
</div>
<div v-else style="height: 100px">
</div>
</div>
</van-cell-group>
<template v-if="unionAudit">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group>
<van-field label="审&ensp;核&ensp;人" :value="unionAudit.username" left-icon="contact"
readonly></van-field>
<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-cell-group>
</template>
<template v-if="schoolAudit">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group>
<van-field label="审&ensp;核&ensp;人" :value="schoolAudit.username" left-icon="contact"
readonly></van-field>
<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-cell-group>
</template>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
data() {
return {
info: {},
viewData: {},
unionAudit: {},
schoolAudit: {},
family: []
}
},
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
user_id: String,
record_id: String
},
methods: {
async getAuditInfo(id) {
const {data} = await $.get('/platform/member/common/findChangeApplyInfo', {id: id})
if (data !== null) {
const {unionAudit, schoolAudit} = data
this.info = data
this.unionAudit = unionAudit
this.schoolAudit = schoolAudit
} else {
this.unionAudit = null
this.schoolAudit = null
}
},
async getUserInfo(id) {
const {data} = await $.get('/platform/member/common/userInfo', {userId: id})
this.viewData = data
this.family = JSON.parse(data.family)
}
}
}
</script>
<style>
.card_title {
margin: 5px 0 5px 16px;
}
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
@@ -1,208 +0,0 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
申请信息
</div>
</div>
<van-cell-group>
<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 :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-cell-group>
</van-form>
<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.position"></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.mobile" left-icon="phone-o"></van-field>
</van-form>
</div>
</div>
<div v-else style="height: 100px">
</div>
</div>
</van-cell-group>
<template v-if="unionAudit!=null">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group>
<van-field label="审&ensp;核&ensp;人" :value="unionAudit.username" left-icon="contact" readonly></van-field>
<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-cell-group>
</template>
<template v-if="schoolAudit!=null">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group>
<van-field label="审&ensp;核&ensp;人" :value="schoolAudit.username" left-icon="contact" readonly></van-field>
<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-cell-group>
</template>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
data() {
return {
viewData: {},
unionAudit: {},
schoolAudit: {},
family: []
}
},
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
user_id: String,
record_id: String
},
methods: {
// getDetailInfo(user_id, record_id) {
// this.getUserInfo(user_id)
// this.getAuditInfo(record_id)
// },
async getAuditInfo(id) {
const {data} = await $.get('/platform/member/common/findApplyInfo', {id: id})
if (data !== null) {
const {unionAudit, schoolAudit} = data
this.unionAudit = unionAudit
this.schoolAudit = schoolAudit
} else {
this.unionAudit = null
this.schoolAudit = null
}
},
async getUserInfo(id) {
const {data} = await $.get('/platform/member/common/userInfo', {userId: id})
this.viewData = data
this.family = JSON.parse(data.family)
}
}
}
</script>
<style>
.card_title {
margin: 5px 0 5px 16px;
}
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
@@ -1,247 +0,0 @@
<template>
<div style="padding-bottom: 20px;">
<van-form readonly input-align="right">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
基础信息
</div>
</div>
<van-cell-group>
<van-field readonly :value="viewData.username" label="姓名"></van-field>
<van-field readonly :value="viewData.loginname" label="工资号"></van-field>
<van-field readonly :value="viewData.dwname" label="单位"></van-field>
<van-field readonly :value="viewData.ghname" label="工会"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
作品信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.hdname" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.hdlbname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.step_count" label="健步走步数"
v-if="viewData.step_count"></van-field>
<van-field readonly name="type" :value="viewData.zname" label="作品类别" v-if="viewData.zname"></van-field>
<van-field readonly :value="viewData.hdsbzpms" label="简介"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
<van-field label="照片" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">照&emsp;&emsp;片</div>
</template>
<template #input>
<vant-file-upload :files.sync="img2List" view :del="false"
v-if="img2List&&img2List.length>0"></vant-file-upload>
<div v-if="img2List.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有照片。
</div>
</template>
</van-field>
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="videoList.length>0">
<div v-for="item in videoList" class="mt10">
<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"
width="640" height="264"
data-setup="{}" webkit-playsinline='true' playsinline='true' x-webkit-airplay='true'
x5-video-player-type='h5' x5-video-player-fullscreen='true' x5-video-ignore-metadata='true'>
<source :src="item.url" type="video/mp4">
</video>
</div>
</div>
<div v-if="videoList.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有视频。
</div>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="audioList&&audioList.length>0">
<div v-for="audio in audioList" class="mt10">
<audio id="amusic" preload="auto" controls>
<source :src="FILE_DOMAIN+audio.url"/>
</audio>
</div>
</div>
<div style="text-align: center;color: #c2bbbb;font-size: 10px;" v-if="audioList.length===0">
没有音频。
</div>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<div v-for="(item,index) in docList" v-if="docList&&docList.length>0">
<div class="text-nowrap color-puple"
@click="previewFile(item.filepath,item.filename,docList,index,item.id)">
{{ item.filename }}
</div>
</div>
<div v-if="docList.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有文档。
</div>
</template>
</van-field>
</van-cell-group>
<template v-if="viewData.union">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.union.username" label="审核人"></van-field>
<van-field label="审核时间" :value="viewData.union.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.union.auditOpinion ? viewData.union.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.union.auditSign"
v-if="viewData.union.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
<template v-if="viewData.school">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.school.username" label="审核人"></van-field>
<van-field label="审核时间" :value="viewData.school.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.school.auditOpinion ? viewData.school.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.school.auditSign"
v-if="viewData.school.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
</van-form>
<template v-if="handle">
<slot name="handle"></slot>
</template>
</div>
</template>
<script>
module.exports = {
props: {
handle: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '审核'
},
id: {
type: String,
default: ''
},
},
data() {
return {
viewData: {},
videoList: [],
prevImgList: [],
img2List: [],
audioList: [],
docList: [],
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg'],
doctype: ['doc', 'docx'],
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
}
},
components: {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
async getInfo(id) {
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id})
const refs = await $.get("/platform/hd/wmhd/findxxById", {id})
if (refs) {
this.viewData = refs.data
console.log(refs)
data.forEach(val => {
val.fjname = val.filename
val.fjurl = val.filepath
val.id = val.filepath
val.url = FILE_DOMAIN + '/fileStreamPreview?id=' + val.filepath
let filetype = val.fjname.substring(val.fjname.lastIndexOf('.') + 1, val.fjname.length).toLowerCase();
if (this.videotype.indexOf(filetype) > -1) {
this.videoList.push(val);
} else if (this.imgtype.indexOf(filetype) > -1) {
this.prevImgList.push(val.url)
this.img2List.push(val);
} else if (this.doctype.indexOf(filetype) > -1) {
this.docList.push(val);
} else if (this.audiotype.indexOf(filetype) > -1) {
this.audioList.push(val);
}
})
} else {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
},
},
async created() {
}
}
</script>
<style>
.van-cell-group__title {
padding-left: 0 !important;
}
.van-sidebar-item {
font-size: 16px !important;
text-indent: 4px !important;
}
.van-sidebar-item--select::before {
left: 5px !important;
}
</style>
@@ -1,311 +1,322 @@
<template>
<div>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">活动分组:</div>
<div class="search-item-option">
<el-select
placeholder="活动分组"
v-model="pageForm.groupId"
style="width: 100%"
@change="
doSearch()
viewGroupName()
"
filterable
>
<el-option v-for="item in activityGroupList" :label="item.groupName" :value="item.groupId"></el-option>
</el-select>
</div>
</div>
<div>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">活动分组:</div>
<div class="search-item-option">
<el-select placeholder="活动分组" v-model="pageForm.groupId"
style="width: 100%;"
@change="doSearch();viewGroupName()"
filterable>
<el-option v-for="item in activityGroupList" :label="item.groupName"
:value="item.groupId"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">姓名工号:</div>
<div class="search-item-option">
<el-input
placeholder="请输入内容"
clearable
v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch"
>
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 80px">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">姓名工号:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item" v-if="is_sysadmin || is_A06 || is_H03">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select
placeholder="所属工会"
v-model="pageForm.unionId"
style="width: 100%"
clearable="true"
@change="flushUnits"
@clear="flushUnits"
filterable="true"
>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
</el-select>
</div>
</div>
<div class="search-item"
v-if="is_sysadmin||is_A06||is_H03">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname"
: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
placeholder="所属单位"
v-model="pageForm.unitId"
style="width: 100%"
clearable="true"
@change="doSearch"
filterable="true"
>
<el-option v-for="item in units" :label="item.name" :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 placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<!--<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.activityUnionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in ActivityUnions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<!--<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.activityUnionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in ActivityUnions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.activityUnitId"
style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in ActivityUnits" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>-->
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select
v-model="pageForm.personType"
style="width: 100%"
clearable
placeholder="人员类型"
@change="doSearch"
code="UserType"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select
v-model="pageForm.userState"
style="width: 100%"
clearable
placeholder="在职状态"
@change="doSearch"
code="UserState"
></dict-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.activityUnitId"
style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in ActivityUnits" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>-->
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
placeholder="人员类型"
@change="doSearch"
code="UserType"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
placeholder="在职状态"
@change="doSearch"
code="UserState"></dict-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :label="currentGroupName" :app="this">
<template #label_end>
<!-- <span class="text-danger pl5">提醒:删除活动分组操作,请先选择某个活动分组后,再点击右边的删除按钮。</span>-->
</template>
<template #func>
<el-button @click="doExportUser" icon="el-icon-printer"
size="medium" type="primary" :disabled="!pageForm.groupId">
导出活动分组人员xlsx
</el-button>
<el-button @click="doDelete(null,pageForm.groupId)"
type="danger"
size="medium" :disabled="tableData.length===0">
删除{{ currentGroupName }}
</el-button>
</template>
</table-tool>
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize">
<el-table-column type="index" 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"
></el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<template scope="{row}">
<el-button size="mini" type="danger" @click="doDelete(row.id,null)">删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-sizes="[5,10, 20, 30, 50]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
</el-card>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :label="currentGroupName" :app="this">
<template #label_end>
<!-- <span class="text-danger pl5">提醒:删除活动分组操作,请先选择某个活动分组后,再点击右边的删除按钮。</span>-->
</template>
<template #func>
<el-button @click="doExportUser" icon="el-icon-printer" size="medium" type="primary" :disabled="!pageForm.groupId">
导出活动分组人员xlsx
</el-button>
<el-button @click="doDelete(null, pageForm.groupId)" type="danger" size="medium" :disabled="tableData.length === 0">
删除{{ currentGroupName }}
</el-button>
</template>
</table-tool>
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize">
<el-table-column type="index" 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"
></el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<template scope="{row}">
<el-button size="mini" type="danger" @click="doDelete(row.id, null)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-sizes="[5, 10, 20, 30, 50]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="pageForm.totalCount"
></el-pagination>
</el-row>
</el-card>
</div>
</template>
<script>
module.exports = {
props: {
group_id: {
type: String, default: ''
}
},
computed: {
is_H10() {
return this.roleData.is_H10
},
is_A06() {
return this.roleData.is_A06
},
is_H04() {
return this.roleData.is_H04
},
is_H02() {
return this.roleData.is_H02
},
is_H03() {
return this.roleData.is_H03
},
is_sysadmin() {
return this.roleData.is_sysadmin
},
unionid() {
return this.roleData.unionid
},
},
data() {
return {
activityGroupList: [],
ActivityUnions: [],
ActivityUnits: [],
unions: [],
units: [],
pageForm: {
unionId: "",
unitId: "",
searchName: "username",
personTypes: [],
userStates: [],
memberStatus: [],
year: moment().format('YYYY')
},
tableColumns: [
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'birthday', label: '出生年月'},
{prop: 'mobile', label: '联系电话'},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'unionName', label: '所属工会', sortable: true},
{prop: 'activityUnionName', label: '活动工会', sortable: true},
{prop: 'groupName', label: '所属分组', sortable: true},
],
roleData: {},
currentGroupName: null,
}
},
mixins: [initTableMixins],
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0')
},
methods: {
viewGroupName() {
if (this.pageForm.groupId) {
const group = this.activityGroupList.find(v => v.groupId === this.pageForm.groupId)
this.currentGroupName = group.groupName + '人员'
return
}
this.currentGroupName = '全部人员'
},
doExportUser() {
window.open("/platform/activity/basic/user/doExportUser?groupId=" + this.pageForm.groupId)
},
doSearch2() {
this.getActivityGroup()
this.doSearch()
},
async doDelete(id, groupId) {
const confirm = await this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === 'confirm') {
const resp = await $.post('/platform/activity/basic/user/doDelete', {id, groupId})
if (resp.code === 0) {
this.$message.success(resp.msg)
this.$set(this.pageForm, "groupId", null)
this.doSearch()
await this.getActivityGroup()
this.$emit('group_change')
props: {
group_id: {
type: String,
default: ""
}
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
/* if (this.is_A06 || this.is_sysadmin || this.is_H03) {
this.units = await getUnits(this.pageForm.unionId)
this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getUnits(this.unionid)
}*/
computed: {
is_H10() {
return this.roleData.is_H10
},
is_A06() {
return this.roleData.is_A06
},
is_H04() {
return this.roleData.is_H04
},
is_H02() {
return this.roleData.is_H02
},
is_H03() {
return this.roleData.is_H03
},
is_sysadmin() {
return this.roleData.is_sysadmin
},
unionid() {
return this.roleData.unionid
}
},
async getActivityGroup() {
this.pageForm.groupId = ''
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = resp.data
if (resp.data && resp.data.length > 0) {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
await this.pageData()
data() {
return {
activityGroupList: [],
ActivityUnions: [],
ActivityUnits: [],
unions: [],
units: [],
pageForm: {
unionId: "",
unitId: "",
searchName: "username",
personTypes: [],
userStates: [],
memberStatus: [],
year: moment().format("YYYY")
},
tableColumns: [
{ prop: "loginName", label: "工号" },
{ prop: "userName", label: "姓名" },
{ prop: "sex", label: "性别" },
{ prop: "birthday", label: "出生年月" },
{ prop: "mobile", label: "联系电话" },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "activityUnionName", label: "活动工会", sortable: true },
{ prop: "groupName", label: "所属分组", sortable: true }
],
roleData: {},
currentGroupName: null
}
},
async pageData() {
sublime.showLoadingbar()
const resp = await $.post('/platform/activity/basic/user/pageData', this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
sublime.closeLoadingbar()
mixins: [initTableMixins],
components: {
"dict-select": httpVueLoader("/components/plugins/DictSelect.vue?v=1.0.0")
},
},
async created() {
this.unions = await getUnions(null)
// this.ActivityUnions = await getActivityUnions()
await this.flushUnits()
await this.getActivityGroup()
this.viewGroupName()
}
methods: {
viewGroupName() {
if (this.pageForm.groupId) {
const group = this.activityGroupList.find((v) => v.groupId === this.pageForm.groupId)
this.currentGroupName = group.groupName + "人员"
return
}
this.currentGroupName = "全部人员"
},
doExportUser() {
window.open("/platform/activity/basic/user/doExportUser?groupId=" + this.pageForm.groupId)
},
doSearch2() {
this.getActivityGroup()
this.doSearch()
},
async doDelete(id, groupId) {
const confirm = await this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
const resp = await $.post("/platform/activity/basic/user/doDelete", { id, groupId })
if (resp.code === 0) {
this.$message.success(resp.msg)
await this.pageData()
if (groupId) {
await this.getActivityGroup()
}
this.$emit("group_change")
}
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
/* if (this.is_A06 || this.is_sysadmin || this.is_H03) {
this.units = await getUnits(this.pageForm.unionId)
this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getUnits(this.unionid)
}*/
},
async getActivityGroup() {
this.$set(this.pageForm, "groupId", null)
const resp = await $.get("/platform/activity/basic/scope/getActivityUserScopeGroup")
this.activityGroupList = resp.data
if (resp.data && resp.data.length > 0) {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
await this.pageData()
},
async pageData() {
sublime.showLoadingbar()
const resp = await $.post("/platform/activity/basic/user/pageData", this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
sublime.closeLoadingbar()
}
},
async created() {
this.unions = await getUnions(null)
// this.ActivityUnions = await getActivityUnions()
await this.flushUnits()
await this.getActivityGroup()
this.viewGroupName()
}
}
</script>
@@ -4,11 +4,14 @@
<div style="text-align: right">
<van-button plain type="danger" hairline size="small" @click="openSignDrawingBoard" native-type="button">打开签字版</van-button>
</div>
<van-popup v-model="signDrawingBoardShow" position="bottom" :style="{ height: '60vh' }">
<div id="canvas" style="position: relative; width: 100%"></div>
<div class="button-extra">
<van-button plain type="danger" hairline size="small" @click="reset" native-type="button">清空重签</van-button>
<van-button plain type="primary" hairline size="small" @click="confirm" native-type="button">确定</van-button>
<van-popup v-model="signDrawingBoardShow" position="bottom" :style="{ height: '60vh' }" get-container="body">
<div id="canvas" style="position: relative; width: 100%; height: calc(100% - 50px)"></div>
<div
class="button-extra"
style="height: 50px; display: flex; justify-content: space-between; align-items: center; padding: 0 20px; column-gap: 20px"
>
<van-button plain type="danger" block hairline @click="reset" native-type="button">清空重签</van-button>
<van-button plain type="primary" block hairline @click="confirm" native-type="button">确定</van-button>
</div>
</van-popup>
</div>
@@ -54,6 +57,8 @@ module.exports = {
openSignDrawingBoard() {
this.signDrawingBoardShow = true
this.$nextTick(() => {
// 删除之前的canvas
$("#canvas").empty()
$("#canvas").jSignature({
width: "100%",
height: "100%",
@@ -99,8 +104,15 @@ module.exports = {
if (this.is_value_base64) {
this.imageUrl = value
} else {
this.imageUrl = "/signature/getSignData?path=" + value
const prefix = "data:image/png;base64,"
if (!value.startsWith(prefix)) {
this.imageUrl = "/signature/getSignData?path=" + value
} else {
this.imageUrl = null
value = null
}
}
this.$emit("input", value)
},
checkNull() {
return $("#canvas").jSignature("getData", "native").length === 0
@@ -85,7 +85,7 @@ module.exports = {
const ts = new Date().getTime() + (Math.floor(Math.random() * (1000 - 1 + 1)) + 1).toString()
console.log(ts)
// this.postAddress = location.protocol + '//' + location.host + '/signature?prefix=' + this.prefix + '&id=' + ts + "&is_value_base64=" + this.is_value_base64
this.postAddress = "http://10.10.10.15/signature?prefix=" + this.prefix + "&id=" + ts + "&is_value_base64=" + this.is_value_base64
this.postAddress = "http://localhost/signature?prefix=" + this.prefix + "&id=" + ts + "&is_value_base64=" + this.is_value_base64
this.showQrCode = true
@@ -123,6 +123,8 @@
var loginPjax = "${@shiro.getPrincipalProperty('loginPjax')}"
const LOGO_URL = "${config.logoUrl!}"
window.sessionStorage.setItem("user", JSON.stringify(${json(@shiro.getPrincipal())}))
ELEMENT.locale(ELEMENT.lang["${lang,escape}"])
Vue.component("vuedraggable", window.vuedraggable)
@@ -161,7 +161,14 @@ layout("/mobile/platform.html"){
<van-button @click.stop="openView(o)" type="primary" size="small" color="#1867b0" style="margin-right: 8px; width: auto">
查看
</van-button>
<van-button @click.stop="openAudit(o)" type="primary" size="small" color="#1867b0" style="margin-right: 8px; width: auto">
<van-button
@click.stop="openAudit(o)"
v-if="o.status == 1"
type="primary"
size="small"
color="#1867b0"
style="margin-right: 8px; width: auto"
>
审核
</van-button>
</div>
@@ -505,10 +505,21 @@ layout("/mobile/platform.html"){
}
str += "请确认是否申请加入【" + row.name + "】?"
vant.Dialog.confirm({ title: "提示", message: str })
.then(() => {
.then(async () => {
this.formData.clubid = row.id
this.formData.photo = this.formData.photo[0].filepath
$.post(
if (this.formData.photo && this.formData.photo.length > 0) {
this.formData.photo = this.formData.photo[0].filepath
}
// this.formData.photo = this.formData.photo[0].filepath
const resp = await $.post("/platform/sys/club/sq/submit", this.formData)
if (resp.code === 0) {
vant.Toast(resp.msg)
this.doSearch()
this.infoShow = false
} else {
vant.Toast(resp.msg)
}
/*$.post(
"/platform/sys/club/sq/submit",
this.formData,
(data) => {
@@ -521,7 +532,7 @@ layout("/mobile/platform.html"){
}
},
"json"
)
)*/
})
.catch(() => {})
},
@@ -1,16 +1,19 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style></style>
<style>
</style>
<div id="app" v-cloak>
<van-nav-bar title="慰问申请信息" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问申请信息" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<div>
<condolence-info :id.sync="id"></condolence-info>
<div style="margin: 20px 20px 10px 20px">
<van-button :color="themeColor" block @click="doEdit" class="ml10 mr10" v-if="state_id==2010||state_id==2020">
撤&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回
<van-button :color="themeColor" block @click="doEdit" class="ml10 mr10"
v-if="state_id==2010||state_id==2020">撤&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回
</van-button>
</div>
</div>
@@ -18,7 +21,7 @@ layout("/mobile/platform.html"){
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
@@ -27,29 +30,30 @@ layout("/mobile/platform.html"){
}
},
components: {
"condolence-info": httpVueLoader("/components/condolence/mobile/common.vue?v=" + new Date().getTime())
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
doEdit() {
vant.Dialog.confirm({
title: "标题",
message: "确认要撤回吗?"
title: '标题',
message: '确认要撤回吗?',
})
.then(async () => {
const resp = await $.post("/platform/fw/condolence/ucr/doEdit", { id: this.id })
this.$toast.success("撤回成功")
const resp = await $.post("/platform/fw/condolence/ucr/doEdit", {id: this.id});
this.$toast.success('撤回成功');
setTimeout(() => {
history.back()
}, 1000)
})
.catch(() => {
// on cancel
})
});
}
},
async created() {
this.id = GetQueryString("id")
this.state_id = GetQueryString("state_id")
this.id = GetQueryString('id')
this.state_id = GetQueryString('state_id')
}
})
</script>
@@ -3,25 +3,38 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<m-page-loading v-if="mLoading"></m-page-loading>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed
@click-left="history.go(-1)"></van-nav-bar>
<div class="search-fixed">
<van-dropdown-menu :active-color="themeColor">
<van-dropdown-item v-model="pageForm.year" @change="yearChange" :options="yearList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.isAudit" @change="yearChange" :options="auditList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" @change="yearChange" :options="mCondolence.typeList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" @change="yearChange" :options="mCommon.unionList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unitId" @change="yearChange" :options="mCommon.unitList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.year" @change="yearChange"
:options="yearList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.isAudit" @change="yearChange"
:options="auditList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" @change="yearChange"
:options="mCondolence.typeList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" @change="yearChange"
:options="mCommon.unionList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unitId" @change="yearChange"
:options="mCommon.unitList"></van-dropdown-item>
</van-dropdown-menu>
</div>
<div style="margin: 70px auto 0">
<van-list v-model="mLoading" :finished="finished" :finished-text="tableData.length>0?'没有更多了':''" @load="pageData">
<van-list v-model="mLoading" :finished="finished"
:finished-text="tableData.length>0?'没有更多了':''"
@load="pageData">
<div v-for="o in tableData" class="list-card" @click="openView(o)">
<van-cell-group inset>
<van-cell :border="false" title="被慰问人">
<span class="van-ellipsis" style="font-size: 16px" :style="{color:themeColor}">{{o.be_username}}</span>
<span class="van-ellipsis" style="font-size: 16px;"
:style="{color:themeColor}">
{{o.be_username}}
</span>
</van-cell>
<van-cell :border="false" title="申&ensp;请&ensp;人">{{o.sqr_username}}</van-cell>
<van-cell :border="false" title="所在单位">{{o.be_unitname}}</van-cell>
@@ -36,13 +49,18 @@ layout("/mobile/platform.html"){
</div>
</van-list>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image"
image="/none.svg"
description="暂无数据">
</van-empty>
</div>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
@@ -50,30 +68,30 @@ layout("/mobile/platform.html"){
unionList: [],
yearList: [],
auditList: [
{ text: "未审核", value: false },
{ text: "已审核", value: true }
{text: '未审核', value: false},
{text: '已审核', value: true},
],
handle: true,
pageForm: {
year: new Date().getFullYear(),
isAudit: false
}
isAudit: false,
},
}
},
methods: {
openView(o) {
window.location.href = "/mobile/condolence/audit/auditHtml?state_id=" + o.state_id + "&id=" + o.id
window.location.href = '/mobile/condolence/audit/auditHtml?state_id=' + o.state_id + '&id=' + o.id
},
yearChange() {
this.tableData = []
this.refreshing = true
this.finished = false
this.refreshing = true;
this.finished = false;
this.pageForm.pageNumber = 0
this.flushUnits()
},
pageData() {
this.mLoading = true
$.get(loc() + "/pageData", this.pageForm, (res) => {
$.get(loc() + '/pageData', this.pageForm, (res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
@@ -84,10 +102,11 @@ layout("/mobile/platform.html"){
}
})
this.mLoading = false
},
async flushUnits() {
//this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === "true") {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') {
await mCommon.getUnitList(this.pageForm.unionId)
} else {
await mCommon.getUnitList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -96,7 +115,7 @@ layout("/mobile/platform.html"){
async init() {
let nowYear = new Date().getFullYear()
for (let i = nowYear; i >= nowYear - 9; i--) {
this.yearList.push({ text: i, value: i })
this.yearList.push({text: i, value: i})
}
await mCondolence.getType()
await mCommon.getUnionList()
@@ -114,12 +133,12 @@ layout("/mobile/platform.html"){
async created() {
this.init()
this.flushUnits()
if (GetQueryString("audit") === "1") {
if (GetQueryString("audit") === '1') {
this.pageForm.isAudit = true
}
}
})
window.addEventListener("pageshow", (e) => {
window.addEventListener('pageshow', e => {
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
vue.init()
vue.yearChange()
@@ -127,6 +146,7 @@ layout("/mobile/platform.html"){
})
</script>
<!--#
}
#-->
@@ -0,0 +1,369 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.title_color {
color: #000000;
}
.content_color {
color: grey;
}
.van-doc-card {
margin: 8px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 19px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="日常慰问分工会审核" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.sqr_username + '(' + item.sqr_loginname + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24">
<span class="title_color">慰问对象:</span>
<span class="content_color">{{item.be_username}}</span>
</van-col>
<van-col span="24"><span class="title_color">对象工号:</span>
<span class="content_color">
{{item.be_loginname}}
</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">所属工会:</span>
<span class="content_color">
{{item.be_unionname}}
</span>
</van-col>
<van-col span="24"><span class="title_color">工作单位:</span>
<span class="content_color">{{item.be_unitname}}</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">慰问类型:</span>
<span class="content_color">{{item.type_name}}</span>
</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span class="title_color">当前状态:</span>
<span class="content_color">{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="item.state_id === 2000"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<!--<van-button size="small" type="danger"
v-if="[2014,2015,2020].includes(item.state_id)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>-->
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="分工会审核"></van-nav-bar>
</van-sticky>
<div style="height: calc(100% - 44px);overflow-y: auto">
<condolence-info ref="info"></condolence-info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '分工会审核' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="time" v-model="formData.time" required></van-field>
<van-field label="审核意见" name="opinion" v-model="formData.opinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="sign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" v-model="formData.sign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">退回</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</div>
</van-popup>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
unitList: [],
yearList: [],
auditList: [
{text: '未审核', value: false},
{text: '已审核', value: true},
],
handle: true,
pageForm: {
year: new Date().getFullYear(),
isAudit: false
},
tableLoading: false,
tableFinished: false,
infoShow: false,
showApprovalForm: false,
}
},
components: {
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.time = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/fw/condolence/ucr/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.opinion) {
this.$toast.fail('请填写审核意见')
return
}
this.$refs.signature.submitSign()
if (this.formData.sign === undefined || this.$refs.signature.checkNull()) {
this.$toast.fail('请签名')
return
}
await this.$refs.signature.updateSign()
this.formData.pass = flag
const resp = await $.post('/platform/fw/condolence/ucr/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/fw/condolence/ucr/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.flushUnits()
} else {
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
},
})
</script>
<!--#
}
#-->
@@ -3,34 +3,37 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<condolence-info ref="info" :id.sync="id" title="校工会审核" :handle="handle">
<template #handle>
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">校工会审核</div>
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核
</div>
</div>
<van-form>
<van-field
readonly
left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
<van-field readonly left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o" readonly></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o"
readonly></van-field>
<van-field
v-model="formData.opinion"
left-icon="chat-o"
rows="1"
required
:rules="[{ required:true, message: '请输入审核意见' }]"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
<van-field v-model="formData.opinion"
left-icon="chat-o"
rows="1"
required
:rules="[{ required:true, message: '请输入审核意见' }]"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" required style="flex-flow: column">
@@ -42,76 +45,88 @@ layout("/mobile/platform.html"){
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px; padding: 0 25px">
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝</van-button>
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(2)">返回修改</van-button>
<van-button :color="themeColor" block @click="doAudit(2)">返回修改
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(3)">通 过</van-button>
<van-button :color="themeColor" block @click="doAudit(3)">通 过
</van-button>
</van-col>
</van-row>
</van-form>
</template>
</condolence-info>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
handle: true,
id: "",
formData: {}
formData: {},
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue"),
"condolence-info": httpVueLoader("/components/condolence/mobile/common.vue?v=" + new Date().getTime())
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
async doAudit(pass) {
if (!this.formData.opinion) {
this.$toast.fail("请填写审核意见")
this.$toast.fail('请填写审核意见');
return
}
this.$refs.signature.submitSign()
if (this.$refs.signature.checkNull()) {
vant.Toast("请签名!")
vant.Toast('请签名!')
return
}
await this.$refs.signature.updateSign()
this.formData.pass = pass
const resp = await $.post("/platform/fw/condolence/fr/doReview", this.formData)
if (resp.code === 0) {
this.$toast.success("审核成功")
this.$toast.success('审核成功')
setTimeout(() => {
window.history.back()
}, 1000)
} else {
this.$toast.fail("审核失败")
this.$toast.fail('审核失败');
}
}
},
},
async created() {
this.id = GetQueryString("id")
const { data } = await $.get("/platform/fw/condolence/findOne", { id: this.id })
const {data} = await $.get("/platform/fw/condolence/findOne", {id: this.id})
this.formData = {
id: this.id,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format("YYYY-MM-DD"),
time: moment().format('YYYY-MM-DD'),
opinion: null,
sign: ""
sign: "",
}
}
})
</script>
<!--#
}
#-->
@@ -3,53 +3,54 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<condolence-info ref="info" :id.sync="id" title="校工会主席审核" :handle="handle">
<template #handle>
<div class="van-cell-group__title mt10">
<div class="van-sidebar-item van-sidebar-item--select">校工会主席审核</div>
<div class="van-sidebar-item van-sidebar-item--select">
校工会主席审核
</div>
</div>
<van-form>
<van-field
readonly
left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
<van-field readonly
left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o" readonly></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o"
readonly></van-field>
<van-field
v-model="formData.money"
label="慰问金额"
type="number"
left-icon="balance-list-o"
required
:rules="[{ required:true, message: '请输入慰问金额' }]"
<van-field v-model="formData.money" label="慰问金额" type="number"
left-icon="balance-list-o"
required :rules="[{ required:true, message: '请输入慰问金额' }]"
></van-field>
<van-field v-model="auditType" label="审核类型" left-icon="clock-o" @click="typePicker = true" required readonly></van-field>
<van-field v-model="auditType" label="审核类型" left-icon="clock-o"
@click="typePicker = true" required readonly></van-field>
<van-popup v-model="typePicker" position="bottom">
<van-picker
show-toolbar
:columns="['审核通过','审核通过(线下提交资料)', '审核拒绝']"
@confirm="typeChange"
@cancel="typePicker = false"
show-toolbar
:columns="['审核通过','审核通过(线下提交资料)', '审核拒绝']"
@confirm="typeChange"
@cancel="typePicker = false"
></van-picker>
</van-popup>
<van-field
v-model="formData.opinion"
rows="1"
required
left-icon="chat-o"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
<van-field v-model="formData.opinion"
rows="1"
required
left-icon="chat-o"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" required style="flex-flow: column">
@@ -61,91 +62,102 @@ layout("/mobile/platform.html"){
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px; padding: 0 25px">
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝</van-button>
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button color="red" block plain @click="doAudit(2)">返回修改</van-button>
<van-button color="red" block plain @click="doAudit(2)">返回修改
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(3)">通 过</van-button>
<van-button :color="themeColor" block @click="doAudit(3)">通 过
</van-button>
</van-col>
</van-row>
</van-form>
</template>
</condolence-info>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
typePicker: false,
auditType: "审核通过",
auditType: '审核通过',
handle: true,
id: "",
formData: {}
formData: {},
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue"),
"condolence-info": httpVueLoader("/components/condolence/mobile/common.vue?v=" + new Date().getTime())
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
typeChange(value, index) {
if (value === "审核通过") {
this.formData.opinion = "情况属实,同意申请。"
} else if (value === "审核通过(线下提交资料)") {
this.$set(this.formData, "opinion", "请将纸质发票经办人、分工会主席签字后交至行政楼A426办公室。")
if(value === '审核通过') {
this.formData.opinion = '情况属实,同意申请。'
} else if (value === '审核通过(线下提交资料)') {
this.$set(this.formData, 'opinion', '请将纸质发票经办人、分工会主席签字后交至行政楼A426办公室。')
} else {
this.formData.opinion = ""
this.formData.opinion = ''
}
this.typePicker = false
},
async doAudit(pass) {
if (!this.formData.opinion) {
this.$toast.fail("请填写审核意见")
this.$toast.fail('请填写审核意见');
return
}
this.$refs.signature.submitSign()
if (pass === 3 && this.$refs.signature.checkNull()) {
vant.Toast("请签名!")
vant.Toast('请签名!')
return
}
await this.$refs.signature.updateSign()
this.formData.pass = pass
if (this.auditType === "审核通过(线下提交资料)") {
if(this.auditType === '审核通过(线下提交资料)') {
pass = 4
}
const resp = await $.post("/platform/fw/condolence/vcr/doReview", this.formData)
if (resp.code === 0) {
this.$toast.success("审核成功")
this.$toast.success('审核成功');
setTimeout(() => {
history.back()
}, 1000)
} else {
this.$toast.fail("审核失败")
this.$toast.fail('审核失败');
}
}
},
},
async created() {
this.id = GetQueryString("id")
const { data } = await $.get("/platform/fw/condolence/findOne", { id: this.id })
const {data} = await $.get("/platform/fw/condolence/findOne", {id: this.id})
this.formData = {
id: this.id,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format("YYYY-MM-DD"),
opinion: "情况属实,同意申请。",
time: moment().format('YYYY-MM-DD'),
opinion: '情况属实,同意申请。',
sign: "",
money: data.money
}
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,382 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.title_color {
color: #000000;
}
.content_color {
color: grey;
}
.van-doc-card {
margin: 8px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 19px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="日常慰问校工会主席审核" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="doSearch();flushUnits(pageForm.unionId)" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.sqr_username + '(' + item.sqr_loginname + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24">
<span class="title_color">慰问对象:</span>
<span class="content_color">{{item.be_username}}</span>
</van-col>
<van-col span="24"><span class="title_color">对象工号:</span>
<span class="content_color">
{{item.be_loginname}}
</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">所属工会:</span>
<span class="content_color">
{{item.be_unionname}}
</span>
</van-col>
<van-col span="24"><span class="title_color">工作单位:</span>
<span class="content_color">{{item.be_unitname}}</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">慰问类型:</span>
<span class="content_color">{{item.type_name}}</span>
</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span class="title_color">当前状态:</span>
<span class="content_color">{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="item.state_id === 2020"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<!--<van-button size="small" type="danger"
v-if="[2014,2015,2020].includes(item.state_id)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>-->
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="校工会主席"></van-nav-bar>
</van-sticky>
<div style="height: calc(100% - 44px);overflow-y: auto">
<condolence-info ref="info"></condolence-info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '校工会主席' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="time" v-model="formData.time" required></van-field>
<van-field label="审核意见" name="opinion" v-model="formData.opinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="sign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" v-model="formData.sign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">退回</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</div>
</van-popup>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
unionList: [],
unitList: [],
yearList: [],
auditList: [
{text: '未审核', value: false},
{text: '已审核', value: true},
],
handle: true,
pageForm: {
year: new Date().getFullYear(),
isAudit: false
},
tableLoading: false,
tableFinished: false,
infoShow: false,
showApprovalForm: false,
}
},
components: {
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.time = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/fw/condolence/vcr/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.opinion) {
this.$toast.fail('请填写审核意见')
return
}
if (this.formData.sign === undefined || !this.formData.sign) {
this.$toast.fail('请签名')
return
}
this.formData.pass = flag
const resp = await $.post('/platform/fw/condolence/vcr/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/fw/condolence/vcr/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async initUnion(unionId) {
this.unionList = await getUnions(unionId)
this.unionList.forEach(v => {
v.text = v.unionname
v.value = v.id
})
if (this.unionList && this.unionList.length > 0) {
this.unionList.unshift({ text: "全部工会", value: null })
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.initUnion()
await this.flushUnits()
} else {
await this.initUnion("${@shiro.getPrincipalProperty('unit').getUnionid()}")
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,421 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.title_color {
color: #000000;
}
.content_color {
color: grey;
}
.van-doc-card {
margin: 8px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 19px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="日常慰问校工会审核" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="doSearch();flushUnits(pageForm.unionId)" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.sqr_username + '(' + item.sqr_loginname + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24">
<span class="title_color">慰问对象:</span>
<span class="content_color">{{item.be_username}}</span>
</van-col>
<van-col span="24"><span class="title_color">对象工号:</span>
<span class="content_color">
{{item.be_loginname}}
</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">所属工会:</span>
<span class="content_color">
{{item.be_unionname}}
</span>
</van-col>
<van-col span="24"><span class="title_color">工作单位:</span>
<span class="content_color">{{item.be_unitname}}</span>
</van-col>
</van-row>
<van-row>
<van-col span="24"><span class="title_color">慰问类型:</span>
<span class="content_color">{{item.type_name}}</span>
</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span class="title_color">当前状态:</span>
<span class="content_color">{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="[2012, 2031].includes(item.state_id)"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<!--<van-button size="small" type="danger"
v-if="[2014,2015,2020].includes(item.state_id)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>-->
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="校工会审核"></van-nav-bar>
</van-sticky>
<div style="height: calc(100% - 44px);overflow-y: auto">
<condolence-info ref="info"></condolence-info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '校工会审核' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="time" v-model="formData.time" required></van-field>
<van-field label="审核类型" readonly name="auditType"
@click="showTypePicker = true"
placeholder="请选择审核类型"
v-model="formData.auditTypeName" required></van-field>
<van-popup v-model:show="showTypePicker" position="bottom" round>
<van-picker show-toolbar :columns="typeColumns" @confirm="onTypeConfirm"
@cancel="showTypePicker = false">
</van-picker>
</van-popup>
<van-field label="慰问金额" type="number" name="money" v-model="formData.money" placeholder="请输入慰问金额" required></van-field>
<van-field label="审核意见" name="opinion" v-model="formData.opinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="sign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" v-model="formData.sign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">退回</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</div>
</van-popup>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
unionList: [],
unitList: [],
yearList: [],
auditList: [
{text: '未审核', value: false},
{text: '已审核', value: true},
],
handle: true,
pageForm: {
year: new Date().getFullYear(),
isAudit: false
},
tableLoading: false,
tableFinished: false,
infoShow: false,
showApprovalForm: false,
showTypePicker: false,
typeColumns: [
{value: '1', text: '审核通过'},
{value: '2', text: '审核通过(线下提交资料)'},
{value: '3', text: '审核拒绝'},
{value: '4', text: '退回重填'},
]
}
},
components: {
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
onTypeConfirm(val) {
if (val.value === '1') {
this.$set(this.formData, 'opinion', '情况属实,同意申请。')
} else if (val.value === '2') {
this.$set(this.formData, 'opinion', '请将分工会主席和经办人签字后的发票、公务卡支付记录(未使用公务卡,请提交支付记录和公务卡结算审批表)一起交至行政楼A426办公室。')
} else {
this.$set(this.formData, 'opinion', '')
this.$set(this.formData, 'money', 0)
}
this.$set(this.formData, 'auditType', val.value)
this.$set(this.formData, 'auditTypeName', val.text)
this.showTypePicker = false
},
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.time = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.info.getInfo(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/fw/condolence/fr/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.opinion) {
this.$toast.fail('请填写审核意见')
return
}
if (this.formData.sign === undefined || !this.formData.sign) {
this.$toast.fail('请签名')
return
}
if (!this.formData.money) {
this.$toast.fail('请填写慰问金额')
return
}
if (!this.formData.auditType) {
this.$toast.fail('请选择审核类型')
return
}
this.formData.pass = flag
const resp = await $.post('/platform/fw/condolence/fr/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/fw/condolence/fr/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async initUnion(unionId) {
this.unionList = await getUnions(unionId)
this.unionList.forEach(v => {
v.text = v.unionname
v.value = v.id
})
if (this.unionList && this.unionList.length > 0) {
this.unionList.unshift({ text: "全部工会", value: null })
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.initUnion()
await this.flushUnits()
} else {
await this.initUnion("${@shiro.getPrincipalProperty('unit').getUnionid()}")
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
},
})
</script>
<!--#
}
#-->
@@ -3,33 +3,37 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<condolence-info ref="info" :id.sync="id" title="分工会审核" :handle="handle">
<template #handle>
<div class="van-cell-group__title mt10">
<div class="van-sidebar-item van-sidebar-item--select">分工会审核</div>
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核
</div>
</div>
<van-form>
<van-field
readonly
left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
readonly
left-icon="contact"
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o" readonly></van-field>
<van-field v-model="formData.time" label="审核时间" left-icon="clock-o"
readonly></van-field>
<van-field
v-model="formData.opinion"
left-icon="chat-o"
required
rows="1"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
<van-field v-model="formData.opinion"
left-icon="chat-o"
required
rows="1"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" required style="flex-flow: column">
@@ -41,75 +45,86 @@ layout("/mobile/platform.html"){
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px; padding: 0 25px">
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝</van-button>
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button color="red" block @click="doAudit(2)">返回修改</van-button>
<van-button color="red" block @click="doAudit(2)">返回修改
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(3)">通 过</van-button>
<van-button :color="themeColor" block @click="doAudit(3)">通 过
</van-button>
</van-col>
</van-row>
</van-form>
</template>
</condolence-info>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
handle: true,
id: "",
formData: {}
formData: {},
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue"),
"condolence-info": httpVueLoader("/components/condolence/mobile/common.vue?v=" + new Date().getTime())
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'condolence-info': httpVueLoader('/components/condolence/mobile/common.vue?v=' + new Date().getTime()),
},
methods: {
async doAudit(pass) {
if (!this.formData.opinion) {
this.$toast.fail("请填写审核意见")
this.$toast.fail('请填写审核意见');
return
}
this.$refs.signature.submitSign()
if (this.$refs.signature.checkNull()) {
vant.Toast("请签名!")
return
}
if (this.$refs.signature.checkNull()) {
vant.Toast('请签名!')
return
}
await this.$refs.signature.updateSign()
this.formData.pass = pass
const resp = await $.post("/platform/fw/condolence/ucr/doReview", this.formData)
if (resp.code === 0) {
this.$toast.success("审核成功")
this.$toast.success('审核成功');
setTimeout(() => {
history.back()
}, 1000)
} else {
this.$toast.fail("审核失败")
this.$toast.fail('审核失败');
}
}
},
},
async created() {
this.id = GetQueryString("id")
this.formData = {
id: this.id,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format("YYYY-MM-DD"),
time: moment().format('YYYY-MM-DD'),
opinion: null,
sign: ""
}
}
})
</script>
<!--#
}
#-->
@@ -2,296 +2,364 @@
layout("/mobile/platform.html"){
#-->
<style>
.family-list-field .van-field__value .van-field__control {
flex-direction: column;
align-items: flex-start;
}
.family-list {
display: flex;
flex-direction: column;
width: 100%;
}
.family-list-cell .van-cell__label {
font-size: 14px;
}
.family-dialog .van-dialog__content {
padding: 10px;
}
</style>
<div id="app" v-cloak>
<van-nav-bar title="困难补助申请" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-form ref="addForm" :show-error-message="false" input-align="right" style="margin-bottom: 60px">
<van-cell-group inset class="mt10">
<van-form @submit="onSubmit" :show-error-message="false">
<van-cell inset>
<van-field
readonly
value="${@shiro.getPrincipalProperty('username')} ( ${@shiro.getPrincipalProperty('loginname')} )"
name="sqrname"
label="申请人"
v-model="formData.userName"
label="申请人姓名"
readonly
required
:rules="[{ required: true, message: '请填写申请人姓名' }]"
></van-field>
<van-field name="apply_mode" label="申请模式">
<template #input>
<van-radio-group v-model="formData.apply_mode" direction="horizontal" @change="applyModeChange">
<van-radio :name="1">本人申请</van-radio>
<van-radio :name="2">替他人申请</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field
@input="userRemoteMethod"
name="bbzrusername"
v-model="formData.bbzrusername"
label="受补助人"
placeholder="请输入受补助人姓名"
:rules="[{ required: true, message: '请填写受补助人姓名' }]"
v-model="formData.loginName"
label="申请人工号"
readonly
required
:rules="[{ required: true, message: '请填写申请人工号' }]"
></van-field>
<van-action-sheet
v-model="sheetShow"
:actions="userList"
cancel-text="重新输入姓名或工号查询"
@cancel="userList = []"
:close-on-click-overlay="false"
@select="onUserSelect"
></van-action-sheet>
<van-field label="身份证号" v-model="formData.idcard"></van-field>
<van-field label="性别" v-model="formData.sex"></van-field>
<van-field label="职称" v-model="formData.zc"></van-field>
<van-field label="职务" v-model="formData.zw"></van-field>
<van-field label="单位" v-model="formData.unitname"></van-field>
<van-field label="出生日期" v-model="formData.birthday"></van-field>
<van-field label="手机号码" v-model="formData.lxfs" type="tel"></van-field>
<van-field
name="sq_bzlx_name"
@click="sq_bzlxShow = true"
:value="formData.sq_bzlx_name"
label="补助类型"
placeholder="请选择补助类型"
v-model="formData.sex"
label="性别"
required
is-link
readonly
:rules="[{ required: true, message: '性别' }]"
clickable
@click="showSexPicker = true"
></van-field>
<van-popup v-model:show="sq_bzlxShow" position="bottom" round>
<van-picker show-toolbar :columns="sq_bzlxList" @confirm="onSq_bzlxConfirm" @cancel="sq_bzlxShow = false"></van-picker>
<van-popup v-model="showSexPicker" position="bottom">
<van-picker
show-toolbar
:columns="['男', '女']"
@confirm="onSexConfirm"
@cancel="showSexPicker=false"
></van-picker>
</van-popup>
<van-field
name="sq_knlx_name"
@click="sq_knlxShow = true"
:value="formData.sq_knlx_name"
label="困难类型"
placeholder="请选择困难类型"
v-model="formData.unitName"
label="所在单位"
placeholder="所在单位"
readonly
:rules="[{ required: true, message: '所在单位' }]"
clearable
required
></van-field>
<van-popup v-model:show="sq_knlxShow" position="bottom" round>
<van-picker show-toolbar :columns="sq_knlxist" @confirm="onSq_knlxConfirm" @cancel="sq_knlxShow = false"></van-picker>
</van-popup>
<template v-if="formData.sq_knlx==1">
<van-field label="所在医院" placeholder="请填写所在所在医院" v-model="formData.hospital"></van-field>
<van-field
label="住院时间"
:value="formData.hospitalized_time_name"
placeholder="请填写住院时间"
@click="hospitalized_timeShow = true"
></van-field>
<van-calendar
v-model="hospitalized_timeShow"
:min-date="new Date('1999-01-01')"
:show-confirm="false"
type="range"
@confirm="onHospitalized_timeConfirm"
></van-calendar>
</template>
<van-field
v-model="formData.apply_reason"
name="remark"
label="申请理由"
style="flex-flow: column"
placeholder="请填写申请理由"
input-align="left"
rows="3"
maxlength="200"
type="textarea"
show-word-limit
autosize
>
<template #label>
<div class="mb10">申请事由</div>
</template>
</van-field>
</van-cell-group>
v-model="formData.unionName"
label="所在分工会"
placeholder="所在分工会"
readonly
:rules="[{ required: true, message: '所在分工会' }]"
clearable
required
></van-field>
<van-field
v-model="formData.monthlyIncome"
label="本人月收入"
type="number"
placeholder="请填写本人月收入"
:rules="[{ required: true, message: '请填写本人月收入' }]"
required
></van-field>
<van-field
v-model="formData.birthday"
label="出生年月"
is-link
@click="showDatePicker = true"
required
:rules="[{ required: true, message: '请填写出生年月' }]"
></van-field>
<van-popup v-model="showDatePicker" position="bottom">
<van-datetime-picker
type="date"
:min-date="new Date(1900, 0, 1)"
:max-date="new Date()"
@confirm="onDateConfirm"
@cancel="showDatePicker=false"
></van-datetime-picker>
</van-popup>
<van-field
v-model="formData.mobile"
label="手机号码"
placeholder="请填写手机号码"
maxlength="20"
clearable
required
:rules="[{ required: true, message: '请填写手机号码' }]"
></van-field>
<van-field
v-model="formData.homeAddress"
label="家庭地址"
placeholder="请填写家庭地址"
maxlength="200"
clearable
required
:rules="[{ required: true, message: '请填写家庭地址' }]"
></van-field>
<van-field
v-model="formData.subsidyStandards"
label="款项"
placeholder="请选择款项"
is-link
@click="showSubsidyPicker = true"
required
:rules="[{ required: true, message: '请选择款项' }]"
></van-field>
<van-popup v-model="showSubsidyPicker" position="bottom">
<van-picker
show-toolbar
:columns="subsidyStandards"
@confirm="onSubsidyConfirm"
@cancel="showSubsidyPicker=false"
></van-picker>
</van-popup>
<van-field
v-model="formData.reason"
label="申请原因"
type="textarea"
placeholder="请简述申请原因"
maxlength="500"
required
:rules="[{ required: true, message: '请简述申请原因' }]"
></van-field>
<van-field
v-model="formData.remarks"
label="备注"
type="textarea"
placeholder="请简述备注"
maxlength="500"
></van-field>
<van-cell-group inset class="mt10">
<van-field name="files" label="附&emsp;&emsp;件" required style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">附&emsp;&emsp;件</div>
</template>
<van-field name="familyList" label="家庭成员经济收入" @click="showDialog = true" required is-link
label-width="60%"
clickable
class="family-list-field">
</van-field>
<van-list class="family-list-cell">
<van-cell
v-for="(member, index) in formData.familyList"
:key="index"
:title="member.name"
:label="'年龄: ' + member.age + ' 岁, 关系: ' + member.relation + ', 月收入: ' + member.monthlyIncome + ' 元'"
is-link
@click="editMember(index)"
>
<template #right-icon>
<van-icon name="delete" color="red" @click.stop="removeMember(index)"></van-icon>
</template>
</van-cell>
</van-list>
<van-field name="files" label="附件" style="flex-flow: column" input-align="left">
<template #input>
<vant-file-upload :files.sync="formData.files"></vant-file-upload>
</template>
</van-field>
</van-cell-group>
<van-cell-group inset class="mt10">
<van-field label="签字" required style="flex-flow: column">
<template #label>
<div class="mb10">签&emsp;&emsp;字</div>
</template>
<template #input>
<mobile-sign ref="signature" :my_sign.sync="formData.sqsign"></mobile-sign>
<mobile-sign ref="signature" :my_sign.sync="formData.sign"></mobile-sign>
</template>
</van-field>
</van-cell-group>
<div style="margin: 20px 20px 10px 20px">
<van-button @click="onSubmit()" style="border-radius: 10px" block type="info" :color="themeColor">提 交</van-button>
</div>
<!-- 家庭成员经济收入表格和附件上传等功能需要自定义实现 -->
<van-button round block type="info" native-type="submit">提交</van-button>
</van-cell>
</van-form>
<div>
<van-tabbar v-model="tarBarActive" style="z-index: 99">
<van-tabbar-item icon="home-o" replace url="/mobile/difficulty/apply/index">困难补助申请</van-tabbar-item>
<van-tabbar-item icon="manager-o" replace url="/mobile/difficulty/apply/apply_list">困难补助记录</van-tabbar-item>
</van-tabbar>
</div>
<van-dialog v-model="showDialog" class="family-dialog" title="添加家庭成员" show-cancel-button
:before-close="handleBeforeClose">
<van-cell-group>
<van-field
v-model="newMember.name"
label="姓名"
placeholder="请输入姓名"
required
></van-field>
<van-field
v-model="newMember.age"
label="年龄(岁)"
type="number"
placeholder="请输入年龄"
required
></van-field>
<van-field
v-model="newMember.relation"
label="关系"
placeholder="请输入关系"
required
></van-field>
<van-field
v-model="newMember.monthlyIncome"
label="月收入(元)"
type="number"
placeholder="请输入月收入"
required
></van-field>
</van-cell-group>
</van-dialog>
</div>
<script src="/assets/platform/module/difficulty/common.js?v=1.0.0"></script>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
tarBarActive: 0,
id: GetQueryString("id"),
hospitalized_timeShow: false,
sq_bzlxShow: false,
sq_bzlxList: [],
minDate: {},
sq_knlxShow: false,
sq_knlxist: [],
userList: [],
formData: {
apply_mode: 1
formData: {},
showSexPicker: false,
showDatePicker: false,
showSubsidyPicker: false,
subsidyStandards: [
'本人患重症处于康复期、新患重症以外的疾病且自理医疗费在5万元以上、直系亲属患重症:1000-1500元。',
'突发事件造成家庭损失较重致生活困难:2000-2500元。',
'本人新患重症、长病假人员生活困难、家庭人均收入接近无锡市最低生活保障线:3000元。',
'其他'
],
newMember: {
name: '',
age: '',
relation: '',
monthlyIncome: ''
},
sheetShow: false,
files: []
showDialog: false,
isEditing: false,
editingIndex: null
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue")
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
onHospitalized_timeConfirm(val) {
this.$set(this.formData, "hospitalized_time_name", moment(val[0]).format("YYYY-MM-DD") + "至" + moment(val[1]).format("YYYY-MM-DD"))
this.$set(this.formData, "hospitalized_time", moment(val[0]).format("YYYY-MM-DD") + "至" + moment(val[1]).format("YYYY-MM-DD"))
this.hospitalized_timeShow = false
},
onSq_bzlxConfirm(val) {
this.$set(this.formData, "sq_bzlx_name", val.text)
this.$set(this.formData, "sq_bzlx", val.value)
for (let i in difficulty.getHard(val.value)) {
this.sq_knlxist.push({ value: i, text: difficulty.getHard(val.value)[i] })
onSubmit(values) {
console.log(this.formData)
if(this.formData.familyList.length === 0){
this.$toast("请添加家庭成员信息")
return
}
this.$set(this.formData, "sq_knlx_name", null)
this.$set(this.formData, "sq_knlx", null)
this.sq_bzlxShow = false
},
onSq_knlxConfirm(val) {
this.$set(this.formData, "sq_knlx_name", val.text)
this.$set(this.formData, "sq_knlx", val.value)
this.sq_knlxShow = false
},
applyModeChange(val) {
if (val === 1) {
this.$set(this.formData, "difficultyUser", "${@shiro.getPrincipalProperty('id')}")
this.$set(this.formData, "bbzrusername", "${@shiro.getPrincipalProperty('username')}")
this.$set(this.formData, "sex", "${@shiro.getPrincipalProperty('sex')}")
this.$set(this.formData, "zc", "${@shiro.getPrincipalProperty('jobTitle')}")
this.$set(this.formData, "zw", "${@shiro.getPrincipalProperty('position')}")
this.$set(this.formData, "unitname", "${@shiro.getPrincipalProperty('unit').getName()}")
this.$set(this.formData, "birthday", "${@shiro.getPrincipalProperty('birthday')}")
this.$set(this.formData, "lxfs", "${@shiro.getPrincipalProperty('mobile')}")
this.$set(this.formData, "idcard", "${@shiro.getPrincipalProperty('idcard')}")
} else if (val === 2) {
this.formData = {}
this.$set(this.formData, "apply_mode", 2)
this.$set(this.formData, "bbzrusername", undefined)
}
},
async userRemoteMethod(query) {
if (query) {
const { data } = await $.get("/platform/fw/condolence/apply/queryUser", { query })
data.forEach((v) => {
v.name = v.username
v.subname = v.loginname
return v
})
this.userList = data
this.sheetShow = true
}
},
onUserSelect(val) {
this.$set(this.formData, "difficultyUser", val.id)
this.$set(this.formData, "bbzrusername", val.name)
this.$set(this.formData, "lxfs", val.mobile)
this.$set(this.formData, "sex", val.sex)
this.$set(this.formData, "unitname", val.unitname)
this.$set(this.formData, "zc", val.jobTitle)
this.$set(this.formData, "zw", val.position)
this.$set(this.formData, "birthday", val.birthday)
this.$set(this.formData, "sq_bzlx_name", this.sq_bzlxList[0].text)
this.$set(this.formData, "sq_bzlx", this.sq_bzlxList[0].value)
this.sheetShow = false
},
async onSubmit() {
this.$refs.signature.submitSign()
/* if (!this.formData.sqsign) {
vant.Toast('请签名!')
return
}*/
const formData = clone(this.formData)
formData.files = JSON.stringify(formData.files)
formData.applicantsign = formData.sqsign
formData.bbzrusername = formData.difficultyUser
formData.flag = true
this.$refs["addForm"].validate().then(async () => {
this.$toast.loading("提交中...")
const res = await $.post("/platform/fw/difficulty/apply/doAdd", formData)
$.post('/platform/difficulty/apply/doAdd', {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$toast.success("申请成功")
setTimeout(() => {
location.replace("/mobile/difficulty/apply/apply_list")
}, 1000)
this.$toast.success(res.msg)
sublime.jumpPagePjax('/platform/difficulty/applylist')
} else {
this.$toast.fail("申请失败")
this.$message.error(res.msg)
}
})
},
async getApplyInfo(id) {
const { data, code, msg } = await $.get("/platform/fw/difficulty/applylist/findOne", { id })
if (data) {
data.apply_mode = parseInt(data.apply_mode)
this.formData = data
if (this.formData.files && this.formData.files.length > 0) {
this.formData.files = JSON.parse(data.files)
onSexConfirm(value) {
this.formData.sex = value;
this.showSexPicker = false;
},
onDateConfirm(value) {
this.formData.birthday = value;
this.showDatePicker = false;
},
onSubsidyConfirm(value) {
this.formData.subsidyStandards = value;
this.showSubsidyPicker = false;
},
handleBeforeClose(action, done) {
if (action === 'confirm') {
if (!this.newMember.name || !this.newMember.age || !this.newMember.relation || !this.newMember.monthlyIncome) {
this.$toast('请填写完整信息');
done(false);
} else {
done()
if (this.isEditing) {
this.updateMember();
} else {
this.addMember();
}
done();
}
} else {
done()
}
},
addMember() {
this.formData.familyList.push({...this.newMember});
this.resetNewMember();
},
editMember(index) {
this.newMember = {...this.formData.familyList[index]};
this.editingIndex = index;
this.isEditing = true;
this.showDialog = true;
},
updateMember() {
this.formData.familyList.splice(this.editingIndex, 1, { ...this.newMember });
this.resetNewMember();
},
removeMember(index) {
this.formData.familyList.splice(index, 1);
},
resetNewMember() {
this.newMember = {name: '', age: '', relation: '', monthlyIncome: ''};
this.isEditing = false;
this.editingIndex = null;
}
},
mounted() {
this.$nextTick(() => {
if (this.$refs.signature) {
this.$refs.signature.getMySign()
}
})
},
async created() {
this.applyModeChange(1)
for (let i in difficulty.subsidy) {
this.sq_bzlxList.push({ value: i, text: difficulty.subsidy[i] })
}
this.$set(this.formData, "sq_bzlx_name", this.sq_bzlxList[0].text)
this.$set(this.formData, "sq_bzlx", this.sq_bzlxList[0].value)
for (let i in difficulty.getHard(this.formData.sq_bzlx)) {
this.sq_knlxist.push({ value: i, text: difficulty.getHard(this.formData.sq_bzlx)[i] })
}
this.formData.apply_time = moment().format("YYYY-MM-DD")
if (this.id) {
this.getApplyInfo(this.id)
$.get('/platform/difficulty/apply/findOne', {id: this.id}).then(res => {
if (res.code === 0) {
this.formData = res.data
}
})
} else {
const user = JSON.parse(window.sessionStorage.getItem('user'))
this.$set(this.formData, 'userId', user.id)
this.$set(this.formData, 'userName', user.username)
this.$set(this.formData, 'loginName', user.loginname)
this.$set(this.formData, 'sex', user.sex)
this.$set(this.formData, 'unitId', user.unit.id)
this.$set(this.formData, 'unitName', user.unit.name)
this.$set(this.formData, 'unionId', user.union.id)
this.$set(this.formData, 'unionName', user.union.unionname)
this.$set(this.formData, 'monthlyIncome', null)
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'mobile', user.mobile)
this.$set(this.formData, 'homeAddress', user.homeAddress)
this.$set(this.formData, 'subsidyStandards', null)
this.$set(this.formData, 'reason', null)
this.$set(this.formData, 'remarks', null)
this.$set(this.formData, 'familyList', [])
this.$set(this.formData, 'files', [])
}
}
})
@@ -0,0 +1,494 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.family-list-field .van-field__value .van-field__control {
flex-direction: column;
align-items: flex-start;
}
.family-list {
display: flex;
flex-direction: column;
width: 100%;
}
.family-list-cell .van-cell__label {
font-size: 14px;
}
.family-dialog .van-dialog__content {
padding: 10px;
}
</style>
<div id="app" v-cloak>
<van-nav-bar @click-left="pjaxReplace('/mobile/index')" fixed left-arrow placeholder
title="困难补助申请"></van-nav-bar>
<van-form :show-error-message="false" @submit="onSubmit">
<van-cell inset>
<van-field
:rules="[{ required: true, message: '请填写申请人姓名' }]"
label="申请人姓名"
readonly
required1
v-model="formData.proxyUserName"
></van-field>
<van-field
:rules="[{ required: true, message: '请填写申请人工号' }]"
label="申请人工号"
readonly
required
v-model="formData.proxyLoginName"
></van-field>
<van-field
label="申请模式"
readonly
required
>
<template #input>
<van-radio-group :disabled="formData.id" @change="modeChange"
direction="horizontal" v-model="formData.mode">
<van-radio name="1">本人申请</van-radio>
<van-radio name="2">替他人申请</van-radio>
</van-radio-group>
</template>
</van-field>
<!-- <van-field
v-model="formData.userName"
label="姓名"
readonly
required
:rules="[{ required: true, message: '请填写申请人姓名' }]"
></van-field>
<van-field
v-model="formData.loginName"
label="工号"
readonly
required
:rules="[{ required: true, message: '请填写申请人工号' }]"
></van-field>-->
<van-field :readonly="formData.id"
:rules="[{ required: true, message: '请填写受补助人姓名' }]"
label="受补助人" name="userName"
placeholder="请输入受补助人姓名" required v-if="formData.mode==='2'"
v-model="formData.userName">
<template #button>
<van-button :color="themeColor" :disabled="formData.id"
@click="userNameInput(formData.userName)" size="small"
type="primary"
v-if="formData.mode==='2'">查询
</van-button>
</template>
</van-field>
<van-action-sheet :actions="subsidizedList"
:close-on-click-overlay="false"
@cancel="subsidizedList = []"
@select="onUserSelect"
cancel-text="重新输入姓名或工号查询"
v-model="userNameSheetShow">
</van-action-sheet>
<van-field
:rules="[{ required: true, message: '性别' }]"
@click="showSexPicker = true"
clickable
is-link
label="性别"
placeholder="性别"
readonly
required
v-model="formData.sex"
></van-field>
<van-popup position="bottom" v-model="showSexPicker">
<van-picker
:columns="['男', '女']"
@cancel="showSexPicker=false"
@confirm="onSexConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field
:rules="[{ required: true, message: '所在单位' }]"
clearable
label="所在单位"
placeholder="所在单位"
readonly
required
v-model="formData.unitName"
></van-field>
<van-field
:rules="[{ required: true, message: '所在分工会' }]"
clearable
label="所在分工会"
placeholder="所在分工会"
readonly
required
v-model="formData.unionName"
></van-field>
<van-field
:rules="[{ required: true, message: '请填写本人月收入' }]"
label="本人月收入"
placeholder="请填写本人月收入"
required
type="number"
v-model="formData.monthlyIncome"
></van-field>
<van-field
:rules="[{ required: true, message: '请填写出生年月' }]"
@click="showDatePicker = true"
is-link
label="出生年月"
placeholder="出生年月"
required
v-model="formData.birthday"
></van-field>
<van-popup position="bottom" v-model="showDatePicker">
<van-datetime-picker
:max-date="new Date()"
:min-date="new Date(1900, 0, 1)"
@cancel="showDatePicker=false"
@confirm="onDateConfirm"
type="date"
></van-datetime-picker>
</van-popup>
<van-field
:rules="[{ required: true, message: '请填写手机号码' }]"
clearable
label="手机号码"
maxlength="20"
placeholder="请填写手机号码"
required
v-model="formData.mobile"
></van-field>
<van-field
:rules="[{ required: true, message: '请填写家庭地址' }]"
clearable
label="家庭地址"
maxlength="200"
placeholder="请填写家庭地址"
required
v-model="formData.homeAddress"
></van-field>
<van-field
:rules="[{ required: true, message: '请选择款项' }]"
@click="showSubsidyPicker = true"
is-link
label="款项"
placeholder="请选择款项"
required
v-model="formData.subsidyStandards"
></van-field>
<van-popup position="bottom" v-model="showSubsidyPicker">
<van-picker
:columns="subsidyStandards"
@cancel="showSubsidyPicker=false"
@confirm="onSubsidyConfirm"
show-toolbar
></van-picker>
</van-popup>
<van-field
:rules="[{ required: true, message: '请简述申请原因' }]"
label="申请原因"
maxlength="500"
placeholder="请简述申请原因"
required
type="textarea"
v-model="formData.reason"
></van-field>
<van-field
label="备注"
maxlength="500"
placeholder="请简述备注"
type="textarea"
v-model="formData.remarks"
></van-field>
<van-field @click="showDialog = true" class="family-list-field" clickable is-link
label="家庭成员经济收入"
label-width="60%"
name="familyList"
required>
</van-field>
<van-list class="family-list-cell">
<van-cell
:key="index"
:label="'年龄: ' + member.age + ' 岁, 关系: ' + member.relation + ', 月收入: ' + member.monthlyIncome + ' 元'"
:title="member.name"
@click="editMember(index)"
is-link
v-for="(member, index) in formData.familyList"
>
<template #right-icon>
<van-icon @click.stop="removeMember(index)" color="red"
name="delete"></van-icon>
</template>
</van-cell>
</van-list>
<van-field input-align="left" label="附件" name="files" style="flex-flow: column">
<template #input>
<vant-file-upload :files.sync="formData.files"></vant-file-upload>
</template>
</van-field>
<van-field label="签字" required style="flex-flow: column">
<template #input>
<mobile-sign :is_value_base64="false" ref="signature"
v-model="formData.signature"></mobile-sign>
</template>
</van-field>
<!-- 家庭成员经济收入表格和附件上传等功能需要自定义实现 -->
<van-button block native-type="submit" round type="info">提交</van-button>
</van-cell>
</van-form>
<van-dialog :before-close="handleBeforeClose" class="family-dialog" show-cancel-button
title="添加家庭成员"
v-model="showDialog">
<van-cell-group>
<van-field
label="姓名"
placeholder="请输入姓名"
required
v-model="newMember.name"
></van-field>
<van-field
label="年龄(岁)"
placeholder="请输入年龄"
required
type="number"
v-model="newMember.age"
></van-field>
<van-field
label="关系"
placeholder="请输入关系"
required
v-model="newMember.relation"
></van-field>
<van-field
label="月收入(元)"
placeholder="请输入月收入"
required
type="number"
v-model="newMember.monthlyIncome"
></van-field>
</van-cell-group>
</van-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
id: GetQueryString("id"),
formData: {},
showSexPicker: false,
showDatePicker: false,
showSubsidyPicker: false,
subsidyStandards: [
'本人患重症处于康复期、新患重症以外的疾病且自理医疗费在5万元以上、直系亲属患重症:1000-1500元。',
'突发事件造成家庭损失较重致生活困难:2000-2500元。',
'本人新患重症、长病假人员生活困难、家庭人均收入接近无锡市最低生活保障线:3000元。'
],
newMember: {
name: '',
age: '',
relation: '',
monthlyIncome: ''
},
showDialog: false,
isEditing: false,
editingIndex: null,
subsidizedList: [],
userNameSheetShow: false,
}
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
userNameInput(val) {
$.post('/platform/difficulty/apply/querySqr', {key: val}).then(res => {
res.data.forEach(v => {
v.name = v.username
v.subname = v.loginname
return v
})
this.subsidizedList = res.data;
this.userNameSheetShow = true
});
},
onUserSelect(val) {
const user = this.subsidizedList.find(item => item.id === val.id)
if (user) {
this.$set(this.formData, 'userId', user.id)
this.$set(this.formData, 'userName', user.username)
this.$set(this.formData, 'loginName', user.loginname)
this.$set(this.formData, 'sex', user.sex)
this.$set(this.formData, 'unitId', user.unitid)
this.$set(this.formData, 'unitName', user.unitname)
this.$set(this.formData, 'unionId', user.unionid)
this.$set(this.formData, 'unionName', user.unionname)
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'mobile', user.mobile)
} else {
this.$set(this.formData, 'userId', null)
this.$set(this.formData, 'userName', null)
this.$set(this.formData, 'loginName', null)
this.$set(this.formData, 'sex', null)
this.$set(this.formData, 'unitId', null)
this.$set(this.formData, 'unitName', null)
this.$set(this.formData, 'unionId', null)
this.$set(this.formData, 'unionName', null)
this.$set(this.formData, 'birthday', null)
this.$set(this.formData, 'mobile', null)
}
this.userNameSheetShow = false
},
modeChange(val) {
if (this.formData.id) {
return
}
const user = JSON.parse(window.sessionStorage.getItem('user'))
if (val === "1") {
this.$set(this.formData, 'userId', user.id)
this.$set(this.formData, 'userName', user.username)
this.$set(this.formData, 'loginName', user.loginname)
this.$set(this.formData, 'proxyUserId', user.id)
this.$set(this.formData, 'proxyUserName', user.username)
this.$set(this.formData, 'proxyLoginName', user.loginname)
this.$set(this.formData, 'mode', "1")
this.$set(this.formData, 'sex', user.sex)
this.$set(this.formData, 'unitId', user.unit.id)
this.$set(this.formData, 'unitName', user.unit.name)
this.$set(this.formData, 'unionId', user.union.id)
this.$set(this.formData, 'unionName', user.union.unionname)
this.$set(this.formData, 'monthlyIncome', null)
this.$set(this.formData, 'birthday', user.birthday)
this.$set(this.formData, 'mobile', user.mobile)
this.$set(this.formData, 'homeAddress', user.homeAddress)
this.$set(this.formData, 'subsidyStandards', null)
this.$set(this.formData, 'reason', null)
this.$set(this.formData, 'remarks', null)
this.$set(this.formData, 'familyList', [])
this.$set(this.formData, 'files', [])
} else {
this.formData = {}
this.$set(this.formData, 'proxyUserId', user.id)
this.$set(this.formData, 'proxyUserName', user.username)
this.$set(this.formData, 'proxyLoginName', user.loginname)
this.$set(this.formData, 'mode', "2")
this.$set(this.formData, 'familyList', [])
this.$set(this.formData, 'files', [])
}
},
onSubmit(values) {
if (this.formData.familyList.length === 0) {
this.$toast("请添加家庭成员信息")
return
}
if (!this.formData.signature) {
this.$toast("请签字!")
return
}
let urlValue = 'doAdd'
if (this.id) {
urlValue = 'doEdit'
}
$.post('/platform/difficulty/apply/' + urlValue, {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$toast.success(res.msg)
pjaxReplace('/platform/difficulty/applylist/h5')
} else {
this.$message.error(res.msg)
}
})
},
onSexConfirm(value) {
this.formData.sex = value;
this.showSexPicker = false;
},
onDateConfirm(value) {
this.formData.birthday = value;
this.showDatePicker = false;
},
onSubsidyConfirm(value) {
this.formData.subsidyStandards = value;
this.showSubsidyPicker = false;
},
handleBeforeClose(action, done) {
if (action === 'confirm') {
if (!this.newMember.name || !this.newMember.age || !this.newMember.relation || !this.newMember.monthlyIncome) {
this.$toast('请填写完整信息');
done(false);
} else {
done()
if (this.isEditing) {
this.updateMember();
} else {
this.addMember();
}
done();
}
} else {
done()
}
},
addMember() {
this.formData.familyList.push({...this.newMember});
this.resetNewMember();
},
editMember(index) {
this.newMember = {...this.formData.familyList[index]};
this.editingIndex = index;
this.isEditing = true;
this.showDialog = true;
},
updateMember() {
this.formData.familyList.splice(this.editingIndex, 1, {...this.newMember});
this.resetNewMember();
},
removeMember(index) {
this.formData.familyList.splice(index, 1);
},
resetNewMember() {
this.newMember = {name: '', age: '', relation: '', monthlyIncome: ''};
this.isEditing = false;
this.editingIndex = null;
}
},
async created() {
if (this.id) {
$.get('/platform/difficulty/apply/findOne', {id: this.id}).then(res => {
if (res.code === 0) {
res.data.birthday = moment(res.data.birthday).format('YYYY-MM-DD')
this.formData = res.data
}
})
} else {
this.modeChange("1")
}
}
})
</script>
<!--#
}
#-->
@@ -1,10 +1,12 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style></style>
<style>
</style>
<div id="app" v-cloak>
<van-nav-bar title="困难帮扶申请信息" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="困难帮扶申请信息" left-arrow placeholder fixed @click-left="history.back()"></van-nav-bar>
<div>
<difficulty-info :id.sync="id"></difficulty-info>
@@ -13,7 +15,7 @@ layout("/mobile/platform.html"){
<script src="/assets/platform/module/difficulty/common.js?v=1.0.0"></script>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
@@ -22,15 +24,15 @@ layout("/mobile/platform.html"){
}
},
components: {
"difficulty-info": httpVueLoader("/components/mobile/difficulty/info.vue?v=" + new Date().getTime())
'difficulty-info': httpVueLoader('/components/mobile/difficulty/info.vue?v=' + new Date().getTime()),
},
methods: {},
async created() {
this.id = GetQueryString("id")
this.state_id = GetQueryString("state_id")
this.id = GetQueryString('id')
this.state_id = GetQueryString('state_id')
}
})
</script>
<!--#
}
#-->
#-->
@@ -3,10 +3,10 @@ layout("/mobile/platform.html"){
#-->
<style>
.apply_btn {
animation: come 0.5s;
animation: come .5s;
position: fixed;
top: 20%;
right: 0;
right: 0
}
@keyframes come {
@@ -17,11 +17,12 @@ layout("/mobile/platform.html"){
right: 0px;
}
}
</style>
<div id="app" v-cloak>
<m-page-loading v-if="mLoading"></m-page-loading>
<van-nav-bar title="困难帮扶申请列表" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="困难帮扶申请列表" left-arrow placeholder fixed @click-left="history.back()"></van-nav-bar>
<div class="search-fixed">
<van-dropdown-menu active-color="#1989fa">
@@ -29,11 +30,14 @@ layout("/mobile/platform.html"){
</van-dropdown-menu>
</div>
<div style="margin: 60px auto 0 auto">
<van-list v-model="loading" :finished="finished" :finished-text="tableData.length>0?'没有更多了':''" @load="pageData">
<van-list v-model="loading" :finished="finished" :finished-text="tableData.length>0?'没有更多了':''"
@load="pageData">
<div v-for="o in tableData" class="list-card" @click="openInfo(o.id,o.zt)">
<van-cell-group inset>
<van-cell :border="false" title="受补助人">
<span class="van-ellipsis" style="font-size: 16px" :style="{color:themeColor}">{{o.sbzrname}}({{o.sbzrloginname}})</span>
<span class="van-ellipsis" style="font-size: 16px;" :style="{color:themeColor}">
{{o.sbzrname}}({{o.sbzrloginname}})
</span>
</van-cell>
<van-cell :border="false" title="申请时间">{{o.sqsj}}</van-cell>
<van-cell :border="false" title="所属单位">{{o.unitname}}</van-cell>
@@ -46,30 +50,34 @@ layout("/mobile/platform.html"){
</van-list>
</div>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" image="/none.svg"
description="暂无数据">
</van-empty>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
visible: true,
typeOption: [{ value: null, text: "全部" }],
typeOption: [
{value: null, text: '全部'}
],
yearOption: [],
pageForm: {
year: "",
type: ""
year: '',
type: ''
}
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue")
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
},
methods: {
openInfo(id, state) {
window.location.href = "/mobile/difficulty/apply/apply_info?id=" + id
window.location.href = '/mobile/difficulty/apply/apply_info?id=' + id
/* if ([95,96, 100].includes(state)) {
window.location.href = '/mobile/difficulty/apply/index?id=' + id
}else{
@@ -84,18 +92,19 @@ layout("/mobile/platform.html"){
listenTouch() {
this.$nextTick(() => {
const app = document.querySelector("#app")
app.addEventListener("touchstart", () => {
app.addEventListener('touchstart', () => {
this.visible = false
})
app.addEventListener("touchend", () => {
app.addEventListener('touchend', () => {
this.visible = true
})
})
},
pageData() {
this.mLoading = true
setTimeout(async () => {
$.get("/platform/fw/difficulty/applylist/pageData", this.pageForm, (res) => {
$.get('/platform/fw/difficulty/applylist/pageData', this.pageForm, (res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
@@ -107,7 +116,7 @@ layout("/mobile/platform.html"){
})
this.mLoading = false
}, 600)
}
},
},
mounted() {
this.listenTouch()
@@ -115,7 +124,7 @@ layout("/mobile/platform.html"){
async created() {
this.mLoading = true
for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.yearOption.unshift({ value: i, text: i + "年" })
this.yearOption.unshift({value: i, text: i + '年'},)
}
this.$set(this.pageForm, "year", this.yearOption[0].value)
this.mLoading = false
@@ -124,4 +133,4 @@ layout("/mobile/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -3,24 +3,36 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<m-page-loading v-if="mLoading"></m-page-loading>
<van-nav-bar title="困难帮扶审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="困难帮扶审核" left-arrow placeholder fixed
@click-left="history.go(-1)"></van-nav-bar>
<div class="search-fixed">
<van-dropdown-menu active-color="#1989fa">
<van-dropdown-item v-model="pageForm.year" @change="yearChange" :options="yearList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.isAudit" @change="yearChange" :options="auditList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" @change="yearChange" :options="mCommon.unionList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unitId" @change="yearChange" :options="mCommon.unitList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.year" @change="yearChange"
:options="yearList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.isAudit" @change="yearChange"
:options="auditList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" @change="yearChange"
:options="mCommon.unionList"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.unitId" @change="yearChange"
:options="mCommon.unitList"></van-dropdown-item>
</van-dropdown-menu>
</div>
<div style="margin: 70px auto 0">
<van-list v-model="loading" :finished="finished" :finished-text="tableData.length>0?'没有更多了':''" @load="pageData">
<van-list v-model="loading" :finished="finished"
:finished-text="tableData.length>0?'没有更多了':''"
@load="pageData">
<div v-for="o in tableData" class="list-card" @click="openView(o)">
<van-cell-group inset>
<van-cell :border="false" title="受助人">
<span class="van-ellipsis" style="font-size: 16px" :style="{color:themeColor}">{{o.sbzrname}}({{o.sbzrloginname}})</span>
<span class="van-ellipsis" style="font-size: 16px;"
:style="{color:themeColor}">
{{o.sbzrname}}({{o.sbzrloginname}})
</span>
</van-cell>
<van-cell :border="false" title="申&ensp;请&ensp;人">{{o.sqrname}}</van-cell>
<van-cell :border="false" title="所在工会">{{o.sqrunionname}}</van-cell>
@@ -34,13 +46,18 @@ layout("/mobile/platform.html"){
</div>
</van-list>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image"
image="/none.svg"
description="暂无数据">
</van-empty>
</div>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
@@ -48,19 +65,19 @@ layout("/mobile/platform.html"){
unionList: [],
yearList: [],
auditList: [
{ text: "未审核", value: false },
{ text: "已审核", value: true }
{text: '未审核', value: false},
{text: '已审核', value: true},
],
handle: true,
pageForm: {
year: new Date().getFullYear(),
isAudit: false
}
isAudit: false,
},
}
},
methods: {
openView(o) {
window.location.href = "/mobile/difficulty/audit/auditHtml?zt=" + o.zt + "&id=" + o.id
window.location.href = '/mobile/difficulty/audit/auditHtml?zt=' + o.zt + '&id=' + o.id
},
yearChange() {
this.pageForm.pageNumber = 1
@@ -72,7 +89,7 @@ layout("/mobile/platform.html"){
pageData() {
this.mLoading = true
setTimeout(async () => {
$.get(loc() + "/pageData", this.pageForm, (res) => {
$.get(loc() + '/pageData', this.pageForm, (res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
@@ -86,7 +103,7 @@ layout("/mobile/platform.html"){
}, 600)
},
async flushUnits() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === "true") {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') {
await mCommon.getUnitList(this.pageForm.unionId)
} else {
await mCommon.getUnitList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -95,7 +112,7 @@ layout("/mobile/platform.html"){
async init() {
let nowYear = new Date().getFullYear()
for (let i = nowYear; i >= nowYear - 9; i--) {
this.yearList.push({ text: i, value: i })
this.yearList.push({text: i, value: i})
}
await mCondolence.getType()
await mCommon.getUnionList()
@@ -112,7 +129,7 @@ layout("/mobile/platform.html"){
this.flushUnits()
}
})
window.addEventListener("pageshow", (e) => {
window.addEventListener('pageshow', e => {
if (e.persisted || (window.performance && window.performance.navigation.type === 2)) {
vue.init()
vue.yearChange()
@@ -120,6 +137,7 @@ layout("/mobile/platform.html"){
})
</script>
<!--#
}
#-->
#-->
@@ -0,0 +1,356 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-doc-card {
margin: 14px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 16px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="困难帮扶分工会审核" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-search
v-model="pageForm.searchKeyword"
placeholder="请输入工号或者姓名进行查询"
:show-action="false"
:reverse-color="false"
input-align="left"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.userName + '(' + item.loginName + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24"><span style="color: grey">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</span><span>{{item.sex}}</span></van-col>
<van-col span="24"><span style="color: grey">联系方式:</span>{{item.mobile}}</van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">所属工会:</span>{{item.unionName}}</van-col>
<van-col span="24"><span style="color: grey">工作单位:</span><span>{{item.unitName}}</span></van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">款&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项:</span>{{item.subsidyStandards}}</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span style="color: grey">当前状态:</span>
<span>{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="item.stateId === 3000"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<van-button size="small" type="danger"
v-if="[3010,3020,3030].includes(item.stateId)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="分工会审核"></van-nav-bar>
</van-sticky>
<div style="height: calc(100% - 44px);overflow-y: auto">
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '分工会审核' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="auditTime" v-model="formData.auditTime" required></van-field>
<van-field label="审核金额" type="number" name="money" v-model="formData.money" placeholder="请输入审核金额" required></van-field>
<van-field label="审核意见" name="auditOpinion" v-model="formData.auditOpinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="auditSign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" :is_value_base64="false" v-model="formData.auditSign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">返回修改</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</div>
</van-popup>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
unionId: "",
unitId: "",
isAudit: false
},
unitList: [],
yearList: [],
auditList: [
{text: "已审核", value: true},
{text: "未审核", value: false},
],
tableLoading: false,
tableFinished: false,
userId: "",
infoShow: false,
showApprovalForm: false
}
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'info': info
},
methods: {
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.auditTime = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/difficulty/branchUnionAudit/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.money || !this.formData.auditOpinion || !this.formData.auditSign) {
this.$toast.fail('存在未填写的必填项,请填写完整后再次提交')
return
}
this.formData.pass = flag
const resp = await $.post('/platform/difficulty/branchUnionAudit/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/difficulty/branchUnionAudit/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.flushUnits()
} else {
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,161 @@
const info = {
template: /*language=HTML*/
`
<div>
<van-cell-group>
<van-cell title="姓名">{{ viewData.userName }}</van-cell>
<van-cell title="工号">{{ viewData.loginName }}</van-cell>
<van-cell title="性别">{{ viewData.sex }}</van-cell>
<van-cell title="单位">{{ viewData.unitName }}</van-cell>
<van-cell title="分工会">{{ viewData.unionName }}</van-cell>
<van-cell title="月收入">{{ viewData.monthlyIncome }}</van-cell>
<van-cell title="出生年月">{{ viewData.birthday }}</van-cell>
<van-cell title="手机号码">{{ viewData.mobile }}</van-cell>
<van-cell title="家庭地址">{{ viewData.homeAddress }}</van-cell>
<van-cell title="款项">{{ viewData.subsidyStandards }}</van-cell>
<van-cell title="申请原因">{{ viewData.reason }}</van-cell>
<van-cell title="备注">{{ viewData.remarks }}</van-cell>
<van-cell title="家庭成员收入" class="column-cell">
<table class="family-table">
<thead>
<tr>
<th class="table-header">序号</th>
<th class="table-header">姓名</th>
<th class="table-header">年龄(岁)</th>
<th class="table-header">关系</th>
<th class="table-header">月收入(元)</th>
</tr>
</thead>
<tbody>
<tr class="table-row" v-for="(item, index) in viewData.familyList" :key="index">
<td class="table-cell">{{ index + 1 }}</td>
<td class="table-cell">{{ item.name }}</td>
<td class="table-cell">{{ item.age }}</td>
<td class="table-cell">{{ item.relation }}</td>
<td class="table-cell">{{ item.monthlyIncome }}</td>
</tr>
</tbody>
</table>
</van-cell>
<van-cell title="附件" class="column-cell">
<vant-file-upload :files.sync="viewData.files" view :del="false"
v-if="viewData.files&&viewData.files.length"></vant-file-upload>
<span v-else>暂无</span>
</van-cell>
<van-cell title="签字" class="column-cell">
<van-image width="200" height="100" :src="CREATE_PREVIEW_URL(viewData.signature)"
v-if="viewData.signature"></van-image>
<span v-else>暂无</span>
</van-cell>
</van-cell-group>
<van-cell-group v-if="viewData.branchUnionAudit">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell title="审核人">{{ viewData.branchUnionAudit.username }}</van-cell>
<van-cell title="审核时间">{{ viewData.branchUnionAudit.auditTime }}</van-cell>
<van-cell title="审核金额" v-if="!viewData.isSelf">{{ viewData.branchUnionAudit.ext?.money }}元</van-cell>
<van-cell title="审核意见">{{ viewData.branchUnionAudit.auditOpinion }}</van-cell>
<van-cell title="签字" class="column-cell">
<van-image width="200" height="100" :src="CREATE_PREVIEW_URL(viewData.branchUnionAudit.auditSign)"
v-if="viewData.branchUnionAudit.auditSign"></van-image>
<span v-else>暂无</span>
</van-cell>
</van-cell-group>
<van-cell-group v-if="viewData.schoolUnionInitialAudit">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
校工会初审信息
</div>
</div>
<van-cell title="审核人">{{ viewData.schoolUnionInitialAudit.username }}</van-cell>
<van-cell title="审核时间">{{ viewData.schoolUnionInitialAudit.auditTime }}</van-cell>
<van-cell title="审核金额">{{ viewData.schoolUnionInitialAudit.ext?.money }}元</van-cell>
<van-cell title="审核意见" v-if="!viewData.isSelf">{{ viewData.schoolUnionInitialAudit.auditOpinion }}</van-cell>
<van-cell title="签字" class="column-cell">
<van-image width="200" height="100" :src="CREATE_PREVIEW_URL(viewData.schoolUnionInitialAudit.auditSign)"
v-if="viewData.schoolUnionInitialAudit.auditSign"></van-image>
<span v-else>暂无</span>
</van-cell>
</van-cell-group>
<van-cell-group v-if="viewData.schoolUnionFinalAudit">
<div class="van-cell-group__title mt20">
<div class="van-sidebar-item van-sidebar-item--select">
批准部门意见
</div>
</div>
<van-cell title="审核人">{{ viewData.schoolUnionFinalAudit.username }}</van-cell>
<van-cell title="审核时间">{{ viewData.schoolUnionFinalAudit.auditTime }}</van-cell>
<van-cell title="审核金额">{{ viewData.schoolUnionInitialAudit.ext?.money }}元</van-cell>
<van-cell title="审核意见">{{ viewData.schoolUnionFinalAudit.auditOpinion }}</van-cell>
<van-cell title="签字" class="column-cell">
<van-image width="200" height="100" :src="CREATE_PREVIEW_URL(viewData.schoolUnionFinalAudit.auditSign)"
v-if="viewData.schoolUnionFinalAudit.auditSign"></van-image>
<span v-else>暂无</span>
</van-cell>
</van-cell-group>
</div>
`,
data() {
return {
activeName: 'info',
viewData: {}
}
},
methods: {
CREATE_PREVIEW_URL,
onOpen(id, activeName = '1') {
this.activeName = activeName
$.get('/platform/difficulty/common/findOne', {id}).then(res => {
if (res.code === 0) {
try {
res.data.familyList = JSON.parse(res.data.familyList)
res.data.files = JSON.parse(res.data.files)
} catch (e) {
}
this.viewData = res.data
console.log(this.viewData)
}
})
}
},
style: /*language=CSS*/
`
.column-cell {
flex-direction: column;
}
.family-table {
width: 100%;
max-width: 100%;
border-collapse: collapse;
table-layout: auto;
text-align: center;
font-family: 'Arial', sans-serif;
margin: 20px 0;
}
.table-header {
background-color: #1867b0;
color: white;
font-weight: bold;
text-transform: uppercase;
}
.table-row {
background-color: #f9f9f9;
transition: background-color 0.3s;
}
.table-row:hover {
background-color: #f1f1f1;
}
.table-cell {
padding: 10px 20px;
border: 1px solid #ddd;
text-align: center;
}
`
}
@@ -0,0 +1,293 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-doc-card {
margin: 14px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 16px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="困难帮扶申请记录" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-search
v-model="pageForm.searchKeyword"
placeholder="请输入工号或者姓名进行查询"
:show-action="false"
:reverse-color="false"
input-align="left"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="doSearch();flushUnits(pageForm.unionId)" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.userName + '(' + item.loginName + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24"><span style="color: grey">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</span><span>{{item.sex}}</span></van-col>
<van-col span="24"><span style="color: grey">联系方式:</span>{{item.mobile}}</van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">所属工会:</span>{{item.unionName}}</van-col>
<van-col span="24"><span style="color: grey">工作单位:</span><span>{{item.unitName}}</span></van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">款&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项:</span>{{item.subsidyStandards}}</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span style="color: grey">当前状态:</span>
<span>{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" @click="pjaxReplace('/platform/difficulty/apply/h5?id=' + item.id)"
v-if="[3000,3020,3050,3080].includes(item.stateId)"
type="info" style="margin-right: 4px">编辑</van-button>
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100vh', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="困难帮扶申请记录详情"></van-nav-bar>
</van-sticky>
<div style="height: calc(100% - 44px);overflow-y: auto">
<info ref="infoRef"></info>
</div>
</van-popup>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
unionId: "",
unitId: "",
isAudit: false
},
unionList: [],
unitList: [],
yearList: [],
tableLoading: false,
tableFinished: false,
infoShow: false,
}
},
components: {
'info': info
},
methods: {
openView(item) {
this.infoShow = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/difficulty/applylist/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async initUnion(unionId) {
this.unionList = await getUnions(unionId)
this.unionList.forEach(v => {
v.text = v.unionname
v.value = v.id
})
if (this.unionList && this.unionList.length > 0) {
this.unionList.unshift({ text: "全部工会", value: null })
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.initUnion()
await this.flushUnits()
} else {
await this.initUnion("${@shiro.getPrincipalProperty('unit').getUnionid()}")
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -3,20 +3,35 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="慰问审核" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<difficulty-info ref="info" :id.sync="id" title="校工会主席审核" :handle="handle">
<template #handle>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">校工会主席审核</div>
<div class="van-sidebar-item van-sidebar-item--select">
校工会主席审核
</div>
</div>
<van-form>
<van-field readonly value="${@shiro.getPrincipalProperty('username')}" name="username" label="审核人员"></van-field>
<van-field readonly
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
></van-field>
<van-field v-model="formData.auditTime" label="审核时间" readonly></van-field>
<van-field v-model="formData.xghbzje" label="初审金额"></van-field>
<van-field v-model="formData.opinion" rows="1" autosize label="审核意见" type="textarea" placeholder="请输入审核意见"></van-field>
<van-field v-model="formData.opinion"
rows="1"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" required style="flex-flow: column">
<template #label>
@@ -27,42 +42,52 @@ layout("/mobile/platform.html"){
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px; padding: 0 25px">
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝</van-button>
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(3)">返回修改</van-button>
<van-button :color="themeColor" block @click="doAudit(3)">返回修改
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(2)">通 过</van-button>
<van-button :color="themeColor" block @click="doAudit(2)">通 过
</van-button>
</van-col>
</van-row>
</van-form>
</template>
</difficulty-info>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
handle: true,
id: "",
formData: {}
formData: {},
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue"),
"difficulty-info": httpVueLoader("/components/mobile/difficulty/info.vue?v=" + new Date().getTime())
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'difficulty-info': httpVueLoader('/components/mobile/difficulty/info.vue?v=' + new Date().getTime()),
},
methods: {
async doAudit(pass) {
if (!this.formData.opinion) {
this.$toast.fail("请填写审核意见")
this.$toast.fail('请填写审核意见');
return
}
this.$refs.signature.submitSign()
@@ -71,14 +96,14 @@ layout("/mobile/platform.html"){
this.formData.pass = pass
const resp = await $.post("/platform/fw/difficulty/schoolmanager/doReview", this.formData)
if (resp.code === 0) {
this.$toast.success("审核成功")
this.$toast.success('审核成功');
setTimeout(() => {
history.back()
}, 1000)
} else {
this.$toast.fail("审核失败")
this.$toast.fail('审核失败');
}
}
},
},
async created() {
this.id = GetQueryString("id")
@@ -86,16 +111,19 @@ layout("/mobile/platform.html"){
this.formData = {
id: this.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format("YYYY-MM-DD"),
auditTime: moment().format('YYYY-MM-DD'),
auditOpinion: null,
auditSign: "",
xghbzje: this.$refs.info.viewData.xghbzje
}
}, 300)
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,369 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-doc-card {
margin: 14px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 16px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="困难帮扶委员会审核" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-search
v-model="pageForm.searchKeyword"
placeholder="请输入工号或者姓名进行查询"
:show-action="false"
:reverse-color="false"
input-align="left"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="doSearch" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.userName + '(' + item.loginName + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24"><span style="color: grey">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</span><span>{{item.sex}}</span></van-col>
<van-col span="24"><span style="color: grey">联系方式:</span>{{item.mobile}}</van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">所属工会:</span>{{item.unionName}}</van-col>
<van-col span="24"><span style="color: grey">工作单位:</span><span>{{item.unitName}}</span></van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">款&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项:</span>{{item.subsidyStandards}}</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span style="color: grey">当前状态:</span>
<span>{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="item.stateId === 3060"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<van-button size="small" type="danger"
v-if="[3070,3080,3090].includes(item.stateId)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="工会常委会审核审核"></van-nav-bar>
</van-sticky>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '工会常委会审核审核' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="auditTime" v-model="formData.auditTime" required></van-field>
<van-field label="审核金额" type="number" name="money" v-model="formData.money" placeholder="请输入审核金额" required></van-field>
<van-field label="审核意见" name="auditOpinion" v-model="formData.auditOpinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="auditSign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" v-model="formData.auditSign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">返回修改</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</van-popup>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
unionId: "",
unitId: "",
isAudit: false
},
unionList: [],
unitList: [],
yearList: [],
auditList: [
{text: "已审核", value: true},
{text: "未审核", value: false},
],
tableLoading: false,
tableFinished: false,
userId: "",
infoShow: false,
showApprovalForm: false
}
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'info': info
},
methods: {
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.auditTime = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/difficulty/schoolUnionFinalAudit/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.money || !this.formData.auditOpinion || !this.formData.auditSign) {
this.$toast.fail('存在未填写的必填项,请填写完整后再次提交')
return
}
this.formData.pass = flag
const resp = await $.post('/platform/difficulty/schoolUnionFinalAudit/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/difficulty/schoolUnionFinalAudit/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async initUnion(unionId) {
this.unionList = await getUnions(unionId)
this.unionList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unionList && this.unionList.length > 0) {
this.unionList.unshift({ text: "全部工会", value: null })
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.initUnion()
await this.flushUnits()
} else {
await this.initUnion("${@shiro.getPrincipalProperty('unit').getUnionid()}")
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,369 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-doc-card {
margin: 14px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
font-size: 15px;
position: relative;
}
.van-divider {
margin: 6px 0 6px 0;
}
.van-button--small {
border-radius: 8px;
height: 26px;
font-size: 16px;
}
.van-col {
line-height: 35px;
}
.title_span {
font-size: 16px;
font-weight: bold;
position: absolute;
left: -1px;
top: 11px;
color: #1867b0;
}
.title {
font-size: 18px;
font-weight: bold;
flex: 1;
overflow: hidden;
white-space: nowrap;
color: #1867b0;
}
.cus_overflow {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.van-dropdown-menu__item {
flex: auto;
}
p {
margin: 0 !important;
}
.van-cell__title {
width: 30%;
}
.van-cell__right-icon {
margin-left: 0;
}
.van-sidebar-item {
padding: 8px 12px;
}
.footer {
background-color: white;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
width: 90% !important;
}
.join {
background-color: #0e78c5;
color: white;
}
.info_tab .van-doc-card > div:first-child {
border: 2px #0e78c5 solid;
width: 26px;
border-radius: 6px;
position: absolute;
top: 0;
left: 20px;
}
.process-title {
font-size: 15px;
color: #1867b0;
font-weight: 600;
margin: 10px 0 10px 0!important;
padding:10px;
position: relative;
line-height: 1.1;
font-family: inherit;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="困难帮扶校工会初审" left-arrow placeholder fixed
@click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-search
v-model="pageForm.searchKeyword"
placeholder="请输入工号或者姓名进行查询"
:show-action="false"
:reverse-color="false"
input-align="left"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="doSearch();flushUnits(pageForm.unionId)" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
<van-dropdown-item :options="auditList" @change="doSearch" v-model="pageForm.isAudit"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div v-for="item in tableData" :key="item.id" class="van-doc-card">
<div>
<div style="display: flex; justify-content: space-between">
<div style="width: 74%">
<div class="van-ellipsis title">
<span class="title_span">|</span>
<span>{{item.userName + '(' + item.loginName + ')'}}</span>
</div>
</div>
</div>
<div style="margin-top: 4px">
<van-row>
<van-col span="24"><span style="color: grey">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</span><span>{{item.sex}}</span></van-col>
<van-col span="24"><span style="color: grey">联系方式:</span>{{item.mobile}}</van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">所属工会:</span>{{item.unionName}}</van-col>
<van-col span="24"><span style="color: grey">工作单位:</span><span>{{item.unitName}}</span></van-col>
</van-row>
<van-row>
<van-col span="24"><span style="color: grey">款&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项:</span>{{item.subsidyStandards}}</van-col>
</van-row>
</div>
<van-divider></van-divider>
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<span style="color: grey">当前状态:</span>
<span>{{item.state_name}}</span>
</div>
<div>
<van-button size="small" @click="openView(item)"
type="info" style="margin-right: 4px">查看
</van-button>
<van-button size="small" type="primary"
v-if="item.stateId === 3030"
@click="openApproval(item)"
style="margin-right: 4px">审核
</van-button>
<van-button size="small" type="danger"
v-if="[3040,3050,3060].includes(item.stateId)"
@click="openRevoke(item.id)"
style="margin-right: 4px">撤回
</van-button>
</div>
</div>
</div>
</div>
</van-list>
<van-empty v-else class="custom-image" image="/none.svg" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow
title="校工会初审"></van-nav-bar>
</van-sticky>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{ '校工会初审' }}</div>
<van-form>
<van-field label="审核人员" readonly name="username" v-model="formData.username" required></van-field>
<van-field label="审核时间" readonly name="auditTime" v-model="formData.auditTime" placeholder="请输入审核时间" required></van-field>
<van-field label="审核金额" type="number" name="money" v-model="formData.money" placeholder="请输入审核金额" required></van-field>
<van-field label="审核意见" name="auditOpinion" v-model="formData.auditOpinion" placeholder="请输入审核意见" required></van-field>
<van-field label="审核签字" name="auditSign" required style="flex-flow: column">
<template #label>
<div class="mb10">审核签字</div>
</template>
<template #input>
<mobile-sign ref="signature" v-model="formData.auditSign"></mobile-sign>
</template>
</van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click.submit="doApproval(1)">拒绝</van-button>
<van-button type="danger" block @click.submit="doApproval(2)">返回修改</van-button>
<van-button type="primary" block @click.submit="doApproval(3)">通过</van-button>
</div>
</div>
</van-popup>
</div>
<script>
<!--#include('../common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
unionId: "",
unitId: "",
isAudit: false
},
unionList: [],
unitList: [],
yearList: [],
auditList: [
{text: "已审核", value: true},
{text: "未审核", value: false},
],
tableLoading: false,
tableFinished: false,
userId: "",
infoShow: false,
showApprovalForm: false
}
},
components: {
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'info': info
},
methods: {
openView(item) {
this.infoShow = true
this.showApprovalForm = false
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openApproval(item) {
this.formData.id = item.id
this.formData.username = "${@shiro.getPrincipalProperty('username')}"
this.formData.auditTime = moment().format('YYYY-MM-DD')
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(item.id)
})
},
openRevoke(id) {
this.$dialog.confirm({
title: '温馨提示',
message: '确定要撤回该申请吗?'
}).then(() => {
$.post('/platform/difficulty/schoolUnionInitialAudit/doEdit', { id }).then(resp => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
})
})
},
async doApproval(flag) {
if (!this.formData.money || !this.formData.auditOpinion || !this.formData.auditSign) {
this.$toast.fail('存在未填写的必填项,请填写完整后再次提交')
return
}
this.formData.pass = flag
const resp = await $.post('/platform/difficulty/schoolUnionInitialAudit/doReview', this.formData)
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.infoShow = false
this.doSearch()
} else {
this.$toast.fail(resp.msg)
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
$.post('/platform/difficulty/schoolUnionInitialAudit/pageData', this.pageForm)
.then(res => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
async initUnion(unionId) {
this.unionList = await getUnions(unionId)
this.unionList.forEach(v => {
v.text = v.unionname
v.value = v.id
})
if (this.unionList && this.unionList.length > 0) {
this.unionList.unshift({ text: "全部工会", value: null })
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
},
async flushUnits(unionId) {
this.unitList = await getUnits(unionId)
this.unitList.forEach(v => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.unitList.unshift({ text: "全部单位", value: null })
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
},
async initData() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
await this.initUnion()
await this.flushUnits()
} else {
await this.initUnion("${@shiro.getPrincipalProperty('unit').getUnionid()}")
await this.flushUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.doSearch()
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -3,26 +3,34 @@ layout("/mobile/platform.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar title="困难帮扶审核" left-arrow placeholder fixed @click-left="pjaxReplace('/mobile/index')"></van-nav-bar>
<van-nav-bar title="困难帮扶审核" left-arrow placeholder fixed
@click-left="history.back()"></van-nav-bar>
<difficulty-info ref="info" :id.sync="id" title="分工会审核" :handle="handle">
<template #handle>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">分工会主席审核</div>
<div class="van-sidebar-item van-sidebar-item--select">
分工会主席审核
</div>
</div>
<van-form>
<van-field readonly value="${@shiro.getPrincipalProperty('username')}" name="username" label="审核人员"></van-field>
<van-field
readonly
value="${@shiro.getPrincipalProperty('username')}"
name="username"
label="审核人员"
></van-field>
<van-field v-model="formData.auditTime" label="审核时间" readonly></van-field>
<van-field
v-model="formData.auditOpinion"
required
rows="1"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
<van-field v-model="formData.auditOpinion"
required
rows="1"
autosize
label="审核意见"
type="textarea"
placeholder="请输入审核意见"
></van-field>
<van-field label="签字" required style="flex-flow: column">
@@ -34,71 +42,82 @@ layout("/mobile/platform.html"){
</template>
</van-field>
<van-row gutter="20" style="margin-top: 30px; padding: 0 25px">
<van-row gutter="20" style="margin-top: 30px;padding: 0 25px">
<van-col span="8">
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝</van-button>
<van-button :color="themeColor" plain block @click="doAudit(1)">拒 绝
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(2)">返回修改</van-button>
<van-button :color="themeColor" block @click="doAudit(2)">返回修改
</van-button>
</van-col>
<van-col span="8">
<van-button :color="themeColor" block @click="doAudit(3)">通 过</van-button>
<van-button :color="themeColor" block @click="doAudit(3)">通 过
</van-button>
</van-col>
</van-row>
</van-form>
</template>
</difficulty-info>
</div>
<script>
const vue = new Vue({
el: "#app",
el: '#app',
mixins: [mobileMixins],
data() {
return {
handle: true,
id: "",
formData: {}
formData: {},
}
},
components: {
"mobile-sign": httpVueLoader("/components/sign/mobileSign.vue"),
"difficulty-info": httpVueLoader("/components/mobile/difficulty/info.vue?v=" + new Date().getTime())
'mobile-sign': httpVueLoader('/components/sign/mobileSign.vue'),
'difficulty-info': httpVueLoader('/components/mobile/difficulty/info.vue?v=' + new Date().getTime()),
},
methods: {
async doAudit(pass) {
if (!this.formData.auditOpinion) {
this.$toast.fail("请填写审核意见")
this.$toast.fail('请填写审核意见');
return
}
this.$refs.signature.submitSign()
await this.$refs.signature.updateSign()
this.formData.pass = pass
const resp = await $.post("/platform/fw/difficulty/unionchairman/doReview", this.formData)
if (resp.code === 0) {
this.$toast.success("审核成功")
if(resp.code===0){
this.$toast.success('审核成功');
setTimeout(() => {
location.href = "/mobile/difficulty/audit"
location.href = '/mobile/difficulty/audit'
}, 1000)
} else {
this.$toast.fail("审核失败")
}else{
this.$toast.fail('审核失败');
}
}
},
},
async created() {
this.id = GetQueryString("id")
this.formData = {
id: this.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format("YYYY-MM-DD"),
auditTime: moment().format('YYYY-MM-DD'),
auditOpinion: null,
auditSign: ""
}
}
})
</script>
<!--#
}
#-->
@@ -269,7 +269,7 @@ layout("/mobile/platform.html"){
payStandards.map((p) => {
if (p.personTypes.includes(personType)) {
r.selectMode = p.payMode
if (p.payMode === "1") {
if (p.c === "1") {
r.modeValue = p.payModeValue
} else {
r.modeValueList = p.payModeValueList
@@ -6,14 +6,14 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
<van-number-keyboard safe-area-inset-bottom />
<title></title>
<!-- <link rel="stylesheet" href="https://cdn.staticfile.org/vant/2.12.25/index.min.css" />-->
<!-- <link rel="stylesheet" href="https://cdn.staticfile.org/vant/2.12.25/index.min.css" />-->
<link rel="stylesheet" href="${base!}/assets/mobile/css/theme.css" />
<link rel="stylesheet" href="${base!}/assets/mobile/css/main.css" />
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/vant.css?v=1.0.0">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/vant.css?v=1.0.0" />
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
<!-- <script src="https://cdn.staticfile.org/vant/2.12.25/vant.min.js"></script>-->
<!-- <script src="https://cdn.staticfile.org/vant/2.12.25/vant.min.js"></script>-->
<script src="${base!}/assets/platform/plugins/vant/vant.js"></script>
<script src="${base!}/assets/platform/plugins/vue-loader/httpVueLoader.js"></script>
<script src="${base!}/assets/mobile/js/basic.js"></script>
@@ -49,6 +49,10 @@
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
<script>
Vue.component("mobile-sign", httpVueLoader("/components/sign/mobileSign.vue?v=" + new Date().getTime()))
</script>
<script>
window.sessionStorage.setItem("user", JSON.stringify(${json(@shiro.getPrincipal())}))
@@ -145,7 +145,7 @@ layout("/layouts/platform.html"){
<template
scope="{row:{close,applyStartTime,applyEndTime,startTime,endTime,isSave}}"
v-else-if="column.prop=='state'">
<div v-html="activity.school.getStatus(close,applyStartTime,applyEndTime,startTime,endTime,isSave)"></div>
<div v-html="getStatus(close,applyStartTime,applyEndTime,startTime,endTime,isSave)"></div>
</template>
</el-table-column>
@@ -215,7 +215,6 @@ layout("/layouts/platform.html"){
</guava>
</div>
<script>
let E = window.wangEditor
const editors = {}
@@ -280,6 +279,25 @@ layout("/layouts/platform.html"){
'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue'),
},
methods: {
getStatus(close, applyStartTime, applyEndTime, startTime, endTime) {
if (close) {
return `<span class="text-danger">活动已关闭</span>`
}
const now = moment().valueOf()
const dateNow = moment(moment(moment().format('YYYY-MM-DD')).valueOf()).valueOf()
if (now < moment(applyStartTime).valueOf()) {
return `<span class="text-info">未开始报名</span>`
} else if (moment(applyStartTime).valueOf() <= now && now <= moment(applyEndTime).valueOf()) {
return `<span class="text-success">活动报名中</span>`
} else if (moment(applyEndTime).valueOf() < now && now < moment(startTime).valueOf()) {
return `<span class="text-info">报名已结束</span>`
} else if (moment(startTime).valueOf() < now && now < moment(endTime).valueOf()) {
return `<span class="text-primary">活动进行中</span>`
} else if (moment(endTime).valueOf() < now) {
return `<span class="text-danger">活动已结束</span>`
}
},
async activityStatusChange(row, val) {
const resp = await $.get('/platform/activity/school/info/mange/activityStatusChange', {
id: row.id,
File diff suppressed because it is too large Load Diff
@@ -3,69 +3,66 @@
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">活动时间</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy"
></el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">活动名称</div>
<div class="search-item-option">
<el-input clearable placeholder="请输入活动名称"
v-model="pageForm.name"></el-input>
<el-input clearable placeholder="请输入活动名称" v-model="pageForm.name"></el-input>
</div>
</div>
<div class="search-query">
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索
</el-button>
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="活动列表">
<table-tool :app="this" label="活动列表"></table-tool>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
v-loading="tableLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table
:data="tableData"
:size="tableSize"
@sort-change="pageOrder"
class="vi-table"
row-key="id"
style="width: 100%; margin-bottom: 20px"
v-loading="tableLoading"
>
<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"
v-for="column in tableColumns">
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns"
>
<template scope="{row}" v-if="column.prop=='time'">
<span>
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
</span>
<span>{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}</span>
</template>
<template scope="{row}" v-else-if="column.prop=='projectTypeName'">
{{row.projectTypeName}}({{row.projectTypeCode}})
</template>
<template scope="{row}" v-else-if="column.prop=='projectTypeName'">{{row.projectTypeName}}({{row.projectTypeCode}})</template>
<template scope="{row}" v-else-if="column.prop=='tussueName'">
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
@@ -74,65 +71,61 @@
</template>
<template scope="{row}" v-else-if="column.prop=='countUser'">
<el-tag type="success" v-if="row.countUser>0">已报名({{row.countUser}})
</el-tag>
<el-tag type="success" v-if="row.countUser>0">已报名({{row.countUser}})</el-tag>
<el-tag type="danger" v-else>未报名</el-tag>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline" width="200px">
<el-table-column align="center" header-align="center" label="操作" prop="userOnline" width="200px">
<template scope="{row}">
<el-button :loading="row.loading" @click="openView(row)" size="mini"
type="primary">
查看
</el-button>
<el-button :loading="row.loading" @click="openView(row)" size="mini" type="primary">查看</el-button>
<template
v-if="moment(row.applyStartTime).valueOf()<moment().valueOf()&&moment(row.applyEndTime).valueOf()>moment().valueOf()">
<el-button :loading="row.loading" @click="openAudit(row)"
size="mini"
type="primary" v-if="row.signUpMethod === 2">
v-if="moment(row.applyStartTime).valueOf()<moment().valueOf()&&moment(row.applyEndTime).valueOf()>moment().valueOf()"
>
<el-button :loading="row.loading" @click="openAudit(row)" size="mini" type="primary" v-if="row.signUpMethod === 2">
报名
</el-button>
<el-button :loading="row.loading" @click="doAdd(row)" size="mini"
type="primary"
v-if="row.signUpMethod === 1&&row.countUser===0">
<el-button :loading="row.loading" @click="openAudit(row)" size="mini" type="primary" v-if="row.signUpMethod === 3">
报名
</el-button>
<el-button :loading="row.loading" @click="doDelete(row)" size="mini"
type="danger"
v-if="row.countUser>0&&row.signUpMethod === 1">
<el-button
:loading="row.loading"
@click="doAdd(row)"
size="mini"
type="primary"
v-if="row.signUpMethod === 1&&row.countUser===0"
>
报名
</el-button>
<el-button
:loading="row.loading"
@click="doDelete(row)"
size="mini"
type="danger"
v-if="row.countUser>0&&row.signUpMethod === 1"
>
取消报名
</el-button>
</template>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<el-card shadow="never">
<el-transfer
:data="leftData"
:filter-method="filterMethod"
:props="{key: 'id',label: 'name'}"
:titles="['可报人员名单', '当前选择']"
filterable
ref="transfer"
v-loading="tableLoading"
v-model="rightData">
:data="leftData"
:filter-method="filterMethod"
:props="{key: 'id',label: 'name'}"
:titles="['可报人员名单', '当前选择']"
filterable
ref="transfer"
v-loading="tableLoading"
v-model="rightData"
>
<template #left-footer>
<div></div>
</template>
@@ -141,208 +134,206 @@
<el-card class="mt10" shadow="never">
<el-table :data="escalationTableData" max-height="500px">
<el-table-column
align="center" header-align="center" label="序号"
type="index"
width="100">
</el-table-column>
<el-table-column align="center" header-align="center" label="序号" type="index" width="100"></el-table-column>
<el-table-column align="center" header-align="center" label="姓名"
prop="username"></el-table-column>
<el-table-column align="center" header-align="center" label="姓名" prop="username"></el-table-column>
<el-table-column align="center" header-align="center" label="教工号"
prop="loginname"></el-table-column>
<el-table-column align="center" header-align="center" label="教工号" prop="loginname"></el-table-column>
<el-table-column align="center" header-align="center" label="单位"
prop="unitname"
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="单位" prop="unitname" sortable></el-table-column>
<el-table-column align="center" header-align="center" label="操作"
sortable>
<!--<el-table-column align="center" header-align="center" label="操作" sortable>
<template scope="{$index,row}">
<el-button @click="rightData.splice($index,1)" size="mini"
type="danger">删除
</el-button>
<el-button @click="rightData.splice($index,1)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table-column>-->
</el-table>
</el-card>
<el-row class="mt10 text-right">
<el-button @click="doBatchAdd" class="mt10" type="primary"
v-loading="submitLoading">
提交
</el-button>
<el-button @click="doBatchAdd" class="mt10" type="primary" v-loading="submitLoading">提交</el-button>
</el-row>
</template>
<template #view>
<tissue-info ref="info"></tissue-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
data() {
return {
submitLoading: false,
pageForm: {
type: type,
year: new Date().getFullYear() + ''
year: new Date().getFullYear() + ""
},
tableColumns: [
{prop: 'name', label: '活动名称'},
{prop: 'address', label: '活动地点'},
{prop: 'projectTypeName', label: '活动项目类型'},
{prop: 'tussueName', label: '举办单位'},
{prop: 'time', label: '活动日期'},
{prop: 'applyTime', label: '创建时间', sortable: true},
{prop: 'countUser', label: '报名人数', sortable: true}
{ prop: "name", label: "活动名称" },
{ prop: "address", label: "活动地点" },
{ prop: "projectTypeName", label: "活动项目类型" },
{ prop: "tussueName", label: "举办单位" },
{ prop: "time", label: "活动日期" },
{ prop: "applyTime", label: "创建时间", sortable: true },
{ prop: "countUser", label: "报名人数", sortable: true }
],
leftData: [],
rightData: [],
rightData: []
}
},
components: {
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue?v=' + new Date().getTime()),
"tissue-info": httpVueLoader("/components/activity/school/tissueInfo.vue?v=" + new Date().getTime())
},
computed: {
escalationTableData() {
return this.leftData.filter(v => this.rightData.includes(v.id))
return this.leftData.filter((v) => this.rightData.includes(v.id))
}
},
methods: {
openView(row) {
const {id} = row
const { id } = row
this.$refs.info.getInfo(id)
this.$refs.guava.view()
},
async doBatchAdd() {
if (this.rightData && this.rightData.length > this.rowData.teamNum && this.rowData.signUpMethod === 3) {
this.$message.error("该模式组队限制人数为" + this.rowData.teamNum + "人!")
return
}
this.submitLoading = true
const {
code,
msg
} = await $.get('/mobile/activity/unionActivity/doSaveUnionRegister', {
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSaveUnionRegister", {
activityId: this.tissueId,
personIds: JSON.stringify(this.rightData)
})
if (code === 0) {
this.notifySuccess(msg)
this.$message.success(msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(msg)
this.$message.warning(msg)
}
this.submitLoading = false
},
async doDelete(row) {
const confirm = await this.$confirm('确认要取消报名吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
const confirm = await this.$confirm("确认要取消报名吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
row.loading = true
const {
code,
msg
} = await $.get('/mobile/activity/unionActivity/doSingleCancelRegister', {
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSingleCancelRegister", {
activityId: row.id
})
if (code === 0) {
this.notifySuccess(msg)
this.$message.success(msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(msg)
this.$message.warning(msg)
}
row.loading = false
}
},
async doAdd(row) {
const confirm = await this.$confirm('确认要报名吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
const confirm = await this.$confirm("确认要报名吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
row.loading = true
const {
code,
msg
} = await $.get('/mobile/activity/unionActivity/doSingleRegister', {
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSingleRegister", {
activityId: row.id
})
if (code === 0) {
this.notifySuccess(msg)
this.$message.success(msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(msg)
this.$message.warning(msg)
}
row.loading = false
}
},
async openAudit(row) {
console.log(row)
this.tissueId = row.id
const flag = await getScopeUser(row.groupId)
if (!flag) {
this.$message.warning("您没有报名权限!")
return
}
this.tableLoading = true
this.$refs.guava.edit()
const {data} = await $.get('/platform/activity/applyUser/selfUnionUsers', {
groupId: row.groupId
const { data } = await $.get("/platform/activity/applyUser/selfUnionUsers", {
groupId: row.groupId,
tissueId: row.id
})
this.leftData = data
const {data: rightData} = await $.get('/platform/activity/applyUser/getReportedUser', {
const { data: rightData } = await $.get("/platform/activity/applyUser/getReportedUser", {
tissueId: row.id
})
this.leftData = data.map(user => {
return this.getTransProp(user)
})
this.rightData = rightData.map(user => {
return this.getTransProp(user)
this.leftData = data.map((user) => {
return this.getTransProp(user, row.signUpMethod)
})
// this.rightData = rightData.map((user) => {
// return this.getTransProp(user)
// })
this.rightData = rightData
//如果是组队报名,默认添加自己
if (rightData && rightData.length === 0 && row.signUpMethod === 3) {
rightData.push("${@shiro.getPrincipalProperty('id')}")
}
this.tableLoading = false
},
getTransProp(user) {
getTransProp(user, signUpMethod) {
return {
id: user.id,
username:user.username,
loginname:user.loginname,
sex:user.sex,
unionname:user.unionname,
unitname:user.unitname,
userState:user.userState,
username: user.username,
loginname: user.loginname,
sex: user.sex,
unionname: user.unionname,
unitname: user.unitname,
userState: user.userState,
name: user.username + "-" + user.loginname + "-" + user.unitname,
//如果是组队报名,并且userId等于当前登入人禁用选项
disabled: signUpMethod === 3 && user.id === "${@shiro.getPrincipalProperty('id')}" ? true : false
}
},
filterMethod(query, item) {
if (!query){
if (!query) {
return -1
}
return item.name.indexOf(query) > -1;
return item.name.indexOf(query) > -1
},
pageData() {
sublime.showLoadingbar();
sublime.showLoadingbar()
this.tableLoading = true
$.post("/platform/activity/applyUser/pageData", 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");
$.post(
"/platform/activity/applyUser/pageData",
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"
)
}
},
async created() {
@@ -354,7 +345,7 @@
<style>
.flexible-gifts {
display: flex;
flex-direction: column
flex-direction: column;
}
.flexible-gifts-item {
@@ -387,7 +378,7 @@
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
border-color: #409eff;
}
.avatar-uploader-icon {
@@ -428,4 +419,3 @@
margin: 0 10px !important;
}
</style>
@@ -1,34 +1,27 @@
<div class="platform" 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-date-picker
@change="getActivityByYearOrType"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
@change="getActivityByYearOrType"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy"
></el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">活动名称</div>
<div class="search-item-option">
<el-select filterable placeholder="请选择活动" style="width: 100%"
v-model="pageForm.activityId">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in activityList">
</el-option>
<el-select filterable placeholder="请选择活动" style="width: 100%" v-model="pageForm.activityId">
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in activityList"></el-option>
</el-select>
</div>
</div>
@@ -36,15 +29,8 @@
<div class="search-item" v-if="type==40002||type==40001">
<div class="search-item-label">工会名称</div>
<div class="search-item-option">
<el-select clearable filterable placeholder="请选择工会"
style="width: 100%"
v-model="pageForm.unionId">
<el-option
:key="item.id"
:label="item.unionname"
:value="item.id"
v-for="item in unionList">
</el-option>
<el-select clearable filterable placeholder="请选择工会" style="width: 100%" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.unionname" :value="item.id" v-for="item in unionList"></el-option>
</el-select>
</div>
</div>
@@ -52,99 +38,95 @@
<div class="search-item">
<div class="search-item-label">姓名/工号</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入姓名/工号"
v-model="pageForm.searchKeyword">
<el-select placeholder="姓名/工号" slot="prepend"
style="width: 80px;"
v-model="pageForm.searchName">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入姓名/工号" v-model="pageForm.searchKeyword">
<el-select placeholder="姓名/工号" slot="prepend" style="width: 80px" v-model="pageForm.searchName">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginanme"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索
</el-button>
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="人员列表">
<template #func>
<el-button @click="doExport" icon="el-icon-s-promotion" type="primary">导出
</el-button>
<el-button @click="doExport" icon="el-icon-s-promotion" type="primary">导出</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
v-loading="tableLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table
:data="tableData"
:size="tableSize"
@sort-change="pageOrder"
class="vi-table"
row-key="id"
style="width: 100%; margin-bottom: 20px"
v-loading="tableLoading"
>
<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"
align="center"
header-align="center"
sortable
v-for="column in tableColumns">
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
v-if="${@shiro.hasRole('sysadmin')}"
width="100">
:label="column.label"
:prop="column.prop"
align="center"
header-align="center"
sortable
v-for="column in tableColumns"
></el-table-column>
<el-table-column align="center" header-align="center" label="操作" v-if="${@shiro.hasRole('sysadmin')}" width="100">
<template scope="{row}">
<el-button @click="doDelete(row)" size="mini" type="danger">
删除
</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>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
data() {
return {
unionList: {},
activityList: {},
pageForm: {
unionId: '',
unionId: "",
searchName: "u.username",
type: type,
year: new Date().getFullYear() + ''
year: new Date().getFullYear() + ""
},
tableColumns: [
{prop: 'username', label: '姓名'},
{prop: 'loginname', label: '工号'},
{prop: 'sex', label: '性别'},
{prop: 'mobile', label: '联系方式'},
{prop: 'unitname', label: '所属单位'},
{prop: 'unionname', label: '所属工会'},
{prop: 'applyDateTime', label: '报名时间'}
],
{ prop: "username", label: "姓名" },
{ prop: "loginname", label: "工号" },
{ prop: "sex", label: "性别" },
{ prop: "mobile", label: "联系方式" },
{ prop: "unitname", label: "所属单位" },
{ prop: "unionname", label: "所属工会" },
{ prop: "applyDateTime", label: "报名时间" }
]
}
},
methods: {
doDelete(row) {
this.$confirm('您确认要取消报名吗?', '提示', {type: 'warning'}).then(async () => {
const resp = await $.post('/mobile/activity/unionActivity/doSingleCancelRegister', {
this.$confirm("您确认要取消报名吗?", "提示", { type: "warning" }).then(async () => {
const resp = await $.post("/mobile/activity/unionActivity/doSingleCancelRegister", {
activityId: this.pageForm.activityId,
applyUserId: row.applyUserId,
id: row.atpId
@@ -159,28 +141,32 @@
})
},
async doExport() {
const {activityId, unionId} = this.pageForm
window.open("/platform/activity/info/mange/doExportUser?id=" + activityId +
"&unionId=" + unionId)
const { activityId, unionId } = this.pageForm
window.open("/platform/activity/info/mange/doExportUser?id=" + activityId + "&unionId=" + unionId)
},
pageData() {
sublime.showLoadingbar();
sublime.showLoadingbar()
this.tableLoading = true
$.post("/platform/activity/user/statistics/pageData", 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.notifyError(data.msg)
}
}, "json");
$.post(
"/platform/activity/user/statistics/pageData",
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.notifyError(data.msg)
}
},
"json"
)
},
async getActivityByYearOrType() {
const resp = await $.get("/platform/activity/user/statistics/getActivityByYearOrType", {
type: this.pageForm.type,
year: this.pageForm.year,
year: this.pageForm.year
})
if (resp.code === 0) {
this.activityList = resp.data
@@ -191,12 +177,11 @@
}
this.pageData()
}
},
}
},
async created() {
await this.getActivityByYearOrType()
this.unionList = await getUnions(null)
}
})
</script>
@@ -30,18 +30,13 @@ layout("/layouts/platform.html"){
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never"
style="margin-bottom: 5px;padding: 0px 10px 5px;">
<el-card shadow="never" style="margin-bottom: 5px; padding: 0px 10px 5px">
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">基础查询:</el-col>
<el-col class="query-row-content">
<div class="btn-group tool-button">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 100px;">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword" @keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 100px">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
@@ -49,44 +44,40 @@ layout("/layouts/platform.html"){
</div>
<el-row class="btn-group tool-button">
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 200px;"
clearable="true"
filterable="true">
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 200px" clearable="true" filterable="true">
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-row>
<div class="btn-group tool-button">
<dict-select v-model="pageForm.personType" style="width: 200px"
clearable placeholder="人员类型"
code="UserType"></dict-select>
<dict-select
v-model="pageForm.personType"
style="width: 200px"
clearable
placeholder="人员类型"
code="UserType"
></dict-select>
</div>
<div class="btn-group tool-button">
<dict-select v-model="pageForm.userState" style="width: 200px" clearable
placeholder="在职状态"
code="UserState"></dict-select>
<dict-select
v-model="pageForm.userState"
style="width: 200px"
clearable
placeholder="在职状态"
code="UserState"
></dict-select>
</div>
<div class="btn-group tool-button">
<el-button type="primary" icon="el-icon-search"
@click="doSearch"></el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
</div>
<div class="pull-right offscreen-right">
<div class="btn-group tool-button">
<el-button @click="clearHistory" slot="reference"
type="primary">
清空历史记录
</el-button>
<el-button :loading="updateBirthdayLoading" @click="updateBirthday"
slot="reference" type="primary">
<el-button @click="clearHistory" slot="reference" type="primary">清空历史记录</el-button>
<el-button :loading="updateBirthdayLoading" @click="updateBirthday" slot="reference" type="primary">
根据身份证号设置出生日期
</el-button>
<el-button slot="reference" type="primary"
@click="checkSource" :loading="updateLoading">
更新
</el-button>
<el-button slot="reference" type="primary" @click="checkSource" :loading="updateLoading">更新</el-button>
</div>
</div>
</el-col>
@@ -97,23 +88,26 @@ layout("/layouts/platform.html"){
<el-col class="query-row-content">
<div class="btn-group tool-button">
<el-date-picker
style="width: 200px"
v-model="pageForm.changeDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="更新日期">
</el-date-picker>
style="width: 200px"
v-model="pageForm.changeDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="更新日期"
></el-date-picker>
</div>
<div class="btn-group tool-button">
<enum-select v-model="pageForm.changeType" value="code"
label="description"
style="width: 200px"
clearable placeholder="异动类型"
enum="UserChangeType"></enum-select>
<enum-select
v-model="pageForm.changeType"
value="code"
label="description"
style="width: 200px"
clearable
placeholder="异动类型"
enum="UserChangeType"
></enum-select>
</div>
<div class="btn-group tool-button">
<el-button type="primary" icon="el-icon-search"
@click="doSearch"></el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
<el-button type="primary" @click="exportChange">导出异动人员</el-button>
</div>
<!--<div class="btn-group tool-button">
@@ -122,67 +116,85 @@ layout("/layouts/platform.html"){
</div>-->
</el-col>
</el-row>
</el-card>
<el-card shadow="never">
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder" :key="tableKey"
v-loading="tableLoading"
lazy
:load="load"
:tree-props="{hasChildren: 'hasHis'}"
border
<el-table
:data="tableData"
style="width: 100%"
row-key="id"
@sort-change="pageOrder"
:key="tableKey"
v-loading="tableLoading"
lazy
:load="load"
:tree-props="{hasChildren: 'hasHis'}"
border
>
<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"
type="index"
:index="indexMethod"
label="序号"
width="80px"
></el-table-column>
<el-table-column label="工号" prop="loginname" header-align="center"
align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="姓名" prop="username" header-align="center"
align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="性别" prop="sex" header-align="center"
align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="联系电话" prop="mobile" header-align="center"
align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="工号" prop="loginname" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="姓名" prop="username" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="性别" prop="sex" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="联系电话" prop="mobile" header-align="center" align="center" show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="出生日期" prop="birthday" header-align="center"-->
<!-- align="center" show-overflow-tooltip></el-table-column>-->
<!-- <el-table-column label="身份证" prop="idcard" header-align="center"-->
<!-- align="center" show-overflow-tooltip></el-table-column>-->
<el-table-column label="人员类型" prop="personType" header-align="center" sortable
align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="在职状态" prop="userState" header-align="center" sortable
align="center" show-overflow-tooltip></el-table-column>
<el-table-column
label="人员类型"
prop="personType"
header-align="center"
sortable
align="center"
show-overflow-tooltip
></el-table-column>
<el-table-column
label="在职状态"
prop="userState"
header-align="center"
sortable
align="center"
show-overflow-tooltip
></el-table-column>
<el-table-column label="所属单位" prop="unitid" header-align="center"
align="center" show-overflow-tooltip sortable>
<el-table-column label="所属单位" prop="unitid" header-align="center" align="center" show-overflow-tooltip sortable>
<template scope="{row}">
<span v-if="row.unitid"> {{row.unitname}}({{row.unitid}})</span>
<span v-if="row.unitid">{{row.unitname}}({{row.unitid}})</span>
</template>
</el-table-column>
<el-table-column label="异动信息" header-align="center">
<el-table-column label="更新时间" prop="changeTime" min-width="100px"
header-align="center" sortable
align="center" show-overflow-tooltip>
<el-table-column
label="更新时间"
prop="changeTime"
min-width="100px"
header-align="center"
sortable
align="center"
show-overflow-tooltip
>
<!-- <template scope="{row:{changeTime}}">
{{changeTime?changeTime:'暂无'}}
</template>-->
</el-table-column>
<el-table-column label="异动类型" prop="changeType" header-align="center"
align="center" show-overflow-tooltip sortable>
<el-table-column label="异动类型" prop="changeType" header-align="center" align="center" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
<span style="color: #0e78c5; cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作"
min-width="80px">
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" min-width="80px">
<template scope="scope">
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
@@ -190,9 +202,7 @@ layout("/layouts/platform.html"){
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:scope.row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'view',data:scope.row}">查看</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -200,34 +210,25 @@ layout("/layouts/platform.html"){
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<el-tabs v-model="active">
<el-tab-pane label="个人信息" name="info">
<member ref="memberInfo" :source="source" :id="userId" view></member>
</el-tab-pane>
</el-tabs>
</template>
</guava>
<el-dialog
title="选择数据源"
:visible.sync="dialogVisible"
width="50%">
<el-dialog title="选择数据源" :visible.sync="dialogVisible" width="50%">
<el-timeline>
<el-timeline-item timestamp="数据源" placement="top">
<el-radio-group class="checkGroup" v-model="sourceTime" style="width: 100%">
<el-row v-for="item in latelyUpdateTimes" style="margin-bottom: 10px">
<el-radio :key="item.pullTime" style="width: 100%"
:label="item.pullTime" border>
时间:{{item.pullTime}}<span
style="float: right;color: #F56C6C">rows: {{item.num}}</span>
<el-radio :key="item.pullTime" style="width: 100%" :label="item.pullTime" border>
时间:{{item.pullTime}}
<span style="float: right; color: #f56c6c">rows: {{item.num}}</span>
</el-radio>
</el-row>
</el-radio-group>
@@ -246,19 +247,25 @@ layout("/layouts/platform.html"){
<el-timeline-item timestamp="选择更新组别" placement="top" v-if="sourceType=='part'">
<el-row class="query-row">
<el-col span="12">
<el-select v-model="partGroupId" clearable filterable
placeholder="请选择更新组别" style="width: 100%">
<el-select v-model="partGroupId" clearable filterable placeholder="请选择更新组别" style="width: 100%">
<el-option
v-for="column in partGroupInfos"
:key="column.groupId"
:label="column.groupName"
:value="column.groupId">
</el-option>
v-for="column in partGroupInfos"
:key="column.groupId"
:label="column.groupName"
:value="column.groupId"
></el-option>
</el-select>
</el-col>
<el-col>
<el-checkbox style="margin-left: 10px;margin-top: 4px" v-model="isInvert" label="是否更新此组别之外人员" border></el-checkbox>
<el-button style="margin-left: 10px;margin-top: 4px" type="primary" @click="partUpdate(sourceType)">设置部分更新人员</el-button>
<el-checkbox
style="margin-left: 10px; margin-top: 4px"
v-model="isInvert"
label="是否更新此组别之外人员"
border
></el-checkbox>
<el-button style="margin-left: 10px; margin-top: 4px" type="primary" @click="partUpdate(sourceType)">
设置部分更新人员
</el-button>
</el-col>
</el-row>
</el-timeline-item>
@@ -266,42 +273,32 @@ layout("/layouts/platform.html"){
<el-timeline-item timestamp="过滤字段" placement="top" v-if="sourceType=='part'">
<el-row class="query-row">
<el-col class="query-title" span="6">过滤字段:</el-col>
<el-col style="justify-content: end;margin-left: 10px">
<el-select v-model="columnNames" clearable filterable
placeholder="请选择字段" style="width: 100%" multiple>
<el-col style="justify-content: end; margin-left: 10px">
<el-select v-model="columnNames" clearable filterable placeholder="请选择字段" style="width: 100%" multiple>
<el-option
v-for="column in columnInfos"
:key="column.COLUMN_NAME"
:label="column.COLUMN_COMMENT"
:value="column.COLUMN_NAME">
</el-option>
v-for="column in columnInfos"
:key="column.COLUMN_NAME"
:label="column.COLUMN_COMMENT"
:value="column.COLUMN_NAME"
></el-option>
</el-select>
</el-col>
<el-col class="query-row">
<span style="color: red;margin-left: 10px">该条件为更新时忽略某字段,如无需忽略请勿填充该条件</span>
<span style="color: red; margin-left: 10px">该条件为更新时忽略某字段,如无需忽略请勿填充该条件</span>
</el-col>
</el-row>
</el-timeline-item>
</el-timeline>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" :loading="updateLoading" @click="doUpdate">确 定</el-button>
</span>
</span>
</el-dialog>
<el-drawer
:wrapperClosable="false"
title="我是标题" size="78%"
:visible.sync="userScopeDialog"
:append-to-body="true"
:with-header="false">
<div style="padding: 0px 16px;" class="clearfix">
<el-button icon="el-icon-back" style="font-size: 16px" type="text"
@click="doBack()">返回
</el-button>
<el-drawer :wrapperClosable="false" title="我是标题" size="78%" :visible.sync="userScopeDialog" :append-to-body="true" :with-header="false">
<div style="padding: 0px 16px" class="clearfix">
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="doBack()">返回</el-button>
</div>
<guava>
<el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick">
@@ -316,25 +313,23 @@ layout("/layouts/platform.html"){
</template>
</el-tab-pane>
</el-tabs>
</guava>
</el-drawer>
<user-change-history ref="userChangeHistory"></user-change-history>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
data() {
return {
active: 'info',
active: "info",
updateLoading: false,
updateBirthdayLoading: false,
pageForm: {
searchName: "u.username",
searchName: "u.username"
},
userId: "",
@@ -345,36 +340,36 @@ layout("/layouts/platform.html"){
dialogVisible: false,
sourceTime: "",
changeType: {},
source: 'sys_user',
source: "sys_user",
sourceType: null,
activeName: '1',
activeName: "1",
userScopeDialog: false,
columnNames: [],
columnInfos: [],
upDataCount: '0',
isUpSet: '0',
upDataCount: "0",
isUpSet: "0",
partGroupId: '',
partGroupId: "",
partGroupInfos: [],
isInvert:'',
isInvert: ""
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue?v=1.0.0'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.2'),
'user-upset': httpVueLoader('/components/userpartupdate/UserPartUpdateSet.vue'),
'user-upset-data': httpVueLoader('/components/userpartupdate/UserDataPartUpSet.vue'),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
guava: httpVueLoader("/components/plugins/Guava.vue?v=1.0.0"),
"dict-select": httpVueLoader("/components/plugins/DictSelect.vue?v=1.0.0"),
member: httpVueLoader("/components/member/MemberInfo.vue?v=1.0.3"),
"mem-change-records": httpVueLoader("/components/member/MemChangeRecords.vue?v=1.0.2"),
"user-upset": httpVueLoader("/components/userpartupdate/UserPartUpdateSet.vue"),
"user-upset-data": httpVueLoader("/components/userpartupdate/UserDataPartUpSet.vue"),
"user-change-history": httpVueLoader("/components/userChangeHistory/userChangeHistory.vue?v=" + new Date().getTime())
},
methods: {
async openUserChangeInfo({hisId}) {
async openUserChangeInfo({ hisId }) {
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
},
async getColumnInfo() {
const {data, msg, code} = await $.post('/platform/activity/basic/scope/getUserTableColumnInfo')
const { data, msg, code } = await $.post("/platform/activity/basic/scope/getUserTableColumnInfo")
if (code !== 0) {
this.$notify.warning(msg)
return
@@ -382,12 +377,12 @@ layout("/layouts/platform.html"){
this.columnInfos = data
},
clearHistory() {
this.$confirm('您确定要清空历史记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
this.$confirm("您确定要清空历史记录吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
const resp = await $.post(loc() + '/clearHistory')
const resp = await $.post(loc() + "/clearHistory")
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
@@ -397,20 +392,20 @@ layout("/layouts/platform.html"){
})
},
async updateBirthday() {
const confirm = await this.$confirm('是否确定根据身份证号更新出生日期?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
const confirm = await this.$confirm("是否确定根据身份证号更新出生日期?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
this.updateBirthdayLoading = true
const resp = await $.post(loc() + '/updateBirthday')
const resp = await $.post(loc() + "/updateBirthday")
this.updateBirthdayLoading = false
}
},
async load(tree, treeNode, resolve) {
const {loginname} = tree
const resp = await $.get(loc() + "/historyUsers", {loginname})
const { loginname } = tree
const resp = await $.get(loc() + "/historyUsers", { loginname })
if (resp.code === 0) {
resolve(resp.data)
} else {
@@ -420,54 +415,54 @@ layout("/layouts/platform.html"){
checkSource() {
if (!this.latelyUpdateTimes.length) {
this.$notify({
title: '警告',
message: '没有可供更新的数据源',
type: 'warning'
});
title: "警告",
message: "没有可供更新的数据源",
type: "warning"
})
return
}
this.sourceTime = ''
this.sourceTime = ""
this.dialogVisible = true
// this.doUpdate()
},
doUpdate() {
if (!this.sourceTime) {
this.$notify({
title: '警告',
message: '请选择数据源',
type: 'warning'
});
title: "警告",
message: "请选择数据源",
type: "warning"
})
return
}
if (!this.sourceType) {
this.$notify({
title: '警告',
message: '请选择更新范围',
type: 'warning'
});
title: "警告",
message: "请选择更新范围",
type: "warning"
})
return
}
if (this.sourceType == 'part' && !this.partGroupId) {
if (this.sourceType == "part" && !this.partGroupId) {
this.$notify({
title: '警告',
message: '部分更新请选择更新组别',
type: 'warning'
});
return;
title: "警告",
message: "部分更新请选择更新组别",
type: "warning"
})
return
}
this.$confirm('是否确定更新用户数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
this.$confirm("是否确定更新用户数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
this.updateLoading = true
const resp = await $.post(loc() + '/update', {
const resp = await $.post(loc() + "/update", {
sourceTime: this.sourceTime,
sourceType: this.sourceType,
columnNames: JSON.stringify(this.columnNames),
isUpSet: this.isUpSet,
partGroupId: this.partGroupId,
isInvert: this.isInvert,
isInvert: this.isInvert
})
this.updateLoading = false
if (resp.code === 0) {
@@ -480,20 +475,20 @@ layout("/layouts/platform.html"){
}
})
},
reset(){
this.isInvert = ''
this.sourceType = ''
this.partGroupId = ''
reset() {
this.isInvert = ""
this.sourceType = ""
this.partGroupId = ""
},
openView({id, flag}) {
this.active = 'info'
openView({ id, flag }) {
this.active = "info"
this.userId = id
this.source = flag ? 'sys_user' : 'user_history'
this.source = flag ? "sys_user" : "user_history"
this.$refs.guava.view()
},
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
const { type, data } = command
if (type == "view") {
this.openView(data)
}
},
@@ -508,81 +503,89 @@ layout("/layouts/platform.html"){
async getChangeType() {
const changeType = {}
const changeTypeOptions = await getEnumOptions("UserChangeType")
changeTypeOptions.forEach(v => {
changeTypeOptions.forEach((v) => {
changeType[v.code] = v.description
})
return changeType
},
exportChange() {
const {
searchName,
searchKeyword,
unitId,
personType,
changeDate,
userState
} = this.pageForm
window.open(loc() + '/exportChangePeo?searchName=' + searchName + '&searchKeyword=' + searchKeyword + '&unitId=' + (unitId ? unitId : '') +
'&userState=' + (userState ? userState : '') + '&personType=' + (personType ? personType : '') + '&changeDate=' + (changeDate ? changeDate : ''))
const { searchName, searchKeyword, unitId, personType, changeDate, userState } = this.pageForm
window.open(
loc() +
"/exportChangePeo?searchName=" +
searchName +
"&searchKeyword=" +
searchKeyword +
"&unitId=" +
(unitId ? unitId : "") +
"&userState=" +
(userState ? userState : "") +
"&personType=" +
(personType ? personType : "") +
"&changeDate=" +
(changeDate ? changeDate : "")
)
},
async getPartCount() {
const resp = await $.get('/platform/user/part/update/getPartCount')
const resp = await $.get("/platform/user/part/update/getPartCount")
this.upDataCount = resp.data
},
partUpdate(sourceType) {
if (sourceType === 'part') {
if (sourceType === "part") {
this.userScopeDialog = true
}
this.getPartCount()
},
handleClick() {
if (this.activeName === "2") {
this.$refs.userUpsetData.pageData();
this.$refs.userUpsetData.getActivityGroup();
this.$refs.userUpsetData.pageData()
this.$refs.userUpsetData.getActivityGroup()
}
},
async getPartGroupInfos() {
const resp = await $.get('/platform/user/part/update/getUserPart')
const resp = await $.get("/platform/user/part/update/getUserPart")
this.partGroupInfos = resp.data
},
doBack(){
doBack() {
this.userScopeDialog = false
this.getPartGroupInfos();
this.getPartGroupInfos()
},
async retireWelfareChange(){
this.$confirm('是否确定更新用户数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
async retireWelfareChange() {
this.$confirm("是否确定更新用户数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
const loading = this.$loading({
lock: true,
text: '数据更新中,请稍后。。。',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const resp = await $.get(loc() + '/retireWelfareChange')
if (resp.code === 0){
text: "数据更新中,请稍后。。。",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)"
})
const resp = await $.get(loc() + "/retireWelfareChange")
if (resp.code === 0) {
this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
loading.close();
loading.close()
})
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return c.map(v => {
return this.changeType[v]
}).join(',')
return c
.map((v) => {
return this.changeType[v]
})
.join(",")
}
return null
},
}
},
async created() {
this.pageData();
this.pageData()
this.units = await getUnits()
await this.getLatelyUpdateTimes()
this.changeType = await this.getChangeType()
@@ -26,7 +26,7 @@ layout("/layouts/platform.html"){
<guava>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span style="color: #409EFF;"><h3>活动申报</h3></span>
<span style="color: #409EFF;"><h3>活动申请</h3></span>
</div>
<el-form :model="formData" :rules="formRules" label-suffix=":" label-width="120px"
@@ -38,7 +38,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申报时间" prop="apply_time">
<el-form-item label="申请时间" prop="apply_time">
<el-input disabled type="text" v-model="formData.apply_time"></el-input>
</el-form-item>
</el-col>
@@ -118,16 +118,16 @@ layout("/layouts/platform.html"){
<el-col :span="12">
<el-form-item label="申报(承办)单位" prop="fundsUnitName"
<el-form-item label="申请(承办)单位" prop="fundsUnitName"
v-if="formData.activity_type!=40003">
<el-input placeholder="请输入申报(承办)单位" type="text"
<el-input placeholder="请输入申请(承办)单位" type="text"
v-model="formData.fundsUnitName"></el-input>
</el-form-item>
<el-form-item label="申报协会" prop="clubId"
<el-form-item label="申请协会" prop="clubId"
v-else-if="formData.activity_type==40003">
<el-select @change="fundsUnitChange"
placeholder="请选择申报协会"
placeholder="请选择申请协会"
style="width: 100%;" v-model="formData.clubId">
<el-option
:key="item.id"
@@ -291,8 +291,8 @@ layout("/layouts/platform.html"){
activityType: this.formData.activity_type
})
if (resp.code === 0) {
// 检测到您有相同名称的活动正在申报流程中,是否需要自动填充该活动的申报记录
this.$confirm('检测到您有相同名称的活动正在申报流程中,是否需要自动填充该活动的申报信息', '提示', {
// 检测到您有相同名称的活动正在申请流程中,是否需要自动填充该活动的申请记录
this.$confirm('检测到您有相同名称的活动正在申请流程中,是否需要自动填充该活动的申请信息', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -392,8 +392,8 @@ layout("/layouts/platform.html"){
async doAdd() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
// 提交后将进入审核流程,无法修改申报内容,确定提交吗?
this.$confirm('提交后将进入审核流程,无法修改申报内容,确定提交吗?', '提示', {
// 提交后将进入审核流程,无法修改申请内容,确定提交吗?
this.$confirm('提交后将进入审核流程,无法修改申请内容,确定提交吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -436,8 +436,8 @@ layout("/layouts/platform.html"){
})
},
doSave() {
// 确定要保存吗?保存后可在【我的申报】页面选中设置按钮的【重新编辑】按钮进行修改或提交
this.$confirm('确定要保存吗?保存后可在【我的申报】页面选中设置按钮的【重新编辑】按钮进行修改或提交', '提示', {
// 确定要保存吗?保存后可在【我的申请】页面选中设置按钮的【重新编辑】按钮进行修改或提交
this.$confirm('确定要保存吗?保存后可在【我的申请】页面选中设置按钮的【重新编辑】按钮进行修改或提交', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -105,14 +105,14 @@ layout("/layouts/platform.html"){
<el-col :span="12">
<el-form-item prop="fundsUnitName" label="申报(承办)单位" v-show="formData.activity_type!=40003">
<el-form-item prop="fundsUnitName" label="申请(承办)单位" v-show="formData.activity_type!=40003">
<el-input v-model="formData.fundsUnitName" type="text"
placeholder="请输入申报(承办)单位"></el-input>
placeholder="请输入申请(承办)单位"></el-input>
</el-form-item>
<el-form-item prop="fundsUnitName" label="申报(承办)单位" v-show="formData.activity_type==40003">
<el-form-item prop="fundsUnitName" label="申请(承办)单位" v-show="formData.activity_type==40003">
<el-select v-model="formData.fundsUnitName"
placeholder="请选择申报(承办)单位"
placeholder="请选择申请(承办)单位"
style="width: 100%;">
<el-option
v-for="item in fundsUnitNameOption"
@@ -81,7 +81,7 @@ layout("/layouts/platform.html"){
<el-table-column label="申请类型" prop="apply_type" header-align="center" sortable
align="center">
<template scope="{row}">
{{ row.apply_type == 1 ? "经费申报" : "报销申请" }}
{{ row.apply_type == 1 ? "经费申请" : "报销申请" }}
</template>
</el-table-column>
@@ -82,7 +82,7 @@ layout("/layouts/platform.html"){
<el-table-column label="申请类型" prop="apply_type" header-align="center" sortable
align="center">
<template scope="{row}">
{{ row.apply_type == 1 ? "经费申报" : "报销申请" }}
{{ row.apply_type == 1 ? "经费申请" : "报销申请" }}
</template>
</el-table-column>
@@ -74,7 +74,7 @@ layout("/layouts/platform.html"){
<el-col :span="12">
<div style="padding: 4px 0 20px 0">
<el-button type="primary" size="small" @click="doExportActivityApply">
导出活动申报方案表
导出活动申请方案表
</el-button>
<el-button type="primary" size="small" style="margin-left: 10px"
@click="doExportReimbursementVoucher">导出报销凭证
@@ -120,14 +120,14 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :span="12">
<el-form-item prop="fundsUnitName" label="申报(承办)单位"
<el-form-item prop="fundsUnitName" label="申请(承办)单位"
v-if="formData.activity_type!=40003">
<el-input readonly v-model="formData.fundsUnitName" type="text"></el-input>
</el-form-item>
<el-form-item prop="clubId" label="申报协会"
<el-form-item prop="clubId" label="申请协会"
v-else-if="formData.activity_type==40003">
<el-select placeholder="请选择申报协会"
<el-select placeholder="请选择申请协会"
disabled
style="width: 100%;" v-model="formData.clubId">
<el-option
@@ -232,47 +232,50 @@ layout("/layouts/platform.html"){
<el-row :gutter="20" v-if="formData.id != null && formData.id !== ''">
<el-divider content-position="left" class="dia"><span
style="color: #3ea1ec;">活动费用预算及报销信息表</span></el-divider>
<el-form-item>
<el-form-item label-width="40px">
<span style="color: red">如有收款人请填写收款人、支行名称及报销卡号;如无收款人,请在备注栏中说明报销情况</span>
<el-table :data="formData.budgets" border max-height="500" size="mini" style="width: 100%">
<el-table-column label="序号" sortable type="index" width="80"></el-table-column>
<el-table-column label="费用项目名称" prop="name">
<el-table-column label="序号" sortable fixed type="index" width="60"></el-table-column>
<el-table-column label="费用项目名称" fixed prop="name" width="200">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.name'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="row.name" maxlength="50" readonly
<el-input v-model="row.name" style="width: 100%" maxlength="50"
placeholder="请输入费用项目名称"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="预算费用" prop="budgetPrice">
<el-table-column label="预算费用" prop="budgetPrice" width="250">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.budgetPrice'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input-number placeholder="预算费用" v-model="row.budgetPrice"
:precision="2" disabled
:precision="2" style="width: 100%"
:min="1"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="实际费用" prop="actualPrice">
<el-table-column label="实际费用" prop="actualPrice" width="250">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.actualPrice'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input-number placeholder="请填写实际费用" v-model="row.actualPrice"
:precision="2"
:precision="2" style="width: 100%"
:min="0"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="收款人" prop="payeeId">
<el-table-column label="收款人" prop="payeeId" width="200">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.payeeId'">
<el-select :loading="selectLoading" :remote-method="remoteMethod"
<el-input v-model="row.username" maxlength="50"
@input="getCardNumberByPayeeId(row)"
placeholder="请输入收款人"></el-input>
<!--<el-select :loading="selectLoading" :remote-method="remoteMethod"
clearable
filterable
@change="getCardNumberByPayeeId(row)"
@@ -287,39 +290,49 @@ layout("/layouts/platform.html"){
:value="item.id"
v-for="item in userList">
</el-option>
</el-select>
</el-select>-->
</el-form-item>
</template>
</el-table-column>
<el-table-column label="支行名称" prop="bankName">
<el-table-column label="支行名称" prop="bankName" width="300">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.bankName'">
<el-input v-model="row.bankName" maxlength="50"
<el-input v-model="row.bankName" maxlength="80"
placeholder="请输入支行名称"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="报销卡号" prop="bankCardNum">
<el-table-column label="报销卡号" prop="bankCardNum" width="250">
<template scope="{row,$index}">
<el-form-item label-width="0">
<el-input type="number" v-model="row.bankCardNum"
maxlength="50"
placeholder="请输入报销卡号"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<el-table-column label="备注" prop="remark" width="400">
<template scope="{row,$index}">
<el-form-item label-width="0"
:prop="'budgets.'+$index+'.remark'">
<el-input v-model="row.remark" maxlength="50"
<el-input v-model="row.remark" maxlength="200"
placeholder="请输入备注"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column fixed="right" header-align="center" label="操作" width="100">
<template slot="header" slot-scope="scope">
<el-button @click="formData.budgets.push({})" type="primary" size="mini">添加</el-button>
</template>
<template slot-scope="scope">
<el-button :disabled="formData.budgets.length==1"
@click="formData.budgets.splice(scope.$index,1)"
size="mini"
icon="el-icon-delete"
type="danger"></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-row>
@@ -410,7 +423,7 @@ layout("/layouts/platform.html"){
width="40%">
<span style="line-height: 24px">
&emsp;&emsp;1、智慧工会“基层活动”提交活动申报,审核通过后开展活动。活动结束后在系统中提交活动内容,导出报销凭据到工会财务处报销。<br/>
&emsp;&emsp;1、智慧工会“基层活动”提交活动申请,审核通过后开展活动。活动结束后在系统中提交活动内容,导出报销凭据到工会财务处报销。<br/>
&emsp;&emsp;2、活动报销所需材料如下:<br/>
&emsp;&emsp;&emsp;&emsp;①.活动方案(含预算),校工会主席签字;<br/>
&emsp;&emsp;&emsp;&emsp;②.活动新闻稿/照片;<br/>
@@ -488,15 +501,17 @@ layout("/layouts/platform.html"){
}
},
async getCardNumberByPayeeId(row) {
const user = this.userList.find(v => v.id === row.payeeId)
row.loginName = user.loginname
row.username = user.username
const resp = await $.get('/platform/jf/Funds/apply/getCardNumberByPayeeId', {payeeId: row.payeeId})
// const user = this.userList.find(v => v.id === row.payeeId)
// row.loginName = user.loginname
// row.username = user.username
const resp = await $.get('/platform/jf/Funds/apply/getCardNumberByPayeeId', {username:row.username})
if (resp.code === 0) {
debugger
if (resp.data) {
row.bankCardNum = resp.data.bankCardNum
row.bankName = resp.data.bankName
debugger
this.$set(row, "bankCardNum", resp.data.bankCardNum)
this.$set(row, "bankName", resp.data.bankName)
// row.bankCardNum = resp.data.bankCardNum
// row.bankName = resp.data.bankName
}
}
},
@@ -504,7 +519,7 @@ layout("/layouts/platform.html"){
doExportReimbursementVoucher() {
window.open('/platform/jf/activity_bx/reimbursement/doExport?id=' + this.formData.id)
},
//导出活动申报表
//导出活动申请表
doExportActivityApply() {
window.open('/platform/jf/activity_bx/reimbursementview/doExport?id=' + this.formData.id)
},
@@ -592,8 +607,8 @@ layout("/layouts/platform.html"){
this.$refs["form"].validate(async (valid) => {
if (valid) {
// 提交后将进入审核流程,无法修改申报内容,确定提交吗?
this.$confirm('提交后将进入审核流程,无法修改申报内容,确定提交吗?', '提示', {
// 提交后将进入审核流程,无法修改申请内容,确定提交吗?
this.$confirm('提交后将进入审核流程,无法修改申请内容,确定提交吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -649,7 +664,7 @@ layout("/layouts/platform.html"){
this.formData.id = id
await this.activityChange(id);
}
this.dialogVisible = true
// this.dialogVisible = true
await this.getUserClub();
}
})
@@ -145,7 +145,7 @@ layout("/layouts/platform.html"){
title=""
width="200"
trigger="hover"
content="申报和报销的活动经费">
content="申请和报销的活动经费">
<i style="color: #409EFF" slot="reference" class="el-icon-question"></i>
</el-popover>
</div>
@@ -160,7 +160,7 @@ layout("/layouts/platform.html"){
title=""
width="200"
trigger="hover"
content="申报和报销的活动经费">
content="申请和报销的活动经费">
<i style="color: #409EFF" slot="reference" class="el-icon-question"></i>
</el-popover>
</div>
@@ -175,7 +175,7 @@ layout("/layouts/platform.html"){
title=""
width="200"
trigger="hover"
content="申报和报销的活动经费">
content="申请和报销的活动经费">
<i style="color: #409EFF" slot="reference" class="el-icon-question"></i>
</el-popover>
</div>
@@ -146,7 +146,7 @@ layout("/layouts/platform.html"){
删除
</el-dropdown-item>
<el-dropdown-item :command="{type:'exportWwj',data:row,apply_type:1}">
导出申报方案表
导出申请方案表
</el-dropdown-item>
<el-dropdown-item :command="{type:'exportWwj',data:row,apply_type:2}">
导出活动报销凭证
@@ -135,7 +135,7 @@ layout("/layouts/platform.html"){
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'exportWwj',data:row,apply_type:1}">
导出申报方案表
导出申请方案表
</el-dropdown-item>
<el-dropdown-item :command="{type:'exportWwj',data:row,apply_type:2}">
导出活动报销凭证
@@ -15,7 +15,8 @@
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch" style="width: 100%">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
@@ -49,7 +50,8 @@
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable
filterable
@change="flushUnits" @clear="flushUnits">
@@ -62,16 +64,17 @@
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable
filterable>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-row>
</div>
</div>
<template v-if="isThreeUnit">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
@@ -94,7 +97,8 @@
<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
<el-select v-model="pageForm.threeUnitId" style="width: 100%"
filterable
clearable
placeholder="请选择">
<el-option
@@ -109,7 +113,8 @@
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
</div>
@@ -128,9 +133,11 @@
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
@@ -154,13 +161,16 @@
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作"
min-width="100px">
<template scope="{row}">
<el-button size="small" :loading="row.loading" v-if="row.audit" type="primary"
<el-button size="mini" :loading="row.loading" v-if="row.audit"
type="primary"
@click="openAudit(row,true)">审核
</el-button>
<el-button size="small" :loading="row.loading" v-else @click="openAudit(row,false)">查看
<el-button size="mini" :loading="row.loading" v-else
@click="openAudit(row,false)">查看
</el-button>
</template>
</el-table-column>
@@ -171,136 +181,145 @@
</template>
<template #edit>
<el-tabs v-model="active">
<el-tab-pane label="个人信息" name="info">
<member ref="memberInfo" :id="info.userId" view></member>
</el-tab-pane>
<el-tab-pane label="分工会审核" name="union">
<el-tabs v-model="active">
<el-tab-pane label="个人信息" name="info">
<member ref="memberInfo" :id="info.userId" view></member>
</el-tab-pane>
<el-tab-pane label="分工会审核" name="union">
<el-form :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<el-form :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<vi-title title="审核信息"></vi-title>
<vi-title title="审核信息"></vi-title>
<template v-if="!info.unionAudit&&source==1">
<template v-if="!info.unionAudit&&source==1">
<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-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="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
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-form-item prop="auditSign" label="签字">
<sign v-model="formData.auditSign"></sign>
</el-form-item>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ info.unionAudit.auditOpinion }}</span>
</el-form-item>
</el-col>
</el-row>
<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.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-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=":">
<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>
<vi-title title="审核信息"></vi-title>
<el-form-item prop="auditSign" label="签字">
<sign v-model="formData.auditSign"></sign>
</el-form-item>
<template v-if="!info.schoolAudit&&source==2">
<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 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-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
</el-row>
</template>
<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>
</el-tab-pane>
</el-tabs>
<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.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-col :span="24">
<el-form-item label="审核意见">
<span>{{ info.schoolAudit.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-tabs>
</template>
<template #view>
@@ -341,19 +360,17 @@
{prop: 'mobile', label: '联系电话'},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true ,checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true ,checked: 0},
{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: [],
isThreeUnit: null,
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v='+ new Date().getTime()),
},
methods: {
async doAudit(pass) {
@@ -364,6 +381,7 @@
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.$message.success(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
@@ -434,6 +452,7 @@
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
if (this.isThreeUnit) {
this.tableColumns.forEach(v => {
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
v.checked = 1
@@ -442,7 +461,7 @@
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -42,7 +42,7 @@ layout("/layouts/platform.html"){
</style>
<div id="app" v-cloak>
<guava ref="guava" style="width: 100%;height: 100%">
<guava ref="guava">
<template>
<div class="v-body">
<el-card class="v-card" shadow="never">
@@ -66,29 +66,20 @@ layout("/layouts/platform.html"){
<el-form-item label="加入方式">
<el-radio-group v-model="memberStates">
<el-radio :label="1">新增</el-radio>
<el-radio :label="2">转入</el-radio>
<!-- <el-radio :label="2">转入</el-radio>-->
</el-radio-group>
</el-form-item>
</el-form>
<el-button
v-if="unionInfo.member !== 1"
:disabled="!((unionInfo.apply||unionInfo.reApply))"
type="primary"
@click="apply"
style="width: 70%;margin-left: 15%;margin-top: 20px">
<span v-if="unionInfo.apply||unionInfo.reApply">{{unionInfo.reApply?'重新申请':'申请加入'}}</span>
<span v-if="unionInfo.apply||unionInfo.reApply">{{unionInfo.reApply?'重新申请':'加入'}}</span>
<span v-else-if="unionInfo.record">{{unionInfo.record.stateName}}</span>
<span v-else>您已是会员</span>
</el-button>
<!--<el-radio
style="width: 70%;margin-left: 15%;margin-top: 20px;color: #F56C6C"
v-model="reading" :label="true">
阅读须知:我自愿加入工会
</el-radio>-->
<el-button style="width: 70%;margin-top: 10px;margin-left: 15%;" type="primary" @click="exportApply">
导出申请表
</el-button>
</div>
</el-card>
</div>
@@ -208,20 +199,19 @@ layout("/layouts/platform.html"){
</template>
<template #edit_func>
<el-button type="primary" @click="doSubmit">提交</el-button>
<!-- <el-button type="primary" @click="doSubmit">提交</el-button>-->
</template>
<template #edit>
<div style="width: 800px;margin: 0 auto;">
<h3 style="text-align: center">中华全国总工会</h3>
<h3 style="text-align: center">入会申请书</h3>
<div style="text-align: center">入会申请书</div>
<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">
@@ -232,6 +222,13 @@ 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">男
@@ -243,7 +240,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>
@@ -252,24 +249,31 @@ layout("/layouts/platform.html"){
<el-col :span="8">
<el-form-item prop="education" label="学历">
<dict-select code="Education" placeholder="请选择学历"
style="width: 100%"
v-model="formData.education"></dict-select>
<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>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="political" label="政治面貌">
<dict-select code="political" placeholder="请选择政治面貌"
style="width: 100%"
v-model="formData.political"></dict-select>
<el-input maxlength="100" placeholder="政治面貌"
v-model="formData.political"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="marriage" label="婚姻状况">
<dict-select v-model="formData.marriage" style="width: 100%" placeholder="请选择婚姻状况"
code="maritalStatus"></dict-select>
<el-form-item prop="userState" label="人员类型">
<dict-select v-model="formData.personType" style="width: 100%" placeholder="请选择人员类型"
code="UserType"></dict-select>
</el-form-item>
</el-col>
@@ -300,49 +304,35 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="24">
<el-form-item prop="registeredResidence" label="户口所在地">
<el-input maxlength="50" placeholder="请填写户口所在地"
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>
v-model="formData.registeredResidence" type="textarea"
rows="3"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="vita" label="简历">
<el-input maxlength="500" placeholder="请填写简历"
<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="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>
@@ -367,27 +357,13 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column prop="isCondolence" label="是否慰问" align="center"
<el-table-column prop="unit" label="单位" align="center"
header-align="center">
<template slot-scope="scope">
<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>-->
<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">
@@ -437,6 +413,7 @@ layout("/layouts/platform.html"){
<script>
const vue = new Vue({
el: '#app',
dicts: ['memberApplyPersonType'],
mixins: [initTableMixins],
data() {
return {
@@ -456,6 +433,8 @@ layout("/layouts/platform.html"){
idcard: [{required: true, message: '必填', trigger: ['blur', 'change']}],
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
homeAddress: [{required: true, message: '必填', trigger: ['blur', 'change']}],
specialSkill: [{required: true, message: '必填', trigger: ['blur', 'change']}],
registeredResidence: [{
required: true,
message: '必填',
@@ -467,9 +446,7 @@ layout("/layouts/platform.html"){
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v='+ new Date().getTime()),
},
methods: {
@@ -519,6 +496,16 @@ layout("/layouts/platform.html"){
})
},
async apply() {
const values = this.dict.type.memberApplyPersonType.map(v => v.value)
const personType = "${@shiro.getPrincipalProperty('personType')}"
const msg = '您当前的人员类型是<span style="color: red">' + (personType || '空') + '</span>,目前只允许<strong>' + values.join('、') + '</strong>加入会员,如有疑问,请联系校工会进行更改。'
if (!values.includes(personType)) {
this.$alert(msg, '提示', {
confirmButtonText: '确定',
dangerouslyUseHTMLString: true
})
return
}
this.$refs.guava.edit()
},
@@ -547,9 +534,6 @@ layout("/layouts/platform.html"){
}
},
exportApply() {
window.open(loc() + '/exportApply')
}
},
async created() {
this.getUnionInfo()
@@ -131,12 +131,9 @@ layout("/layouts/platform.html"){
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.0'),
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v='+ new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v='+ new Date().getTime()),
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v='+ new Date().getTime()),
},
methods: {
@@ -146,6 +143,7 @@ layout("/layouts/platform.html"){
if(resp.code===0){
this.getUnionInfo()
this.$refs.guava.index()
this.$message.success(resp.msg)
}else{
this.notifyWarning(resp.msg)
}
File diff suppressed because it is too large Load Diff
@@ -17,7 +17,8 @@ layout("/layouts/platform.html"){
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width:80px;">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
@@ -29,12 +30,14 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable
@change="flushUnits" @clear="flushUnits"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}"
filterable>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -42,207 +45,87 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable
filterable>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-row>
</div>
</div>
<template v-if="searchMore">
<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 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>
<div class="search-item-option">
<dict-select v-model="pageForm.userType" style="width: 100%" clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userStates"
style="width: 100%"
multiple
clearable
placeholder="在职状态"
code="userState"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">变更类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.changeType" style="width: 100%" clearable
placeholder="变更类型"
code="MemberChangeType"></dict-select>
</div>
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personTypes"
style="width: 100%"
multiple
clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">申请方式:</div>
<div class="search-item-option">
<enum-select enum="MemberChangeOrigin" v-model="pageForm.applyOrigin" value="code"
label="description"
style="width: 100%" clearable placeholder="申请方式"></enum-select>
</div>
<div class="search-item">
<div class="search-item-label">变更类型:</div>
<div class="search-item-option">
<enum-select v-model="pageForm.changeTypes"
enum="UserChangeType"
label="description"
multiple
value="code"
style="width: 100%"
clearable
placeholder="变更类型"
></enum-select>
</div>
</template>
</div>
<div class="search-item">
<div class="search-item-label">变更来源:</div>
<div class="search-item-option">
<enum-select enum="MemberChangeOrigin"
v-model="pageForm.changeOrigins"
multiple
value="code"
label="description"
style="width: 100%" clearable
placeholder="变更来源"></enum-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<more v-model="searchMore"></more>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="变更列表" :app="this">
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
resizable
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column type="expand" width="40px">
<template slot-scope="{row}">
<el-form class="demo-table-expand" v-loading="row.loading"
label-position="right" label-suffix=":" label-width="120px">
<vi-title title="变更信息"></vi-title>
<el-form-item label="变更原因">
{{ row.remark }}
</el-form-item>
<!--异动-->
<template v-if="row.type==1">
<vi-title title="异动信息"></vi-title>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="原科室">
<span>{{ row.originThreeUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原单位">
<span>{{ row.originUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原工会">
<span>{{ row.originUnionName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新科室">
<span>{{ row.currentThreeUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新单位">
<span>{{ row.currentUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新工会">
<span>{{ row.currentUnionName }}</span>
</el-form-item>
</el-col>
</el-row>
</template>
<vi-title title="分工会审核信息"></vi-title>
<el-row :gutter="20" v-if="row.unionAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ row.unionAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ row.unionAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ row.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>
<vi-title title="校工会审核信息"></vi-title>
<el-row :gutter="20" v-if="row.schoolAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ row.schoolAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ row.schoolAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ row.schoolAudit.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>
</el-form>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<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"
@@ -252,54 +135,44 @@ layout("/layouts/platform.html"){
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop=='type'" scope="{row:{type}}">
{{changeType[type]}}
</template>
<template v-else-if="column.prop=='applyOrigin'" scope="{row:{applyOrigin}}">
{{changeOrigin[applyOrigin]}}
</template>
<template v-else-if="column.prop=='stateId'" scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
<vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
</template>
<template v-else-if="column.prop==='unitname'" scope="{row}">
{{isDisPlayCode?'('+row.unitcode+')':null}}{{row.unitname}}
</template>
<template v-else-if="column.prop==='unionname'" scope="{row}">
{{isDisPlayCode?'('+row.unioncode+')':null}}{{row.unionname}}
<template v-if="column.prop=='stateId'" scope="{row}">
</template>
</el-table-column>
<el-table-column label="变更人姓名">
<template slot-scope="{row}">
{{row.schoolAudit?row.schoolAudit.username:''}}
</template>
<!-- <template v-else-if="column.prop==='changePersonLoginname'" scope="{row}">-->
<!-- {{row.schoolAudit.loginname}}-->
<!-- </template>-->
<!-- <template v-else-if="column.prop==='changeTime'" scope="{row}">-->
<!-- {{row.schoolAudit.auditTime}}-->
<!-- </template>-->
</el-table-column>
<el-table-column label="变更人工号">
<template slot-scope="{row}">
{{row.schoolAudit?row.schoolAudit.loginname:''}}
</template>
</el-table-column>
<el-table-column label="变更时间" width="150">
<template slot-scope="{row}">
{{row.schoolAudit?row.schoolAudit.auditTime:''}}
</template>
<el-table-column label="异动信息" header-align="center">
<el-table-column label="更新时间" prop="changeTime" min-width="145px"
header-align="center"
sortable
align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
align="center" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="100px" fixed="right">
<el-table-column label="审核状态">
<template scope="{row}">
<el-button size="small" :loading="row.loading" @click="openView(row.userId)">查看
</el-button>
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
<vi-table-state v-else
:state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
</template>
</el-table-column>
<!-- <el-table-column prop="userOnline" align="center" header-align="center"-->
<!-- label="操作"-->
<!-- width="100px" fixed="right">-->
<!-- <template scope="{row}">-->
<!-- <el-button size="mini"-->
<!-- type="primary"-->
<!-- @click="openView(row.userId)">查看-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
@@ -320,6 +193,9 @@ layout("/layouts/platform.html"){
</el-tabs>
</template>
<user-change-history ref="userChangeHistory"></user-change-history>
</guava>
@@ -340,6 +216,9 @@ layout("/layouts/platform.html"){
formData: {},
pageForm: {
searchName: "u.username",
changeTypes: [],
personTypes: [],
changeOrigins: []
},
unions: [],
units: [],
@@ -350,28 +229,41 @@ layout("/layouts/platform.html"){
tableColumns: [
{prop: 'loginname', label: '工号'},
{prop: 'username', label: '姓名'},
{prop: 'sex', label: '性别', sortable: true, width: '100px'},
{prop: 'birthday', label: '出生年月', sortable: true},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'type', label: '变更类型', sortable: true},
{prop: 'applyDate', label: '申请时间', sortable: true},
{prop: 'applyOrigin', label: '申请方式', sortable: true},
{prop: 'stateId', label: '状态', sortable: true}
// {prop: 'type', label: '变更类型', sortable: true},
// {prop: 'applyDate', label: '申请时间', sortable: true},
// {prop: 'applyOrigin', label: '申请方式', sortable: true},
// {prop: 'stateId', label: '状态', sortable: true}
],
isThreeUnit:null,
isThreeUnit: false,
memberChangeOriginOptions: [],
userChangeTypeOptions: []
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'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'),
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v=1.0.0'),
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=' + new Date().getTime()),
},
methods: {
async openUserChangeInfo({id}) {
this.$refs.userChangeHistory.openUserChangeInfo(id)
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return this.userChangeTypeOptions.filter(v => c.includes(v.code)).map(v => v.description).join()
}
return null
},
async onExpand(row, expandedRows) {
if (!expandedRows.includes(row)) {
return
@@ -380,9 +272,9 @@ layout("/layouts/platform.html"){
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findChangeApplyInfo", {id: row.id})
this.$set(row, "loading", false)
if(resp.code===0){
if (resp.code === 0) {
this.$set(row, "info", data)
}else{
} else {
this.notifyWarning(resp.msg)
this.$set(row, "info", {})
}
@@ -395,11 +287,11 @@ layout("/layouts/platform.html"){
async doSubmit(formData) {
const resp = await $.post(loc() + "/change", formData)
this.$refs.apply.closeLoading()
if(resp.code===0){
if (resp.code === 0) {
this.userId = ""
this.$refs.guava.index()
this.pageData()
}else{
} else {
this.notifyWarning(resp.msg)
}
},
@@ -419,9 +311,29 @@ layout("/layouts/platform.html"){
this.unionGroups = await unionGroupsByUnionId(this.pageForm.unionId)
}
},
pageData() {
sublime.showLoadingbar();
this.tableLoading = true
const pageForm = clone(this.pageForm)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
$.post(loc() + '/pageData', 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");
},
},
async created() {
this.pageData();
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
if (this.isThreeUnit) {
this.tableColumns.forEach(v => {
@@ -431,7 +343,8 @@ layout("/layouts/platform.html"){
})
}
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -440,6 +353,14 @@ layout("/layouts/platform.html"){
}
this.changeType = await member.getChangeType()
this.changeOrigin = await member.getChangeOrigin()
getEnumOptions('MemberChangeOrigin').then(res => {
this.memberChangeOriginOptions = res
})
getEnumOptions('UserChangeType').then(res => {
this.userChangeTypeOptions = res
})
}
})
</script>
@@ -15,7 +15,8 @@
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch" style="width: 100%">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
@@ -25,113 +26,89 @@
</div>
<div class="search-item">
<div class="search-item-label">申请时间:</div>
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<el-date-picker
style="width: 100%"
v-model="pageForm.dateRange"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd">
</el-date-picker>
<dict-select v-model="pageForm.userStates"
style="width: 100%"
multiple
clearable
placeholder="在职状态"
code="userState"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personTypes"
style="width: 100%"
multiple
clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">变更类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.type" style="width: 100%" clearable placeholder="变更类型"
code="MemberChangeType"></dict-select>
<enum-select v-model="pageForm.changeTypes"
enum="UserChangeType"
label="description"
multiple
value="code"
style="width: 100%"
clearable
placeholder="变更类型"
></enum-select>
</div>
</div>
<template v-if="searchMore">
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
clearable
filterable
@change="flushUnits" @clear="flushUnits">
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable
filterable
@change="flushUnits" @clear="flushUnits">
<el-option v-for="item in unions" :label="item.unionname"
: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 placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
@change="getThreeUnits"
clearable
filterable>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-row>
</div>
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable
filterable>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-row>
</div>
<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 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>
<div class="search-item-option">
<dict-select v-model="pageForm.memberStatus" style="width: 100%" clearable
placeholder="会员状态" code="memberStatusText"></dict-select>
</div>
</div>
</template>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
<more v-model="searchMore"></more>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表" :app="this">
<template #func>
<!-- <el-button type="primary" v-if="source==2" size="small"-->
<!-- :disabled="selection.length===0" @click="batchOpenAudit">批量审核-->
<!-- </el-button>-->
<el-radio-group v-model="pageForm.audit" @change="doSearch" size="small"
style="margin-bottom: -7.5px">
class="ml10">
<el-radio-button :label="0">全部</el-radio-button>
<el-radio-button :label="1">已审核</el-radio-button>
<el-radio-button :label="2">未审核</el-radio-button>
@@ -139,9 +116,17 @@
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
ref="table"
@selection-change="handleSelectionChange"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<el-table-column type="selection" width="55"
v-if="source==2"
reserve-selection
:selectable="(row)=>{return row.audit}"></el-table-column>
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
@@ -153,10 +138,11 @@
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop=='type'" scope="{row:{type}}">
{{changeType[type]}}
<template v-if="column.prop=='type'" scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">{{changeType[row.type]}}</span>
</template>
<template v-else-if="column.prop=='applyOrigin'" scope="{row:{applyOrigin}}">
<template v-else-if="column.prop=='applyOrigin'"
scope="{row:{applyOrigin}}">
{{changeOrigin[applyOrigin]}}
</template>
<template v-else-if="column.prop=='stateId'" scope="{row}">
@@ -171,13 +157,18 @@
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作"
fixed="right"
width="100px">
<template scope="{row}">
<el-button size="mini" :loading="row.loading" v-if="row.audit" type="primary"
<el-button size="mini" :loading="row.loading" v-if="row.audit"
type="primary"
@click="openAudit(row,true)">审核
</el-button>
<el-button size="mini" :loading="row.loading" v-else @click="openAudit(row,false)">查看
<el-button size="mini" :loading="row.loading" v-else
type="primary"
@click="openAudit(row,false)">查看
</el-button>
</template>
</el-table-column>
@@ -188,17 +179,14 @@
</el-card>
</template>
<template #edit>
<el-tabs v-model="active">
<el-tab-pane label="个人信息" name="info">
<member ref="memberInfo" :id="info.userId" view></member>
</el-tab-pane>
<el-tab-pane label="变更记录" name="changInfo">
<mem-change-records :userid="info.userId"></mem-change-records>
</el-tab-pane>
<!-- <el-tab-pane label="变更记录" name="changInfo">-->
<!-- <mem-change-records :userid="info.userId"></mem-change-records>-->
<!-- </el-tab-pane>-->
<el-tab-pane label="分工会审核" name="union">
<el-form :model="formData" ref="form" :rules="formRules"
@@ -211,23 +199,27 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原单位">
<el-input :value="info.originUnit.name" disabled></el-input>
<el-input :value="info.originUnit.name"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原工会">
<el-input :value="info.originUnion.unionname" disabled></el-input>
<el-input :value="info.originUnion.unionname"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新单位">
<el-input :value="info.currentUnit.name" disabled></el-input>
<el-input :value="info.currentUnit.name"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新工会">
<el-input :value="info.currentUnion.unionname" disabled></el-input>
<el-input :value="info.currentUnion.unionname"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -248,7 +240,8 @@
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
@@ -291,7 +284,8 @@
</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"
<el-form class="demo-table-expand" :model="formData" ref="form"
:rules="formRules"
label-width="120px" label-suffix=":">
<vi-title title="审核信息"></vi-title>
@@ -302,23 +296,27 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原单位">
<el-input :value="info.originUnit.name" disabled></el-input>
<el-input :value="info.originUnit.name"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原工会">
<el-input :value="info.originUnion.unionname" disabled></el-input>
<el-input :value="info.originUnion.unionname"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新单位">
<el-input :value="info.currentUnit.name" disabled></el-input>
<el-input :value="info.currentUnit.name"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新工会">
<el-input :value="info.currentUnion.unionname" disabled></el-input>
<el-input :value="info.currentUnion.unionname"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -339,12 +337,14 @@
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<div style="float: right;margin: 20px 0">
<el-button @click="doAudit(false)" type="danger" :loading="submitLoading">拒
<el-button @click="doAudit(false)" type="danger"
:loading="submitLoading">拒
绝
</el-button>
<el-button type="primary" @click="doAudit(true)"
@@ -390,6 +390,38 @@
</template>
</guava>
<el-dialog title="审核信息" :visible.sync="dialogVisible" width="40%" :close-on-click-modal="false">
<el-form class="demo-table-expand" :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<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>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="batchDoAudit(false)">拒 绝</el-button>
<el-button type="primary" @click="batchDoAudit(true)">通 过</el-button>
</span>
</el-dialog>
<user-change-history ref="userChangeHistory"></user-change-history>
</div>
@@ -400,6 +432,8 @@
mixins: [initTableMixins],
data() {
return {
dialogVisible: false,
selection: [],
active: 'info',
submitLoading: false,
formRules: {},
@@ -415,7 +449,10 @@
unionGroupId: null,
source: source,
searchName: "u.username",
audit: 2
audit: 2,
changeTypes: [],
personTypes: [],
changeOrigins: []
},
units: [],
unions: [],
@@ -426,26 +463,62 @@
tableColumns: [
{prop: 'loginname', label: '工号', checked: true},
{prop: 'username', label: '姓名'},
{prop: 'MMobile', label: '联系电话'},
{prop: 'mobile', label: '联系电话'},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
// {prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
// {prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'type', label: '变更类型', sortable: true},
{prop: 'applyDate', label: '申请时间', sortable: true},
{prop: 'applyOrigin', label: '申请方式', sortable: true},
{prop: 'stateId', label: '状态', sortable: true},
],
isThreeUnit: null,
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'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'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=' + new Date().getTime()),
},
methods: {
openUserChangeInfo({hisId}){
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
},
async batchDoAudit(pass) {
const confirm = await this.$confirm('您确定要批量审核【' + this.selection.map(v => v.username) + '】吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if ('confirm' === confirm) {
this.formData.auditPass = pass
this.formData.recordIds = JSON.stringify(this.selection.map(v => v.id))
const resp = await $.post("/platform/member/change/audit/batchDoAudit", this.formData)
if (resp.code === 0) {
this.pageData()
this.dialogVisible = false
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
batchOpenAudit() {
if (this.pageForm.source === 2) {
this.active = 'school'
}
this.formData = {
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.dialogVisible = true
},
handleSelectionChange(row) {
this.selection = row
},
async doAudit(pass) {
if (!pass) {
const confirm = await this.$confirm('您确定要拒绝吗?', '提示', {
@@ -460,13 +533,13 @@
this.submitLoading = true
const resp = await $.post("/platform/member/change/audit/doAudit", this.formData)
this.submitLoading = false
if(resp.code===0){
if (resp.code === 0) {
//更新用户信息
this.info.userId = ""
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
} else {
this.notifyWarning(resp.msg)
}
},
@@ -474,7 +547,7 @@
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findChangeApplyInfo", {id: row.id})
this.$set(row, "loading", false)
if(resp.code===0){
if (resp.code === 0) {
const data = resp.data
data.audit = audit
this.info = data
@@ -498,7 +571,7 @@
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
}else{
} else {
this.notifyWarning(resp.msg)
}
},
@@ -506,11 +579,17 @@
pageData() {
sublime.showLoadingbar();
this.tableLoading = true
this.pageForm.date = JSON.stringify(this.pageForm.dateRange)
$.post("/platform/member/change/audit/pageData", this.pageForm, (data) => {
const pageForm = clone(this.pageForm)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
pageForm.date = JSON.stringify(pageForm.date)
$.post("/platform/member/change/audit/pageData", pageForm, (data) => {
sublime.closeLoadingbar();
this.tableLoading = false
if (data.code == 0) {
if (data.code === 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
@@ -533,18 +612,9 @@
}
},
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') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -436,7 +436,7 @@ layout("/layouts/platform.html"){
components: {
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/userChangeHistory.vue?v=' + new Date().getTime()),
},
data() {
return {
@@ -21,9 +21,7 @@ layout("/layouts/platform.html"){
<div class="search-item-label">任务:</div>
<div class="search-item-option">
<el-select v-model="pageForm.taskId" style="width: 100%">
<el-option v-for="item in memberCheckTaskOptions"
:label="item.taskName"
:value="item.id"></el-option>
<el-option v-for="item in memberCheckTaskOptions" :label="item.taskName" :value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -31,12 +29,14 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">职工信息:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-input
placeholder="请输入内容"
clearable
v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch"
>
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 80px">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
</el-select>
@@ -44,31 +44,35 @@ layout("/layouts/platform.html"){
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
<el-select
placeholder="所属工会"
v-model="pageForm.unionId"
style="width: 100%"
clearable="true"
@change="flushUnits"
@clear="flushUnits"
filterable="true"
>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
</el-select>
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
<div class="search-item-label">组成单位:</div>
<div class="search-item-option">
<el-select placeholder="组成单位" v-model="pageForm.unitId" style="width: 100%;"
@change="getThreeUnits"
clearable="true"
filterable="true">
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
<el-select
placeholder="组成单位"
v-model="pageForm.unitId"
style="width: 100%"
@change="getThreeUnits"
clearable="true"
filterable="true"
>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -76,10 +80,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">性&emsp;&emsp;别:</div>
<div class="search-item-option">
<el-select v-model="pageForm.sex" style="width: 100%" clearable
placeholder="请选择">
<el-option v-for="sex in sexOptions" :label="sex"
:value="sex"></el-option>
<el-select v-model="pageForm.sex" style="width: 100%" clearable placeholder="请选择">
<el-option v-for="sex in sexOptions" :label="sex" :value="sex"></el-option>
</el-select>
</div>
</div>
@@ -87,48 +89,63 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userStates"
style="width: 100%"
multiple
clearable
placeholder="在职状态"
code="userState"></dict-select>
<dict-select
v-model="pageForm.userStates"
style="width: 100%"
multiple
clearable
placeholder="在职状态"
code="userState"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personTypes"
style="width: 100%"
multiple
clearable
placeholder="人员类型"
code="UserType"></dict-select>
<dict-select
v-model="pageForm.personTypes"
style="width: 100%"
multiple
clearable
placeholder="人员类型"
code="UserType"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select
v-model="pageForm.preparedBy"
style="width: 100%"
clearable
placeholder="人员类型"
code="PREPARED_BY"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">变更类型:</div>
<div class="search-item-option">
<enum-select v-model="pageForm.changeTypes"
enum="UserChangeType"
label="description"
multiple
value="code"
style="width: 100%"
clearable
placeholder="变更类型"
<enum-select
v-model="pageForm.changeTypes"
enum="UserChangeType"
label="description"
multiple
value="code"
style="width: 100%"
clearable
placeholder="变更类型"
></enum-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search"
@click="doSearch();getNumData();getUnionTaskStatus()">搜索
</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch();getNumData();getUnionTaskStatus()">搜索</el-button>
</div>
</div>
</el-card>
@@ -136,16 +153,19 @@ layout("/layouts/platform.html"){
<table-tool label="人员列表" :app="this">
<template #func>
<!-- <span class="text-danger">人员信息是否异动:</span>-->
<el-select v-model="pageForm.isMember" @change="doSearch();getNumData()"
:clearable="false" size="small"
style="width: 200px;margin-right: 5px">
<el-select
v-model="pageForm.isMember"
@change="doSearch();getNumData()"
:clearable="false"
size="small"
style="width: 200px; margin-right: 5px"
>
<el-option label="全部" value=""></el-option>
<el-option label="是会员" value="1"></el-option>
<el-option label="不是会员" value="0"></el-option>
</el-select>
<el-radio-group v-model="pageForm.changed" @change="doSearch" class="mr5"
size="small">
<el-radio-group v-model="pageForm.changed" @change="doSearch" class="mr5" size="small">
<el-radio-button label="">全部({{numData.userSumNum}})</el-radio-button>
<el-radio-button :label="1">有变化({{numData.changeNum}})</el-radio-button>
<el-radio-button :label="0">无变化({{numData.notChangeNum}})</el-radio-button>
@@ -174,20 +194,20 @@ layout("/layouts/platform.html"){
<!-- </el-dropdown-menu>-->
<!-- </el-dropdown>-->
<el-button icon="el-icon-success" size="small" type="primary"
@click="submitCheck"
:disabled="unionTaskStatus || !allowOperationTask">
<el-button
icon="el-icon-success"
size="small"
type="primary"
@click="submitCheck"
:disabled="unionTaskStatus || !allowOperationTask"
>
全部核对完成,提交核对
</el-button>
<el-button v-if="unionTaskStatus" type="primary" size="small"
@click="checkAgain">
重新核对
</el-button>
<el-button v-if="unionTaskStatus" type="primary" size="small" @click="checkAgain">重新核对</el-button>
<el-button icon="el-icon-printer" class="m10" type="primary"
style="float: right"
size="small" @click="doExportByUnion">导出
<el-button icon="el-icon-printer" class="m10" type="primary" style="float: right" size="small" @click="doExportByUnion">
导出
</el-button>
<!-- <el-button :disabled="!checkUsers.length" type="primary" size="small"-->
@@ -195,72 +215,79 @@ layout("/layouts/platform.html"){
<!-- @click="openUnitMove" class="ml5">-->
<!-- 单位调整-->
<!-- </el-button>-->
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
v-loading="tableLoading" :size="tableSize" class="vi-table" ref="table"
@selection-change="tableHandleSelectionChange">
<el-table
:data="tableData"
style="width: 100%"
row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading"
:size="tableSize"
class="vi-table"
ref="table"
@selection-change="tableHandleSelectionChange"
>
<!-- <el-table-column type="selection" :reserve-selection="true"></el-table-column>-->
<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" 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"
>
</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"
></el-table-column>
<el-table-column label="异动信息" header-align="center">
<el-table-column label="更新时间" prop="changeTime" min-width="145px"
header-align="center" sortable
align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
align="center" show-overflow-tooltip sortable>
<el-table-column
label="更新时间"
prop="changeTime"
min-width="145px"
header-align="center"
sortable
align="center"
show-overflow-tooltip
></el-table-column>
<el-table-column label="异动类型" prop="changeTypes" header-align="center" align="center" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
<span style="color: #0e78c5; cursor: pointer" @click="openUserChangeInfo(row)">{{getChangeTypes(row.changeTypes)}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="会员" header-align="center" align="center" prop="member"
show-overflow-tooltip sortable>
<el-table-column label="会员" header-align="center" align="center" prop="member" show-overflow-tooltip sortable>
<template scope="{row}">
<span v-if="row.member==1" class="text-success ">
<i class="fa fa-circle ml5"></i> 是
</span>
<span v-if="row.member==1" class="text-success">
<i class="fa fa-circle ml5"></i>
是
</span>
<span v-else class="text-danger">
<i class="fa fa-circle ml5"></i> 否
</span>
<i class="fa fa-circle ml5"></i>
否
</span>
</template>
</el-table-column>
<el-table-column label="变更状态" header-align="center" align="center"
prop="welfareMember"
show-overflow-tooltip sortable>
<el-table-column label="变更状态" header-align="center" align="center" prop="welfareMember" show-overflow-tooltip sortable>
<template scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
<vi-table-state v-else
:state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
<vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
</template>
</el-table-column>
<el-table-column header-align="center" label="操作" width="200px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openCheck(row)"
:disabled="!(row.apply||row.reApply) || unionTaskStatus || !allowOperationTask">
<el-button
size="mini"
type="primary"
@click="openCheck(row)"
:disabled="!(row.apply||row.reApply) || unionTaskStatus || !allowOperationTask"
>
核对
</el-button>
</template>
@@ -270,9 +297,7 @@ layout("/layouts/platform.html"){
</el-card>
<template #edit>
<mem-change-apply ref="apply" :userid="userId"
@submit="doSubmitChangeUser"
change_mode="check"></mem-change-apply>
<mem-change-apply ref="apply" :userid="userId" @submit="doSubmitChangeUser" change_mode="check"></mem-change-apply>
</template>
<template #public>
@@ -280,43 +305,39 @@ layout("/layouts/platform.html"){
</template>
<user-change-history ref="userChangeHistory"></user-change-history>
</guava>
<el-drawer
title="添加会员"
:visible.sync="selectUserVisible"
:before-close="handleClose" size="1200px">
<el-drawer title="添加会员" :visible.sync="selectUserVisible" :before-close="handleClose" size="1200px">
<member-user-select
v-model="selectUsers"
ref="userSelect"
:page_size="10"
:is_ghxzzz="is_ghxzzz"
:sql_cnd="['(u.member is null or u.member = 0) and (c.taskId is null OR c.stateId=70)']"
></member-user-select>
<member-user-select v-model="selectUsers" ref="userSelect" :page_size="10"
:is_ghxzzz="is_ghxzzz"
:sql_cnd="['(u.member is null or u.member = 0) and (c.taskId is null OR c.stateId=70)']"></member-user-select>
<span style="position: absolute;bottom: 20px;right: 20px">
<el-button @click="selectUserVisible = false"
:disabled="selectUserLoading">取 消</el-button>
<el-button type="primary" @click="doBatchJoinMember"
:loading="selectUserLoading">确定</el-button>
<span style="position: absolute; bottom: 20px; right: 20px">
<el-button @click="selectUserVisible = false" :disabled="selectUserLoading">取 消</el-button>
<el-button type="primary" @click="doBatchJoinMember" :loading="selectUserLoading">确定</el-button>
</span>
</el-drawer>
<user-change-history ref="userChangeHistory"></user-change-history>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
components: {
'mem-change-apply': httpVueLoader('/components/member/MemChangeApply.vue?v=' + new Date().getTime()),
'member-user-select': httpVueLoader('/components/plugins/MemberUserTableSelect.vue?v=' + new Date().getTime()),
'user-change-history': httpVueLoader('/components/userChangeHistory/UserChangeHistory.vue?v=' + new Date().getTime()),
"mem-change-apply": httpVueLoader("/components/member/MemChangeApply.vue?v=" + new Date().getTime()),
"member-user-select": httpVueLoader("/components/plugins/MemberUserTableSelect.vue?v=" + new Date().getTime()),
"user-change-history": httpVueLoader("/components/userChangeHistory/userChangeHistory.vue?v=" + new Date().getTime())
},
computed: {
allowOperationTask() {
const {taskId} = this.pageForm
const { taskId } = this.pageForm
if (taskId) {
const task = this.memberCheckTaskOptions.find(v => v.id === taskId)
const task = this.memberCheckTaskOptions.find((v) => v.id === taskId)
const startTime = moment(task.startTime).valueOf()
const endTime = moment(task.endTime).valueOf()
const nowDate = Date.now()
@@ -334,33 +355,31 @@ layout("/layouts/platform.html"){
unions: [],
units: [],
tableColumns: [
{prop: 'loginname', label: '工号', sortable: true},
{prop: 'username', label: '姓名', sortable: true},
{prop: 'sex', label: '性别', sortable: true, width: '100px'},
{prop: 'birthday', label: '出生年月', sortable: true},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
{ prop: "birthday", label: "出生年月", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionname", label: "所属工会", sortable: true },
{ prop: "unitname", label: "所属单位", sortable: true }
// {prop: 'threeUnitName', label: '所在科室', sortable: true},
// {prop: 'unionGroupName', label: '工会小组', sortable: true},
],
pageForm: {
year: new Date().getFullYear() + '',
searchName: 'username',
changed: '',
isMember: '1',
unionId: '',
unitId: '',
unionGroupId: '',
year: new Date().getFullYear() + "",
searchName: "username",
changed: "",
isMember: "1",
unionId: "",
unitId: "",
unionGroupId: "",
changeTypes: [],
personTypes: [],
changeOrigins: []
},
sexOptions: ['男', '女'],
sexOptions: ["男", "女"],
memberCheckTaskOptions: [],
changeType: {},
@@ -371,7 +390,7 @@ layout("/layouts/platform.html"){
notChangeNum: 0,
userSumNum: 0,
memberNum: 0,
notMemberNum: 0,
notMemberNum: 0
},
selectUserVisible: false,
selectUsers: [],
@@ -380,45 +399,54 @@ layout("/layouts/platform.html"){
unitMoveUnions: [],
unitMoveUnits: [],
unitMoveFormData: {
unitId: '',
unionId: '',
unitName: '',
unionName: ''
unitId: "",
unionId: "",
unitName: "",
unionName: ""
},
checkUsers: [],
checkUsers: []
}
},
methods: {
async openUserChangeInfo({hisId, changeTypes}) {
async openUserChangeInfo({ hisId, changeTypes }) {
this.$refs.userChangeHistory.openUserChangeInfo(hisId, changeTypes)
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return c.map(v => {
return this.changeType[v]
}).join(',')
return c
.map((v) => {
return this.changeType[v]
})
.join(",")
}
return null
},
doExportByUnion() {
let props = {}
this.tableColumns.forEach(v => {
this.tableColumns.forEach((v) => {
props[v.prop] = v.label
})
const {unionId, unitId, unionGroupId, year} = this.pageForm
window.open("/platform/member/inquire/integrate/doExportByUnion?=unitId=" + unitId
+ "&unionId=" + unionId
+ "&year=" + year
+ "&unionGroupId=" + unionGroupId
+ "&props=" + JSON.stringify(props))
const { unionId, unitId, unionGroupId, year } = this.pageForm
window.open(
"/platform/member/inquire/integrate/doExportByUnion?=unitId=" +
unitId +
"&unionId=" +
unionId +
"&year=" +
year +
"&unionGroupId=" +
unionGroupId +
"&props=" +
JSON.stringify(props)
)
},
async afterEdit(memData) {
if (!this.userId) {
await $.post(" /platform/member/info/make/joinMemberFamily", memData)
}
this.userId = ''
this.userId = ""
this.pageData()
this.$refs.guava.index()
},
@@ -433,15 +461,15 @@ layout("/layouts/platform.html"){
if (threeUnitId) {
aa = true
}
this.$confirm('您确定将选择的用户加入会员' + (aa ? "并修改单位和科室?" : "?"))
.then(async _ => {
this.$confirm("您确定将选择的用户加入会员" + (aa ? "并修改单位和科室?" : "?"))
.then(async (_) => {
this.selectUserLoading = true
const resp = await $.post("/platform/member/change/mange/joinWelfareMember", {
userIds: JSON.stringify(this.selectUsers),
taskId: this.pageForm.taskId,
unitId: unitId,
threeUnitId: threeUnitId,
});
threeUnitId: threeUnitId
})
this.selectUserLoading = false
if (resp.code === 0) {
this.pageData()
@@ -451,19 +479,16 @@ layout("/layouts/platform.html"){
this.notifyWarning(resp.msg)
}
})
.catch(_ => {
});
.catch((_) => {})
},
pushDropdownCommand({type}) {
if (type == 'select') {
pushDropdownCommand({ type }) {
if (type == "select") {
this.selectUsers = []
this.selectUserVisible = true
this.$nextTick(() => {
this.$refs.userSelect.init()
})
} else if (type == 'add') {
} else if (type == "add") {
this.userId = ""
this.$refs.guava.public()
if (!this.userId) {
@@ -475,80 +500,79 @@ layout("/layouts/platform.html"){
openUnitMove() {
this.unitMoveVisibile = true
this.unitMoveFormData = {
unitId: '',
unionId: '',
unitName: '',
unionName: ''
unitId: "",
unionId: "",
unitName: "",
unionName: ""
}
},
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
this.$confirm("确认关闭?")
.then((_) => {
done()
})
.catch(_ => {
});
.catch((_) => {})
},
async moveUnionsChange(val) {
if (val) {
this.unitMoveUnits = await getUnits(val)
this.$set(this.unitMoveFormData, 'unionName', this.unitMoveUnions.find(v => v.id === val).unionname)
this.$set(this.unitMoveFormData, 'unitId', '')
this.$set(this.unitMoveFormData, 'unitName', '')
this.$set(this.unitMoveFormData, "unionName", this.unitMoveUnions.find((v) => v.id === val).unionname)
this.$set(this.unitMoveFormData, "unitId", "")
this.$set(this.unitMoveFormData, "unitName", "")
} else {
this.$set(this.unitMoveFormData, 'unitId', '')
this.$set(this.unitMoveFormData, 'unitName', '')
this.$set(this.unitMoveFormData, 'unionName', '')
this.$set(this.unitMoveFormData, "unitId", "")
this.$set(this.unitMoveFormData, "unitName", "")
this.$set(this.unitMoveFormData, "unionName", "")
this.unitMoveUnits = []
}
},
async moveUnitChange(val) {
if (val) {
this.$set(this.unitMoveFormData, 'unitName', this.unitMoveUnits.find(v => v.id === val).name)
this.$set(this.unitMoveFormData, "unitName", this.unitMoveUnits.find((v) => v.id === val).name)
} else {
this.$set(this.unitMoveFormData, 'unitName', '')
this.$set(this.unitMoveFormData, "unitName", "")
}
if (val) {
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val, null)
}
},
async doUnitMove() {
if (this.unitMoveFormData.unitId === '') {
this.notifyWarning('请选择新单位!')
if (this.unitMoveFormData.unitId === "") {
this.notifyWarning("请选择新单位!")
return
}
if (this.unitMoveFormData.threeUnitId === '') {
this.notifyWarning('请选择新科室!')
if (this.unitMoveFormData.threeUnitId === "") {
this.notifyWarning("请选择新科室!")
return
}
const params = {
unitId: this.unitMoveFormData.unitId,
threeUnitId: this.unitMoveFormData.threeUnitId,
userId: this.checkUsers.map(v => v.id)
userId: this.checkUsers.map((v) => v.id)
}
const resp = await $.post('/platform/member/change/mange/userUnitMove', params)
const resp = await $.post("/platform/member/change/mange/userUnitMove", params)
if (resp.code === 0) {
this.pageData()
await this.getNumData()
this.$refs.table.clearSelection();
this.$refs.table.clearSelection()
this.unitMoveVisibile = false
} else {
this.notifyWarning(resp.msg)
}
},
tableHandleSelectionChange(val) {
this.checkUsers = val;
this.checkUsers = val
},
async threeUnitChange(val) {
if (val) {
const threeUnit = this.threeUnits.find(v => v.id === val)
const threeUnit = this.threeUnits.find((v) => v.id === val)
const groupName = threeUnit.groupname
this.$set(this.unitMoveFormData, 'threeUnitName', threeUnit.name)
this.$set(this.unitMoveFormData, 'unionGroupName', groupName)
this.$set(this.unitMoveFormData, "threeUnitName", threeUnit.name)
this.$set(this.unitMoveFormData, "unionGroupName", groupName)
} else {
this.$set(this.unitMoveFormData, 'unionGroupName', null)
this.$set(this.unitMoveFormData, "unionGroupName", null)
}
},
async getThreeUnits() {
@@ -565,7 +589,7 @@ layout("/layouts/platform.html"){
*/
async doSubmitChangeUser(formData) {
formData.taskId = this.pageForm.taskId
const resp = await $.post(loc() + '/doSubmitChangeUser', formData)
const resp = await $.post(loc() + "/doSubmitChangeUser", formData)
this.$refs.apply.closeLoading()
if (resp.code === 0) {
this.$message.success(resp.msg)
@@ -586,14 +610,14 @@ layout("/layouts/platform.html"){
this.notifyWarning("请选择需要核对的分工会!")
return
}
const confirm = await this.$confirm('此操作会提交至校工会确认,请确认核对完成了吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
const confirm = await this.$confirm("此操作会提交至校工会确认,请确认核对完成了吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if ('confirm' !== confirm) return
const {taskId} = this.pageForm
const resp = await $.post(loc() + '/submitCheck', this.pageForm)
if ("confirm" !== confirm) return
const { taskId } = this.pageForm
const resp = await $.post(loc() + "/submitCheck", this.pageForm)
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
@@ -604,34 +628,32 @@ layout("/layouts/platform.html"){
},
async getMemberCheckTaskOptions() {
const resp = await $.get('/platform/member/check/task/getAllTask')
const resp = await $.get("/platform/member/check/task/getAllTask")
this.memberCheckTaskOptions = resp.data
if (this.memberCheckTaskOptions.length) {
this.$set(this.pageForm, 'taskId', this.memberCheckTaskOptions[0].id)
this.$set(this.pageForm, "taskId", this.memberCheckTaskOptions[0].id)
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === "true") {
this.units = await getUnits(this.pageForm.unionId)
} else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.unionGroups = await unionGroupsByUnionId(this.pageForm.unionId)
},
async getChangeType() {
const changeType = {}
const changeTypeOptions = await getEnumOptions("UserChangeType")
changeTypeOptions.forEach(v => {
changeTypeOptions.forEach((v) => {
changeType[v.code] = v.description
})
return changeType
},
async getUnionTaskStatus() {
const {taskId} = this.pageForm
const resp = await $.get(loc() + '/getUnionTaskStatus', this.pageForm)
const { taskId } = this.pageForm
const resp = await $.get(loc() + "/getUnionTaskStatus", this.pageForm)
if (resp.code === 0) {
this.unionTaskStatus = resp.data
}
@@ -641,15 +663,15 @@ layout("/layouts/platform.html"){
this.notifyWarning("请选择需要重新核对的工会!")
return
}
const confirm = await this.$confirm('您确定要重新核对吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
const confirm = await this.$confirm("您确定要重新核对吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if ('confirm' !== confirm) return
if ("confirm" !== confirm) return
const {taskId} = this.pageForm
const resp = await $.get(loc() + '/checkAgain', this.pageForm)
const { taskId } = this.pageForm
const resp = await $.get(loc() + "/checkAgain", this.pageForm)
if (resp.code === 0) {
this.getUnionTaskStatus()
}
@@ -660,7 +682,7 @@ layout("/layouts/platform.html"){
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
const resp = await $.post(loc() + '/getButtonNum', pageForm)
const resp = await $.post(loc() + "/getButtonNum", pageForm)
if (resp.code === 0) {
this.numData = resp.data
} else {
@@ -669,35 +691,38 @@ layout("/layouts/platform.html"){
},
pageData() {
sublime.showLoadingbar();
sublime.showLoadingbar()
this.tableLoading = true
const pageForm = clone(this.pageForm)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
$.post(loc() + '/pageData', 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");
},
$.post(
loc() + "/pageData",
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"
)
}
},
async created() {
await this.getMemberCheckTaskOptions()
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('H03')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'false') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('H03')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === "false") {
this.unions = await getUnions(null, true)
this.is_ghxzzz = true
this.$set(this.pageForm, "unionId", this.unions[0].id)
} else {
this.unions = await getUnions(null, false)
}
this.flushUnits()
@@ -18,7 +18,8 @@ layout("/layouts/platform.html"){
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
@@ -30,11 +31,13 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -42,17 +45,18 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable="true"
filterable="true">
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<template v-if="searchMore">
<template v-if="isThreeUnit">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
@@ -75,7 +79,8 @@ layout("/layouts/platform.html"){
<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
<el-select v-model="pageForm.threeUnitId" style="width: 100%"
filterable
clearable
placeholder="请选择">
<el-option
@@ -92,7 +97,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
<dict-select v-model="pageForm.personType" style="width: 100%"
clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
@@ -101,7 +107,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
<dict-select v-model="pageForm.userState" style="width: 100%"
clearable
placeholder="在职状态"
code="UserState"></dict-select>
</div>
@@ -118,7 +125,8 @@ layout("/layouts/platform.html"){
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
<more v-model="searchMore"></more>
</div>
@@ -129,17 +137,21 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="非会员用户列表" :app="this">
<template #func>
<el-button icon="el-icon-document-add" type="primary" size="small" :loading="submitLoading"
<el-button icon="el-icon-document-add" type="primary" size="small"
:loading="submitLoading"
@click="exportNotMember">导出
</el-button>
<el-button icon="el-icon-s-promotion" type="primary" size="small" :loading="submitLoading"
<el-button icon="el-icon-s-promotion" type="primary" size="small"
:loading="submitLoading"
@click="joinMemberFamily">批量设置
</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
v-loading="tableLoading" ref="table" @selection-change="handleSelectionChange"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading" ref="table"
@selection-change="handleSelectionChange"
:size="tableSize" class="vi-table">
<el-table-column :reserve-selection="true"
type="selection"
@@ -158,12 +170,14 @@ layout("/layouts/platform.html"){
<template v-if="column.prop=='type'" scope="{row:{type}}">
{{changeType[type]}}
</template>
<template v-else-if="column.prop=='applyOrigin'" scope="{row:{applyOrigin}}">
<template v-else-if="column.prop=='applyOrigin'"
scope="{row:{applyOrigin}}">
{{changeOrigin[applyOrigin]}}
</template>
<template v-else-if="column.prop=='stateId'" scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
<vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
<vi-table-state v-else
:state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
</template>
<template v-else-if="column.prop==='unitname'" scope="{row}">
{{isDisPlayCode?'('+row.unitcode+')':null}}{{row.unitname}}
@@ -173,7 +187,8 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作"
width="100px">
<template scope="scope">
<el-dropdown @command="dropdownCommand">
@@ -226,8 +241,6 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
active: 'info',
submitLoading: false,
pageForm: {
searchName: "username",
},
@@ -235,7 +248,10 @@ layout("/layouts/platform.html"){
userId: "",
unions: [],
units: [],
active: 'info',
selection: [],
submitLoading: false,
tableColumns: [
{prop: 'loginname', label: '工号'},
{prop: 'username', label: '姓名'},
@@ -247,15 +263,13 @@ layout("/layouts/platform.html"){
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'campusName', label: '所属校区', sortable: true},
// {prop: 'campusName', label: '所属校区', sortable: true},
],
isThreeUnit:null,
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime())
},
methods: {
@@ -352,8 +366,9 @@ layout("/layouts/platform.html"){
}
})
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -44,7 +44,8 @@ layout("/layouts/platform.html"){
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
@@ -56,11 +57,13 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable
@change="flushUnits" @clear="flushUnits"
filterable>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -68,115 +71,20 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable
filterable>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<template v-if="searchMore">
<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 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>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
placeholder="在职状态"
code="UserState"></dict-select>
</div>
</div>-->
<div class="search-item">
<div class="search-item-label">性&emsp;&emsp;别:</div>
<div class="search-item-option">
<el-select v-model="pageForm.sex" style="width: 100%" clearable
placeholder="请选择">
<el-option v-for="sex in sexOptions" :label="sex" :value="sex"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">职&emsp;&emsp;务:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.position"
@keyup.enter.native="doSearch">
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">职&emsp;&emsp;称:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.jobTitle"
@keyup.enter.native="doSearch">
</el-input>
</div>
</div>
<!-- <div class="search-item">
<div class="search-item-label">会员状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.memberStatus" style="width: 100%" clearable
placeholder="会员状态" code="memberStatusText"></dict-select>
</div>
</div>-->
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<more v-model="searchMore"></more>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
</div>
</el-card>
@@ -196,7 +104,8 @@ layout("/layouts/platform.html"){
{{ item.name }}
</el-tag>
<el-link type="danger" v-if="personTypeOptions.length&&pageForm.personTypes.length"
<el-link type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()">清空
</el-link>
@@ -217,7 +126,8 @@ layout("/layouts/platform.html"){
{{ item.name }}
</el-tag>
<el-link type="danger" v-if="userStateOptions.length&&pageForm.userStates.length"
<el-link type="danger"
v-if="userStateOptions.length&&pageForm.userStates.length"
:underline="false"
@click="pageForm.userStates=[];doSearch()">清空
</el-link>
@@ -237,19 +147,23 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="会员列表" :app="this">
<template #func>
<el-button type="primary" v-if="${@shiro.hasRole('sysadmin')}" size="small" icon="el-icon-time"
<el-button type="primary" v-if="${@shiro.hasRole('sysadmin')}" size="small"
icon="el-icon-time"
@click="openArchive"
>备份历史会员
</el-button>
<el-button type="primary" size="small" icon="el-icon-download" @click="exportMember">固定格式导出
<el-button type="primary" size="small" icon="el-icon-download"
@click="exportMember">固定格式导出
</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
@@ -271,7 +185,9 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" fixed="right">
<el-table-column prop="userOnline" align="center" header-align="center"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')||@shiro.hasRole('SchoolUnionMemberAdmin')}"
label="操作" fixed="right">
<template scope="scope">
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
@@ -283,18 +199,13 @@ layout("/layouts/platform.html"){
查看
</el-dropdown-item>
<el-dropdown-item
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
:command="{type:'edit',data:scope.row}">
<el-dropdown-item :command="{type:'edit',data:scope.row}">
编辑
</el-dropdown-item>
<!-- <el-dropdown-item v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" :command="{type:'delete',data:scope.row}">-->
<!-- <el-dropdown-item v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" :command="{type:'delete',data:scope.row}">-->
<!-- 删除-->
<!-- </el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -386,6 +297,7 @@ layout("/layouts/platform.html"){
{prop: 'jobTitle', label: '职称', sortable: true, checked: 0},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'political', label: '政治面貌', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
@@ -409,15 +321,13 @@ layout("/layouts/platform.html"){
);
}
},
isThreeUnit: null,
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'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'),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue?v=' + new Date().getTime())
},
methods: {
checkUserStateType(state) {
@@ -570,8 +480,10 @@ layout("/layouts/platform.html"){
}
})
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -19,7 +19,8 @@ layout("/layouts/platform.html"){
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
@@ -32,11 +33,13 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -44,54 +47,61 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable="true"
filterable="true">
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</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>
<template v-if="isThreeUnit">
<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 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>
</div>
</div>
</template>
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
<dict-select v-model="pageForm.personType" style="width: 100%"
clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
@@ -100,7 +110,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
<dict-select v-model="pageForm.userState" style="width: 100%"
clearable
placeholder="在职状态"
code="UserState"></dict-select>
</div>
@@ -109,15 +120,18 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">会员状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.memberStatus" style="width: 100%" clearable
placeholder="会员状态" code="memberStatusText"></dict-select>
<dict-select v-model="pageForm.memberStatus" style="width: 100%"
clearable
placeholder="会员状态"
code="memberStatusText"></dict-select>
</div>
</div>
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
<more v-model="searchMore"></more>
</div>
@@ -128,13 +142,17 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="会员列表" :app="this">
<template #func>
<el-button icon="el-icon-plus" size="mini" @click="openAdd" type="primary">新增会员</el-button>
<el-button icon="el-icon-plus" size="mini" @click="openAdd" type="primary">
新增会员
</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
<el-table :data="tableData" style="width: 100%" row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
@@ -149,12 +167,14 @@ layout("/layouts/platform.html"){
<template v-if="column.prop=='type'" scope="{row:{type}}">
{{changeType[type]}}
</template>
<template v-else-if="column.prop=='applyOrigin'" scope="{row:{applyOrigin}}">
<template v-else-if="column.prop=='applyOrigin'"
scope="{row:{applyOrigin}}">
{{changeOrigin[applyOrigin]}}
</template>
<template v-else-if="column.prop=='stateId'" scope="{row}">
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
<vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
<vi-table-state v-else
:state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
</template>
<template v-else-if="column.prop==='unitname'" scope="{row}">
{{isDisPlayCode?'('+row.unitcode+')':null}}{{row.unitname}}
@@ -164,7 +184,8 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作"
width="100px">
<template scope="scope">
<el-dropdown @command="dropdownCommand">
@@ -226,7 +247,6 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
active: 'info',
submitLoading: false,
pageForm: {
searchName: "username",
@@ -245,17 +265,15 @@ 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: 'campusName', label: '所属校区', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
],
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'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'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=' + new Date().getTime()),
},
methods: {
openAdd() {
@@ -274,9 +292,9 @@ layout("/layouts/platform.html"){
callback: async (a, b) => {
if ("confirm" == a) {//确认后再执行
const resp = await $.post(loc() + "/delete", {userId});
if(resp.code===0){
if (resp.code === 0) {
this.pageData()
}else{
} else {
this.notifyWarning(resp.msg)
}
}
@@ -332,8 +350,18 @@ 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') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -345,4 +373,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -48,7 +48,7 @@ layout("/layouts/platform.html"){
return {}
},
components: {
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
},
methods: {},
async created() {
@@ -7,7 +7,7 @@ layout("/layouts/platform.html"){
}
.el-icon-close:before {
content: '取消';
content: "取消";
color: #f78989;
}
@@ -27,26 +27,33 @@ layout("/layouts/platform.html"){
<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"
style="width: 100%"
@keyup.enter.native="doSearch">
</el-input>
<el-input
placeholder="请输入内容"
clearable
v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch"
></el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-select
placeholder="所属工会"
v-model="pageForm.unionId"
style="width: 100%"
clearable="true"
@change="flushUnits"
@clear="flushUnits"
filterable="true"
>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
</el-select>
</div>
@@ -55,32 +62,33 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
@change="getThreeUnits"
clearable="true"
filterable="true">
<el-select
placeholder="所属单位"
v-model="pageForm.unitId"
style="width: 100%"
@change="getThreeUnits"
clearable="true"
filterable="true"
>
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
<template v-if="searchMore">
<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
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>
@@ -88,15 +96,8 @@ layout("/layouts/platform.html"){
<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 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>
@@ -105,26 +106,52 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
placeholder="人员类型"
code="UserType"></dict-select>
<dict-select
v-model="pageForm.personType"
style="width: 100%"
clearable
placeholder="人员类型"
code="UserType"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
placeholder="在职状态"
code="UserState"></dict-select>
<dict-select
v-model="pageForm.userState"
style="width: 100%"
clearable
placeholder="在职状态"
code="UserState"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select
v-model="pageForm.userState"
style="width: 100%"
clearable
placeholder="在职状态"
code="UserState"
></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">会员状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.memberStatus" style="width: 100%" clearable
placeholder="会员状态" code="memberStatusText"></dict-select>
<dict-select
v-model="pageForm.memberStatus"
style="width: 100%"
clearable
placeholder="会员状态"
code="memberStatusText"
></dict-select>
</div>
</div>
</template>
@@ -137,19 +164,17 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never" class="mt10">
<div class="search" style="position:relative;">
<div class="search" style="position: relative">
<div class="search-item">
<div class="search-item-label">工号开头:</div>
<div class="search-item-option">
<el-input v-model="pageForm.startLoginNames" maxLength="100"
placeholder="多个请用英文逗号分隔"></el-input>
<el-input v-model="pageForm.startLoginNames" maxLength="100" placeholder="多个请用英文逗号分隔"></el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">工号结尾:</div>
<div class="search-item-option">
<el-input v-model="pageForm.endLoginNames" maxLength="100"
placeholder="多个请用英文逗号分隔"></el-input>
<el-input v-model="pageForm.endLoginNames" maxLength="100" placeholder="多个请用英文逗号分隔"></el-input>
</div>
</div>
@@ -157,21 +182,25 @@ layout("/layouts/platform.html"){
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<el-tag
style="margin-right: 10px;margin-bottom: 10px;cursor: pointer"
v-for="item in personTypeOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)">
style="margin-right: 10px; margin-bottom: 10px; cursor: pointer"
v-for="item in personTypeOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)"
>
{{ item.name }}
</el-tag>
<el-link type="danger" v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()">清空
<el-link
type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()"
>
清空
</el-link>
<el-link :underline="false"
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
type="success">全部
<el-link :underline="false" @click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()" type="success">
全部
</el-link>
</div>
</div>
@@ -180,70 +209,105 @@ layout("/layouts/platform.html"){
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<el-tag
style="margin-right: 10px;margin-bottom: 10px;cursor: pointer"
v-for="item in userStateOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
@click="tagClick('userStates',item.name)">
style="margin-right: 10px; margin-bottom: 10px; cursor: pointer"
v-for="item in userStateOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
@click="tagClick('userStates',item.name)"
>
{{ item.name }}
</el-tag>
<el-link type="danger" v-if="userStateOptions.length&&pageForm.userStates.length"
:underline="false"
@click="pageForm.userStates=[];doSearch()">清空
<el-link
type="danger"
v-if="userStateOptions.length&&pageForm.userStates.length"
:underline="false"
@click="pageForm.userStates=[];doSearch()"
>
清空
</el-link>
<el-link :underline="false"
@click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()"
type="success">全部
<el-link :underline="false" @click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()" type="success">
全部
</el-link>
</div>
</div>
<div class="search-query" style="position:absolute;right: 0;bottom: 0">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<div class="search-item" style="width: calc(100% - 160px)">
<div class="search-item-label">人员性质:</div>
<div class="search-item-option">
<el-tag
style="margin-right: 10px; margin-bottom: 10px; cursor: pointer"
v-for="item in preparedByOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'"
@click="tagClick('preparedBys',item.name)"
>
{{ item.name }}
</el-tag>
<el-link
type="danger"
v-if="preparedByOptions.length&&pageForm.preparedBys.length"
:underline="false"
@click="pageForm.preparedBys=[];doSearch()"
>
清空
</el-link>
<el-link :underline="false" @click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()" type="success">
全部
</el-link>
</div>
</div>
<div class="search-query" style="position: absolute; right: 0; bottom: 0">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="会员列表" :app="this">
<table-tool label="人员列表" :app="this">
<template #func>
<el-button size="mini" @click="setBirthdayByIdCard" type="primary">
根据身份证设置生日
</el-button>
<el-button size="mini" @click="setBirthdayByIdCard" type="primary">根据身份证设置生日</el-button>
<el-tooltip content="温馨提醒:设置会员前,请事先更新基础数据" placement="top">
<el-button size="mini" @click="setMember" type="primary">
设置会员
</el-button>
<el-button size="mini" @click="setMember" type="primary">设置会员</el-button>
</el-tooltip>
<el-tooltip content="温馨提醒:设置福利会员前,请事先更新基础数据" placement="top">
<el-button size="mini" @click="setWelfareMember" type="primary">
设置福利会员
</el-button>
<el-button size="mini" @click="setWelfareMember" type="primary">设置福利会员</el-button>
</el-tooltip>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table
:data="tableData"
style="width: 100%"
row-key="id"
@sort-change="pageOrder"
v-loading="tableLoading"
:size="tableSize"
class="vi-table"
>
<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"
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop=='type'" scope="{row:{type}}">
{{changeType[type]}}
</template>
<template v-if="column.prop=='type'" scope="{row:{type}}">{{changeType[type]}}</template>
<template v-else-if="column.prop==='unitname'" scope="{row}">
{{isDisPlayCode?'('+row.unitcode+')':null}}{{row.unitname}}
</template>
@@ -251,25 +315,28 @@ layout("/layouts/platform.html"){
{{isDisPlayCode?'('+row.unioncode+')':null}}{{row.unionname}}
</template>
<template v-else-if="column.prop==='member'" scope="{row}">
<span v-if="row.member==1" class="text-success ">
<i class="fa fa-circle ml5"></i> 是
<span v-if="row.member==1" class="text-success">
<i class="fa fa-circle ml5"></i>
是
</span>
<span v-else class="text-danger">
<i class="fa fa-circle ml5"></i> 否
<i class="fa fa-circle ml5"></i>
否
</span>
</template>
<template v-else-if="column.prop==='welfareMember'" scope="{row}">
<span v-if="row.welfareMember==1" class="text-success ">
<i class="fa fa-circle ml5"></i> 是
<span v-if="row.welfareMember==1" class="text-success">
<i class="fa fa-circle ml5"></i>
是
</span>
<span v-else class="text-danger">
<i class="fa fa-circle ml5"></i> 否
<i class="fa fa-circle ml5"></i>
否
</span>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="100px">
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="100px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row.id)">查看</el-button>
</template>
@@ -278,7 +345,6 @@ layout("/layouts/platform.html"){
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
@@ -290,16 +356,13 @@ layout("/layouts/platform.html"){
<mem-change-records :userid="userId"></mem-change-records>
</el-tab-pane>
</el-tabs>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
data() {
return {
@@ -307,39 +370,39 @@ layout("/layouts/platform.html"){
pageForm: {
userStates: [],
personTypes: [],
preparedBys: []
},
userId: "",
unions: [],
units: [],
active: 'info',
active: "info",
tableColumns: [
{prop: 'loginname', label: '工号'},
{prop: 'username', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'member', label: '是否会员', sortable: true},
{prop: 'welfareMember', label: '是否福利会员', sortable: true},
{prop: 'mobile', label: '联系电话'},
{prop: 'birthday', label: '生日'},
{prop: 'campusName', label: '所属校区', sortable: true, checked: 0},
{ prop: "loginname", label: "工号" },
{ prop: "username", label: "姓名" },
{ prop: "sex", label: "性别" },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionname", label: "所属工会", sortable: true },
{ prop: "unitname", label: "所属单位", sortable: true },
{ prop: "threeUnitName", label: "所在科室", sortable: true, checked: 0 },
{ prop: "unionGroupName", label: "工会小组", sortable: true, checked: 0 },
{ prop: "member", label: "是否会员", sortable: true },
{ prop: "welfareMember", label: "是否福利会员", sortable: true },
{ prop: "mobile", label: "联系电话" },
{ prop: "birthday", label: "生日" }
// {prop: 'campusName', label: '所属校区', sortable: true},
],
setMemberDialogVisible: false,
personTypeOptions: [],
userStateOptions: [],
isThreeUnit:null,
preparedByOptions: [],
isThreeUnit: false
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'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'),
member: httpVueLoader("/components/member/MemberInfo.vue?v=" + new Date().getTime()),
"mem-change-records": httpVueLoader("/components/member/MemChangeRecords.vue?v=" + new Date().getTime())
},
methods: {
async pageData() {
@@ -348,7 +411,8 @@ layout("/layouts/platform.html"){
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.userStates = JSON.stringify(pageForm.userStates)
const {data, code, msg} = await $.post(loc() + '/pageData', pageForm)
pageForm.preparedBys = JSON.stringify(pageForm.preparedBys)
const { data, code, msg } = await $.post(loc() + "/pageData", pageForm)
this.tableLoading = false
sublime.closeLoadingbar()
if (code === 0) {
@@ -360,10 +424,10 @@ layout("/layouts/platform.html"){
},
setBirthdayByIdCard() {
this.$confirm('确定根据身份证设置生日吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
this.$confirm("确定根据身份证设置生日吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(async () => {
const resp = await $.post(loc() + "/setBirthdayByIdCard")
if (resp.code === 0) {
@@ -376,7 +440,7 @@ layout("/layouts/platform.html"){
},
tagClick(key, val) {
const index = this.pageForm[key].findIndex(v => v === val)
const index = this.pageForm[key].findIndex((v) => v === val)
if (index > -1) {
this.pageForm[key].splice(index, 1)
} else {
@@ -386,30 +450,37 @@ layout("/layouts/platform.html"){
},
async setMember() {
this.$confirm("<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果先清空已有数据,后更新,请选择<span style='color: red'>更新</span>" +
"<span style='font-weight: bolder'>(这将清空目前所有的会员,请谨慎操作!)</span>" +
"<br/>" +
this.$confirm(
"<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果追加或更新数据,请选择<span style='color: red'>追加</span>", '提示', {
confirmButtonText: '更新',
cancelButtonText: '追加',
dangerouslyUseHTMLString: true,
distinguishCancelAndClose: true,
cancelButtonClass: 'btnCancel',
type: 'warning'
}).then(async () => {
await this.setMemberDo(true)
}).catch(async action => {
if (action === 'cancel') {
await this.setMemberDo(false)
"如果先清空已有数据,后更新,请选择<span style='color: red'>更新</span>" +
"<span style='font-weight: bolder'>(这将清空目前所有的会员,请谨慎操作!)</span>" +
"<br/>" +
"<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果追加或更新数据,请选择<span style='color: red'>追加</span>",
"提示",
{
confirmButtonText: "更新",
cancelButtonText: "追加",
dangerouslyUseHTMLString: true,
distinguishCancelAndClose: true,
cancelButtonClass: "btnCancel",
type: "warning"
}
})
)
.then(async () => {
await this.setMemberDo(true)
})
.catch(async (action) => {
if (action === "cancel") {
await this.setMemberDo(false)
}
})
},
async setMemberDo(confirm) {
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.preparedBys = JSON.stringify(pageForm.preparedBys)
pageForm.confirm = confirm
const resp = await $.post(loc() + "/setMemberByCnd", pageForm)
if (resp.code === 0) {
@@ -420,25 +491,31 @@ layout("/layouts/platform.html"){
}
},
setWelfareMember() {
this.$confirm("<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果先清空已有数据,后更新,请选择<span style='color: red'>更新</span>" +
"<span style='font-weight: bolder'>(这将清空目前所有的福利会员,请谨慎操作!)</span>" +
"<br/>" +
this.$confirm(
"<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果追加或更新数据,请选择<span style='color: red'>追加</span>", '提示', {
confirmButtonText: '更新',
cancelButtonText: '追加',
dangerouslyUseHTMLString: true,
distinguishCancelAndClose: true,
cancelButtonClass: 'btnCancel',
type: 'warning'
}).then(async () => {
await this.setWelfareMemberDo(true)
}).catch(async action => {
if (action === 'cancel') {
await this.setWelfareMemberDo(false)
"如果先清空已有数据,后更新,请选择<span style='color: red'>更新</span>" +
"<span style='font-weight: bolder'>(这将清空目前所有的福利会员,请谨慎操作!)</span>" +
"<br/>" +
"<i class='el-icon-s-help' style='margin-right: 6px;'></i>" +
"如果追加或更新数据,请选择<span style='color: red'>追加</span>",
"提示",
{
confirmButtonText: "更新",
cancelButtonText: "追加",
dangerouslyUseHTMLString: true,
distinguishCancelAndClose: true,
cancelButtonClass: "btnCancel",
type: "warning"
}
})
)
.then(async () => {
await this.setWelfareMemberDo(true)
})
.catch(async (action) => {
if (action === "cancel") {
await this.setWelfareMemberDo(false)
}
})
},
async setWelfareMemberDo(confirm) {
const pageForm = clone(this.pageForm)
@@ -454,7 +531,7 @@ layout("/layouts/platform.html"){
}
},
openView(userId) {
this.active = 'info'
this.active = "info"
this.userId = userId
this.$refs.guava.view()
},
@@ -469,26 +546,27 @@ layout("/layouts/platform.html"){
this.units = await getUnits(this.pageForm.unionId)
this.unionGroups = await unionGroupsByUnionId(this.pageForm.unionId)
}
},
}
},
async created() {
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
this.isThreeUnit = (await getConfigKey("isThreeUnit")) === "true"
if (this.isThreeUnit) {
this.tableColumns.forEach(v => {
this.tableColumns.forEach((v) => {
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
v.checked = 1
}
})
}
this.pageData();
this.pageData()
this.personTypeOptions = await getDictOptions("UserType")
this.userStateOptions = await getDictOptions("UserState")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.preparedByOptions = await getDictOptions("PREPARED_BY")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === "true") {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
this.$set(this.pageForm, "unionId", this.unions ? this.unions[0].id : null)
this.flushUnits()
}
}
@@ -149,7 +149,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue')
},
data() {
return {
@@ -126,7 +126,7 @@ layout("/layouts/platform.html"){
<div class="idx" v-else>{{$index+1}}</div>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="院级工会" prop="unioncode"
<el-table-column align="center" header-align="center" label="分工会" prop="unioncode"
show-overflow-tooltip sortable>
<template scope="{row}">
{{row.unionname}} {{isDisPlayCode?'('+row.unioncode+')':null}}
@@ -341,16 +341,32 @@ layout("/layouts/platform.html"){
return
}
chart.unionMemberChart = new G2Plot.TinyArea('unionMemberChart', {
chart.unionMemberChart = new G2Plot.Column('unionMemberChart', {
data:chartData,
autoFit: true,
data: values,
smooth: true,
tooltip: {
customContent: function (i, data) {
if (labels[i]) {
return labels[i] + '- ' + data[0]?.data?.y + '人';
}
return ''
xField: 'unionname',
yField: 'value',
label: {
// 可手动配置 label 数据标签位置
position: 'middle', // 'top', 'bottom', 'middle',
// 配置样式
style: {
fill: '#FFFFFF',
opacity: 0.6,
},
},
xAxis: {
label: {
autoHide: true,
autoRotate: false,
},
},
meta: {
label: {
alias: '类型',
},
value: {
alias: '会员数',
},
},
})
@@ -478,4 +494,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -33,11 +33,13 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -45,17 +47,18 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
<el-select placeholder="所属单位" v-model="pageForm.unitId"
style="width: 100%;"
@change="getThreeUnits"
clearable="true"
filterable="true">
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<template v-if="searchMore">
<template v-if="isThreeUnit">
<div class="search-item">
<div class="search-item-label">工会小组:</div>
@@ -78,7 +81,8 @@ layout("/layouts/platform.html"){
<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
<el-select v-model="pageForm.threeUnitId" style="width: 100%"
filterable
clearable
placeholder="请选择">
<el-option
@@ -95,10 +99,12 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">职工信息:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
<el-input placeholder="请输入内容" clearable
v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
@@ -110,7 +116,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
<dict-select v-model="pageForm.personType" style="width: 100%"
clearable
placeholder="人员类型"
code="UserType"></dict-select>
</div>
@@ -119,7 +126,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
<dict-select v-model="pageForm.userState" style="width: 100%"
clearable
placeholder="在职状态"
code="UserState"></dict-select>
</div>
@@ -128,7 +136,8 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">会员状态:</div>
<div class="search-item-option">
<el-select placeholder="会员状态" v-model="pageForm.memberStatus" style="width: 100%"
<el-select placeholder="会员状态" v-model="pageForm.memberStatus"
style="width: 100%"
clearable="true"
filterable="true">
<el-option v-for="item in memberStatusList" :label="item.name"
@@ -142,7 +151,8 @@ layout("/layouts/platform.html"){
</template>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
<more v-model="searchMore"></more>
</div>
@@ -152,10 +162,21 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="用户列表" :app="this">
<template #func>
<el-button icon="el-icon-printer" class="m10" type="primary"
style="float: right"
size="medium" @click="doExportByUnion">按分工会导出
</el-button>
<el-button icon="el-icon-printer" class="m10" type="primary"
style="float: right"
size="medium" @click="doExport">导出
</el-button>
</template>
</table-tool>
<el-table :data="tableData">
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
@@ -202,6 +223,16 @@ layout("/layouts/platform.html"){
pageForm: {
searchName: "u.username",
year: new Date().getFullYear() - 1 + "",
searchKeyword: '',
unionId: '',
unitId: '',
threeUnitId: '',
unionGroupId: '',
personType: '',
userState: '',
memberStatus: '',
memberSearchName: '',
memberSearchKeyWord: ''
},
unions: [],
units: [],
@@ -217,20 +248,43 @@ layout("/layouts/platform.html"){
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
],
userId:null,
active:'info',
isThreeUnit:null,
userId: null,
active: 'info',
isThreeUnit: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue'),
'member': httpVueLoader('/components/member/MemberInfo.vue?v=' + new Date().getTime()),
'member-cnd': httpVueLoader('/components/member/MemberCnd.vue?v=' + new Date().getTime()),
},
methods: {
openView(row){
this.userId = row.userId
doExportByUnion() {
window.open(loc() + '/doExportByUnion?year=' + this.pageForm.year)
},
doExport() {
const {
year,
unionId,
unitId,
threeUnitId,
unionGroupId,
personType,
userState,
memberStatus,
memberSearchName,
memberSearchKeyWord,
searchName,
searchKeyword
} = this.pageForm
window.open(loc() + '/doExport?year=' + year + '&unionId=' + unionId + '&unitId=' + unitId + '&threeUnitId=' + threeUnitId +
'&unionGroupId=' + unionGroupId + '&personType=' + personType + '&userState=' + userState + '&memberStatus=' + memberStatus +
'&memberSearchName=' + memberSearchName + '&memberSearchKeyWord=' + memberSearchKeyWord + '&searchName=' + searchName +
'&searchKeyword=' + searchKeyword)
},
openView(row) {
console.log(row)
console.log(row.selfUserId)
this.userId = row.selfUserId
this.$refs.guava.view()
},
async flushUnits() {
@@ -249,6 +303,7 @@ 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
@@ -256,8 +311,9 @@ layout("/layouts/platform.html"){
})
}
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.unions = await getUnions(null, false)
} else {
this.unions = await getUnions(null, true)
@@ -272,4 +328,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
File diff suppressed because it is too large Load Diff
@@ -201,7 +201,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue')
},
data() {
return {
@@ -9,7 +9,7 @@ layout("/layouts/platform.html"){
<div class="search">
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}">
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
<div class="search-item-label">分工会:</div>
<div class="search-item-option">
<el-select placeholder="分工会" v-model="pageForm.unionId" style="width: 100%;"
@@ -54,7 +54,7 @@ layout("/layouts/platform.html"){
width="80px"></el-table-column>
<el-table-column
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')} && searchType==='按分工会统计'"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')} && searchType==='按分工会统计'"
prop="unionName" label="工会">
<template slot-scope="{row}">
{{isDisPlayCode?'('+row.unionCode+')':null}}{{row.unionName}}
@@ -67,7 +67,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')} && searchType==='按单位统计'"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')} && searchType==='按单位统计'"
prop="unionName" label="所属分工会">
<template slot-scope="{row}">
{{isDisPlayCode?'('+row.unionCode+')':null}}{{row.unionName}}
@@ -109,9 +109,6 @@ layout("/layouts/platform.html"){
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue')
},
data() {
return {
userTypeNames: [],
@@ -173,7 +170,7 @@ layout("/layouts/platform.html"){
await this.getUserTypes()
this.getData()
this.unions = await getUnions(null)
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
this.units = await getUnits(null)
} else {
this.units = await getUnionUnits()
@@ -19,13 +19,14 @@ const appModule = {
`,
data() {
return {
id: ""
id: "",
entranceModules: []
}
},
computed: {
entranceModules() {
return JSON.parse(window.sessionStorage.getItem("moduleMenus"))
}
// entranceModules() {
// return JSON.parse(window.sessionStorage.getItem("moduleMenus"))
// }
},
methods: {
enterEntranceModules(item) {
@@ -37,7 +38,8 @@ const appModule = {
created() {
setTimeout(() => {
// this.id = headerApp.appModuleId
this.enterEntranceModules({ id: headerApp.appModuleId })
// this.enterEntranceModules({ id: headerApp.appModuleId })
this.entranceModules = JSON.parse(window.sessionStorage.getItem("moduleMenus"))
}, 500)
}
}
@@ -1,20 +1,18 @@
const todo = {
template: `
template: /*language=HTML*/ `
<div class="home-todo">
<el-tabs v-model="todoActive " @tab-click="handleClick">
<el-tab-pane label="待处理" name="1">
<el-table :data="todoList" v-loading="todoLoading">
<el-table-column label="序号" type="index" width="70"></el-table-column>
<el-table-column label="标题" prop="processName" show-overflow-tooltip
width="200"></el-table-column>
<el-table size="mini" :data="todoList" v-loading="todoLoading">
<el-table-column label="标题" prop="processName" show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="createdByUserName"
width="140"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="发起时间" prop="createdOn" v-if="todoActive==='3'"
width="150"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="我的处理环节" prop="taskNodeName"
v-if="todoActive!=='3'"></el-table-column>
<el-table-column label="流程流转环节" prop="nodeName"></el-table-column>
<el-table-column label="操作" width="100">
<el-table-column label="操作">
<template scope="{row}">
<el-button @click="sublime.jumpPagePjax(row.formUrl)" size="mini" type="primary">查看</el-button>
</template>
@@ -22,18 +20,17 @@ const todo = {
</el-table>
</el-tab-pane>
<el-tab-pane label="已处理" name="2">
<el-table :data="todoList" v-loading="todoLoading">
<el-table-column label="序号" type="index" width="70"></el-table-column>
<el-table size="mini" :data="todoList" v-loading="todoLoading">
<el-table-column label="标题" prop="processName" show-overflow-tooltip
width="200"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="createdByUserName"
width="140"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="发起时间" prop="createdOn" v-if="todoActive==='3'"
width="150"></el-table-column>
show-overflow-tooltip ></el-table-column>
<el-table-column label="我的处理环节" prop="taskNodeName"
v-if="todoActive!=='3'"></el-table-column>
<el-table-column label="流程流转环节" prop="nodeName"></el-table-column>
<el-table-column label="操作" width="100">
<el-table-column label="操作">
<template scope="{row}">
<el-button @click="sublime.jumpPagePjax(row.formUrl)" size="mini" type="primary">查看</el-button>
</template>
@@ -41,18 +38,17 @@ const todo = {
</el-table>
</el-tab-pane>
<el-tab-pane label="我的发起" name="3">
<el-table :data="todoList" v-loading="todoLoading">
<el-table-column label="序号" type="index" width="70"></el-table-column>
<el-table size="mini" :data="todoList" v-loading="todoLoading">
<el-table-column label="标题" prop="processName" show-overflow-tooltip
width="200"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="createdByUserName"
width="140"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="发起时间" prop="createdOn" v-if="todoActive==='3'"
width="150"></el-table-column>
show-overflow-tooltip></el-table-column>
<el-table-column label="我的处理环节" prop="taskNodeName"
v-if="todoActive!=='3'"></el-table-column>
<el-table-column label="流程流转环节" prop="nodeName"></el-table-column>
<el-table-column label="操作" width="100">
<el-table-column label="操作">
<template scope="{row}">
<el-button @click="sublime.jumpPagePjax(row.formUrl)" size="mini" type="primary">查看</el-button>
</template>
@@ -83,13 +79,13 @@ const todo = {
data() {
return {
todoActive: "1",
todoList:[]
todoList: []
}
},
methods: {
async handleClick() {
this.todoLoading = true
const {data, code} = await $.get("/platform/sys/localProcess/todoList", { mode: this.todoActive })
const { data, code } = await $.get("/platform/sys/localProcess/todoList", { mode: this.todoActive })
this.todoList = data
this.todoLoading = false
}
File diff suppressed because it is too large Load Diff
@@ -9,24 +9,24 @@ layout("/layouts/platform.html"){
<div class="search-item-label">任务:</div>
<div class="search-item-option">
<el-select v-model="pageForm.taskId" style="width: 100%">
<el-option v-for="item in memberCheckTaskOptions"
:label="item.taskName"
:value="item.id"></el-option>
<el-option v-for="item in memberCheckTaskOptions" :label="item.taskName" :value="item.id"></el-option>
</el-select>
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}">
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
<el-select
placeholder="所属工会"
v-model="pageForm.unionId"
style="width: 100%"
clearable="true"
@change="flushUnits"
@clear="flushUnits"
filterable="true"
>
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
</el-select>
</div>
</div>
@@ -45,7 +45,6 @@ layout("/layouts/platform.html"){
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</el-card>
@@ -56,52 +55,46 @@ layout("/layouts/platform.html"){
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
show-summary
:summary-method="getSummaries"
@expand-change="tableColumnExpandChange"
v-loading="tableLoading" :size="tableSize" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table
:data="tableData"
style="width: 100%"
row-key="id"
@sort-change="pageOrder"
show-summary
:summary-method="getSummaries"
@expand-change="tableColumnExpandChange"
v-loading="tableLoading"
:size="tableSize"
class="vi-table"
>
<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"
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop=='isFinish'" scope="{row}">
<span :class="row.isFinish?'text-success':'text-danger'">
{{row.isFinishText}}
</span>
<span :class="row.isFinish?'text-success':'text-danger'">{{row.isFinishText}}</span>
</template>
<template v-else-if="column.prop=='unionGroup'" scope="{row}">
<el-link type="primary" @click="openGroupUnionDrawer(row)">
{{row.unionGroupNum}}(
{{row.shiUnionGroupNum}})
</el-link>
<el-link type="primary" @click="openGroupUnionDrawer(row)">{{row.unionGroupNum}}( {{row.shiUnionGroupNum}})</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="操作" width="200px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openCheck(row)"
:disabled="!row.isFinish">
核对
</el-button>
<el-button size="mini" type="primary" @click="openCheck(row)" :disabled="!row.isFinish">核对</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<template #edit>
<el-tabs v-model="active">
<el-tab-pane label="个人信息" name="info">
<member ref="memberInfo" :id="info.userId" view></member>
@@ -112,9 +105,7 @@ layout("/layouts/platform.html"){
</el-tab-pane>
<el-tab-pane label="工会审核" name="union">
<el-form :model="formData" ref="form" :rules="formRules"
label-width="120px" label-suffix=":">
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px" label-suffix=":">
<vi-title title="审核信息"></vi-title>
<template v-if="!info.unionAudit&&source==1">
@@ -122,27 +113,23 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原单位">
<el-input :value="info.originUnit.name"
disabled></el-input>
<el-input :value="info.originUnit.name" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原工会">
<el-input :value="info.originUnion.unionname"
disabled></el-input>
<el-input :value="info.originUnion.unionname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新单位">
<el-input :value="info.currentUnit.name"
disabled></el-input>
<el-input :value="info.currentUnit.name" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新工会">
<el-input :value="info.currentUnion.unionname"
disabled></el-input>
<el-input :value="info.currentUnion.unionname" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -151,8 +138,7 @@ layout("/layouts/platform.html"){
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
<el-input v-model="formData.username" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -163,19 +149,18 @@ layout("/layouts/platform.html"){
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
<el-input
type="textarea"
v-model="formData.auditOpinion"
rows="4"
maxlength="500"
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 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>
@@ -199,59 +184,48 @@ layout("/layouts/platform.html"){
</el-row>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
<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=":">
<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">
<template v-if="info.type==1||info.currentUnitId">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原单位">
<el-input :value="info.originUnit.name"
disabled></el-input>
<el-input :value="info.originUnit.name" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原工会">
<el-input :value="info.originUnion.unionname"
disabled></el-input>
<el-input :value="info.originUnion.unionname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新单位">
<!-- <el-input :value="info.currentUnit.name"></el-input>-->
<el-select v-model="info.currentUnitId"
style="width: 100%" filterable
clearable
@change="unitChange"
placeholder="请选择单位">
<el-option
v-for="item in unitOptions"
:label="item.name"
:value="item.id">
</el-option>
<el-select
v-model="info.currentUnitId"
style="width: 100%"
filterable
clearable
@change="unitChange"
placeholder="请选择单位"
>
<el-option v-for="item in unitOptions" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="新工会">
<el-input v-model="info.currentUnionName"
disabled></el-input>
<el-input v-model="info.currentUnionName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -260,8 +234,7 @@ layout("/layouts/platform.html"){
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
<el-input v-model="formData.username" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -272,19 +245,18 @@ layout("/layouts/platform.html"){
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
<el-input
type="textarea"
v-model="formData.auditOpinion"
rows="4"
maxlength="500"
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 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>
@@ -308,30 +280,22 @@ layout("/layouts/platform.html"){
</el-row>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
<el-form-item label="暂无审核信息"></el-form-item>
</el-row>
</template>
</el-form>
</el-tab-pane>
</el-tabs>
</template>
</guava>
<el-drawer
title="分工会核对情况"
:visible.sync="groupUnionDrawer"
direction="rtl" :size="'50%'">
<el-drawer title="分工会核对情况" :visible.sync="groupUnionDrawer" direction="rtl" :size="'50%'">
<el-table :data="unionGroupData">
<el-table-column prop="groupCode" label="小组编号"></el-table-column>
<el-table-column prop="groupName" label="小组名称"></el-table-column>
<el-table-column prop="username" label="联系人">
<template scope="{row}">
<sapn v-if="row.username">
{{row.username}}({{row.loginname}})
</sapn>
<sapn v-if="row.username">{{row.username}}({{row.loginname}})</sapn>
</template>
</el-table-column>
<el-table-column prop="mobile" label="联系方式"></el-table-column>
@@ -347,9 +311,7 @@ layout("/layouts/platform.html"){
<el-dialog title="异动详情" width="40%" :visible.sync="changeInfoDialog">
<div class="mb10">
<el-tag v-for="item in changeInfoTypes">
{{item}}
</el-tag>
<el-tag v-for="item in changeInfoTypes">{{item}}</el-tag>
</div>
<el-table :data="changeInfoData" border>
<el-table-column prop="columnName" label="字段"></el-table-column>
@@ -359,10 +321,7 @@ layout("/layouts/platform.html"){
</el-dialog>
<user-change-history ref="userChangeHistory">
<el-form class="demo-table-expand" :model="formData" ref="form"
:rules="formRules"
label-width="120px" label-suffix=":">
<el-form class="demo-table-expand" :model="formData" ref="form" :rules="formRules" label-width="120px" label-suffix=":">
<div class="el-descriptions__header mt10">
<div class="el-descriptions__title">校工会审核</div>
<div class="el-descriptions__extra"></div>
@@ -371,8 +330,7 @@ layout("/layouts/platform.html"){
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
<el-input v-model="formData.username" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -383,90 +341,72 @@ layout("/layouts/platform.html"){
</el-row>
<el-form-item prop="opinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500" placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<el-row type="flex" justify="end">
<el-button @click="doAudit(false)" :loading="submitLoading">拒
绝
</el-button>
<el-button type="primary" @click="doAudit(true)"
:loading="submitLoading">通
过
</el-button>
<el-button @click="doAudit(false)" :loading="submitLoading">拒 绝</el-button>
<el-button type="primary" @click="doAudit(true)" :loading="submitLoading">通 过</el-button>
</el-row>
</el-form>
</user-change-history>
<el-dialog title="异动人员确认" width="60%" :visible.sync="confirmDialog">
<el-table :data="changeUsers">
<el-table-column label="序号" type="index"
header-align="center"></el-table-column>
<el-table-column label="姓名" prop="userName"
header-align="center"></el-table-column>
<el-table-column label="工号" prop="loginName"
header-align="center"></el-table-column>
<el-table-column label="在职状态" prop="userState"
header-align="center"></el-table-column>
<el-table-column label="所属单位" prop="unitname"
header-align="center">
<template scope="{row}">
{{row.unitname}}
</template>
<el-table-column label="序号" type="index" header-align="center"></el-table-column>
<el-table-column label="姓名" prop="userName" header-align="center"></el-table-column>
<el-table-column label="工号" prop="loginName" header-align="center"></el-table-column>
<el-table-column label="在职状态" prop="userState" header-align="center"></el-table-column>
<el-table-column label="所属单位" prop="unitname" header-align="center">
<template scope="{row}">{{row.unitname}}</template>
</el-table-column>
<el-table-column label="异动信息" header-align="center">
<el-table-column label="更新时间" prop="changeTime" min-width="145px"
header-align="center"
sortable
align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
align="center" show-overflow-tooltip sortable>
<el-table-column
label="更新时间"
prop="changeTime"
min-width="145px"
header-align="center"
sortable
align="center"
show-overflow-tooltip
></el-table-column>
<el-table-column label="异动类型" prop="changeTypes" header-align="center" align="center" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer"
@click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
<span style="color: #0e78c5; cursor: pointer" @click="openUserChangeInfo(row)">{{getChangeTypes(row.changeTypes)}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="会员" header-align="center" align="center"
prop="member"
show-overflow-tooltip sortable>
<el-table-column label="会员" header-align="center" align="center" prop="member" show-overflow-tooltip sortable>
<template scope="{row}">
<span v-if="row.member==1" class="text-success ">
<i class="fa fa-circle ml5"></i> 是
</span>
<span v-if="row.member==1" class="text-success">
<i class="fa fa-circle ml5"></i>
是
</span>
<span v-else class="text-danger">
<i class="fa fa-circle ml5"></i> 否
</span>
<i class="fa fa-circle ml5"></i>
否
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="100px" header-align="center">
<template scope="{row}">
<el-button size="mini" type="primary"
@click="openAudit(row)">
审核
</el-button>
<el-button size="mini" type="primary" @click="openAudit(row)">审核</el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
components: {
'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'),
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")
},
data() {
return {
@@ -475,18 +415,18 @@ layout("/layouts/platform.html"){
unions: [],
units: [],
tableColumns: [
{prop: 'unionname', label: '分工会名称', sortable: true},
{prop: 'memberNum', label: '会员人数', sortable: true},
{prop: 'isFinish', label: '分工会是否核对完成', sortable: true},
{prop: 'notCheckNum', label: '异动人数', sortable: true},
{ prop: "unionname", label: "分工会名称", sortable: true },
{ prop: "memberNum", label: "会员人数", sortable: true },
{ prop: "isFinish", label: "分工会是否核对完成", sortable: true },
{ prop: "notCheckNum", label: "异动人数", sortable: true }
],
pageForm: {
year: new Date().getFullYear() + ''
year: new Date().getFullYear() + ""
},
memberCheckTaskOptions: [],
changeType: {},
userId: null,
active: 'school',
active: "school",
info: {},
source: 2,
formData: {},
@@ -502,31 +442,31 @@ layout("/layouts/platform.html"){
}
},
methods: {
async openUserChangeInfo({hisId}) {
async openUserChangeInfo({ hisId }) {
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
},
async openCheck(row) {
const taskId = this.pageForm.taskId
const unionId = row.id
this.currentUnionId = row.id
const resp = await $.post(loc() + '/getNotCheckUsers', {taskId, unionId})
const resp = await $.post(loc() + "/getNotCheckUsers", { taskId, unionId })
if (resp.code === 0) {
this.confirmDialog = true
this.changeUsers = resp.data
}
},
openAudit({hisId, id}) {
openAudit({ hisId, id }) {
debugger
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
this.$refs.userChangeHistory.slot = true
if (this.$refs['form']) {
this.$refs['form'].resetFields()
if (this.$refs["form"]) {
this.$refs["form"].resetFields()
}
this.formData = {
recordId: id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
auditTime: moment().format("YYYY-MM-DD")
}
},
async doAudit(pass) {
@@ -537,7 +477,7 @@ layout("/layouts/platform.html"){
if (resp.code === 0) {
this.$message.success(resp.msg)
this.$refs.userChangeHistory.changeInfoDialog = false
this.openCheck({id: this.currentUnionId})
this.openCheck({ id: this.currentUnionId })
this.pageData()
} else {
this.$message.warning(resp.msg)
@@ -547,24 +487,26 @@ layout("/layouts/platform.html"){
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return c.map(v => {
return this.changeType[v]
}).join(',')
return c
.map((v) => {
return this.changeType[v]
})
.join(",")
}
return null
},
exportChangeUser() {
const {taskId} = this.pageForm
const { taskId } = this.pageForm
if (!taskId) {
this.notifyWarning('请先选择核对任务')
this.notifyWarning("请先选择核对任务")
return
}
window.open(loc() + '/exportChangeUser?taskId=' + taskId)
window.open(loc() + "/exportChangeUser?taskId=" + taskId)
},
async openGroupUnionDrawer(row) {
const {data} = await $.post(loc() + "/unionGroupData", {
const { data } = await $.post(loc() + "/unionGroupData", {
unionId: row.id,
taskId: this.pageForm.taskId
})
@@ -573,47 +515,47 @@ layout("/layouts/platform.html"){
},
getSummaries(param) {
const {columns, data} = param;
const sums = [];
const { columns, data } = param
const sums = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '总计';
return;
sums[index] = "总计"
return
} else if (index === 5) {
sums[index] = '';
return;
sums[index] = ""
return
} else if (index === 3) {
sums[index] = '';
return;
sums[index] = ""
return
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
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);
const value = Number(curr)
if (!isNaN(value)) {
return prev + curr;
return prev + curr
} else {
return prev;
return prev
}
}, 0);
sums[index] += ' ';
}, 0)
sums[index] += " "
} else {
sums[index] = '';
sums[index] = ""
}
});
})
return sums;
return sums
},
async getMemberCheckTaskOptions() {
const resp = await $.get('/platform/welfareMember/check/task/getAllTask', {year: this.pageForm.year})
const resp = await $.get("/platform/welfareMember/check/task/getAllTask", { year: this.pageForm.year })
this.memberCheckTaskOptions = resp.data
if (this.memberCheckTaskOptions.length) {
this.$set(this.pageForm, 'taskId', this.memberCheckTaskOptions[0].id)
this.$set(this.pageForm, "taskId", this.memberCheckTaskOptions[0].id)
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === "true") {
this.units = await getUnits(this.pageForm.unionId)
} else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
@@ -622,14 +564,14 @@ layout("/layouts/platform.html"){
async getChangeType() {
const changeType = {}
const changeTypeOptions = await getEnumOptions("UserChangeType")
changeTypeOptions.forEach(v => {
changeTypeOptions.forEach((v) => {
changeType[v.code] = v.description
})
return changeType
},
async pageData() {
sublime.showLoadingbar()
const resp = await $.post(loc() + '/pageData', this.pageForm)
const resp = await $.post(loc() + "/pageData", this.pageForm)
sublime.closeLoadingbar()
if (resp.code === 0) {
this.tableData = resp.data
@@ -639,11 +581,11 @@ layout("/layouts/platform.html"){
},
async tableColumnExpandChange(row, expandedRows) {
if (expandedRows.length) {
const {taskId} = this.pageForm
const {id: unionId} = row
const resp = await $.post(loc() + '/getNotCheckUsers', {taskId, unionId})
const { taskId } = this.pageForm
const { id: unionId } = row
const resp = await $.post(loc() + "/getNotCheckUsers", { taskId, unionId })
if (resp.code === 0) {
this.$set(row, 'checkUsers', resp.data)
this.$set(row, "checkUsers", resp.data)
}
}
},
@@ -674,39 +616,37 @@ layout("/layouts/platform.html"){
// this.notifyWarning(resp.msg)
// }
// },
// async doAudit(pass) {
// this.formData.currentUnitId = this.info.currentUnitId
// this.formData.currentUnionId = this.info.currentUnionId
// this.formData.currentThreeUnitId = this.info.currentThreeUnitId
// this.formData.auditPass = pass
// this.submitLoading = true
// const resp = await $.post("/platform/member/change/audit/doAudit", this.formData)
// this.submitLoading = false
// if (resp.code === 0) {
// //更新用户信息
// this.info.userId = null
// this.pageData()
// this.$refs.guava.index()
// } else {
// this.notifyWarning(resp.msg)
// }
// },
// async doAudit(pass) {
// this.formData.currentUnitId = this.info.currentUnitId
// this.formData.currentUnionId = this.info.currentUnionId
// this.formData.currentThreeUnitId = this.info.currentThreeUnitId
// this.formData.auditPass = pass
// this.submitLoading = true
// const resp = await $.post("/platform/member/change/audit/doAudit", this.formData)
// this.submitLoading = false
// if (resp.code === 0) {
// //更新用户信息
// this.info.userId = null
// this.pageData()
// this.$refs.guava.index()
// } else {
// this.notifyWarning(resp.msg)
// }
// },
async unitChange(v) {
const unit = this.unitOptions.find(x => x.id === v)
const unit = this.unitOptions.find((x) => x.id === v)
if (unit) {
this.info.currentUnionId = unit.unionid
this.info.currentUnionName = unit.unionname
} else {
this.info.currentUnionId = ''
this.info.currentUnionName = ''
this.info.currentUnionId = ""
this.info.currentUnionName = ""
}
if (!v) {
this.info.currentThreeUnitId = ''
this.info.currentThreeUnitId = ""
}
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(this.info.currentUnitId, null)
},
}
},
async created() {
await this.getMemberCheckTaskOptions()
File diff suppressed because it is too large Load Diff
@@ -130,7 +130,6 @@ layout("/layouts/platform.html"){
controls-position="right"
:controls="false"
precision="2"
readonly
placeholder="选择慰问类型自动匹配金额"
:min="0"
:max="1000000000"></el-input>
@@ -2,157 +2,379 @@
layout("/layouts/platform.html"){
#-->
<style>
.el-divider--horizontal {
margin-top: 50px;
margin-bottom: 40px;
}
</style>
<style></style>
<div id="app" v-cloak>
<guava>
<apply :form="formData" @radio="radioButton" ref="addFrom">
<template #footer>
<div style="float: right;margin: 20px 0">
<el-button @click="operation(false)" type="primary">保 存</el-button>
<el-button @click="operation(true)" type="primary">确 定</el-button>
</div>
</template>
</apply>
<el-card shadow="never">
<div class="clearfix" slot="header">
<h3 style="color: #1867b0">填写申请信息</h3>
</div>
<el-form :model="formData" :rules="formRules" label-width="140px" ref="formRef">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="申请人姓名" prop="proxyUserName">
<el-input disabled v-model="formData.proxyUserName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请人工号" prop="proxyLoginName">
<el-input disabled v-model="formData.proxyLoginName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请模式" prop="mode">
<el-radio-group :disabled="formData.id" @change="modeChange" style="width: 100%" v-model="formData.mode">
<el-radio-button border label="1">本人申请</el-radio-button>
<el-radio-button border label="2">替他人申请</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="受补助人" prop="userId">
<el-select
:remote-method="querySqr"
@change="userChange"
clearable
filterable
placeholder="输入工号或者姓名查找"
remote
style="width: 100%"
v-if="!formData.id"
v-model="formData.userId"
>
<el-option :key="o.id" :label="o.username+'('+o.loginname+')'" :value="o.id" v-for="o in subsidizedList"></el-option>
</el-select>
<el-input disabled maxlength="100" type="text" v-else v-model="formData.userName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-select clearable placeholder="请选择性别" style="width: 100%" v-model="formData.sex">
<el-option :key="item" :label="item" :value="item" v-for="item in ['男','女']"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在单位" prop="unitName">
<el-input clearable maxlength="50" placeholder="所在单位" v-model="formData.unitName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在分工会" prop="unionName">
<el-input clearable maxlength="50" placeholder="所在分工会" v-model="formData.unionName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本人月收入" prop="monthlyIncome">
<el-input-number
:max="9999999"
:min="0"
clearable
controls-position="right"
placeholder="请填写本人月收入"
style="width: 100%"
v-model="formData.monthlyIncome"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生年月" prop="birthday">
<el-date-picker
clearable
placeholder="选择出生年月"
style="width: 100%"
type="date"
v-model="formData.birthday"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="手机号码" prop="mobile">
<el-input clearable maxlength="20" placeholder="请填写手机号码" v-model="formData.mobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="家庭地址" prop="homeAddress">
<el-input clearable maxlength="200" placeholder="请填写家庭地址" v-model="formData.homeAddress"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="款项" prop="subsidyStandards">
<el-select style="width: 100%" v-model="formData.subsidyStandards">
<el-option :key="index" :label="item" :value="item" v-for="(item,index) in subsidyStandards"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="申请原因" prop="reason">
<el-input
:autosize="{ minRows: 5, maxRows: 10}"
clearable
maxlength="500"
placeholder="请简述申请原因"
type="textarea"
v-model="formData.reason"
></el-input>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input
:autosize="{ minRows: 5, maxRows: 10}"
clearable
maxlength="500"
placeholder="请简述备注"
type="textarea"
v-model="formData.remarks"
></el-input>
</el-form-item>
<el-form-item label="家庭成员经济收入" prop="familyList">
<el-table :data="formData.familyList" border max-height="500" size="mini" style="width: 100%">
<el-table-column align="center" label="序号" type="index" width="50"></el-table-column>
<el-table-column label="姓名" prop="name">
<template slot-scope="{row,$index}">
<el-form-item
:prop="'familyList.'+$index+'.name'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
label-width="0"
>
<el-input clearable placeholder="请输入姓名" v-model="row.name"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="年龄(岁)" prop="relation">
<template slot-scope="{row,$index}">
<el-form-item
:prop="'familyList.'+$index+'.age'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
label-width="0"
>
<el-input-number
:max="100"
:min="1"
:step="1"
clearable
placeholder="请输入年龄"
v-model="row.age"
></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="关系" prop="relation">
<template slot-scope="{row,$index}">
<el-form-item
:prop="'familyList.'+$index+'.relation'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
label-width="0"
>
<el-input clearable placeholder="请输入关系" v-model="row.relation"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="月收入(元)" prop="monthlyIncome">
<template slot-scope="{row,$index}">
<el-form-item
:prop="'familyList.'+$index+'.monthlyIncome'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
label-width="0"
>
<el-input-number
:min="0"
:step="1"
clearable
placeholder="请输入月收入"
v-model="row.monthlyIncome"
></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="150px">
<template slot="header" slot-scope="scope">
<el-button @click="formData.familyList.push({})" icon="el-icon-plus" size="mini" type="primary">添加</el-button>
</template>
<template slot-scope="scope">
<el-button
:disabled="formData.familyList.length==1"
@click="formData.familyList.splice(scope.$index,1)"
icon="el-icon-delete"
size="mini"
type="danger"
></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="附件" prop="files">
<file-upload :files.sync="formData.files" card></file-upload>
</el-form-item>
<el-form-item label="签字" prop="signature">
<sign :is_value_base64="false" :qz.sync="formData.signature" prefix="difficult"></sign>
</el-form-item>
</el-form>
<el-row justify="end" type="flex">
<el-button @click="formData.id?doEdit():doAdd()" type="primary">提交</el-button>
</el-row>
</el-card>
</guava>
<el-dialog
:visible.sync="dialogVisible"
title=""
width="40%">
<el-form>
<el-form-item class="view-header" label="&emsp;&emsp;申请须知">
</el-form-item>
</el-form>
<span style="line-height: 24px">
&emsp;&emsp;一、住院慰问金申请:每位在职工会会员每年限申请一次,需在当年提出申请。系统全部审核完成后,可打印出报销凭证和纸质审批表,由本部门审核人员及本人签字并盖章后,以分工会为单位送交工会。为减少分工会工作量,分工会可于每月10号、20号(遇周末节假日可顺延)集中审核盖章后送交工会纸质材料。<br/>
&emsp;&emsp;二、因生活困难申报“元旦、春节”困难补助(慰问)金的会员,还须同时向分工会提交下列相关证明:<br/>
&emsp;&emsp;&emsp;&emsp;(1)申请人配偶、子女及家庭其他成员的收入情况证明原件(不涉及则无需提供);<br/>
&emsp;&emsp;&emsp;&emsp;(2)个人收入证明(年度工资银行对账单且有银行或单位盖章);<br/>
&emsp;&emsp;&emsp;&emsp;(3)涉及会员本人、配偶或子女患重病、大病者须提供病史证明复印件和自费医药费正式发票;
</span>
<span class="dialog-footer" slot="footer">
<el-button @click="dialogVisible = false">关闭</el-button>
<el-button @click="dialogVisible = false" type="primary">同意</el-button>
</span>
</el-dialog>
</div>
<script>
function getQueryVariable(variable) {
let query = window.location.search.substring(1);
let vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
}
const vue = new Vue({
el: '#app',
el: "#app",
mixins: [initTableMixins],
components: {
'apply': httpVueLoader('/components/difficulty/apply.vue?v=' + new Date().getTime()),
},
data() {
return {
dialogVisible: false,
id: GetQueryString("id"),
formData: {
sq_bzlx: "1",
sqsj: moment().format('YYYY-MM-DD'),
apply_mode: '1',
jtcys: [],
mode: "1"
},
userData: {},
subsidyStandards: [
"本人患重症处于康复期、新患重症以外的疾病且自理医疗费在5万元以上、直系亲属患重症:1000-1500元。",
"突发事件造成家庭损失较重致生活困难:2000-2500元。",
"本人新患重症、长病假人员生活困难、家庭人均收入接近无锡市最低生活保障线:3000元。"
],
formRules: {
userName: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
loginName: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
sex: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
unitName: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
unionName: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
monthlyIncome: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
birthday: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
mobile: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
homeAddress: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
subsidyStandards: [
{
required: true,
message: "必填",
trigger: ["blur", "change"]
}
],
reason: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
remarks: [{ required: false, message: "必填", trigger: ["blur", "change"] }],
familyList: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
signature: [{ required: true, message: "必填", trigger: ["blur", "change"] }]
},
subsidizedList: []
}
},
methods: {
radioButton() {
this.$set(this.formData, 'idcard', '${@shiro.getPrincipalProperty("idcard")}')
this.$set(this.formData, 'sqr', '${@shiro.getPrincipalProperty("username")}')
this.$set(this.formData, 'bbzrusername', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('username')}" : null)
this.$set(this.formData, 'sqrloginname', "${@shiro.getPrincipalProperty('loginname')}")
this.$set(this.formData, 'sex', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('sex')}" : null)
this.$set(this.formData, 'idcard', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('idcard')}" : null)
this.$set(this.formData, 'birthday', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('birthday')}" : null)
this.$set(this.formData, 'lxfs', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('mobile')}" : null)
this.$set(this.formData, 'yhkh', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('bank_number')}" : null)
this.$set(this.formData, 'yhmc', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('yhmc')}" : null)
this.$set(this.formData, 'unitname', this.formData.apply_mode == 1 ? this.userData.unitname : null)
this.$set(this.formData, 'zw', this.formData.apply_mode == 1 ? this.userData.position : null)
this.$set(this.formData, 'zc', this.formData.apply_mode == 1 ? this.userData.jobtitle : null)
this.$set(this.formData, 'zzmm', this.formData.apply_mode == 1 ? this.userData.political : null)
this.$set(this.formData, 'mz', this.formData.apply_mode == 1 ? this.userData.nation : null)
querySqr(key) {
$.post("/platform/difficulty/apply/querySqr", { key: key }).then((res) => {
this.subsidizedList = res.data
})
},
async getUserData() {
const resp = await $.post(loc() + "/getUserData")
if (resp.code === 0) {
this.userData = resp.data;
async userChange() {
const user = this.subsidizedList.find((item) => item.id === this.formData.userId)
if (user) {
this.$set(this.formData, "userId", user.id)
this.$set(this.formData, "userName", user.username)
this.$set(this.formData, "loginName", user.loginname)
this.$set(this.formData, "sex", user.sex)
this.$set(this.formData, "unitId", user.unitid)
this.$set(this.formData, "unitName", user.unitname)
this.$set(this.formData, "unionId", user.unionid)
this.$set(this.formData, "unionName", user.unionname)
this.$set(this.formData, "birthday", user.birthday)
this.$set(this.formData, "mobile", user.mobile)
} else {
this.$notify.error({title: '失败', message: resp.msg});
this.$set(this.formData, "userId", null)
this.$set(this.formData, "userName", null)
this.$set(this.formData, "loginName", null)
this.$set(this.formData, "sex", null)
this.$set(this.formData, "unitId", null)
this.$set(this.formData, "unitName", null)
this.$set(this.formData, "unionId", null)
this.$set(this.formData, "unionName", null)
this.$set(this.formData, "birthday", null)
this.$set(this.formData, "mobile", null)
}
},
async operation(flag) {
this.$refs.addFrom.operation(flag)
/*let method = this.formData.id ? "/doEdit" : "/doAdd"
this.$refs["addFrom"].validate(async (valid) => {
modeChange(val) {
const user = JSON.parse(window.sessionStorage.getItem("user"))
if (val === "1") {
this.$set(this.formData, "userId", user.id)
this.$set(this.formData, "userName", user.username)
this.$set(this.formData, "loginName", user.loginname)
this.$set(this.formData, "proxyUserId", user.id)
this.$set(this.formData, "proxyUserName", user.username)
this.$set(this.formData, "proxyLoginName", user.loginname)
this.$set(this.formData, "mode", "1")
this.$set(this.formData, "sex", user.sex)
this.$set(this.formData, "unitId", user.unit.id)
this.$set(this.formData, "unitName", user.unit.name)
this.$set(this.formData, "unionId", user.union.id)
this.$set(this.formData, "unionName", user.union.unionname)
this.$set(this.formData, "monthlyIncome", null)
this.$set(this.formData, "birthday", user.birthday)
this.$set(this.formData, "mobile", user.mobile)
this.$set(this.formData, "homeAddress", user.homeAddress)
this.$set(this.formData, "subsidyStandards", null)
this.$set(this.formData, "reason", null)
this.$set(this.formData, "remarks", null)
this.$set(this.formData, "familyList", [])
this.$set(this.formData, "files", [])
this.querySqr(user.loginname)
} else {
this.formData = {}
this.$set(this.formData, "proxyUserId", user.id)
this.$set(this.formData, "proxyUserName", user.username)
this.$set(this.formData, "proxyLoginName", user.loginname)
this.$set(this.formData, "mode", "2")
this.$set(this.formData, "familyList", [])
this.$set(this.formData, "files", [])
}
},
doAdd() {
this.$refs.formRef.validate((valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const formData = Object.assign({}, this.formData);
formData.jtcys = JSON.stringify(formData.jtcys)
formData.files = JSON.stringify(formData.files)
formData.applicantsign = formData.sqsign
if (formData.apply_mode == 1) {
formData.bbzrusername = "${@shiro.getPrincipalProperty('id')}"
}
const resp = await $.post(loc() + method, formData)
if (resp.code === 0) {
sublime.jumpPagePjax('/platform/fw/difficulty/applylist')
loading.close()
} else {
this.$notify.error({title: '失败', message: resp.msg});
loading.close()
}
$.post("/platform/difficulty/apply/doAdd", {
data: JSON.stringify(this.formData)
}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
sublime.jumpPagePjax("/platform/difficulty/applylist")
} else {
this.$message.error(res.msg)
}
})
}
})*/
})
},
async openEdit(id) {
const resp = await $.get("/platform/fw/difficulty/applylist/findOne", {id})
if (resp.code === 0) {
if (resp.data.files) {
resp.data.files = JSON.parse(resp.data.files)
doEdit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
$.post("/platform/difficulty/apply/doEdit", {
data: JSON.stringify(this.formData)
}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
sublime.jumpPagePjax("/platform/difficulty/applylist")
} else {
this.$message.error(res.msg)
}
})
}
this.formData = resp.data
}
})
}
},
async created() {
await this.getUserData()
let id = getQueryVariable("id")
id ? this.openEdit(id) : this.radioButton()
if (this.id) {
$.get("/platform/difficulty/apply/findOne", { id: this.id }).then((res) => {
if (res.code === 0) {
this.formData = res.data
this.querySqr(res.data.loginName)
}
})
} else {
this.modeChange("1")
}
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,153 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div id="app" v-cloak>
<guava>
<apply :form="formData" @radio="radioButton" ref="addFrom">
<template #footer>
<div style="float: right;margin: 20px 0">
<el-button @click="operation(false)" type="primary">保 存</el-button>
<el-button @click="operation(true)" type="primary">确 定</el-button>
</div>
</template>
</apply>
</guava>
<el-dialog
:visible.sync="dialogVisible"
title=""
width="40%">
<el-form>
<el-form-item class="view-header" label="&emsp;&emsp;申请须知">
</el-form-item>
</el-form>
<span style="line-height: 24px">
&emsp;&emsp;一、住院慰问金申请:每位在职工会会员每年限申请一次,需在当年提出申请。系统全部审核完成后,可打印出报销凭证和纸质审批表,由本部门审核人员及本人签字并盖章后,以分工会为单位送交工会。为减少分工会工作量,分工会可于每月10号、20号(遇周末节假日可顺延)集中审核盖章后送交工会纸质材料。<br/>
&emsp;&emsp;二、因生活困难申报“元旦、春节”困难补助(慰问)金的会员,还须同时向分工会提交下列相关证明:<br/>
&emsp;&emsp;&emsp;&emsp;(1)申请人配偶、子女及家庭其他成员的收入情况证明原件(不涉及则无需提供);<br/>
&emsp;&emsp;&emsp;&emsp;(2)个人收入证明(年度工资银行对账单且有银行或单位盖章);<br/>
&emsp;&emsp;&emsp;&emsp;(3)涉及会员本人、配偶或子女患重病、大病者须提供病史证明复印件和自费医药费正式发票;
</span>
<span class="dialog-footer" slot="footer">
<el-button @click="dialogVisible = false">关闭</el-button>
<el-button @click="dialogVisible = false" type="primary">同意</el-button>
</span>
</el-dialog>
</div>
<script>
function getQueryVariable(variable) {
let query = window.location.search.substring(1);
let vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
}
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'apply': httpVueLoader('/components/difficulty/apply.vue?v=' + new Date().getTime()),
},
data() {
return {
dialogVisible: false,
formData: {
sq_bzlx: "1",
sqsj: moment().format('YYYY-MM-DD'),
apply_mode: '1',
jtcys: [],
},
userData: {},
}
},
methods: {
radioButton() {
this.$set(this.formData, 'idcard', '${@shiro.getPrincipalProperty("idcard")}')
this.$set(this.formData, 'sqr', '${@shiro.getPrincipalProperty("username")}')
this.$set(this.formData, 'bbzrusername', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('username')}" : null)
this.$set(this.formData, 'sqrloginname', "${@shiro.getPrincipalProperty('loginname')}")
this.$set(this.formData, 'sex', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('sex')}" : null)
this.$set(this.formData, 'idcard', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('idcard')}" : null)
this.$set(this.formData, 'birthday', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('birthday')}" : null)
this.$set(this.formData, 'lxfs', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('mobile')}" : null)
this.$set(this.formData, 'yhkh', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('bank_number')}" : null)
this.$set(this.formData, 'yhmc', this.formData.apply_mode == 1 ? "${@shiro.getPrincipalProperty('yhmc')}" : null)
this.$set(this.formData, 'unitname', this.formData.apply_mode == 1 ? this.userData.unitname : null)
this.$set(this.formData, 'zw', this.formData.apply_mode == 1 ? this.userData.position : null)
this.$set(this.formData, 'zc', this.formData.apply_mode == 1 ? this.userData.jobtitle : null)
this.$set(this.formData, 'zzmm', this.formData.apply_mode == 1 ? this.userData.political : null)
this.$set(this.formData, 'mz', this.formData.apply_mode == 1 ? this.userData.nation : null)
},
async getUserData() {
const resp = await $.post(loc() + "/getUserData")
if (resp.code === 0) {
this.userData = resp.data;
} else {
this.$notify.error({title: '失败', message: resp.msg});
}
},
async operation(flag) {
this.$refs.addFrom.operation(flag)
/*let method = this.formData.id ? "/doEdit" : "/doAdd"
this.$refs["addFrom"].validate(async (valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const formData = Object.assign({}, this.formData);
formData.jtcys = JSON.stringify(formData.jtcys)
formData.files = JSON.stringify(formData.files)
formData.applicantsign = formData.sqsign
if (formData.apply_mode == 1) {
formData.bbzrusername = "${@shiro.getPrincipalProperty('id')}"
}
const resp = await $.post(loc() + method, formData)
if (resp.code === 0) {
sublime.jumpPagePjax('/platform/fw/difficulty/applylist')
loading.close()
} else {
this.$notify.error({title: '失败', message: resp.msg});
loading.close()
}
}
})*/
},
async openEdit(id) {
const resp = await $.get("/platform/fw/difficulty/applylist/findOne", {id})
if (resp.code === 0) {
if (resp.data.files) {
resp.data.files = JSON.parse(resp.data.files)
}
this.formData = resp.data
}
}
},
async created() {
await this.getUserData()
let id = getQueryVariable("id")
id ? this.openEdit(id) : this.radioButton()
}
})
</script>
<!--#
}
#-->
@@ -1,4 +1,4 @@
<!--#
<!--#
layout("/layouts/platform.html"){
#-->
@@ -6,7 +6,6 @@ layout("/layouts/platform.html"){
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="btn-group tool-button">
<div class="block">
<el-date-picker
@@ -29,7 +28,6 @@ layout("/layouts/platform.html"){
v-for="item in unions"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
@@ -38,19 +36,18 @@ layout("/layouts/platform.html"){
v-for="item in units"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<div>
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 140px;"
v-model="pageForm.searchName">
<el-option label="工号" value="sbzr.loginname"></el-option>
<el-option label="姓名" value="sbzr.username"></el-option>
</el-select>
</el-input>
</div>
</div>
<!-- <div class="btn-group tool-button">-->
<!-- <div>-->
<!-- <el-input placeholder="请输入内容" v-model="pageForm.searchKeyword">-->
<!-- <el-select placeholder="查询类型" slot="prepend"-->
<!-- style="width: 140px;"-->
<!-- v-model="pageForm.searchName">-->
<!-- <el-option label="工号" value="sbzr.loginname"></el-option>-->
<!-- <el-option label="姓名" value="sbzr.username"></el-option>-->
<!-- </el-select>-->
<!-- </el-input>-->
<!-- </div>-->
<!-- </div>-->
<div class="btn-group tool-button">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
@@ -67,47 +64,12 @@ layout("/layouts/platform.html"){
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<!-- <el-table-column align="center" header-align="center" label="受补助人姓名"
prop="sbzrname">
<template slot-scope="{row}">
{{row.sbzrname?row.sbzrname:row.sqrname}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="受补助人工号"
prop="sbzrloginname"></el-table-column>-->
<el-table-column align="center" header-align="center" label="申请人"
prop="sqrname"></el-table-column>
<el-table-column align="center" header-align="center" label="工会"
prop="sqrunionname" show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="单位"
prop="unitname" show-overflow-tooltip
sortable>
<template slot-scope="{row}">
{{row.unitname?row.unitname:row.sqrunitname}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="联系方式"
min-width="100"
prop="lxfs"
show-overflow-tooltip></el-table-column>
<!-- <el-table-column align="center" header-align="center" label="困难类型"
min-width="100"
prop="sq_knlx" show-overflow-tooltip>
<template slot-scope="{row}">
<span> {{ difficulty.sq_knlx[row.sq_knlx] }}</span>
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="申请时间" prop="sqsj"
sortable></el-table-column>
<!-- <el-table-column align="center" header-align="center" label="审核人"
min-width="100"
prop="shrname" show-overflow-tooltip>
<template slot-scope="{row:{shrname}}">
{{shrname?shrname:'暂无'}}
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="姓名" prop="userName"></el-table-column>
<el-table-column align="center" header-align="center" label="工号" prop="loginName"></el-table-column>
<el-table-column align="center" header-align="center" label="单位" prop="unitName"></el-table-column>
<el-table-column align="center" header-align="center" label="工会" prop="unionName"></el-table-column>
<el-table-column align="center" header-align="center" label="申请时间" prop="applyTime"></el-table-column>
<el-table-column align="center" header-align="center" label="联系方式" prop="mobile"></el-table-column>
<el-table-column align="center" header-align="center" label="申请状态"
prop="state_id" sortable>
<template scope="scope">
@@ -128,28 +90,23 @@ layout("/layouts/platform.html"){
</el-dropdown-item>
<el-dropdown-item
:command="{type:'edit',data:row}"
:disabled="![98,152,252].includes(row.zt)">
:disabled="![3000,3020,3050,3080].includes(row.stateId)">
编辑
</el-dropdown-item>
<el-dropdown-item
v-if="[250,156,150].includes(row.zt)"
:command="{type:'edit',data:row}"
:disabled="![250,156,150].includes(row.zt)">
重新提交
</el-dropdown-item>
<!-- :disabled="![3000].includes(row.stateId)"-->
<el-dropdown-item :command="{type:'delete',data:row}"
:disabled="![98].includes(row.zt)&&${@shiro.hasRole('sysadmin')}=== 'false'"
v-if="[3010,3020,3040,3050,3070,3080].includes(row.stateId) || ${@shiro.hasRole('sysadmin')}"
:loading="row.delLoading">
删除
</el-dropdown-item>
<el-dropdown-item :command="{type:'export',data:row}"
:disabled="row.zt!=500">
导出申请表
</el-dropdown-item>
<el-dropdown-item :command="{type:'doExport',data:row}"
:disabled="row.zt!=500">
导出领取通知单
</el-dropdown-item>
<!-- <el-dropdown-item :command="{type:'export',data:row}"-->
<!-- :disabled="row.stateId!=3090">-->
<!-- 导出申请表-->
<!-- </el-dropdown-item>-->
<!-- <el-dropdown-item :command="{type:'doExport',data:row}"-->
<!-- :disabled="row.stateId!=3090">-->
<!-- 导出领取通知单-->
<!-- </el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -161,19 +118,20 @@ layout("/layouts/platform.html"){
</template>
<template #view>
<info ref="info"></info>
<info ref="viewInfoRef"></info>
</template>
</guava>
</div>
<script>
<!--#include('./common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'info': httpVueLoader('/components/difficulty/info.vue?v=' + new Date().getTime()),
info
},
data() {
return {
@@ -194,24 +152,16 @@ layout("/layouts/platform.html"){
} else if (type == 'delete') {
this.doDelete(data)
} else if (type == 'edit') {
this.openEdit(data)
sublime.jumpPagePjax('/platform/difficulty/apply?id=' + data.id)
} else if (type == 'export') {
window.location.href = "/platform/fw/difficulty/reading/export?id=" + data.id
window.location.href = "/platform/difficulty/reading/export?id=" + data.id
} else if (type == 'doExport') {
window.location.href = "/platform/fw/difficulty/reading/doExport?id=" + data.id
window.location.href = "/platform/difficulty/reading/doExport?id=" + data.id
}
},
dodownloadAnnex(id) {
window.location.href = "/platform/fw/difficulty/applylist/downloadAnnex?id=" + id
},
openView(row) {
const {id} = row
this.$refs.info.getInfo(id)
this.$refs.guava.view()
},
openEdit(row) {
const {id} = row
sublime.jumpPagePjax('/platform/fw/difficulty/apply?id=' + id)
this.$refs.viewInfoRef.onOpen(row.id)
},
doDelete(row) {
const {id} = row
@@ -225,6 +175,7 @@ layout("/layouts/platform.html"){
const resp = await $.get(loc() + '/doDelete', {id: id})
this.$set(row, "delLoading", false)
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pageData()
} else {
this.notifyWarning(resp.msg)
@@ -43,14 +43,7 @@ layout("/layouts/platform.html"){
<div class="btn-group tool-button">
<div>
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="工号" value="sbzr.loginname"></el-option>
<el-option label="姓名" value="sbzr.username"></el-option>
</el-select>
</el-input>
<el-input placeholder="请输入工号或姓名" clearable v-model="pageForm.searchKeyword"></el-input>
</div>
</div>
<div class="btn-group tool-button">
@@ -74,51 +67,20 @@ layout("/layouts/platform.html"){
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<!-- <el-table-column align="center" header-align="center" prop="sbzrname"
label="受补助人姓名">
<template slot-scope="{row}">
{{row.sbzrname?row.sbzrname:row.sqrname}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" prop="sbzrloginname"
label="受补助人工号"></el-table-column>-->
<el-table-column align="center" header-align="center" label="申请人"
prop="sqrname"></el-table-column>
<el-table-column align="center" header-align="center" label="性别"
prop="sex"></el-table-column>
<el-table-column align="center" header-align="center" label="工会"
prop="sqrunionname"
show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="姓名"
prop="userName"></el-table-column>
<el-table-column align="center" header-align="center" label="工号"
prop="loginName"></el-table-column>
<el-table-column align="center" header-align="center" label="单位"
prop="unitname" show-overflow-tooltip
sortable>
<!-- <template slot-scope="{row}">
{{row.unitname?row.unitname:row.sqrname}}
</template>-->
</el-table-column>
prop="unitName"></el-table-column>
<el-table-column align="center" header-align="center" label="工会"
prop="unionName"></el-table-column>
<el-table-column align="center" header-align="center" label="申请时间"
prop="applyTime"></el-table-column>
<el-table-column align="center" header-align="center" label="联系方式"
min-width="100"
prop="lxfs"
show-overflow-tooltip></el-table-column>
<!-- <el-table-column prop="sq_knlx" label="困难类型" header-align="center" align="center"
show-overflow-tooltip min-width="100">
<template slot-scope="{row}">
<span> {{ difficulty.sq_knlx[row.sq_knlx] }}</span>
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="申请时间" prop="sqsj"
sortable></el-table-column>
prop="mobile"></el-table-column>
<el-table-column align="center" header-align="center" label="申请状态"
prop="state_id" sortable>
<template scope="scope">
<span :style="'color:'+scope.row.statecolor">{{scope.row.state_name}}</span>
</template>
</el-table-column>
prop="state_name"></el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作"
width="120px">
<template slot-scope="{row}">
@@ -133,14 +95,13 @@ layout("/layouts/platform.html"){
</el-dropdown-item>
<el-dropdown-item
:command="{type:'openReview',data:row}"
:disabled="pageForm.isAudit == true || (row.zt==200||row.zt==155||row.zt==500)">
v-if="row.stateId===3000">
审核
</el-dropdown-item>
<!-- <el-dropdown-item :command="{type:'edit',data:row}"
v-if="row.zt==200||row.zt==150||row.zt==152">
撤回
</el-dropdown-item>-->
<el-dropdown-item :command="{type:'edit',data:row}"
v-if="[3010,3020,3030].includes(row.stateId)">
撤回
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -152,16 +113,10 @@ layout("/layouts/platform.html"){
</template>
<template #edit>
<info :handle="true" :panes="[2]" label="分工会主席审核" ref="info2">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right"
label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<info ref="auditInfoRef">
<el-tab-pane label="分工会审核" name="分工会审核">
<el-form :model="formData" :rules="formRules" label-width="80px" ref="form">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
@@ -175,37 +130,36 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<el-form-item label="审核意见" prop="opinion">
<el-form-item label="审核金额" prop="money">
<el-input-number
placeholder="请填写"
:min="0"
:precision="2"
:step="0.01"
v-model="formData.money"></el-input-number>
</el-form-item>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign">
<sign :qz.sync="formData.auditSign"></sign>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign">
<sign :qz.sync="formData.auditSign" :is_value_base64="false"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(1)">拒
绝
</el-button>
<el-button :disabled="subDis" :loading="subLoading3" @click="doReview(2)"
type="danger">返回修改
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(3)"
type="primary">通
过
</el-button>
</div>
</template>
<el-row type="flex" justify="end">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button @click="doReview(2)" type="danger">返回修改</el-button>
<el-button @click="doReview(3)" type="primary">通过</el-button>
</el-row>
</el-tab-pane>
</info>
</template>
<template #view>
<info ref="info"></info>
<info ref="viewInfoRef"></info>
</template>
</guava>
@@ -213,31 +167,29 @@ layout("/layouts/platform.html"){
<script>
<!--#include('./common/info.js'){}#-->
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'info': httpVueLoader('/components/difficulty/info.vue'),
info
},
data() {
return {
unions: [],
units: [],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
pageForm: {
unit: "",
year: "",
isAudit: false,
searchName: "sbzr.loginname"
searchName: "info.loginName"
},
unitOptions: [],
formRules: {
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
auditSign: [{required: true, message: '必填', trigger: ['blur', 'change']}]
},
}
},
@@ -257,42 +209,31 @@ layout("/layouts/platform.html"){
this.$confirm('确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" == a) {//确认后再执行
this.$set(row, "delLoading", true)
const resp = await $.post(loc() + "/doEdit", {id: id});
this.$set(row, "delLoading", false)
if (resp.code === 0) {
this.pageData()
} else {
this.notifyWarning(resp.msg)
}
type: 'warning'
}).then(() => {
$.post(loc() + "/doEdit", {id: id}).then(resp => {
if (resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
} else {
this.notifyWarning(resp.msg)
}
}
})
});
},
openView(row) {
const {id} = row
this.$refs.info.getInfo(id)
this.$refs.guava.view()
this.$refs.viewInfoRef.onOpen(row.id)
},
openReview(row) {
const {id} = row
this.$refs.guava.edit()
this.$refs.auditInfoRef.onOpen(id, '分工会审核')
this.formData = {
id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
this.$refs.info2.getInfo(id)
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
@@ -301,20 +242,9 @@ layout("/layouts/platform.html"){
this.$refs["form"].validate(async (valid) => {
if (valid) {
this.formData.pass = flag
this.subDis = true
if (flag == 1) {
this.subLoading1 = true
} else if (flag == 2) {
this.subLoading2 = true
} else {
this.subLoading3 = true
}
const resp = await $.post(loc() + "/doReview", this.formData)
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pageData()
this.$refs.guava.index()
} else {
@@ -0,0 +1,133 @@
const info = {
/*language=HTML*/
template: `
<div class="applyInfo">
<el-tabs tab-position="top" v-model="activeName">
<el-tab-pane label="申请信息" name="1">
<el-descriptions :column="3" border>
<template v-if="viewData.mode==='2'">
<el-descriptions-item label="申请人姓名">{{ viewData.proxyUserName }}</el-descriptions-item>
<el-descriptions-item label="申请人工号">{{ viewData.proxyLoginName }}</el-descriptions-item>
</template>
<el-descriptions-item label="受补助人姓名">{{ viewData.userName }}</el-descriptions-item>
<el-descriptions-item label="受补助人工号">{{ viewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="受补助人性别">{{ viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="单位">{{ viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="分工会">{{ viewData.unionName }}</el-descriptions-item>
<el-descriptions-item label="月收入">{{ viewData.monthlyIncome }}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{ viewData.birthday }}</el-descriptions-item>
<el-descriptions-item label="手机号码" :span="2">{{ viewData.mobile }}
</el-descriptions-item>
<el-descriptions-item label="家庭地址" :span="3">{{ viewData.homeAddress }}
</el-descriptions-item>
<el-descriptions-item label="款项" :span="3">{{ viewData.subsidyStandards }}
</el-descriptions-item>
<el-descriptions-item label="申请原因" :span="3">{{ viewData.reason }}
</el-descriptions-item>
<el-descriptions-item label="备注" :span="3">{{ viewData.remarks }}</el-descriptions-item>
<el-descriptions-item label="家庭成员经济收入" :span="3">
<el-table :data="viewData.familyList" border>
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column prop="age" label="年龄(岁)"></el-table-column>
<el-table-column prop="relation" label="关系"></el-table-column>
<el-table-column prop="monthlyIncome" label="月收入(元)"></el-table-column>
</el-table>
</el-descriptions-item>
<el-descriptions-item label="附件" :span="3">
<file-upload v-if="viewData.files&&viewData.files.length"
:files="viewData.files"
:view="true"></file-upload>
<span v-else>暂无</span>
</el-descriptions-item>
<el-descriptions-item label="签字" :span="3">
<el-image v-if="viewData.signature"
style="width: 300px; height: 100px"
:src="CREATE_PREVIEW_URL(viewData.signature)"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="分工会审核信息" name="分工会审核信息" v-if="viewData.branchUnionAudit">
<el-descriptions :column="2" border>
<el-descriptions-item label="审核人">{{ viewData.branchUnionAudit.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.branchUnionAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核金额" :span="2" v-if="!viewData.isSelf">{{ viewData.branchUnionAudit.ext?.money }}元</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">{{ viewData.branchUnionAudit.auditOpinion }}</el-descriptions-item>
<el-descriptions-item label="签字" :span="2">
<el-image v-if="viewData.branchUnionAudit.auditSign"
style="width: 300px; height: 100px"
:src="CREATE_PREVIEW_URL(viewData.branchUnionAudit.auditSign)"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="校工会初审信息" name="校工会初审信息" v-if="viewData.schoolUnionInitialAudit">
<el-descriptions :column="2" border>
<el-descriptions-item label="审核人">{{ viewData.schoolUnionInitialAudit.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.schoolUnionInitialAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核金额" :span="2" v-if="!viewData.isSelf">{{ viewData.schoolUnionInitialAudit.ext?.money }}元</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">{{ viewData.schoolUnionInitialAudit.auditOpinion }}</el-descriptions-item>
<el-descriptions-item label="签字" :span="2">
<el-image v-if="viewData.schoolUnionInitialAudit.auditSign"
style="width: 300px; height: 100px"
:src="CREATE_PREVIEW_URL(viewData.schoolUnionInitialAudit.auditSign)"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="工会常委会审核信息" name="工会常委会审核信息" v-if="viewData.schoolUnionFinalAudit">
<el-descriptions :column="2" border>
<el-descriptions-item label="审核人">{{ viewData.schoolUnionFinalAudit.username }}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.schoolUnionFinalAudit.auditTime }}</el-descriptions-item>
<el-descriptions-item label="审核金额" :span="2">{{ viewData.schoolUnionFinalAudit.ext?.money }}元</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">{{ viewData.schoolUnionFinalAudit.auditOpinion }}</el-descriptions-item>
<el-descriptions-item label="签字" :span="2">
<el-image v-if="viewData.schoolUnionFinalAudit.auditSign"
style="width: 300px; height: 100px"
:src="CREATE_PREVIEW_URL(viewData.schoolUnionFinalAudit.auditSign)"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<slot></slot>
</el-tabs>
</div>
`,
data() {
return {
viewData: {},
activeName: "1"
}
},
methods: {
onOpen(id, activeName = "1") {
this.activeName = activeName
$.get("/platform/difficulty/common/findOne", { id }).then((res) => {
if (res.code === 0) {
try {
res.data.familyList = JSON.parse(res.data.familyList)
res.data.files = JSON.parse(res.data.files)
} catch (e) {}
this.viewData = res.data
console.log(this.viewData)
}
})
}
},
style:
/*language=CSS*/
`
.applyInfo .el-descriptions__table{
table-layout: fixed;
}
`
}

Some files were not shown because too many files have changed in this diff Show More