Commit 1be1155f by Tang

feat: merge

parents 9c7bf7ec 1d7bdd35
VUE_APP_CURRENTMODE = "development" VUE_APP_CURRENTMODE = "development"
VUE_APP_HOST_URL = "http://81.68.189.225:9091" VUE_APP_HOST_URL = "http://81.68.189.225:9091"
VUE_APP_API_URL = "/"
VUE_APP_GDS_URL = "/gds"
VUE_APP_LOG = true VUE_APP_LOG = true
\ No newline at end of file
VUE_APP_CURRENTMODE = "production" VUE_APP_CURRENTMODE = "production"
VUE_APP_HOST_URL = "http://192.168.0.47:8090" VUE_APP_HOST_URL = "http://81.68.189.225:9091"
VUE_APP_API_URL = "http://81.68.189.225:9091"
VUE_APP_GDS_URL = "http://data-studio.gds.org.cn"
VUE_APP_LOG = false VUE_APP_LOG = false
\ No newline at end of file
<template> <template>
<div id="app"> <div id="app">
<router-view></router-view> <router-view></router-view>
</div> </div>
</template> </template>
<script> <script>
export default {
created() {
console.log(process.env, 'process.env');
},
};
</script> </script>
<style> <style>
.container-fluid{ .container-fluid {
padding: 0 !important; padding: 0 !important;
} }
</style> </style>
import { // import {
GET // GET
} from "./fetch.js" // } from "./fetch.js"
import Vue from "vue";
import VueResource from 'vue-resource'
Vue.use(VueResource);
const Prefix = process.env.NODE_ENV === 'development' ? '/gs1' : ''; const Prefix2 = process.env.NODE_ENV === 'development' ? '/gs1' : process.env.VUE_APP_API_URL;
/* 公共接口 */ /* 公共接口 */
// 首页大轮播图 // 首页大轮播图
const getCaptcha = (query = {}) => { const getCaptcha = (query = {}) => {
return GET(`${Prefix}/office/captcha.jpg`, query) return Vue.http.get(`${Prefix2}/office/captcha.jpg?uuid=${query.uuid}`, {
responseType: "blob",
})
} }
import home from "./module/home.js" import home from "./module/home.js"
import business from "./module/business.js" import business from "./module/business.js"
import search from "./module/search.js"
const api = { const api = {
home, home,
business, business,
search,
getCaptcha, getCaptcha,
} }
......
...@@ -18,7 +18,9 @@ import { ...@@ -18,7 +18,9 @@ import {
getToken getToken
} from "@/utils/cookie.js" } from "@/utils/cookie.js"
const baseUrl = process.env.BASE_URL const baseUrl = process.env.VUE_APP_API_URL;
console.log(process.env, baseUrl, 'baseUrl');
function fetch(options) { function fetch(options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const instance = axios.create({ const instance = axios.create({
......
import {
POST
} from "../fetch.js"
const Prefix = process.env.NODE_ENV === 'development' ? '/gs1' : '';
// 条码查询—GLN查询/境外码查询
const searchGln = (params = {}) => {
return POST(`${Prefix}/office/codeSearch/api/gln`, params)
}
// 条码查询—缩短码查询
const searchGetList = (params = {}) => {
return POST(`${Prefix}/office/shortcode/api/getList`, params)
}
export default {
searchGln,
searchGetList,
}
...@@ -3,1046 +3,3 @@ export const QUERY_PAGE_SIZE = 10 ...@@ -3,1046 +3,3 @@ export const QUERY_PAGE_SIZE = 10
export const QUERY_PAGE_SIZE_10 = 10 export const QUERY_PAGE_SIZE_10 = 10
export const QUERY_PAGE_SIZE_20 = 20 export const QUERY_PAGE_SIZE_20 = 20
export const QUERY_PAGE_SIZE_All = 999999 export const QUERY_PAGE_SIZE_All = 999999
// 二维码状态
export const QrCodeStatus = {
// 就位
ready: 0,
// 已扫描
scanned: 1,
// 已同意
agreed: 2,
// 已取消
cancelled: 3,
// 过期
outdated: 4,
}
// 家庭成员角色
export const FamilyRoleType = {
// 物权所有者
owner: 0,
// 家庭成员
member: 1
}
// 小区管理角色
export const BlockRoleType = {
// 普通业主
simple: 0,
// 综治局 超级管理员
admin: 1,
// 物业人员
servant: 2,
// 会计
accountant: 3,
// 业委会委员
comMember: 4,
// 临管人员
temporal: 5,
// 社区
community: 6,
// 物管办
management: 7,
// 网格员
gridManager: 8,
}
export const BlockRoleSortIndex = (type) => {
if (type === BlockRoleType.admin) {
return 1
} else if (type === BlockRoleType.comMember) {
return 2
} else if (type === BlockRoleType.accountant) {
return 3
} else if (type === BlockRoleType.servant) {
return 4
} else if (type === BlockRoleType.temporal) {
return 5
} else if (type === BlockRoleType.community) {
return 6
} else if (type === BlockRoleType.management) {
return 7
} else if (type === BlockRoleType.gridManager) {
return 8
}
return 9
}
export const BlockRoleNameFromType = (type) => {
if (type === BlockRoleType.admin) {
return "综治局管理员"
} else if (type === BlockRoleType.servant) {
return "物业人员"
} else if (type === BlockRoleType.accountant) {
return "代账会计"
} else if (type === BlockRoleType.comMember) {
return "业委会委员"
} else if (type === BlockRoleType.simple) {
return "普通用户"
} else if (type === BlockRoleType.temporal) {
return "临管人员"
} else if (type === BlockRoleType.community) {
return "社区人员"
} else if (type === BlockRoleType.management) {
return "物管办"
} else if (type === BlockRoleType.gridManager) {
return "网格员"
}
return "普通用户"
}
export const GetBlockRoleTypeFromString = (roleStr) => {
if (roleStr === 'admin') {
return BlockRoleType.admin
} else if (roleStr === 'servant') {
return BlockRoleType.servant
} else if (roleStr === 'accountant') {
return BlockRoleType.accountant
} else if (roleStr === 'comMember') {
return BlockRoleType.comMember
} else if (roleStr === 'temporal') {
return BlockRoleType.temporal
} else if (roleStr === 'community') {
return BlockRoleType.community
} else if (roleStr === 'management') {
return BlockRoleType.management
} else if (roleStr === 'gridManager') {
return BlockRoleType.gridManager
}
return BlockRoleType.simple
}
// 账户类型
export const AccountType = {
// 公共收益账户
normal: 0,
// 维修基金账户
repair: 1
}
// 账户资金流向类型
export const AccountDirectionType = {
// 收入
income: 0,
// 支出
outcome: 1
}
export const MatterType = {
// 全部
all: '0',
// 公函
letter: '1',
// 业主大会
vote: '2',
// 业主大会-表决结果
voteResult: '3',
// 公示
publicity: '4',
// 公告
announcement: '5',
// 会议纪要
minutes: '6',
// 整改单
rectification: '7'
}
export const GetMatterTypeString = (type) => {
const matterType = String(type)
if (matterType === MatterType.letter) {
return "公函"
} else if (matterType === MatterType.vote) {
return "业主大会"
} else if (matterType === MatterType.voteResult) {
return "业主大会-表决结果"
} else if (matterType === MatterType.publicity) {
return "公示"
} else if (matterType === MatterType.announcement) {
return "公告"
} else if (matterType === MatterType.minutes) {
return "会议纪要"
} else if (matterType === MatterType.rectification) {
return "整改单"
}
return "";
}
export const GetMatterTypeColor = (type) => {
const matterType = String(type)
if (matterType === MatterType.letter) {
return "#7275EF"
} else if (matterType === MatterType.vote) {
return "#EF7272"
} else if (matterType === MatterType.voteResult) {
return "#C16859"
} else if (matterType === MatterType.publicity) {
return "#D1AAF5"
} else if (matterType === MatterType.announcement) {
return "#58ACAB"
} else if (matterType === MatterType.minutes) {
return "#6B6A6A"
} else if (matterType === MatterType.rectification) {
return "#FFB73F"
}
return "#6B6A6A";
}
export const MatterStatusOwnerCode = {
// 拒绝公示
refuse: -1,
// 业委会投票未开始
ownerUnStart: 0,
// 业委会投票进行中
ownerInProgress: 1,
// 居民投票未开始
memberUnStart: 2,
// 居民投票进行中
memberInProgress: 3,
// 社区审核中
communityInProgress: 4,
// 物管会审核中
managementInProgress: 5,
// 物管办驳回
managementRefuse: 97,
// 社区驳回
communityRefuse: 98,
// 事项结束
end: 99
}
/**
* 业委会状态
*/
export const PHASE_STATUS = {
OneStage: 1,
TwoStage: 2,
ThreeStage: 3,
FiveStage: 5,
SixStage: 6,
SevenStage: 7,
EngitStage: 8,
}
/**
* 一阶段状态
*/
export const ONE_STAGE_STATUS = {
init: {
num: 0,
title: '待申请'
},
submitted: {
num: 1,
title: '申请待审核'
},
naming: {
num: 2,
title: '联名中'
},
namingEnd: {
num: 3,
title: '联名已结束待审核'
},
approved: {
num: 4,
title: '联名申请已通过'
},
rejected: {
num: 9,
title: '驳回'
},
rejectedSubmit: {
num: 99,
title: '申请事项终止'
},
rejectedNaming: {
num: 98,
title: '联名事项终止'
}
}
/**
* 二阶段状态
*/
export const TWO_STAGE_STATUS = {
init: {
num: 0,
title: '待起草'
},
checkingDraft: {
num: 1,
title: '待检查'
},
fixing: {
num: 2,
title: '检查未过,待修改'
},
checkingFix: {
num: 3,
title: '待检查'
},
renName: {
num: 4,
title: '待报名开始'
},
renPending: {
num: 14,
title: '待报名结束'
},
renEnd: {
num: 15,
title: '报名结束'
},
approvingReg: {
num: 5,
title: '报名已结束'
},
naming: {
num: 6,
title: '待联名结束'
},
namingEnd: {
num: 17,
title: '联名已结束'
},
approvingNaming: {
num: 7,
title: '联名已结束待审核'
},
pubCandidatesNotice: {
num: 8,
title: '待公示'
},
fixingCandidatesNotice: {
num: 9,
title: '检查未过,待修改'
},
approvingCandidates: {
num: 10,
title: '待检查'
},
wait: {
num: 11,
title: '筹备组候选人已公示'
},
next: {
num: 12,
title: '筹备组候选人已确定'
},
regNotEnough: {
num: 96,
title: '报名数量不足结束流程'
},
regApproveNotEnough: {
num: 97,
title: '报名审核数量不足结束流程'
},
namingNotEnough: {
num: 98,
title: '联名数量不足结束流程'
},
namingApproveNotEnough: {
num: 90,
title: '联名审核数量不足结束流程'
},
reject: {
num: 99,
title: '公示期内终止'
}
}
export const TWO_STAGE_APPLICANT_STATUS = {
init: {
num: 0,
title: '保存未提交'
},
reg: {
num: 1,
title: '提交报名待审核'
},
regApproved: {
num: 2,
title: '报名审核通过'
},
naming: {
num: 3,
title: '联名待审核'
},
candidate: {
num: 4,
title: '联名审核通过'
},
member: {
num: 5,
title: '被选举成为筹备组成员'
},
memberQuit: {
num: 51,
title: '退出筹备组成员'
},
namingNotEnough: {
num: 97,
title: '联名人数不足'
},
namingReject: {
num: 98,
title: '联名审核不通过'
},
regReject: {
num: 99,
title: '报名审核未通过'
}
}
/**
* 三阶段状态
*/
export const THREE_STAGE_STATUS = {
init: {
num: 0,
title: '待起草'
},
submitted: {
num: 1,
title: '待检查'
},
fixing: {
num: 2,
title: '检查未过,待修改'
},
approveElectNotice: {
num: 3,
title: '待检查'
},
electoStart: {
num: 41,
title: '成员互选中'
},
electoRetry: {
num: 42,
title: '成员互选中'
},
electoEnd: {
num: 43,
title: '互选结果待确认'
},
electVice: {
num: 5,
title: '副组长选举中'
},
electViceRetry: {
num: 51,
title: '副组长选举中'
},
electViceApprove: {
num: 52,
title: '选举结果待确认'
},
notice: {
num: 6,
title: '待公示'
},
noticeFixing: {
num: 61,
title: '检查未过,待修改'
},
approveListNotice: {
num: 7,
title: '待检查'
},
wait: {
num: 70,
title: '筹备组成员已公示'
},
next: {
num: 8,
title: '筹备组成员已确定'
},
rejected: {
num: 99,
title: '公示期内终止'
}
}
/**
* 四阶段状态
*/
export const FOUR_STAGE_STATUS = {
draft: {
num: 10,
title: '待起草'
},
nego: {
num: 11,
title: '商议中'
},
fix: {
num: 12,
title: '异议待修正'
},
approve: {
num: 13,
title: '商议完成待检查'
},
notice: {
num: 14,
title: '待公示'
},
noticeFix: {
num: 15,
title: '检查未过,待修改'
},
noticeApprove: {
num: 16,
title: '待检查'
},
noticePass: {
num: 17,
title: '已公示'
},
next: {
num: 88,
title: '已公示'
}
}
/**
* 五阶段状态
*/
export const FIVE_STAGE_STATUS = {
// init: {
// num: 0,
// title: '待起草'
// },
checkingDraft: {
num: 1,
title: '待检查'
},
fixing: {
num: 2,
title: '检查未过,待修改'
},
checkingFix: {
num: 3,
title: '待检查'
},
renName: {
num: 4,
title: '待报名开始'
},
renPending: {
num: 14,
title: '待报名结束'
},
renEnd: {
num: 15,
title: '报名已结束'
},
approvingReg: {
num: 5,
title: '报名结束待审核'
},
naming: {
num: 6,
title: '联名中'
},
namingEnd: {
num: 17,
title: '联名已结束'
},
approvingNaming: {
num: 7,
title: '联名结束待审核'
},
pubCandidatesNotice: {
num: 8,
title: '待公示'
},
fixingCandidatesNotice: {
num: 9,
title: '检查未过,待修改'
},
approvingCandidates: {
num: 10,
title: '待检查'
},
wait: {
num: 11,
title: '业委会参选人已公示'
},
next: {
num: 12,
title: '业委会参选人已确定'
},
NamingNotEnough: {
num: 90,
title: '联名审核数量不足结束流程'
},
regNotEnough: {
num: 96,
title: '报名数量不足结束流程'
},
regApproveNotEnough: {
num: 97,
title: '报名审核数量不足结束流程'
},
namingNotEnough: {
num: 98,
title: '联名数量不足结束流程'
},
reject: {
num: 99,
title: '公示期内终止'
},
unknown: {
num: -1,
title: '未知'
}
}
/**
* 六阶段状态
*/
export const SIX_STAGE_STATUS = {
init: {
num: 0,
title: '待起草'
},
submitted: {
num: 1,
title: '待检查'
},
fixing: {
num: 2,
title: '检查未过,待修改'
},
approveFixng: {
num: 3,
title: '待检查'
},
electStapt: {
num: 4,
title:'推选中'
},
electRetry: {
num: 41,
title: '推选中'
},
electEnd: {
num: 5,
title: '报名已结束'
},
approvingReg: {
num: 5,
title: '推选结束'
},
listNotice: {
num: 6,
title: '推选完成'
},
listNoticeFixing: {
num: 61,
title: '推选完成'
},
approveListNotice: {
num: 7,
title: '推选完成'
},
wait: {
num: 70,
title: '业委会候选人已公示'
},
next: {
num: 8,
title: '业委会候选人已确定'
},
rejected: {
num: 99,
title: '公示期内终止'
}
}
/**
* 七阶段状态
*/
export const SEVEN_STAGE_STATUS = {
init: {
num: 0,
title: '待起草'
},
noticeSubmitted: {
num: 1,
title: '待检查'
},
noticeToModify: {
num: 2,
title: '检查未过,待修改'
},
noticePass: {
num: 3,
title: '待投票开始'
},
voting: {
num: 4,
title: '待投票结束'
},
voted: {
num: 5,
title: '投票结束'
},
votedResultAnnounceApprovalPending: {
num: 6,
title: '投票结束'
},
votedResultAnnounceToModify: {
num: 7,
title: '投票结束'
},
votedResultDismissedDuring: {
num: 8,
title: '业委会成员已公示'
},
success: {
num: 9,
title: '业委会成员已确定'
},
fail: {
num: 99,
title: '公示期内终止'
},
notMoreThanHalfFail: {
num: 91,
title: '事项终止'
}
}
/**
* 政治面貌
*/
export const RENOVATION_NAME = {
COMMUNIST: '中共党员',
COMMUNIST_PRE: '中共预备党员',
LEAGUE: '共青团员',
NONPARTY: '无党派人士',
MASS: '群众'
}
export const FIVE_STAGE_APPLICANT_STATUS = {
init: {
num: 0,
title: '保存未提交'
},
reg: {
num: 1,
title: '提交报名待审核'
},
regApproved: {
num: 2,
title: '报名审核通过'
},
naming: {
num: 3,
title: '联名待审核'
},
candidate: {
num: 4,
title: '联名审核通过'
},
member: {
num: 5,
title: '被选举成为业委会成员'
},
memberQuit: {
num: 41,
title: '成为候选人'
},
namingNotEnough: {
num: 97,
title: '联名人数不足'
},
namingReject: {
num: 98,
title: '联名审核不通过'
},
regReject: {
num: 99,
title: '报名审核未通过'
}
}
/**
* 顶部路由按钮
*/
export const ROUTER_LINK_CODE_NAME = [
{
code: 'TP02',
name: '发布筹备组候选人报名通知',
url: '/cmtmgmt/twoStageRegistrationNotice'
},
{
code: 'TP03',
name: '发起筹备组选举',
url: '/cmtmgmt/threeStageElectNotice'
},
{
code: 'TP05',
name: '发布业侯报名通知',
url: '/cmtmgmt/fiveStageRegistrationNotice'
},
{
code: 'TP06',
name: '发起选举通知',
url: '/cmtmgmt/launchOwnerVote'
},
{
code: 'TP07',
name: '发起业主大会',
url: '/cmtmgmt/launchOwnerVote'
},
{
code: 'TP08',
name: '发起业委会主任选举',
url: '/cmtmgmt/threeStageBrightCode'
}
]
/**
* 操作按钮
*/
export const OPERATE_CODE_NAME = {
A01: '审批申请书',
A02: '审批联名人',
B01: '编辑通知',
B02: '检查通知',
B03: '修改通知',
B05: '审批报名表',
B06: '审批联名表',
B07: '公示',
B08: '检查公示',
B09: '修改公示',
B10: '终止',
C01: '编辑筹备组选举通知',
C02: '检查通知',
C03: '修正通知',
C04: '亮码',
C05: '确认成员选举结果',
C06: '确认副组长选举结果',
C07: '公示选举结果',
C08: '检查公示',
C09: '修改公示',
C10: '终止',
C11: '亮码',
// 《业委会选举办法》文件
D11: '检查',
D12: '公示',
D13: '修改公示',
D14: '检查公示',
// 《管理规约》文件
D21: '检查',
D22: '公示',
D23: '修改公示',
D24: '检查公示',
// 《议事规则》文件
D31: '检查',
D32: '公示',
D33: '修改公示',
D34: '检查公示',
// 《业主大会召开方案》文件
D41: '检查',
D42: '公示',
D43: '修改公示',
D44: '检查公示',
// 《业主大会费用预算》文件
D51: '检查',
D52: '公示',
D53: '修改公示',
D54: '检查公示',
// 《业主票权》文件
D61: '检查',
D62: '公示',
D63: '修正',
D64: '检查',
E01: '编辑',
E02: '修改',
E03: '检查',
E04: '审批',
E05: '审批',
E06: '公示',
E07: '修改',
E08: '检查',
E09: '终止',
// 第六阶段
F01: '编辑',
F02: '修改',
F03: '检查',
F04: '亮码',
F05: '确认',
F06: '公示',
F07: '修改',
F08: '检查',
F09: '终止',
// 第七阶段
G01: '检查',
G02: '修改',
G03: '公示',
G04: '检查',
G05: '修改',
G06: '终止',
// 第八阶段
H01: '确认',
H02: '公示',
H03: '检查',
H04: '修改',
H05: '亮码',
}
/**
* 资料名称
*/
export const MATERIAL_CODE_NAME = {
AF01: '申请书',
AF02: '联名书',
BF01: '通知',
BF02: '报名表',
BF03: '联名表',
BF04: '公示名单',
CF01: '选举通知',
CF02: '成员选举结果',
CF03: '副组长选举结果',
CF04: '选举结果公示',
// 阶段四
DF01: '历史编撰记录',
DF02: '历史编撰记录',
DF03: '历史编撰记录',
DF04: '历史编撰记录',
DF05: '历史编撰记录',
DF06: '历史编撰记录',
DF11: '《业委会选举办法》文件公示',
DF12: '《管理规约》文件公示',
DF13: '《议事规则》文件公示',
DF14: '《业主大会召开方案》文件公示',
DF15: '《业主大会费用预算》文件公示',
DF16: '《业主票权》文件公示',
// 阶段五
EF01: '通知',
EF02: '报名表',
EF03: '联名表',
EF04: '公示',
// 阶段六
FF01: '通知',
FF02: '推选结果表',
FF03: '公示',
// 阶段七
GF01: '通知',
GF02: '投票结果表',
GF03: '公示',
// 阶段八
HF01: '推选结果表',
HF02: '公示'
}
export const COMMITTEE_TITLE = [
{
name: "业委会候选人报名通知",
code: 5
},
{
name: '业委会参选人名单公示',
code: 51,
},
{
name: "业委会参选人名单公示审批",
code: 52
},
{
name: "业委会候选人推选通知",
code: 6,
},
{
name: "业委会候选人名单公示",
code: 61
},
{
name: "业委会候选人名单公示审批",
code: 62
}
]
export const DETAILS_TITLE = [
{
name: "业委会候选人推选通知",
code: 'F03'
},
{
name: '业委会候选人推选选举结果',
code: 'F05',
},
{
name: "业委会候选人名单公示",
code: 'F06'
},
{
name: "业委会候选人名单公示",
code: 'F08',
type: true
},
{
name: "业委会候选人名单公示",
code: 'F09',
type: true
},
{
name: "业委会候选人名单公示",
code: 'FF03',
type: true
},
{
name: "业委会选举表决单",
code: 'G01'
},
{
name: '业委会选举表决结果的公示',
code: 'G03',
type: true
},
{
name: "业委会委员选举公示",
code: 'G04',
type: true
},
{
name:"业委会委员选举公示",
code:'G06',
type:true
},
{
name:"业委会选举结果公示",
code:'GF03',
type:true
},
{
name:"业委会主任选举结果",
code:'H01',
},
{
name: "业委会主任选举结果",
code: 'H01',
},
{
name: '业委会主任推选结果公示',
code: 'H02',
type: true
},
{
name: "业委会主任选举结果公示",
code: 'H03',
type: true
},
{
name: "业委会主任选举结果公示",
code: 'HF02',
type: true
},
]
\ No newline at end of file
import Vue from "vue" import Vue from "vue"
import { BlockRoleType } from "@/config/constant"
import store from "@/vuex/store";
Vue.directive("preventReClick",{ Vue.directive("preventReClick",{
inserted(el,binding){ inserted(el,binding){
...@@ -15,43 +11,6 @@ Vue.directive("preventReClick",{ ...@@ -15,43 +11,6 @@ Vue.directive("preventReClick",{
} }
}) })
Vue.directive("permission", {
bind(el, { value }) {
let isHas = false
const roleId = store.getters["user/userRole"];
// 设置业委会委员、会计、物业 需要管理员权限
if (value === 'block_set_comMember'
|| value === 'block_set_accountant'
|| value === 'block_set_servant') {
isHas = roleId === BlockRoleType.admin
}
// 会计有添加账号权限
if (value === 'account_add_balance') {
isHas = roleId === BlockRoleType.accountant
}
// 事项
if (value === 'matter_create_rectification' || value === 'matter_create_letter') {
isHas = roleId === BlockRoleType.comMember
}
if (value === 'matter_create'
|| value === 'matter_create_vote'
|| value === 'matter_create_vote-result'
|| value === 'matter_create_announce') {
isHas = roleId === BlockRoleType.comMember || roleId === BlockRoleType.temporal
}
setTimeout(() => {
if (!isHas) {
try {
el.parentNode.removeChild(el)
} catch (err) {
// console.log(err)
}
}
}, 200)
}
})
...@@ -5,7 +5,6 @@ import { ...@@ -5,7 +5,6 @@ import {
ceil ceil
} from "@/utils/createRound.js" } from "@/utils/createRound.js"
import * as Config from "@/config/constant"
// 格式化时间 yyyy-MM-dd HH:mm:ss // 格式化时间 yyyy-MM-dd HH:mm:ss
const timeFormat = (value, fmt = "yyyy-MM-dd HH:mm:ss", defValue = "- -") => { const timeFormat = (value, fmt = "yyyy-MM-dd HH:mm:ss", defValue = "- -") => {
...@@ -85,396 +84,9 @@ const percentageFormat = (value, digits = 2, method = "round", defReturn = '- -' ...@@ -85,396 +84,9 @@ const percentageFormat = (value, digits = 2, method = "round", defReturn = '- -'
return defReturn return defReturn
} }
// 小区管理人员
const blockManagersFormat = (roleData, type, defReturn = "- -") => {
const roleType = Config.GetBlockRoleTypeFromString(type)
if (roleData) {
const list = roleData[roleType]
if (list && Array.isArray(list)) {
return list.map(item => {
return item.realName
})
.filter((item, index, arr) => {
return !!item && arr.indexOf(item, 0) === index
}).join('、') || defReturn
}
}
return defReturn
}
// 事项类型
const matterTypeFormat = (type, defReturn = "- -") => {
return Config.GetMatterTypeString(type) || defReturn
}
const matterStatusFormat = (data, isCurrentBlockOnlyTemporal) => {
function timeFormat(param) {
return param < 10 ? '0' + param : param
}
function timeoutCountdown(endTime) {
const now = new Date().getTime()
if (now > endTime) {
return ""
}
let time = (endTime - now) / 1000
let day = parseInt(time / (60 * 60 * 24));
let hou = parseInt((time % (60 * 60 * 24)) / 3600);
let min = parseInt(((time % (60 * 60 * 24)) % 3600) / 60);
let sec = parseInt(((time % (60 * 60 * 24)) % 3600) % 60);
// let retTime = ""
// if (day > 0) {
// retTime += `${day}天`
// }
// if (hou > 0 || !!retTime){
// retTime += `${timeFormat(hou)}时`;
// }
// if (min > 0 || !!retTime) {
// retTime += `${timeFormat(min)}分`
// }
// retTime += `${timeFormat(sec)}秒`
// return retTime
if (day > 0) {
return `${day}${timeFormat(hou)}时`;
} else if (hou > 0) {
return `${timeFormat(hou)}${timeFormat(min)}分`;
} else {
return `${timeFormat(min)}${timeFormat(sec)}秒`;
}
}
const {
status,
matterType,
ownerStartTime,
ownerEndTime,
memberStartTime,
memberEndTime
} = data || {}
const defReturn = "- -"
if (status != null) {
const myStatus = Number(status)
if (myStatus === Config.MatterStatusOwnerCode.ownerUnStart) {
const str = timeoutCountdown(ownerStartTime)
return str ? str + (isCurrentBlockOnlyTemporal ? "后临管确认开始" : "后业委会投票开始") : defReturn
} else if (myStatus === Config.MatterStatusOwnerCode.ownerInProgress) {
const str = timeoutCountdown(ownerEndTime)
return str ? str + (isCurrentBlockOnlyTemporal ? "后临管确认结束" : "后业委会投票结束") : defReturn
} else if (myStatus === Config.MatterStatusOwnerCode.memberUnStart) {
const str = timeoutCountdown(memberStartTime)
return str ? str + "后居民投票开始" : defReturn
} else if (myStatus === Config.MatterStatusOwnerCode.memberInProgress) {
const str = timeoutCountdown(memberEndTime)
return str ? str + "后居民投票结束" : defReturn
} else if (myStatus === Config.MatterStatusOwnerCode.communityInProgress) {
return "社区待审"
} else if (myStatus === Config.MatterStatusOwnerCode.managementInProgress) {
return "物管办待审"
} else if (myStatus === Config.MatterStatusOwnerCode.communityRefuse) {
return "未通过,事项终止"
} else if (myStatus === Config.MatterStatusOwnerCode.managementRefuse) {
return "未通过,事项终止"
} else if (myStatus === Config.MatterStatusOwnerCode.refuse) {
return "未通过,事项终止"
} else if (myStatus === Config.MatterStatusOwnerCode.end) {
const myMatterType = String(matterType)
if (myMatterType === Config.MatterType.vote) {
return "投票已结束"
} else if (myMatterType === Config.MatterType.letter) {
const { isLetters = false } = data || {}
return isLetters ? "已回函" : "待回函"
} else if (myMatterType === Config.MatterType.rectification) {
const { isAccept = false } = data || {}
return isAccept ? "物业已接收" : "物业待接收"
}
return "已发布"
}
}
return defReturn
}
const matterVoteResultOptionIndexFommat = (index) => {
const indexList = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', "I", 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
if (index < 0 || index > 25) {
index = 0
}
return indexList[index]
}
const cmtmgmtStatusFormat = (data) => {
function timeFormat(param) {
return param < 10 ? '0' + param : param
}
function timeoutCountdown(endTime) {
const now = new Date().getTime()
if (now > endTime) {
return ""
}
let time = (endTime - now) / 1000
let day = parseInt(time / (60 * 60 * 24));
let hou = parseInt((time % (60 * 60 * 24)) / 3600);
let min = parseInt(((time % (60 * 60 * 24)) % 3600) / 60);
let sec = parseInt(((time % (60 * 60 * 24)) % 3600) % 60);
if (day > 0) {
return `${day}${timeFormat(hou)}时`;
} else if (hou > 0) {
return `${timeFormat(hou)}${timeFormat(min)}分`;
} else {
return `${timeFormat(min)}${timeFormat(sec)}秒`;
}
}
const {
phase,
status,
statusDesc,
timerEndTime
} = data || {}
const defReturn = "- -"
if (status != null) {
const myStatus = Number(status)
if (phase == Config.PHASE_STATUS.TwoStage) {
if (myStatus === Config.TWO_STAGE_STATUS.naming.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后联名结束' : defReturn
} else if (myStatus === Config.TWO_STAGE_STATUS.renPending.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后报名结束' : defReturn
} else if (myStatus === Config.TWO_STAGE_STATUS.renName.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后报名开始' : defReturn
} else {
return statusDesc
}
}else if(phase == Config.PHASE_STATUS.FiveStage){
if (myStatus === Config.FIVE_STAGE_STATUS.naming.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后联名结束' : defReturn
} else if (myStatus === Config.FIVE_STAGE_STATUS.renPending.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后报名结束' : defReturn
} else if (myStatus === Config.FIVE_STAGE_STATUS.renName.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后报名开始' : defReturn
} else {
return statusDesc
}
}else if(phase == Config.PHASE_STATUS.SevenStage){
if (myStatus === Config.SEVEN_STAGE_STATUS.voting.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后投票结束' : defReturn
}else if (myStatus === Config.SEVEN_STAGE_STATUS.noticePass.num) {
const str = timeoutCountdown(timerEndTime)
return str ? str + '后投票开始' : defReturn
} else {
return statusDesc
}
} else {
return statusDesc
}
}
return defReturn
}
const title = (value) => {
switch (value) {
case 'D11':
return '业委会选举办法草案'
case 'DF01':
return '业委会选举办法草案'
case 'D12':
return '业委会选举办法公示'
case 'D13':
return '业委会选举办法公示'
case 'DF11':
return '业委会选举办法公示'
case 'D14':
return '业委会选举办法的公示'
case 'D21':
return '管理规约草案'
case 'DF02':
return '管理规约草案'
case 'D22':
return '管理规约公示'
case 'D23':
return '管理规约公示'
case 'D24':
return '管理规约的公示'
case 'DF12':
return '管理规约编制'
case 'D31':
return '议事规则草案'
case 'DF03':
return '议事规则草案'
case 'D32':
return '议事规则公示'
case 'D33':
return '议事规则公示'
case 'D34':
return '议事规则的公示'
case 'DF13':
return '议事规则编制'
case 'D41':
return '业主大会召开方案草案'
case 'DF04':
return '业主大会召开方案草案'
case 'D42':
return '业主大会召开方案公示'
case 'D43':
return '业主大会召开方案公示'
case 'D44':
return '业主大会召开方案的公示'
case 'DF14':
return '业主大会召开方案编制'
case 'D51':
return '业主大会费用预算草案'
case 'DF05':
return '业主大会费用预算草案'
case 'D52':
return '业主大会费用预算公示'
case 'D53':
return '业主大会费用预算公示'
case 'D54':
return '业主大会费用预算的公示'
case 'DF15':
return '业主大会费用预算编制'
case 'D61':
return '业主票权草案'
case 'DF06':
return '业主票权草案'
case 'D62':
return '业主票权公示'
case 'D63':
return '业主票权公示'
case 'D64':
return '业主票权的公示'
case 'DF16':
return '业主票权编制'
}
}
//第四文件公示事项状态
const p4status = (value) => {
switch (value) {
case '10':
return '待草拟'
case '11':
return '商议中'
case '12':
return '异议待修正'
case '13':
return '商议完成待检查'
case '14':
return '待公示'
case '15':
return '检查未过,待修改'
case '16':
return '待检查'
case '17':
return '已公示'
case '88':
return '已公示'
}
}
//第六通知/公示事项状态
const p6status = (value) => {
switch (value) {
case '0':
return '待起草'
case '1':
return '待检查'
case '2':
return '检查未过,待修改'
case '3':
return '待检查'
case '4':
return '推选中'
case '41':
return '推选中'
case '5':
return '推选结束,待审核'
case '6':
return '推选完成,待公示'
case '61':
return '检查未过,待修改'
case '7':
return '待检查'
case '70':
return '业委会候选人已公示'
case '8':
return '业委会候选人已确定'
case '99':
return '公示期内终止'
}
}
//第七通知公示事项状态
const p7status = (value) => {
switch (value) {
case '0':
return '待起草'
case '1':
return '待检查'
case '2':
return '检查未过,待修改'
case '3':
return '待投票开始'
case '4':
return '待投票结束'
case '5':
return '投票结束待公示'
case '6':
return '待检查'
case '7':
return '检查未过,待修改'
case '8':
return '业委会成员已公示'
case '9':
return '业委会成员已确定'
case '99':
return '公示期内终止'
case '91':
return '双过半人数不足7人, 选举失败'
}
}
//第八通知公示事项状态
const p8status = (value) => {
switch (value) {
case '0':
return '待发起'
case '1':
return '投票中'
case '11':
return '投票中'
case '2':
return '待社区确认'
case '3':
return '待公示'
case '4':
return '待检查'
case '5':
return '检查未过,待修改'
case '6':
return '业委会主任已公示'
}
}
export default { export default {
timeFormat, timeFormat,
numberFormat, numberFormat,
percentageFormat, percentageFormat,
blockManagersFormat,
matterTypeFormat,
matterStatusFormat,
cmtmgmtStatusFormat,
matterVoteResultOptionIndexFommat,
title,
p4status,
p6status,
p7status,
p8status
} }
// 节流 // 节流
export function throttle(fn, interval) { export function throttle(fn, interval) {
let delay = interval || 1500 let delay = interval || 1500
let previous = 0 let previous = 0
return function() { return function () {
let now = Date.now() let now = Date.now()
let that = this let that = this
let args = arguments let args = arguments
if (now - previous > delay) { if (now - previous > delay) {
fn.apply(that, args) fn.apply(that, args)
previous = now previous = now
}
} }
}
} }
// 防抖 // 防抖
export function debounce(fn, interval) { export function debounce(fn, interval) {
let delay = interval || 1500 let delay = interval || 1500
let timer = null let timer = null
return function() { return function () {
let that = this let that = this
let args = arguments let args = arguments
timer && clearTimeout(timer) timer && clearTimeout(timer)
timer = setTimeout(function() { timer = setTimeout(function () {
fn.apply(that, args) fn.apply(that, args)
}, delay) }, delay)
} }
} }
var unique = 0; var unique = 0;
export function uuid(prefix) { export function uuid(prefix) {
const time = Date.now(); const time = Date.now();
const random = Math.floor(Math.random() * 1000000000); const random = Math.floor(Math.random() * 1000000000);
unique++; unique++;
return prefix + '_' + random + unique + String(time); return prefix + '_' + random + unique + String(time);
} }
// 一维数组转换成二维数组 // 一维数组转换成二维数组
export const groupList = (list, length) => { export const groupList = (list, length) => {
const pages = []; const pages = [];
list.forEach((item, index) => { list.forEach((item, index) => {
const page = Math.floor(index / length); const page = Math.floor(index / length);
if (!pages[page]) { if (!pages[page]) {
pages[page] = []; pages[page] = [];
} }
pages[page].push(item); pages[page].push(item);
}); });
return pages; return pages;
}; };
/** /**
* 获取uuid * 获取uuid
*/ */
export const getUUID = () => { export const getUUID = () => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16)
}) })
} }
\ No newline at end of file \ No newline at end of file
...@@ -1009,7 +1009,8 @@ export default { ...@@ -1009,7 +1009,8 @@ export default {
}, },
// 商品全球身份证 // 商品全球身份证
async homeNewGtin() { async homeNewGtin() {
this.$http.get("/gds/Data/NewGtin").then((res) => { console.log(process.env, 'process.env');
this.$http.get(`${process.env.VUE_APP_GDS_URL}/Data/NewGtin`).then((res) => {
res.body.murl = `http://data-studio.gds.org.cn/${res.body.murl}`; res.body.murl = `http://data-studio.gds.org.cn/${res.body.murl}`;
res.body.surl = `http://data-studio.gds.org.cn/${res.body.surl}`; res.body.surl = `http://data-studio.gds.org.cn/${res.body.surl}`;
this.spqqsfz = res.body; this.spqqsfz = res.body;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<el-form-item label="验证码:"> <el-form-item label="验证码:">
<div class="y-center"> <div class="y-center">
<el-input <el-input
v-model="search.validate" v-model="search.captcha"
placeholder="请输入验证码" placeholder="请输入验证码"
class="w160" class="w160"
></el-input> ></el-input>
...@@ -121,8 +121,7 @@ export default { ...@@ -121,8 +121,7 @@ export default {
data() { data() {
return { return {
captchaPath: "", captchaPath: "",
uuid: "", search: { code: "", captcha: "", uuid: "" },
search: { code: "", validate: "" },
searchCodeShow: "", searchCodeShow: "",
showResult: false, showResult: false,
result: null, result: null,
...@@ -164,14 +163,14 @@ export default { ...@@ -164,14 +163,14 @@ export default {
methods: { methods: {
// 获取验证码 // 获取验证码
getCaptcha() { getCaptcha() {
this.uuid = getUUID(); this.search.uuid = getUUID();
this.$http const query = {
.get(`/gs1/office/captcha.jpg?uuid=${this.uuid}`, { uuid: this.search.uuid,
responseType: "blob", };
}) this.$api.getCaptcha(query).then((res) => {
.then((res) => { console.log(res, 'res');
this.captchaPath = window.URL.createObjectURL(res.body); this.captchaPath = window.URL.createObjectURL(res.body);
}); });
}, },
handleSearch() { handleSearch() {
this.searchCodeShow = this.search.code; this.searchCodeShow = this.search.code;
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<div class="search-content"> <div class="search-content">
<div class="title">GLN查询</div> <div class="title">GLN查询</div>
<div class="body"> <div class="body">
<div style="padding-top:20px"> <div style="padding-top: 20px">
<el-form label-position="left" label-width="180px" :model="search"> <el-form label-position="left" label-width="200px" :model="search">
<el-form-item label="参与方位置编码(GLN)查询:"> <el-form-item label="参与方位置编码(GLN)查询:">
<el-input <el-input
v-model="search.code" v-model="search.code"
...@@ -15,17 +15,17 @@ ...@@ -15,17 +15,17 @@
<el-form-item label="验证码:"> <el-form-item label="验证码:">
<div class="y-center"> <div class="y-center">
<el-input <el-input
v-model="search.validate" v-model="search.captcha"
placeholder="请输入验证码" placeholder="请输入验证码"
class="w160" class="w160"
></el-input> ></el-input>
<div class="validate-code"> <div class="validate-code">
<img src="../../assets/image/validate.jpg" alt="" /> <img :src="captchaPath" @click="getCaptcha()" alt="" />
</div> </div>
<el-button <el-button
style="margin-left:40px" style="margin-left: 40px"
type="primary" type="primary"
@click="handleSearch" @click="handleSearch"
>查询</el-button >查询</el-button
...@@ -53,20 +53,15 @@ ...@@ -53,20 +53,15 @@
<div class="content-wrapper"> <div class="content-wrapper">
<img src="./img/query-external-barcode.png" align="right" alt="" /> <img src="./img/query-external-barcode.png" align="right" alt="" />
<p> <p>
1、参与方位置编码(Global Location Number)是对参与供应链等活动的法律实体、功能实体和物理实体进行唯一标识的代码,用13位数字表示,主要应用于条码符号自动识别与数据采集和电子数据交换 1、参与方位置编码(Global Location
Number)是对参与供应链等活动的法律实体、功能实体和物理实体进行唯一标识的代码,用13位数字表示,主要应用于条码符号自动识别与数据采集和电子数据交换
</p> </p>
<p> <p>
2、当用条码符号表示参与方位置编码时,应与参与方位置编码应用标识符一起使用,如左图中的"410"代表"交货地"。 2、当用条码符号表示参与方位置编码时,应与参与方位置编码应用标识符一起使用,如左图中的"410"代表"交货地"。
</p> </p>
<p> <p>注:</p>
注: <p>3、法律实体是指合法存在的机构,如:供应商、客户、银行、承运商等。</p>
</p> <p>4、功能实体是指法律实体内的具体的部门,如:某公司的财务部。</p>
<p>
3、法律实体是指合法存在的机构,如:供应商、客户、银行、承运商等。
</p>
<p>
4、功能实体是指法律实体内的具体的部门,如:某公司的财务部。
</p>
<p> <p>
5、物理实体是指具体的位置,如:建筑物的某个房间、仓库或仓库的某个门、交货地等。 5、物理实体是指具体的位置,如:建筑物的某个房间、仓库或仓库的某个门、交货地等。
</p> </p>
...@@ -76,21 +71,45 @@ ...@@ -76,21 +71,45 @@
</template> </template>
<script> <script>
import { getUUID } from "@/utils/utils";
export default { export default {
data() { data() {
return { return {
search: { code: "", validate: "" }, captchaPath: '',
search: { code: "", captcha: "", type: "GLN", requestedLanguage: "en", uuid: ''},
searchCodeShow: "", searchCodeShow: "",
showResult: false, showResult: false,
result: null, result: null,
}; };
}, },
created() {
this.getCaptcha();
},
methods: { methods: {
handleSearch() { // 获取验证码
getCaptcha() {
this.search.uuid = getUUID();
const query = {
uuid: this.search.uuid,
};
this.$api.getCaptcha(query).then((res) => {
console.log(res, 'res');
this.captchaPath = window.URL.createObjectURL(res.body);
});
},
async handleSearch() {
this.searchCodeShow = this.search.code; this.searchCodeShow = this.search.code;
this.showResult = true; this.showResult = true;
if (this.search.code === "1") { const params = {...this.search};
this.result = {}; const searchGlnRes =
await this.$api.search.searchGln(params);
const { returnCode, data } = searchGlnRes;
console.log(searchGlnRes, 'searchGlnRes');
if (returnCode === "0") {
this.result = data;
} else {
this.result = null;
} }
}, },
}, },
......
import {
BlockRoleType,
BlockRoleNameFromType,
MatterType,
MatterStatusOwnerCode
} from "@/config/constant.js"
const getters = { const getters = {
// 用户id // 用户id
userId: state => { userId: state => {
...@@ -34,109 +27,6 @@ const getters = { ...@@ -34,109 +27,6 @@ const getters = {
const { userInfo } = state const { userInfo } = state
return Number(userInfo.roleId) return Number(userInfo.roleId)
}, },
userRoleName: state => {
const { userInfo } = state
return BlockRoleNameFromType(Number(userInfo.roleId))
},
isLoggedAdmin: state => {
const { userInfo } = state
return Number(userInfo.roleId) === BlockRoleType.admin
},
isCurrentBlockOnlyTemporal: state => {
const { userInfo } = state
return userInfo.blockName === '旭日爱上城6区'
},
isElementPermission: state => (value, data = null) => {
const { userInfo } = state
const roleId = Number(userInfo.roleId)
// const roleId = BlockRoleType.comMember
// 设置网格管理员
if (value === 'block_set_grid_manager') {
return roleId === BlockRoleType.admin
}
// 设置业委会委员、临管人员、会计、物业 需要管理员权限
if (value === 'block_set_comMember'
|| value === 'block_set_community'
|| value === 'block_set_management'
|| value === 'block_set_temporal'
|| value === 'block_set_accountant'
|| value === 'block_set_servant') {
if (roleId !== BlockRoleType.admin) {
return false
}
// 仅旭日爱上城6区需要设置临管人员
const { name } = data || {}
const block_xrasc6 = '旭日爱上城6区'
if (value === 'block_set_temporal') {
return name === block_xrasc6
}
if (value === 'block_set_comMember') {
return name !== block_xrasc6
}
return true
}
// 会计有添加账号权限
if (value === 'account_add_balance') {
return roleId === BlockRoleType.accountant
}
// 事项
if (value === 'matter_create') {
return (
roleId === BlockRoleType.comMember ||
roleId === BlockRoleType.temporal
)
}
if (value === 'matter_create_rectification' || value === 'matter_create_letter') {
return (
roleId === BlockRoleType.comMember ||
roleId === BlockRoleType.temporal
)
}
if (value === 'matter_create_vote'
|| value === 'matter_create_vote-result'
|| value === 'matter_create_announce') {
return (
roleId === BlockRoleType.comMember ||
roleId === BlockRoleType.temporal
)
}
if (value === 'matter_action_audit_approve' || value === 'matter_action_audit_reject') {
// 审核仅社区和物管办
const { status } = data || {}
const myStatus = Number(status)
return (roleId === BlockRoleType.community && myStatus === MatterStatusOwnerCode.communityInProgress) ||
(roleId === BlockRoleType.management && myStatus === MatterStatusOwnerCode.managementInProgress)
}
if (value === 'matter_action_reply_letter') {
// 已发布的公函,业委会需要进行回函
const { matterType, status, isLetters } = data || {}
const myMatterType = String(matterType)
const myStatus = Number(status)
return (
myMatterType === MatterType.letter &&
myStatus === MatterStatusOwnerCode.end &&
!isLetters &&
(roleId === BlockRoleType.comMember || roleId === BlockRoleType.temporal)
)
}
if (value === 'matter_action_accept_rectification') {
// 已发布的整改单,物业需要进行接收整改
const { matterType, status, isAccept } = data || {}
const myMatterType = String(matterType)
const myStatus = Number(status)
return (
myMatterType === MatterType.rectification &&
myStatus === MatterStatusOwnerCode.end &&
!isAccept &&
roleId === BlockRoleType.servant
)
}
if (value === 'matter_action_edit_tags') {
return false
}
return false
}
} }
export default getters export default getters
\ No newline at end of file
...@@ -10,10 +10,6 @@ const state = { ...@@ -10,10 +10,6 @@ const state = {
userInfo: storage.get("userInfo") || {}, userInfo: storage.get("userInfo") || {},
// 登录用户菜单列表 // 登录用户菜单列表
userMenus: storage.get("userMenus") || [], userMenus: storage.get("userMenus") || [],
// 账号交易类型列表
financeTypeList: storage.get("financeTypeList") || [],
// 当前所有小区的列表数据
allBlockList: storage.get("allBlockList") || [],
} }
export default state export default state
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment