福利、签字

This commit is contained in:
Paidax
2024-12-26 08:30:06 +08:00
parent 0f6787c0cd
commit d6c4f48afc
56 changed files with 266 additions and 158 deletions
@@ -16,6 +16,8 @@ import io.v.nutz.base.utils.ViTool;
import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.commons.lang.ArrayUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -75,6 +77,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@POST
@RequiresPermissions("data.user.update")
public Object userPartData(PageForm pageForm,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@@ -125,6 +128,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@POST
@RequiresPermissions("data.user.update")
public Object pageData(PageForm pageForm,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@@ -252,6 +256,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@RequiresPermissions("data.user.update")
public Object cleanPart(@Param(value = "id", required = false) String id,
@Param(value = "groupId", required = false) Integer groupId,
@Param(value = "searchKeyword", required = false) String searchKeyword,
@@ -302,6 +307,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@RequiresPermissions("data.user.update")
public Object getPartCount() {
return dao.count(UserPartUp.class);
}
@@ -319,6 +325,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@POST
@RequiresPermissions("data.user.update")
public Object doSetUpUser(PageForm pageForm,
@Param(value = "unionId", required = false) String unionId,
@Param(value = "unitId", required = false) String unitId,
@@ -393,6 +400,7 @@ public class UserPartUpdateController {
*/
@At
@ViReturn
@RequiresPermissions("data.user.update")
public Object getUserPart() {
Sql sql = Sqls.create("""
SELECT
@@ -418,6 +426,7 @@ public class UserPartUpdateController {
@At
@ViReturn
@RequiresPermissions("data.user.update")
public void doExportUser(PageForm pageForm,
@Param(value = "props", required = false) String props,
@Param(value = "unionId", required = false) String unionId,
@@ -478,4 +487,12 @@ public class UserPartUpdateController {
}
}
@At
@ViReturn
@RequiresPermissions("data.user.update")
public Object deleteNotInSourceUser() {
userPartUpService.deleteNotInSourceUser(false);
return null;
}
}
@@ -14,5 +14,5 @@ public interface UserPatUpService extends ViService<UserPartUp> {
void renewUserState();
void deleteNotInSourceUser();
void deleteNotInSourceUser(Boolean isAuto);
}
@@ -118,14 +118,14 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
//人员类型
Sql personTypeSql = Sqls.create("select personType from `user` where personType is not null and personType !='' group by personType");
List<String> personTypes = sysDictService.listMap(personTypeSql).stream().map(v->v.getString("personType")).collect(Collectors.toList());
List<String> personTypes = sysDictService.listMap(personTypeSql).stream().map(v -> v.getString("personType")).collect(Collectors.toList());
List<Sys_dict> personTypeList = sysDictService.getSubListByCode("UserType");
//dict中的personType,在user表中没有,这一部分删除
List<Sys_dict> deletePersonType = personTypeList.stream().filter(v -> !personTypes.contains(v.getName())).collect(Collectors.toList());
List<String> deletePersonTypes = deletePersonType.stream().map(Sys_dict::getId).collect(Collectors.toList());
if (Lang.isNotEmpty(deletePersonTypes)){
if (Lang.isNotEmpty(deletePersonTypes)) {
sysDictService.delete(deletePersonTypes);
}
@@ -152,9 +152,18 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
}
/**
* 删除不在人事库的人员状态
*
* @param isAuto 是否自动更新,true为自动更新,false为手动更新
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void deleteNotInSourceUser() {
public void deleteNotInSourceUser(Boolean isAuto) {
dao().update(Sys_user.class, Chain.make("preparedBy", "会员"), Cnd.where("member", "=", true));
dao().update(Sys_user.class, Chain.make("preparedBy", "教职工"), Cnd.where("member", "=", false));
Sql maxPullTimeSql = Sqls.create("select pullTime from user_source GROUP BY pullTime ORDER BY pullTime desc LIMIT 1");
maxPullTimeSql.setCallback(Sqls.callback.map());
dao().execute(maxPullTimeSql);
@@ -174,12 +183,22 @@ public class UserPartUpServiceImpl extends ViServiceImpl<UserPartUp> implements
List<String> userIdList = list.stream().map(v -> v.getString("id")).toList();
List<String> userLoginNameList = list.stream().map(v -> v.getString("loginname")).toList();
// 修改不在人事库人员的状态
dao().update(Sys_user.class, Chain.make("userState", "非人事库人员").add("personType", "非人事库人员")
.add("member", 0).add("welfareMember", 0),
Cnd.where("loginname", "in", userLoginNameList));
if (isAuto == null) {
return;
}
if (isAuto) {
// 修改不在人事库人员的状态
dao().update(Sys_user.class, Chain.make("userState", "非人事库人员").add("personType", "非人事库人员")
.add("member", 0).add("welfareMember", 0),
Cnd.where("loginname", "in", userLoginNameList));
// 去除不在人事库的人员角色,只保留公共角色
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", userIdList).and("roleId", "!=", Roles.PUBLIC));
} else {
// 删除不在人事库的人员,并清除角色
dao().clear(Sys_user.class, Cnd.where("loginname", "in", userLoginNameList));
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", userIdList));
}
// 去除不在人事库的人员角色,只保留公共角色
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", userIdList).and("roleId", "!=", Roles.PUBLIC));
}
}
@@ -1,20 +1,14 @@
package io.v.nutz.zhgh.data.constant;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.v.nutz.base.expression.Exp4;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.zhgh.data.model.UserSource;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.HashMap;
@@ -46,10 +40,21 @@ public interface SourceData {
}
/**
* 不进系统人员
* 不进系统人员类型
*/
List<String> NOT_ENTERING_USER = List.of("退休人员", "兼职教师", "非全日用工(项目临聘)", "服务外包和其他人员",
List<String> NOT_ENTERING_PERSON_TYPE = List.of("退休人员", "兼职教师", "非全日用工(项目临聘)", "服务外包和其他人员",
"教学编制2", "教学教师(附属医院)", "教学编制", "离休人员", "临时人员", "非全日制工", "博士后(在职)");
/**
* 不进系统在职状态
* 01 退休
* 05 调出
* 06 辞职
* 07 离职
* @see io.v.nutz.zhgh.data.constant.HMCFieldCode#USER_STATE_CODE
*/
List<String> NOT_ENTERING_USER_STATE = List.of("01", "05", "06", "07");
List<String> NOT_ENTERING_USER_LOGIN_NAME = List.of("2020000410", "2008000010");
/**
* 接口中的数据跟SourceUser的对应关系
@@ -114,7 +119,9 @@ public interface SourceData {
// checkSuccess(map);
List<NutMap> data = map.getAsList("data", NutMap.class);
for (NutMap row : data) {
if (NOT_ENTERING_USER.contains(row.getString("RYFLMC"))) {
if (NOT_ENTERING_PERSON_TYPE.contains(row.getString("RYFLMC"))
|| NOT_ENTERING_USER_LOGIN_NAME.contains(row.getString("GH"))
|| NOT_ENTERING_USER_STATE.contains(row.getString("DQZTM"))) {
continue;
}
Map entity = new HashMap(500);
@@ -148,33 +148,30 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
source.setWelfareMember(null);
Sys_user user = userMap.get(source.getLoginname().toLowerCase());
if (StrUtil.isNotBlank(source.getPersonType())
&& MEMBER_PERSON_TYPE.contains(source.getPersonType())
&& "在职".equals(source.getUserState())) {
source.setMember(1);
source.setWelfareMember(1);
// 符合条件的这类人员 人员性质设为会员
source.setPreparedBy("会员");
if (user != null && user.getMember() != 1) {
addMemberUserIds.add(user.getId());
}
if (user == null) {
addMemberUserIds.add(source.getId());
}
} else {
source.setMember(0);
source.setWelfareMember(0);
// 不符合条件的这类人员 人员性质设为教职工
source.setPreparedBy("教职工");
if (user != null && user.getMember() == 1) {
deleteMemberUserIds.add(user.getId());
}
}
Sys_user u = new Sys_user();
BeanUtils.copyProperties(source, u);
switch (sourceType) {
case "all" -> {
if (StrUtil.isNotBlank(source.getPersonType())
&& MEMBER_PERSON_TYPE.contains(source.getPersonType())
&& "在职".equals(source.getUserState())) {
source.setMember(1);
source.setWelfareMember(1);
// 符合条件的这类人员 人员性质设为会员
if (user != null && user.getMember() != 1) {
addMemberUserIds.add(user.getId());
}
if (user == null) {
addMemberUserIds.add(source.getId());
}
} else {
source.setMember(0);
source.setWelfareMember(0);
// 不符合条件的这类人员 人员性质设为教职工
if (user != null && user.getMember() == 1) {
deleteMemberUserIds.add(user.getId());
}
}
// 复制属性到一个新的user对象
u.setId(user == null ? source.getId() : user.getId());
if (user != null) {
@@ -224,20 +221,22 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
sysUserRoleService.insert(userRoles);
}
// 添加会员角色
if (Lang.isNotEmpty(addMemberUserIds)) {
String memberRoleId = Roles.MEMBER;
List<Sys_user_role> list = addMemberUserIds.stream().map(v -> {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(v);
userRole.setRoleId(memberRoleId);
return userRole;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(list, 200);
}
// 不是定义的personType的人员,去除会员角色
if (Lang.isNotEmpty(deleteMemberUserIds)) {
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", deleteMemberUserIds).and("roleId", "=", Roles.MEMBER));
if ("all".equals(sourceType)) {
// 添加会员角色
if (Lang.isNotEmpty(addMemberUserIds)) {
String memberRoleId = Roles.MEMBER;
List<Sys_user_role> list = addMemberUserIds.stream().map(v -> {
Sys_user_role userRole = new Sys_user_role();
userRole.setUserId(v);
userRole.setRoleId(memberRoleId);
return userRole;
}).toList();
manyAddOrRenewUtil.asyncExecuteInsert(list, 200);
}
// 不是定义的personType的人员,去除会员角色
if (Lang.isNotEmpty(deleteMemberUserIds)) {
dao().clear(Sys_user_role.class, Cnd.where("userId", "in", deleteMemberUserIds).and("roleId", "=", Roles.MEMBER));
}
}
// Collection<String[]> updateColumns = SourceData.USER_FIELD_RELATION.values();
@@ -253,7 +252,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
// 人员状态及在职状态更新
userPatUpService.renewUserState();
// 修改不在人事库的人员,删除角色
userPatUpService.deleteNotInSourceUser();
userPatUpService.deleteNotInSourceUser(true);
//清除缓存
// sysUserService.clearCache();
// sysRoleService.clearCache();
@@ -105,6 +105,7 @@ public enum MemberChangeHandle {
UserMode.addMemberRole(record.getUserId());
updateMemberStatus(MemberStatus.RESTORE, record.getUserId());
updateMemberAndWelfareMember(record);
sysUserService.update(Chain.make("preparedBy", "会员"), Cnd.where("id", "=", record.getUserId()));
}
},
WITHDRAWAL(UserChangeType.WITHDRAWAL.getCode()) {
@@ -115,6 +116,7 @@ public enum MemberChangeHandle {
updateMemberAndWelfareMember(record);
updateMemberStatus(MemberStatus.WITHDRAWAL, record.getUserId());
updateUserStateAndPersonType(record);
sysUserService.update(Chain.make("preparedBy", "教职工"), Cnd.where("id", "=", record.getUserId()));
}
},
CARD_CHANGE(UserChangeType.CARD_CHANGE.getCode()){
@@ -412,7 +412,7 @@ module.exports = {
}
},
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
},
methods: {
@@ -33,7 +33,7 @@ module.exports = {
props: {
scan_title: {
type: String,
default: '扫描下方二维码进行签字'
default: '请使用【手机钉钉】扫描下方二维码进行签字'
},
prefix: {
type: String,
@@ -144,4 +144,4 @@ module.exports = {
flex-direction: column;
z-index: 999;
}
</style>
</style>
@@ -34,7 +34,7 @@ module.exports = {
props: {
scan_title: {
type: String,
default: '扫描下方二维码进行签字'
default: '请使用【手机钉钉】扫描二维码进行签字'
},
prefix: {
type: String,
@@ -118,7 +118,7 @@
Vue.component('vuedraggable', window.vuedraggable)
Vue.component('guava', httpVueLoader('/components/plugins/Guava.vue'))
Vue.component('sign', httpVueLoader('/components/sign/sign.vue?v=2.0.0'))
Vue.component('sign', httpVueLoader('/components/sign/sign.vue?v=2.0.1'))
Vue.component('file-upload', httpVueLoader('/components/plugins/FileUpload.vue'))
Vue.component('image-upload', httpVueLoader('/components/plugins/ImageUpload.vue'))
Vue.component('dict-tag', httpVueLoader('/components/plugins/sysDict/DictTag.vue'))
@@ -36,10 +36,6 @@ layout("/mobile/platform.html"){
align-items: baseline;
}
.van-empty {
position: absolute;
}
.van-collapse-item .van-collapse-item__title {
}
@@ -220,11 +216,10 @@ layout("/mobile/platform.html"){
<div style="display: flex;width: 100%;padding: 10px 0;flex-wrap: wrap"
v-for="(option, oidx) in subject.options">
<div style="width: 120px;height: 100px;display: flex;justify-content: center;align-items: center;position:relative;">
<div v-if="[1,2,3].includes(option.rank)">
<div class="top-text" :style="'color:' + getRankColor(option.rank)">TOP{{option.rank}}</div>
</div>
<van-image src="https://s21.ax1x.com/2024/12/24/pAjYEGT.png"
asrc="FILE_STREAM_PREVIEW_ADDRESS+'?id='+option.imgUrl"
<!-- <div v-if="[1,2,3].includes(option.rank)">-->
<!-- <div class="top-text" :style="'color:' + getRankColor(option.rank)">TOP{{option.rank}}</div>-->
<!-- </div>-->
<van-image :src="FILE_STREAM_PREVIEW_ADDRESS+'?id='+option.imgUrl"
fit="contain"
style="width: 100px;height: 100px;border-radius: 10px"></van-image>
<span style="position: absolute; bottom: 0;left: 10px;right: 10px;height: 20px;background: rgb(0 0 0 / 50%);text-align:center;color: #FFF;">{{option.selectCount}}人已选</span>
@@ -282,19 +277,21 @@ layout("/mobile/platform.html"){
<van-popup :style="{ height: '70%' }" closeable position="bottom" safe-area-inset-bottom
v-model="selectAddressPopup">
<div style="height: 100%">
<div style="font-size: 15px;font-weight: bold;text-align: center;padding-top: 16px;">
<div style="font-size: 16px;font-weight: bold;text-align: center;padding-top: 16px;">
配送至
</div>
<template v-if="addressList && addressList.length>0">
<van-cell @click="addressClick(item);selectAddressPopup=false" clickable icon="location-o"
v-for="item in addressList">
<template #title>
{{item.address}}
<span style="font-size: 15px">{{item.address}}</span>
</template>
<template #label>
<div>{{"地区:" + item.province + item.city + item.county}}</div>
<div>{{"收件人:" + item.name}}</div>
<div>{{"联系方式" + item.tel}}</div>
<div style="font-size: 14px;line-height: 1.5rem">
<div>{{"地区:" + item.province + item.city + item.county}}</div>
<div>{{"收件人" + item.name}}</div>
<div>{{"联系方式:" + item.tel}}</div>
</div>
</template>
</van-cell>
</template>
@@ -305,7 +302,7 @@ layout("/mobile/platform.html"){
<van-button @click="openAddressManage" block round
style="height: 40px;margin: 5px 0"
type="danger">
地址管理
新增地址
</van-button>
</div>
</div>
@@ -372,7 +369,9 @@ layout("/mobile/platform.html"){
<div class="van-cell-group--inset" v-if="projectInfo.signMode===2">
<van-cell>
<template #title>
<div style="font-weight: bold;font-size: 15px">电子签名</div>
<div style="font-weight: bold;font-size: 15px">
<van-icon class="van-cell__left-icon" color="red" name="location"
slot="icon"></van-icon>电子签名</div>
</template>
</van-cell>
<van-cell title="">
@@ -535,12 +534,24 @@ layout("/mobile/platform.html"){
this.$toast('一共可以选择' + multiSelectNum + '份,您目前只选择了' + this.sumSelectNum + '份,快去选择吧!')
return
}
} else {
if (this.sumSelectNum === 0) {
//用户选择了多份
this.$toast('您还没有选择福利套餐,快去选择吧!')
return
}
}
this.confirmPopup = true
await this.selectAddressList()
//回显用户的地址
if (this.projectInfo.provideMode === 3 && this.isSelect && this.userSelection) {
this.selectAddress = this.userSelection[0].receiveAddress
} else if (this.projectInfo.provideMode === 3 && !this.isSelect){
if (this.addressList && this.addressList.length > 0) {
const resp = this.addressList.find(v=> v.isDefault)
this.addressClick(resp)
}
}
//回显用户签名
@@ -612,12 +623,18 @@ layout("/mobile/platform.html"){
//地址管理
openAddressManage() {
pjaxReplace('/mobile/welfare/mine/address?projectId=' + this.projectId)
pjaxReplace('/mobile/welfare/mine/addressEdit?projectId=' + this.projectId)
window.sessionStorage.setItem('welfareProjectId', this.projectId)
const formData = {
projectInfo: this.projectInfo,
signData: this.signData || null
}
window.sessionStorage.setItem('welfareProjectSelectInfo' + "${@shiro.getPrincipalProperty('loginname')}", JSON.stringify(formData))
},
clickSelectAddressPopup() {
this.selectAddressList()
// this.selectAddressList()
this.selectAddressPopup = true
},
@@ -657,7 +674,7 @@ layout("/mobile/platform.html"){
const id = GetQueryString("projectId")
if (!id) return
this.projectId = id
this.getProjectInfo()
// this.getChoice()
getEnumOptions("WelfareProvideMode").then(res => {
this.welfareProvideMode = res
@@ -665,9 +682,21 @@ layout("/mobile/platform.html"){
getEnumOptions("WelfareSignMode").then(res => {
this.welfareSignMode = res
})
const loginname = "${@shiro.getPrincipalProperty('loginname')}"
const formData = window.sessionStorage.getItem('welfareProjectSelectInfo' + loginname);
if (formData) {
const resp = JSON.parse(formData)
this.projectInfo = resp.projectInfo
this.signData = resp.signData
this.confirmSelect()
window.sessionStorage.removeItem('welfareProjectSelectInfo' + loginname)
// this.selectAddressPopup = true
} else {
this.getProjectInfo()
}
},
})
</script>
<!--#
}
@@ -51,7 +51,8 @@ layout("/mobile/platform.html"){
methods: {
back() {
if (this.projectId) {
pjaxReplace("/mobile/welfare/mine/address?projectId=" + this.projectId)
// pjaxReplace("/mobile/welfare/mine/address?projectId=" + this.projectId)
pjaxReplace("/mobile/welfare/list/receive?projectId=" + this.projectId)
} else {
pjaxReplace("/mobile/welfare/mine/address")
}
@@ -115,6 +115,11 @@ layout("/layouts/platform.html"){
<el-button type="primary" icon="el-icon-search"
@click="doSearch"></el-button>
<el-button type="primary" @click="exportChange">导出异动人员</el-button>
<el-tooltip class="item" effect="dark" content="请勿随意点击,该操作会直接抹除数据库数据" placement="top">
<el-button v-if="loginname == 'superadmin'"
type="primary" @click="deleteNotInSourceUser">删除非人事库人员</el-button>
</el-tooltip>
</div>
</el-col>
</el-row>
@@ -333,6 +338,8 @@ layout("/layouts/platform.html"){
searchName: "u.username",
},
loginname: "${@shiro.getPrincipalProperty('loginname')}",
userId: "",
unions: [],
units: [],
@@ -521,6 +528,21 @@ layout("/layouts/platform.html"){
window.open(loc() + '/exportChangePeo?searchName=' + searchName + '&searchKeyword=' + searchKeyword + '&unitId=' + (unitId ? unitId : '') +
'&userState=' + (userState ? userState : '') + '&personType=' + (personType ? personType : '') + '&changeDate=' + (changeDate ? changeDate : ''))
},
deleteNotInSourceUser(){
this.$confirm('是否确定删除【非人事库人员】数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post('/platform/user/part/update/deleteNotInSourceUser')
if (resp.code === 0) {
this.pageData()
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
})
},
async getPartCount() {
const resp = await $.get('/platform/user/part/update/getPartCount')
this.upDataCount = resp.data
@@ -272,7 +272,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
async checkActivity() {
@@ -337,7 +337,7 @@ layout("/layouts/platform.html"){
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
async remoteMethod(query) {
@@ -208,7 +208,7 @@ layout("/layouts/platform.html"){
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -206,7 +206,7 @@ layout("/layouts/platform.html"){
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -205,7 +205,7 @@
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -206,7 +206,7 @@
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -206,7 +206,7 @@
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -419,7 +419,7 @@
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
dropdownCommand(command) {
@@ -264,7 +264,7 @@
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
//下拉菜单操作
@@ -490,7 +490,7 @@ layout("/layouts/platform.html"){
'search': httpVueLoader('/components/activityBx/ActivityBxSearch.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue?v=' + new Date().getTime()),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
methods: {
async remoteMethod(query) {
@@ -100,7 +100,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
@@ -208,4 +208,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -85,7 +85,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
@@ -171,4 +171,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -120,7 +120,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
@@ -212,4 +212,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -188,7 +188,7 @@ layout("/layouts/platform.html"){
formRules: {
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
other: [{required: true, message: '请选择立案意见', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
resultOptions: [],
isNode: false
@@ -318,4 +318,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -190,7 +190,7 @@ layout("/layouts/platform.html"){
formRules: {
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
other: [{required: true, message: '请选择立案意见', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
resultOptions: [],
isNode: false,
@@ -359,4 +359,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -190,7 +190,7 @@ layout("/layouts/platform.html"){
},
formRules: {
opinion: [{required: true, message: '请输入审批意见', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
isNode: false,
oneKeyRemindDialogVisible: false,
@@ -286,4 +286,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -419,7 +419,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
@@ -487,7 +487,7 @@ layout("/layouts/platform.html"){
// hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
typeId: [{required: true, message: '请输入提案类型', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
multipleSelection: [],
editRow: {},
@@ -766,4 +766,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -280,7 +280,7 @@ layout("/layouts/platform.html"){
formRules: {
hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
}
}
},
@@ -434,4 +434,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -164,7 +164,7 @@ layout("/layouts/platform.html"){
},
formRules: {
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
oneKeyRemindDialogVisible: false,
oneKeyTableData: []
@@ -275,4 +275,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -210,7 +210,7 @@ layout("/layouts/platform.html"){
message: '请选择对承办单位办理态度的评价',
trigger: ['blur', 'change']
}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
oneKeyRemindDialogVisible: false,
oneKeyTableData: []
@@ -329,4 +329,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -101,7 +101,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
@@ -221,4 +221,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -272,7 +272,7 @@ layout("/layouts/platform.html"){
formRules: {
replyContent: [{validator: replyContentBrief, trigger: ['blur', 'change']}],
implementState: [{required: true, message: '请选择落实情况', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}]
},
proTableSelection: [],
forwardDialog: false,
@@ -500,4 +500,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -167,7 +167,7 @@ layout("/layouts/platform.html"){
},
formRules: {
implementUnitId: [{required: true, message: '请选择建议落实部门', trigger: ['blur', 'change']}],
seconderSign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}],
seconderSign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}],
},
}
},
@@ -267,4 +267,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -99,7 +99,7 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
@@ -184,4 +184,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -197,7 +197,7 @@ layout("/layouts/platform.html"){
committeeId: [{required: true, message: '请选择所属委员会', trigger: ['blur', 'change']}],
/*typeId: [{required: true, message: '请选择提案类型', trigger: ['blur', 'change']}],*/
implementUnitId: [{required: false, message: '请选择建以落实部门', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请使用【手机钉钉】扫描二维码进行签字', trigger: ['blur', 'change']}],
brief: [{validator: validBrief, trigger: ['blur', 'change']}],
measures: [{validator: validMeasures, trigger: ['blur', 'change']}],
},
@@ -412,4 +412,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -269,7 +269,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue?v=4.0.0'),
@@ -410,4 +410,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -239,7 +239,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue?v=4.0.0'),
@@ -451,4 +451,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -257,7 +257,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
@@ -343,4 +343,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -206,7 +206,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue'),
@@ -257,7 +257,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
@@ -343,4 +343,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -281,7 +281,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
@@ -380,4 +380,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -267,7 +267,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
@@ -355,4 +355,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -273,7 +273,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
@@ -365,4 +365,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -66,7 +66,7 @@ layout("/layouts/platform.html"){
components: {
'syr-table': httpVueLoader('/components/syr/syrtable.vue'),
'syr-info': httpVueLoader('/components/syr/syrinfo.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
@@ -126,7 +126,7 @@ layout("/layouts/platform.html"){
components: {
'syr-table': httpVueLoader('/components/syr/syrtable.vue'),
'syr-info': httpVueLoader('/components/syr/syrinfo.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'syr-info-new': httpVueLoader('/components/syr/SyrInfoNew.vue'),
},
methods: {
@@ -5,8 +5,8 @@ const activity = {
<div class="card-title" slot="header">最新活动</div>
<div v-if="activityOptions && activityOptions.length > 0" v-for="item in activityOptions" :key="item.id">
<div style="width: 100%">
<div style="background-color: #fff; position: relative; margin-bottom: 10px">
<div style="display: flex; justify-content: center; align-items: center">
<div style="background-color: #fff; position: relative; margin-bottom: 10px;cursor: pointer">
<div style="display: flex; justify-content: center; align-items: center" @click="enterActivity(item)">
<el-image :src="CREATE_PREVIEW_URL(item.cover)" alt="" fit="fill"
style="margin: 3px 14px 0 0; width: 100px; height: 70px; border-radius: 8px">
<div slot="error" class="image-slot">
@@ -627,17 +627,29 @@ layout("/layouts/platform.html"){
if (isCheckBox === "checkBox") {
if (this.sumSelectNum < multiSelectNum) {
//用户没有选择完
this.$message('一共可以选择' + multiSelectNum + '份,您目前只选择了' + this.sumSelectNum + '份,快去选择吧!')
this.$message.warning('一共可以选择' + multiSelectNum + '份,您目前只选择了' + this.sumSelectNum + '份,快去选择吧!')
return
}
} else {
if (this.sumSelectNum === 0) {
//用户选择了多份
this.$message.warning('您还没有选择福利套餐,快去选择吧!')
return
}
}
if (this.formData.receiveAddress == null || this.formData.receiveAddress === '') {
this.$message.warning('请填写收货地址')
return
if (this.projectInfo.provideMode == 3) {
if (this.formData.receiveAddress == null || this.formData.receiveAddress === '') {
this.$message.warning('请填写收货地址')
return
}
}
if (this.formData.sign == null || this.formData.sign === '') {
this.$message.warning('请签字')
return
if (![1,4].includes(this.projectInfo.signMode)) {
if (this.formData.sign == null || this.formData.sign === '') {
this.$message.warning('请签字')
return
}
}
const formData = this.projectInfo.welfareProjectSubjects[0].options.filter(v => v.selectNum >= 1).map(v => {
return {
@@ -199,7 +199,7 @@ layout("/layouts/platform.html"){
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/condolence/Info.vue'),
},
methods: {
@@ -261,4 +261,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -178,7 +178,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
'info': httpVueLoader('/components/difficulty/info.vue'),
},
data() {
@@ -258,4 +258,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -107,7 +107,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
components: {
'wwj-info': httpVueLoader('/components/zgfw/wwj/wwj.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
},
data() {
return {
@@ -128,7 +128,7 @@ layout("/layouts/platform.html"){
}
},
components: {
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
},
methods: {
async querySqr(key) {
@@ -183,7 +183,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
components: {
'wwj-info': httpVueLoader('/components/zgfw/wwj/wwj.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0')
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1')
},
data() {
return {
@@ -100,7 +100,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
components: {
'wwj-info': httpVueLoader('/components/zgfw/wwj/wwj.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.1'),
},
data() {
return {