Merge remote-tracking branch 'origin/branch20211008'

This commit is contained in:
fengachen
2021-10-13 19:02:40 +08:00
43 changed files with 495 additions and 296 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
*/ */
window._CONFIG = {}; window._CONFIG = {};
window._CONFIG["domianURL"] = "/jero-boot"; // 路由转发 devServer window._CONFIG["domianURL"] = "/jero-boot"; // 路由转发 devServer
window._CONFIG["domianWebSocketURL"] = "http://localhost:21824/jero-boot"; window._CONFIG["domianWebSocketURL"] = "http://localhost:8080/jero-boot";
// 单点登录地址 // 单点登录地址
window._CONFIG["staticDomainURL"] = window._CONFIG["domianURL"] + "/sys/common/download"; window._CONFIG["staticDomainURL"] = window._CONFIG["domianURL"] + "/sys/common/download";
window._CONFIG["pdfDomainURL"] = window._CONFIG["domianURL"] + "/sys/common/pdf/pdfPreviewIframe"; window._CONFIG["pdfDomainURL"] = window._CONFIG["domianURL"] + "/sys/common/pdf/pdfPreviewIframe";
+1 -1
View File
@@ -46,7 +46,7 @@ const queryDepartTreeList = (params)=>getAction('/sys/sysDepart/queryTreeList',p
const queryIdTree = (params)=>getAction('/sys/sysDepart/queryIdTree',params) const queryIdTree = (params)=>getAction('/sys/sysDepart/queryIdTree',params)
const queryParentName = (params)=>getAction('/sys/sysDepart/queryParentName',params) const queryParentName = (params)=>getAction('/sys/sysDepart/queryParentName',params)
const searchByKeywords = (params)=>getAction('/sys/sysDepart/searchBy',params) const searchByKeywords = (params)=>getAction('/sys/sysDepart/searchBy',params)
const deleteByDepartId = (params)=>deleteAction('/sys/sysDepart/delete',params) const deleteByDepartId = (params)=>getAction('/sys/sysDepart/delete',params)
//二级部门管理 //二级部门管理
const queryDepartPermission = (params)=>getAction('/sys/permission/queryDepartPermission',params) const queryDepartPermission = (params)=>getAction('/sys/permission/queryDepartPermission',params)
+4 -1
View File
@@ -74,6 +74,8 @@ const homePageDataStatistics = (param) => getAction('/home/dataStatistics', para
const sysReminders = (param) => postAction('/reminders/edit', param) const sysReminders = (param) => postAction('/reminders/edit', param)
// 检测企业审核是否通过 // 检测企业审核是否通过
const checkCompanyAduit = (param) => getAction('/payMailContract/payMailContract/check', param) const checkCompanyAduit = (param) => getAction('/payMailContract/payMailContract/check', param)
// 获取全部部门
const getAllDepartTreeList = (param) => getAction('/sys/sysDepart/queryTreeAllList', param)
export { export {
getWorkingGroupById, getWorkingGroupById,
@@ -112,5 +114,6 @@ export {
homePageStatistics, homePageStatistics,
homePageDataStatistics, homePageDataStatistics,
sysReminders, sysReminders,
checkCompanyAduit checkCompanyAduit,
getAllDepartTreeList
} }
+69 -38
View File
@@ -10,43 +10,59 @@
<section class="base-info"> <section class="base-info">
<h3 class="title">基本信息</h3> <h3 class="title">基本信息</h3>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>项目负责人:</label> <label>项目负责人:</label>
<span><j-ellipsis :value="basicInfo.principalName" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.principalName" :length="20"></j-ellipsis></span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>应收金额:</label> <label>应收金额:</label>
<span><j-ellipsis :value="basicInfo.receivableAmount" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.receivableAmount" :length="20"></j-ellipsis></span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col class="detail-item">
<label>备注:</label> <label>备注:</label>
<span><j-ellipsis :value="basicInfo.remarks" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.remarks" :length="20"></j-ellipsis></span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24" v-if="basicInfo.files">
<a-col>
<label>资料:</label>
<span><preview-file :file-id="basicInfo.files"></preview-file></span>
</a-col>
</a-row>
<!-- 来款方式为合同的显示--> <!-- 来款方式为合同的显示-->
<a-row :gutter="24" v-if="!!basicInfo.contractNum"> <a-row :gutter="24" v-if="!!basicInfo.contractNum">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>{{createIncomeType(basicInfo.projectType)}}:</label> <label>{{ createIncomeType(basicInfo.projectType) }}:</label>
<span>{{ basicInfo.chargeWay_dictText }}</span> <span>{{ basicInfo.chargeWay_dictText }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>合同编号:</label> <label>合同编号:</label>
<span class="contract-num" @click="toContractDetail">{{ basicInfo.contractNum }}</span> <span class="contract-num" @click="toContractDetail">{{ basicInfo.contractNum }}</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24" v-if="basicInfo.chargeWay === 3">
<a-col :span="12" class="detail-item">
<label>收费通知号:</label>
<span><j-ellipsis :value="basicInfo.chargeNoticeNo" :length="20"></j-ellipsis></span>
</a-col>
<a-col :span="12" class="detail-item">
<label>收费通知:</label>
<span><preview-file :file-id="basicInfo.chargeNoticeId"></preview-file></span>
</a-col>
</a-row>
</section> </section>
<!-- 基本信息end--> <!-- 基本信息end-->
<!-- 企业信息begin--> <!-- 企业信息begin-->
<section class="enterprise-info"> <section class="enterprise-info">
<h3 class="title">企业信息</h3> <h3 class="title">企业信息</h3>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>来款企业:</label> <label>来款企业:</label>
<span><j-ellipsis :value="basicInfo.companyName" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.companyName" :length="20"></j-ellipsis></span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人:</label> <label>企业联系人:</label>
<span>{{ basicInfo.name }}</span> <span>{{ basicInfo.name }}</span>
</a-col> </a-col>
@@ -56,47 +72,47 @@
<label>企业联系人性别:</label> <label>企业联系人性别:</label>
<span>{{ basicInfo.gender_dictText }}</span> <span>{{ basicInfo.gender_dictText }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人职务:</label> <label>企业联系人职务:</label>
<span>{{ basicInfo.post }}</span> <span>{{ basicInfo.post }}</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人电话:</label> <label>企业联系人电话:</label>
<span>{{ basicInfo.phone }}</span> <span>{{ basicInfo.phone }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人邮箱:</label> <label>企业联系人邮箱:</label>
<span>{{ basicInfo.email }}</span> <span>{{ basicInfo.email }}</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人邮编:</label> <label>企业联系人邮编:</label>
<span>{{ basicInfo.postalCodeContacts }}</span> <span>{{ basicInfo.postalCodeContacts }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业联系人地址:</label> <label>企业联系人地址:</label>
<span><j-ellipsis :value="basicInfo.contactAddress" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.contactAddress" :length="20"></j-ellipsis></span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>是否需要发票:</label> <label>是否需要发票:</label>
<span>{{ basicInfo.needInvoice_dictText }}</span> <span>{{ basicInfo.needInvoice_dictText }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>是否打包:</label> <label>是否打包:</label>
<span>{{ basicInfo.pack_dictText }}</span> <span>{{ basicInfo.pack_dictText }}</span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业邮编:</label> <label>企业邮编:</label>
<span>{{ basicInfo.postalCodeCompany }}</span> <span>{{ basicInfo.postalCodeCompany }}</span>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12" class="detail-item">
<label>企业地址:</label> <label>企业地址:</label>
<span><j-ellipsis :value="basicInfo.companyAddress" :length="20"></j-ellipsis></span> <span><j-ellipsis :value="basicInfo.companyAddress" :length="20"></j-ellipsis></span>
</a-col> </a-col>
@@ -142,8 +158,9 @@
</template> </template>
<script> <script>
import {queryCommonProjectById} from '@api/incomePaymentsApi' import { queryCommonProjectById } from '@api/incomePaymentsApi'
import JEllipsis from '@comp/jero/JEllipsis' import JEllipsis from '@comp/jero/JEllipsis'
import PreviewFile from './jero/PreviewFile'
// import {getAction} from "@api/manage"; // import {getAction} from "@api/manage";
const paymentInfoList = [ const paymentInfoList = [
{ {
@@ -160,7 +177,7 @@ const paymentInfoList = [
id: 1003, id: 1003,
year: '2021', year: '2021',
money: '200' money: '200'
}, }
] ]
const logisticsInfoList = [ const logisticsInfoList = [
{ {
@@ -180,49 +197,49 @@ const columns = [
{ {
title: '开票人', title: '开票人',
align: 'center', align: 'center',
dataIndex: 'createBy', dataIndex: 'createBy'
}, },
{ {
title: '日期', title: '日期',
align: 'center', align: 'center',
dataIndex: 'billDate', dataIndex: 'billDate'
}, },
{ {
title: '金额(元)', title: '金额(元)',
align: 'center', align: 'center',
dataIndex: 'invoiceAmount', dataIndex: 'invoiceAmount'
}, },
{ {
title: '票号', title: '票号',
align: 'center', align: 'center',
dataIndex: 'billNo', dataIndex: 'billNo'
}, },
{ {
title: '项目', title: '项目',
align: 'center', align: 'center',
dataIndex: 'chargeCompanyName', dataIndex: 'projectName'
}, },
{ {
title: '邮寄人', title: '邮寄人',
align: 'center', align: 'center',
dataIndex: 'contactName', dataIndex: 'contactName'
}, },
{ {
title: '快递', title: '快递',
align: 'center', align: 'center',
dataIndex: 'sendMethod', dataIndex: 'sendMethod'
}, },
{ {
title: '快递单号', title: '快递单号',
align: 'center', align: 'center',
dataIndex: 'postNo', dataIndex: 'postNo'
}, },
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
dataIndex: '', dataIndex: '',
scopedSlots: {customRender: 'action'} scopedSlots: { customRender: 'action' }
}, }
] ]
export default { export default {
name: 'ProjectDetailModal', name: 'ProjectDetailModal',
@@ -252,12 +269,13 @@ export default {
// 到账信息 // 到账信息
paymentInfoList, paymentInfoList,
// 开票邮寄信息 // 开票邮寄信息
logisticsInfoList, logisticsInfoList
} }
}, },
computed: {}, computed: {},
components: { components: {
JEllipsis JEllipsis,
PreviewFile
}, },
methods: { methods: {
open(record) { open(record) {
@@ -269,7 +287,7 @@ export default {
this.currentProjectId = record.id this.currentProjectId = record.id
} }
// 通过id查询项目详情 // 通过id查询项目详情
queryCommonProjectById({id: this.currentProjectId}).then(res => { queryCommonProjectById({ id: this.currentProjectId }).then(res => {
if (res.success) { if (res.success) {
console.log(res.result, 'res.result') console.log(res.result, 'res.result')
// 项目信息 // 项目信息
@@ -301,7 +319,7 @@ export default {
} }
}) })
} }
return `${item.person}于${item.time}开票,金额为:${item.money}元,票号:${item.piaoNo},项目:${porjectItem}` return `${ item.person }于${ item.time }开票,金额为:${ item.money }元,票号:${ item.piaoNo },项目:${ porjectItem }`
}, },
/* /*
* 查看物流 * 查看物流
@@ -313,13 +331,13 @@ export default {
* 去合同详情 传入合同id * 去合同详情 传入合同id
* */ * */
toContractDetail() { toContractDetail() {
if(this.basicInfo.contractId){ if (this.basicInfo.contractId) {
this.$router.push({ this.$router.push({
path: '/contractManagement/RevenueContractDetail', query: { path: '/contractManagement/RevenueContractDetail', query: {
revenueId: this.basicInfo.contractId revenueId: this.basicInfo.contractId
} }
}) })
}else { } else {
this.$message.warn('该项目未与合同关联') this.$message.warn('该项目未与合同关联')
} }
}, },
@@ -328,9 +346,9 @@ export default {
* */ * */
createIncomeType(val) { createIncomeType(val) {
if (val === 1 || val === 2 || val === 4) { if (val === 1 || val === 2 || val === 4) {
return '来款方式' return '来款方式'
}else { } else {
return '缴费方式' return '缴费方式'
} }
@@ -352,6 +370,19 @@ label {
color: #666; color: #666;
} }
.detail-item {
display: flex;
label {
flex-shrink: 0;
}
span {
word-break: break-all;
display: block;
}
}
.contract-num { .contract-num {
color: #42b983; color: #42b983;
cursor: pointer; cursor: pointer;
@@ -108,6 +108,7 @@ export default {
}, },
close() { close() {
this.visible = false this.visible = false
this.selectedCompany = {}
}, },
onSelectChange(selectedRowKeys, selectionRows) { onSelectChange(selectedRowKeys, selectionRows) {
this.selectedCompany = selectionRows[0] this.selectedCompany = selectionRows[0]
-1
View File
@@ -91,7 +91,6 @@ export default {
*/ */
addCompanyOk(value) { addCompanyOk(value) {
let { id, companyName } = value let { id, companyName } = value
console.log({ id, companyName })
this.$emit('change', { id, companyName }) this.$emit('change', { id, companyName })
} }
}, },
+1 -1
View File
@@ -150,7 +150,7 @@ export default {
* 新建联系人 * 新建联系人
*/ */
addContacts() { addContacts() {
if (this.selectedCompany && Object.keys(this.selectedCompany).length > 0) { if (this.selectedCompany && Object.keys(this.selectedCompany).length > 0 && this.selectedCompany.id) {
// 传入是否调用无权限接口的参数 去判断 // 传入是否调用无权限接口的参数 去判断
this.$refs.contactForm.add(this.isLimit) this.$refs.contactForm.add(this.isLimit)
this.$refs.contactForm.title = '新增' this.$refs.contactForm.title = '新增'
+2 -2
View File
@@ -1,9 +1,9 @@
<template> <template>
<!-- 父组件的文件id如果是异步获取的 需要加上v-if判断--> <!-- 父组件的文件id如果是异步获取的 需要加上v-if判断-->
<div style="display: inline-block"> <div style="display: inline-block">
<span v-for="(item) of fileList" :key="item.id">{{ item.name +' ' }} <div v-for="(item) of fileList" :key="item.id">{{ item.name +' ' }}
<span class="m-l-4 color-blue" @click="handleDownLoad(item)">下载</span> <span class="m-l-4 color-blue" @click="handlePreview(item)">查看</span> <span class="m-l-4 color-blue" @click="handleDownLoad(item)">下载</span> <span class="m-l-4 color-blue" @click="handlePreview(item)">查看</span>
</span> </div>
</div> </div>
</template> </template>
+35 -9
View File
@@ -53,6 +53,8 @@
<script> <script>
import { putAction } from '@/api/manage' import { putAction } from '@/api/manage'
import { getRSAPublicKey } from '@api/login'
import { JSEncrypt } from 'jsencrypt'
export default { export default {
name: 'UserPassword', name: 'UserPassword',
@@ -72,21 +74,24 @@ export default {
rules: [ rules: [
{ required: true, message: '请输入新密码!' }, { required: true, message: '请输入新密码!' },
{ {
pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, //原正则,3种组合时不会提示 /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/
message: '密码由8位数字、大小写字母和特殊符号组成!' pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
}, },
{ validator: this.validateToNextPassword } { validator: this.validateToNextPassword }
] ],
validateTrigger: 'blur'
}, },
confirmpassword: { confirmpassword: {
rules: [ rules: [
{ required: true, message: '请确认新密码!' }, { required: true, message: '请确认新密码!' },
{ {
pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
message: '密码由8位数字、大小写字母和特殊符号组成!' message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
}, },
{ validator: this.validateToNextPassword } { validator: this.handlePasswordCheck }
] ],
validateTrigger: 'blur'
} }
}, },
confirmDirty: false, confirmDirty: false,
@@ -101,7 +106,8 @@ export default {
form: this.$form.createForm(this), form: this.$form.createForm(this),
url: 'sys/user/updatePassword', url: 'sys/user/updatePassword',
username: '' username: '',
rsaPublicKey: '' // 公钥
} }
}, },
methods: { methods: {
@@ -111,10 +117,16 @@ export default {
return return
} else { } else {
this.username = uname this.username = uname
this.getPublicKey()
this.form.resetFields() this.form.resetFields()
this.visible = true this.visible = true
} }
}, },
getPublicKey() {
getRSAPublicKey().then(res => {
this.rsaPublicKey = res.result
})
},
handleCancel() { handleCancel() {
this.close() this.close()
}, },
@@ -130,7 +142,14 @@ export default {
this.form.validateFields((err, values) => { this.form.validateFields((err, values) => {
if (!err) { if (!err) {
that.confirmLoading = true that.confirmLoading = true
let params = Object.assign({ username: this.username }, values) let params = {}
params.username = this.username
params.rsaPublicKey = this.rsaPublicKey
let encrypt = new JSEncrypt()
encrypt.setPublicKey(params.rsaPublicKey)
params.oldpassword = encrypt.encrypt(values.oldpassword)
params.password = encrypt.encrypt(values.password)
params.confirmpassword = encrypt.encrypt(values.confirmpassword)
console.log('修改密码提交数据', params) console.log('修改密码提交数据', params)
putAction(this.url, params).then((res) => { putAction(this.url, params).then((res) => {
if (res.success) { if (res.success) {
@@ -153,6 +172,13 @@ export default {
} }
callback() callback()
}, },
handlePasswordCheck(rule, value, callback) {
let password = this.form.getFieldValue('password')
if (value && password && value.trim() !== password.trim()) {
callback(new Error('两次密码不一致'))
}
callback()
},
compareToFirstPassword(rule, value, callback) { compareToFirstPassword(rule, value, callback) {
const form = this.form const form = this.form
if (value && value !== form.getFieldValue('password')) { if (value && value !== form.getFieldValue('password')) {
+1 -1
View File
@@ -322,7 +322,7 @@ export const JeroListMixin = {
} }
this.loadData() this.loadData()
} else { } else {
const messageArr = info.file.response.message.split('</br>') const messageArr = info.file.response.message.split('<br/>')
let htmlDom = [] let htmlDom = []
messageArr.map(tt => { messageArr.map(tt => {
if (tt) { if (tt) {
+3 -1
View File
@@ -9,10 +9,12 @@ export function isEmail(s) {
/** /**
* 电话号码 座机 * 电话号码 座机
* 原正则:/^([0-9]{3,4}-)[0-9]{7,8}$/
* 现正则:15位数字、横杠
* @param {*} s * @param {*} s
*/ */
export function isPhone(s) { export function isPhone(s) {
return /^([0-9]{3,4}-)[0-9]{7,8}$/.test(s) return /^([0-9-]{0,15})$/.test(s)
} }
/** /**
+3 -3
View File
@@ -3,8 +3,8 @@ import {phoneReg, isEmail, chineseReg} from '@/utils/validate'
// 手机校验的错误信息提示 // 手机校验的错误信息提示
const phoneErrMsg = { const phoneErrMsg = {
err1: '请输入手机号', err1: '请输入手机号码',
err2: '请输入正确格式的手机号' err2: '请输入正确格式的手机号码'
} }
// 邮箱校验错误提示信息 // 邮箱校验错误提示信息
const emailErrMsg = { const emailErrMsg = {
@@ -13,7 +13,7 @@ const emailErrMsg = {
} }
// 用户名校验信息提示 // 用户名校验信息提示
const usernameErrMsg = { const usernameErrMsg = {
err1: '请输入用户名' err1: '请输入用户账号'
} }
// 角色编码校验信息提示 // 角色编码校验信息提示
const roleCodeErrMsg = { const roleCodeErrMsg = {
@@ -42,7 +42,7 @@
<a-input placeholder="请输入公司电话" <a-input placeholder="请输入公司电话"
v-decorator="['companyPhone', validatorRules.companyPhone]" v-decorator="['companyPhone', validatorRules.companyPhone]"
:maxLength='15' :maxLength='15'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input> @change="e => e.target.value = (e.target.value.replace(/[^0-9-]/g, '')).trim()"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -199,9 +199,9 @@ export default {
methods: { methods: {
add(limit) { add(limit) {
// true 是调用无权限接口 // true 是调用无权限接口
if(limit){ if (limit) {
this.url.add = '/company/payContactsManagement/addMeeting' this.url.add = '/company/payContactsManagement/addMeeting'
}else { } else {
this.url.add = '/company/payContactsManagement/add' this.url.add = '/company/payContactsManagement/add'
} }
this.edit({}) this.edit({})
@@ -305,33 +305,39 @@ export default {
* @param callback * @param callback
*/ */
checkName(rules, value, callback) { checkName(rules, value, callback) {
if (value) { let company = this.form.getFieldValue('company')
// 是否编辑 if (!value) {
if (this.model.id) { callback('请输入姓名')
// 编辑前后姓名是否一致,一致则不进行验重
if (value === this.model.name) {
callback()
return
}
this.selectedCompanyId = this.model.company.id
}
if (this.isCompanyDisabled) {
this.selectedCompanyId = this.selectedCompany.id
}
let param = {
companyId: this.selectedCompanyId,
name: value
}
queryContactByName(param).then(res => {
if (res.success) {
callback()
} else {
callback(res.message)
}
})
return return
} }
callback('请输入姓名') if (!company.id) {
callback('请先选择企业再输入姓名')
return
}
// 是否编辑
if (this.model.id) {
// 编辑前后姓名是否一致,一致则不进行验重
if (value === this.model.name) {
callback()
return
}
this.selectedCompanyId = this.model.company.id
}
if (this.isCompanyDisabled) {
this.selectedCompanyId = this.selectedCompany.id
}
let param = {
companyId: this.selectedCompanyId,
name: value
}
queryContactByName(param).then(res => {
if (res.success) {
callback()
} else {
callback(res.message)
}
})
}, },
/** /**
* 手机号校验 * 手机号校验
@@ -340,31 +346,34 @@ export default {
* @param callback * @param callback
*/ */
checkPhone(rules, value, callback) { checkPhone(rules, value, callback) {
if (phoneReg(value)) { if (value) {
// 是否编辑 if (phoneReg(value)) {
if (this.model.id) { // 是否编辑
// 编辑前后手机号是否一致,一致则不进行验重 if (this.model.id) {
if (value === this.model.phone) { // 编辑前后手机号是否一致,一致则不进行验重
callback() if (value === this.model.phone) {
return callback()
return
}
} }
} const param = {
const param = { confusionCode: 'pay_contacts_management_phone',
confusionCode: 'pay_contacts_management_phone', fieldVal: value,
fieldVal: value, encrypt: 1
encrypt: 1
}
// 唯一性校验
duplicateCheck(param).then(res => {
if (res.success) {
callback()
} else {
callback('手机号已存在')
} }
}) // 唯一性校验
return duplicateCheck(param).then(res => {
if (res.success) {
callback()
} else {
callback('手机号已存在')
}
})
return
}
callback('请输入正确的手机号')
} }
callback('请输入正确手机号') callback('请输入手机号')
}, },
/** /**
* 邮箱校验 * 邮箱校验
@@ -373,11 +382,14 @@ export default {
* @param callback * @param callback
*/ */
checkMail(rules, value, callback) { checkMail(rules, value, callback) {
if (isEmail(value)) { if (value) {
callback() if (isEmail(value)) {
} else { callback()
callback('请输入正确邮箱') } else {
callback('请输入正确的邮箱')
}
} }
callback('请输入邮箱')
}, },
/** /**
* 邮政编码校验 * 邮政编码校验
@@ -386,11 +398,14 @@ export default {
* @param callback * @param callback
*/ */
checkPostcode(rules, value, callback) { checkPostcode(rules, value, callback) {
if (postcode(value)) { if (value) {
callback() if (postcode(value)) {
} else { callback()
callback('请输入正确格式的邮编') } else {
callback('请输入正确格式的邮政编码')
}
} }
callback('请输入邮政编码')
} }
} }
} }
@@ -5,6 +5,8 @@
:visible="visible" :visible="visible"
:confirmLoading="confirmLoading" :confirmLoading="confirmLoading"
switchFullscreen switchFullscreen
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form :form="form">
@@ -79,6 +81,7 @@ export default {
}, },
methods: { methods: {
handleOk() { handleOk() {
console.log(this.confirmLoading)
// 触发表单验证 // 触发表单验证
if (this.confirmLoading) { if (this.confirmLoading) {
return return
@@ -794,13 +794,14 @@ export default {
this.$refs.selectProjectModule.departChange(this.departId) this.$refs.selectProjectModule.departChange(this.departId)
// 打开弹窗 // 打开弹窗
this.$refs.selectProjectModule.open() this.$refs.selectProjectModule.open()
}).catch((err) => {
this.$message.warn(err)
}) })
break break
// 工作组项目 // 工作组项目
case 2: case 2:
this.$refs.selectWorkingGroupProjectModule.filters = { this.$refs.selectWorkingGroupProjectModule.filters = {
companyId: this.selectedCompany.id, companyId: this.selectedCompany.id,
contractId: this.contractId contractId: this.contractId
} }
this.$refs.selectWorkingGroupProjectModule.open() this.$refs.selectWorkingGroupProjectModule.open()
@@ -829,9 +830,13 @@ export default {
let param = { let param = {
id: this.model.principalId id: this.model.principalId
} }
return new Promise(resolve => { return new Promise((resolve, reject) => {
queryUserByDepartId(param).then(res => { queryUserByDepartId(param).then(res => {
resolve(res.result[0].departIds) if (res.success) {
resolve(res.result[0].departIds)
} else {
reject(res.message)
}
}) })
}) })
}, },
@@ -106,7 +106,7 @@ import JYearDate from '../../../../components/jero/JYearDate'
import GeneralProjectModule from '../../../projectManagement/modules/GeneralProjectModule' import GeneralProjectModule from '../../../projectManagement/modules/GeneralProjectModule'
import StatusSlot from '../../../../components/tools/StatusSlot' import StatusSlot from '../../../../components/tools/StatusSlot'
import { associatedProject, queryUserByDepartId } from '../../../../api/incomePaymentsApi' import { associatedProject, queryUserByDepartId } from '../../../../api/incomePaymentsApi'
import { queryDepartTreeList } from '../../../../api/api' import { getAllDepartTreeList } from '../../../../api/incomePaymentsApi'
export default { export default {
name: 'SelectProjectModule', name: 'SelectProjectModule',
@@ -262,7 +262,7 @@ export default {
* 获取科室(部门)数据 * 获取科室(部门)数据
*/ */
loadDepartTreeData() { loadDepartTreeData() {
queryDepartTreeList().then((res) => { getAllDepartTreeList().then((res) => {
if (res.success) { if (res.success) {
this.treeDepartData = [] this.treeDepartData = []
let treeList = res.result let treeList = res.result
@@ -109,11 +109,11 @@ export default {
validatorRules: { validatorRules: {
company: { company: {
rules: [{ required: true, message: '请选择企业' }], rules: [{ required: true, message: '请选择企业' }],
validateTrigger: 'blur' validateTrigger: 'change'
}, },
contacts: { contacts: {
rules: [{ required: true, message: '请选择联系人' }], rules: [{ required: true, message: '请选择联系人' }],
validateTrigger: 'blur' validateTrigger: 'change'
} }
}, },
url: { url: {
@@ -103,7 +103,8 @@ export default {
}, },
}, },
url: { url: {
edit: 'payMailContract/payMailContract/edit' edit: 'payMailContract/payMailContract/edit',
mail: 'payMailContract/payMailContract/mile'
} }
} }
}, },
@@ -145,7 +146,13 @@ export default {
that.confirmLoading = true that.confirmLoading = true
const formData = Object.assign(this.model, values) const formData = Object.assign(this.model, values)
console.log('表单提交数据', formData) console.log('表单提交数据', formData)
httpAction(this.url.edit, formData, 'post').then((res) => { let url = ''
if (this.title === '邮寄') {
url = this.url.mail
} else {
url = this.url.edit
}
httpAction(url, formData, 'post').then((res) => {
if (res.success) { if (res.success) {
that.$message.success(res.message) that.$message.success(res.message)
that.$emit('ok') that.$emit('ok')
@@ -7,7 +7,6 @@
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="6" :lg="8" :md="8" :sm="24">
<a-form-item label="模板CODE"> <a-form-item label="模板CODE">
<a-input placeholder="请输入模板CODE" v-model="queryParam.templateCode"></a-input> <a-input placeholder="请输入模板CODE" v-model="queryParam.templateCode"></a-input>
@@ -37,7 +36,7 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator"> <div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> <!-- <a-button @click="handleAdd" type="primary" icon="plus" v-has="'template:add'">新增</a-button>-->
</div> </div>
<!-- table区域-begin --> <!-- table区域-begin -->
@@ -72,7 +71,7 @@
<span slot="action" class="action-span-cell" slot-scope="text, record"> <span slot="action" class="action-span-cell" slot-scope="text, record">
<a @click="handleEdit(record)" v-has="'template:list'">编辑</a> <a @click="handleEdit(record)" v-has="'template:list'">编辑</a>
<a @click="handleDelete(record.id)">删除</a> <!-- <a @click="handleDelete(record.id)" v-has="'template:delete'">删除</a>-->
</span> </span>
</a-table> </a-table>
@@ -204,7 +204,7 @@ export default {
dataIndex: 'startTime', dataIndex: 'startTime',
width: 160, width: 160,
customRender: (text, record) => ( customRender: (text, record) => (
<j-ellipsis value={ record.startTime + record.endTime } length={ 20 }></j-ellipsis>) <j-ellipsis value={ record.startTime + '~' + record.endTime } length={ 20 }></j-ellipsis>)
}, },
{ {
title: '召开地点', title: '召开地点',
@@ -244,7 +244,7 @@ export default {
], ],
url: { url: {
list: '/meeting/workGroupMeeting/page', list: '/meeting/workGroupMeeting/page',
delete: '//meeting/workGroupMeeting/delete', delete: '/meeting/workGroupMeeting/delete',
deleteBatch: '/meeting/workGroupMeeting/deleteBatch', deleteBatch: '/meeting/workGroupMeeting/deleteBatch',
exportXlsUrl: '/meeting/workGroupMeeting/exportXls', exportXlsUrl: '/meeting/workGroupMeeting/exportXls',
}, },
@@ -171,7 +171,7 @@ export default {
align: 'center', align: 'center',
dataIndex: 'startTime', dataIndex: 'startTime',
width: 160, width: 160,
customRender: (text, record) => (<j-ellipsis value={record.startTime + record.endTime} length={20}></j-ellipsis>) customRender: (text, record) => (<j-ellipsis value={record.startTime + '~' + record.endTime} length={20}></j-ellipsis>)
}, },
{ {
title: '召开地点', title: '召开地点',
+1 -1
View File
@@ -168,7 +168,7 @@ name: 'OtherMeeting',
align: 'center', align: 'center',
dataIndex: 'startTime', dataIndex: 'startTime',
width: 160, width: 160,
customRender: (text, record) => (<j-ellipsis value={record.startTime + record.endTime} length={20}></j-ellipsis>) customRender: (text, record) => (<j-ellipsis value={record.startTime + '~' + record.endTime} length={20}></j-ellipsis>)
}, },
{ {
title: '召开地点', title: '召开地点',
@@ -92,13 +92,14 @@
</template> </template>
<span slot="action" class="action-span-cell" slot-scope="text, record"> <span slot="action" class="action-span-cell" slot-scope="text, record">
<template v-if="record.showOperate"> <a @click="goFilesMaintenance(record)" v-has="'workingGroupProject:fileMaintenance'">文件维护</a>
<a @click="goFilesMaintenance(record)" v-has="'workingGroupProject:fileMaintenance'">文件维护</a> <a @click="goConferenceMaintenance(record)" v-has="'workingGroupProject:meetingMaintenance'">会议维护</a>
<a @click="goConferenceMaintenance(record)" v-has="'workingGroupProject:meetingMaintenance'">会议维护</a> <a @click="copyWorkGroup(record.id)" v-has="'workingGroupProject:copy'"
<a @click="copyWorkGroup(record.id)" v-has="'workingGroupProject:copy'" v-if="record.canOperate">复制</a> v-if="record.checkoutOperation === 1">复制</a>
<a @click="handleEdit(record)" v-has="'workingGroupProject:edit'" v-if="record.canOperate">编辑</a> <a @click="handleEdit(record)" v-has="'workingGroupProject:edit'"
<a @click="handleDelete(record.id)" v-has="'workingGroupProject:delete'" v-if="record.canOperate">删除</a> v-if="record.checkoutOperation === 1">编辑</a>
</template> <a @click="handleDelete(record.id)" v-has="'workingGroupProject:delete'"
v-if="record.checkoutOperation === 1">删除</a>
</span> </span>
</a-table> </a-table>
</div> </div>
@@ -173,6 +174,12 @@ export default {
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
], ],
queryParam: {
year: new Date().getFullYear().toString()
},
lastQueryParam: {
year: new Date().getFullYear().toString()
},
operateData: [] // 进行操作权限校验时使用的数据 operateData: [] // 进行操作权限校验时使用的数据
} }
}, },
@@ -206,36 +213,36 @@ export default {
} }
}).finally(() => { }).finally(() => {
this.loading = false this.loading = false
// 判断登录用户是否为负责人B // 判断登录用户是否为负责人B 2021-10-13:修改为后端在列表字段返回checkoutOperation字段控制,1--可操作,2--不可操作
if (this.dataSource.length > 0) { // if (this.dataSource.length > 0) {
for (let index = 0; index < this.dataSource.length; index++) { // for (let index = 0; index < this.dataSource.length; index++) {
this.checkWorkingGroupPrincipal(index).then((res) => { // this.checkWorkingGroupPrincipal(index).then((res) => {
res.showOperate = true // res.showOperate = true
this.$set(this.dataSource, index, res) // this.$set(this.dataSource, index, res)
}) // })
} // }
} // }
}) })
}, },
/** /**
* 判断登录用户是否为负责人B * 判断登录用户是否为负责人B
*/ */
checkWorkingGroupPrincipal(index) { // checkWorkingGroupPrincipal(index) {
let item = this.dataSource[index] // let item = this.dataSource[index]
// (负责人B不可操作) // // (负责人B不可操作)
return new Promise(resolve => { // return new Promise(resolve => {
checkoutWorkingGroupPrincipal({ id: item.id }).then(res => { // checkoutWorkingGroupPrincipal({ id: item.id }).then(res => {
// 不可操作则置否 // // 不可操作则置否
if (res.success) { // if (res.success) {
item.canOperate = true // item.canOperate = true
} else { // } else {
item.canOperate = false // item.canOperate = false
} // }
}).finally(() => { // }).finally(() => {
resolve(item) // resolve(item)
}) // })
}) // })
}, // },
/** /**
* 文件维护 * 文件维护
* @param record * @param record
@@ -246,7 +253,7 @@ export default {
path: '/projectManagement/WorkingGroupProjectDataMaintenance', path: '/projectManagement/WorkingGroupProjectDataMaintenance',
query: { query: {
workingGroupId: record.id, workingGroupId: record.id,
canOperate: record.canOperate canOperate: record.checkoutOperation === 1
} }
}) })
}, },
@@ -260,7 +267,7 @@ export default {
query: { query: {
workingGroupProject: record.workingGroupProject, workingGroupProject: record.workingGroupProject,
workingGroupProjectId: record.id, workingGroupProjectId: record.id,
canOperate: record.canOperate canOperate: record.checkoutOperation === 1
} }
}) })
}, },
@@ -289,9 +296,18 @@ export default {
query: { query: {
workingGroupProject: record.workingGroupProject, workingGroupProject: record.workingGroupProject,
workingGroupProjectId: record.id, workingGroupProjectId: record.id,
canOperate: record.canOperate canOperate: record.checkoutOperation === 1
} }
}) })
},
searchReset() {
this.lastQueryParam = {
year: new Date().getFullYear().toString()
}
this.queryParam = {
year: new Date().getFullYear().toString()
}
this.loadData(1)
} }
} }
} }
@@ -15,7 +15,7 @@
<a-form-item label="来款项目" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol"> <a-form-item label="来款项目" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<a-input placeholder="请输入来款项目" <a-input placeholder="请输入来款项目"
v-decorator="['chargeProject',validatorRules.chargeProject]" v-decorator="['chargeProject',validatorRules.chargeProject]"
:maxLength='100' :maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input> @change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -84,7 +84,7 @@
<a-row> <a-row>
<a-col :xl="12" :sm="24"> <a-col :xl="12" :sm="24">
<a-form-item label="应收金额" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="应收金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row> <a-row :gutter="10">
<a-col :span="20"> <a-col :span="20">
<a-input placeholder="请输入应收金额" <a-input placeholder="请输入应收金额"
v-decorator="['receivableAmount',validatorRules.receivableAmount]" v-decorator="['receivableAmount',validatorRules.receivableAmount]"
@@ -185,6 +185,8 @@ import CompanySelect from '@comp/company/CompanySelect'
import SelectPrincipal from '@comp/company/SelectPrincipal' import SelectPrincipal from '@comp/company/SelectPrincipal'
import SelectContacts from '@comp/company/SelectContacts' import SelectContacts from '@comp/company/SelectContacts'
import { addZero } from '../../../utils/util' import { addZero } from '../../../utils/util'
import Vue from 'vue'
import { USER_INFO } from '../../../store/mutation-types'
export default { export default {
name: 'GeneralProjectModule', name: 'GeneralProjectModule',
@@ -261,7 +263,7 @@ export default {
}, },
validatorRules: { validatorRules: {
chargeProject: { chargeProject: {
rules: [{ required: true, message: '请输入项目名称' }], rules: [{ required: true, message: '请输入来款项目' }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
year: { year: {
@@ -344,6 +346,7 @@ export default {
companyName: record.chargeCompanyTemporaryName companyName: record.chargeCompanyTemporaryName
} }
} }
// 是否存在从收入合同传入的签订联系人id // 是否存在从收入合同传入的签订联系人id
console.log(record, this.signedContactId) console.log(record, this.signedContactId)
record.contactsId = this.signedContactId || record.contactsTemporaryId || undefined record.contactsId = this.signedContactId || record.contactsTemporaryId || undefined
@@ -361,6 +364,13 @@ export default {
id: this.model.mailContactsTemporaryId, id: this.model.mailContactsTemporaryId,
name: this.model.mailContactsTemporaryName name: this.model.mailContactsTemporaryName
} }
} else {
// 新增默认运行年份为当年
this.model.year = new Date().getFullYear().toString()
// 新增默认负责人为当前用户
this.model.principalId = Vue.ls.get(USER_INFO).id
// 新增默认来款方式为无
this.model.chargeWay = 1
} }
this.chargeWayType = record.chargeWay this.chargeWayType = record.chargeWay
this.visible = true this.visible = true
@@ -453,7 +463,7 @@ export default {
callback() callback()
return return
} }
callback('请选择企业') callback('请选择来款企业')
}, },
/** /**
* 在新增成功后重新获取联系人列表 * 在新增成功后重新获取联系人列表
@@ -9,7 +9,7 @@
@cancel="handleCancel" @cancel="handleCancel"
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form" v-if="memberList.length > 0"> <a-form :form="form" v-if="memberList[0].children.length > 0">
<a-row> <a-row>
<a-col :span="2"></a-col> <a-col :span="2"></a-col>
<a-col :span="20"> <a-col :span="20">
@@ -66,7 +66,7 @@ export default {
default: false default: false
} }
}, },
watch:{ watch: {
visible(val) { visible(val) {
if (val) { if (val) {
this.initData() this.initData()
@@ -87,7 +87,10 @@ export default {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 17 } sm: { span: 17 }
}, },
memberList: [], // 成员树 memberList: [{
name: '全选',
children: []
}], // 成员树
checkedKeys: [], // 已选中的成员数组 checkedKeys: [], // 已选中的成员数组
replaceFields: { replaceFields: {
children: 'children', children: 'children',
@@ -97,7 +100,7 @@ export default {
}, },
validatorRules: { validatorRules: {
memberName: { memberName: {
rules: [{ required: true, message: '请选择成员单位'}], rules: [{ required: true, message: '请选择成员单位' }],
validateTrigger: 'change' validateTrigger: 'change'
} }
}, },
@@ -120,7 +123,7 @@ export default {
} }
distributeMemberList(param).then(res => { distributeMemberList(param).then(res => {
if (res.success) { if (res.success) {
this.memberList = res.result this.memberList[0].children = res.result
} else { } else {
this.$message.warn(res.message) this.$message.warn(res.message)
} }
@@ -141,14 +144,17 @@ export default {
close() { close() {
this.$emit('update:visible', false) this.$emit('update:visible', false)
this.$emit('close') this.$emit('close')
this.memberList = [] this.memberList = [{
name: '全选',
children: []
}]
}, },
handleOk() { handleOk() {
if (this.confirmLoading) { if (this.confirmLoading) {
return return
} }
this.confirmLoading = true this.confirmLoading = true
if (this.memberList.length === 0) { if (this.memberList[0].children.length === 0) {
this.$message.warn('当前工作组暂无成员,无法分发文件') this.$message.warn('当前工作组暂无成员,无法分发文件')
this.confirmLoading = false this.confirmLoading = false
return return
@@ -158,16 +164,20 @@ export default {
this.confirmLoading = false this.confirmLoading = false
return return
} }
let str = this.checkedKeys.join(',').toString() let str = ''
console.log(str) if (this.checkedKeys[0] === '0-0') {
this.form.setFieldsValue({memberName: str}) str = this.checkedKeys.slice(1).join(',').toString()
} else {
str = this.checkedKeys.join(',').toString()
}
this.form.setFieldsValue({ memberName: str })
this.form.validateFields((err) => { this.form.validateFields((err) => {
if (!err) { if (!err) {
this.confirmLoading = true this.confirmLoading = true
if (this.isBatch) { if (this.isBatch) {
// 批量分发 // 批量分发
const formData = { const formData = {
contactsIds: this.checkedKeys.join(','), contactsIds: str,
dataIds: this.recordId, dataIds: this.recordId,
projectId: this.projectId, projectId: this.projectId,
projectType: this.projectType projectType: this.projectType
@@ -98,8 +98,15 @@
</a-col> </a-col>
<a-col :xl="12" :sm="24" v-if="chargeWayType === 3"> <a-col :xl="12" :sm="24" v-if="chargeWayType === 3">
<a-form-item label="收费通知号" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="收费通知号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['chargeNoticeNo',validatorRules.chargeNoticeNo]" <a-radio-group
@change="handleChargeNoticeChange" :options="chargeNoticeList"> class="charge-notice-no"
v-decorator="['chargeNoticeNo',validatorRules.chargeNoticeNo]"
@change="handleChargeNoticeChange">
<a-radio v-for="item in chargeNoticeList" :key="item.value" :value="item.value">
<a-tooltip :title="item.label">
{{ item.label }}
</a-tooltip>
</a-radio>
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -271,19 +278,19 @@ export default {
model: {}, model: {},
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 6 } sm: { span: 8 }
}, },
wrapperCol: { wrapperCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 18 } sm: { span: 16 }
}, },
remarksLabelCol: { remarksLabelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 3 } sm: { span: 4 }
}, },
remarksWrapperCol: { remarksWrapperCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 21 } sm: { span: 20 }
}, },
validatorRules: { validatorRules: {
workingGroupId: { workingGroupId: {
@@ -641,6 +648,27 @@ export default {
} }
</script> </script>
<style scoped> <style scoped lang="less">
.charge-notice-no {
width: 100%;
/deep/ .ant-radio-wrapper {
display: inline-block;
width: 100%;
span.ant-radio + * {
display: inline-block;
width: 100%;
span {
vertical-align: bottom;
display: inline-block;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
</style> </style>
@@ -158,7 +158,7 @@
import IconImg from '@/assets/imgs/icon/icon_statistical_report.png' import IconImg from '@/assets/imgs/icon/icon_statistical_report.png'
import PageHeaderTitle from '../../components/layouts/PageHeaderTitle' import PageHeaderTitle from '../../components/layouts/PageHeaderTitle'
import { JeroListMixin } from '../../mixins/JeroListMixin' import { JeroListMixin } from '../../mixins/JeroListMixin'
import { queryDepartTreeList } from '../../api/api' import { getAllDepartTreeList } from '../../api/incomePaymentsApi'
import SelectPrincipal from '../../components/company/SelectPrincipal' import SelectPrincipal from '../../components/company/SelectPrincipal'
import JYearDate from '../../components/jero/JYearDate' import JYearDate from '../../components/jero/JYearDate'
import { getAction } from '../../api/manage' import { getAction } from '../../api/manage'
@@ -318,7 +318,7 @@ export default {
* 获取科室(部门)数据 * 获取科室(部门)数据
*/ */
loadDepartTreeData() { loadDepartTreeData() {
queryDepartTreeList().then((res) => { getAllDepartTreeList().then((res) => {
if (res.success) { if (res.success) {
this.treeDepartData = [] this.treeDepartData = []
let treeList = res.result let treeList = res.result
@@ -121,7 +121,7 @@ import PageHeaderTitle from '../../../components/layouts/PageHeaderTitle'
import { JeroListMixin } from '../../../mixins/JeroListMixin' import { JeroListMixin } from '../../../mixins/JeroListMixin'
import JYearDate from '../../../components/jero/JYearDate' import JYearDate from '../../../components/jero/JYearDate'
import SelectPrincipal from '../../../components/company/SelectPrincipal' import SelectPrincipal from '../../../components/company/SelectPrincipal'
import { queryDepartTreeList } from '../../../api/api' import { getAllDepartTreeList } from '../../../api/incomePaymentsApi'
import { getAction } from '@api/manage' import { getAction } from '@api/manage'
export default { export default {
@@ -256,7 +256,7 @@ export default {
* 获取科室(部门)数据 * 获取科室(部门)数据
*/ */
loadDepartTreeData() { loadDepartTreeData() {
queryDepartTreeList().then((res) => { getAllDepartTreeList().then((res) => {
if (res.success) { if (res.success) {
this.treeDepartData = [] this.treeDepartData = []
let treeList = res.result let treeList = res.result
@@ -143,7 +143,7 @@ import { JeroListMixin } from '../../../mixins/JeroListMixin'
import JYearDate from '../../../components/jero/JYearDate' import JYearDate from '../../../components/jero/JYearDate'
import { getAction } from '@api/manage' import { getAction } from '@api/manage'
import SelectPrincipal from '@comp/company/SelectPrincipal' import SelectPrincipal from '@comp/company/SelectPrincipal'
import { queryDepartTreeList } from '@api/api' import { getAllDepartTreeList } from '../../../api/incomePaymentsApi'
import ProjectDetailModal from '../../../components/ProjectDetailModal' import ProjectDetailModal from '../../../components/ProjectDetailModal'
export default { export default {
@@ -284,7 +284,7 @@ export default {
* 获取科室(部门)数据 * 获取科室(部门)数据
*/ */
loadDepartTreeData() { loadDepartTreeData() {
queryDepartTreeList().then((res) => { getAllDepartTreeList().then((res) => {
if (res.success) { if (res.success) {
this.treeDepartData = [] this.treeDepartData = []
let treeList = res.result let treeList = res.result
+49 -27
View File
@@ -8,7 +8,8 @@
<a-row style="margin-left: 14px" class="table-operator"> <a-row style="margin-left: 14px" class="table-operator">
<a-button @click="handleAdd(1)" type="primary" v-has="'sys:depart:add'">新增</a-button> <a-button @click="handleAdd(1)" type="primary" v-has="'sys:depart:add'">新增</a-button>
<a-button @click="handleAdd(2)" type="primary" v-has="'sys:depart:addLowerLevel'">添加下级</a-button> <a-button @click="handleAdd(2)" type="primary" v-has="'sys:depart:addLowerLevel'">添加下级</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('部门信息')" v-has="'sys:depart:export'">导出</a-button> <a-button type="primary" icon="download" @click="handleExportXls('部门信息')" v-has="'sys:depart:export'">导出
</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader"
:action="importExcelUrl" @change="handleImportExcel" v-has="'sys:depart:import'"> :action="importExcelUrl" @change="handleImportExcel" v-has="'sys:depart:import'">
<a-button type="primary" icon="import">导入</a-button> <a-button type="primary" icon="import">导入</a-button>
@@ -23,7 +24,7 @@
<a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a> <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a>
</div> </div>
</a-alert> </a-alert>
<a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="请输入部门名称"/> <a-input-search @search="onSearch" allowClear style="width:100%;margin-top: 10px" placeholder="请输入部门名称"/>
<!-- 树--> <!-- 树-->
<a-col :md="10" :sm="24"> <a-col :md="10" :sm="24">
<template> <template>
@@ -47,7 +48,7 @@
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item @click="handleAdd(3)" key="1" v-has="'sys:depart:add'">添加</a-menu-item> <a-menu-item @click="handleAdd(3)" key="1" v-has="'sys:depart:add'">添加</a-menu-item>
<a-menu-item @click="handleDelete" key="2" v-has="'sys:depart:del'">删除</a-menu-item> <a-menu-item @click="handleDelete" key="2" v-has="'sys:depart:del'">删除</a-menu-item>
<a-menu-item @click="closeDrop" key="3">取消</a-menu-item> <!-- <a-menu-item @click="closeDrop" key="3">取消</a-menu-item>-->
</a-menu> </a-menu>
</a-dropdown> </a-dropdown>
</template> </template>
@@ -73,7 +74,7 @@
</div> </div>
<!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------> <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
</a-col> </a-col>
<a-col :md="14" :sm="24" style="background: #fff;padding: 24px;"> <a-col :md="14" :sm="24" style="background: #fff;padding: 0 24px 24px 24px;">
<a-tabs defaultActiveKey="1" @change="callback"> <a-tabs defaultActiveKey="1" @change="callback">
<a-tab-pane tab="基本信息" key="1"> <a-tab-pane tab="基本信息" key="1">
<a-card :bordered="false" v-if="selectedKeys.length>0"> <a-card :bordered="false" v-if="selectedKeys.length>0">
@@ -103,28 +104,28 @@
@change="event => event.target.value = event.target.value.trim()" :maxLength="50" @change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator="['orgCode', validatorRules.orgCode ]"/> v-decorator="['orgCode', validatorRules.orgCode ]"/>
</a-form-item> </a-form-item>
<!-- <a-form-item--> <!-- <a-form-item-->
<!-- :labelCol="labelCol"--> <!-- :labelCol="labelCol"-->
<!-- :wrapperCol="wrapperCol"--> <!-- :wrapperCol="wrapperCol"-->
<!-- label="机构类型">--> <!-- label="机构类型">-->
<!-- <template v-if="orgCategoryDisabled">--> <!-- <template v-if="orgCategoryDisabled">-->
<!-- <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">--> <!-- <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">-->
<!-- <a-radio value="1">--> <!-- <a-radio value="1">-->
<!-- 公司--> <!-- 公司-->
<!-- </a-radio>--> <!-- </a-radio>-->
<!-- </a-radio-group>--> <!-- </a-radio-group>-->
<!-- </template>--> <!-- </template>-->
<!-- <template v-else>--> <!-- <template v-else>-->
<!-- <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">--> <!-- <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">-->
<!-- <a-radio value="2">--> <!-- <a-radio value="2">-->
<!-- 部门--> <!-- 部门-->
<!-- </a-radio>--> <!-- </a-radio>-->
<!-- <a-radio value="3">--> <!-- <a-radio value="3">-->
<!-- 岗位--> <!-- 岗位-->
<!-- </a-radio>--> <!-- </a-radio>-->
<!-- </a-radio-group>--> <!-- </a-radio-group>-->
<!-- </template>--> <!-- </template>-->
<!-- </a-form-item>--> <!-- </a-form-item>-->
<a-form-item <a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
@@ -154,7 +155,7 @@
</a-form-item> </a-form-item>
</a-form> </a-form>
<div class="anty-form-btn"> <div class="anty-form-btn">
<a-button @click="emptyCurrForm" class="reset-button" htmlType="button" icon="sync">重置</a-button> <a-button @click="emptyCurrForm" class="reset-button" htmlType="button" icon="sync">重置</a-button>
<a-button @click="submitCurrForm" :disabled="disabledStatus" type="primary" htmlType="button" <a-button @click="submitCurrForm" :disabled="disabledStatus" type="primary" htmlType="button"
icon="form">保存 icon="form">保存
</a-button> </a-button>
@@ -189,6 +190,7 @@ import { JeroListMixin } from '@/mixins/JeroListMixin'
import { checkDepartName } from '@/utils/validateOnly' import { checkDepartName } from '@/utils/validateOnly'
import PageHeaderTitle from '../../components/layouts/PageHeaderTitle' import PageHeaderTitle from '../../components/layouts/PageHeaderTitle'
import IconImg from '@/assets/imgs/icon/icon_system.png' import IconImg from '@/assets/imgs/icon/icon_system.png'
import { downloadFile } from '../../api/manage'
// 表头 // 表头
const columns = [ const columns = [
{ {
@@ -414,6 +416,21 @@ export default {
} }
}, },
/**
* 导出
* @param fileName
*/
handleExportXls(fileName) {
if (!fileName || typeof fileName != 'string') {
fileName = '导出文件'
}
let param = this.getQueryParams()
if (this.checkedKeys && this.checkedKeys.length > 0) {
param['selections'] = this.checkedKeys.join(',')
}
console.log('导出参数', param)
downloadFile(this.url.exportXlsUrl, fileName + '.xls', param)
},
nodeModalOk() { nodeModalOk() {
this.loadTree() this.loadTree()
}, },
@@ -655,6 +672,11 @@ export default {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
/deep/ .ant-card-body {
padding-top: 0 !important;
}
.ant-card-body .table-operator { .ant-card-body .table-operator {
margin: 15px; margin: 15px;
} }
+2 -2
View File
@@ -8,12 +8,12 @@
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="12"> <a-row :gutter="12">
<a-col :md="7" :sm="8"> <a-col :md="7" :sm="8">
<a-form-item label="字典名称" :labelCol="{span: 6}" :wrapperCol="{span: 14, offset: 1}"> <a-form-item label="字典名称" :labelCol="{span: 6}" :wrapperCol="{span: 14}">
<a-input placeholder="请输入字典名称" v-model="queryParam.dictName"></a-input> <a-input placeholder="请输入字典名称" v-model="queryParam.dictName"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="7" :sm="8"> <a-col :md="7" :sm="8">
<a-form-item label="字典编号" :labelCol="{span: 6}" :wrapperCol="{span: 14, offset: 1}"> <a-form-item label="字典编号" :labelCol="{span: 6}" :wrapperCol="{span: 14}">
<a-input placeholder="请输入字典编号" v-model="queryParam.dictCode"></a-input> <a-input placeholder="请输入字典编号" v-model="queryParam.dictCode"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
+20 -16
View File
@@ -14,12 +14,12 @@
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :xl="8" :lg="8" :md="8" :sm="24"> <a-col :xl="9" :lg="8" :md="8" :sm="24">
<a-form-item label="搜索日志"> <a-form-item label="搜索日志">
<a-input placeholder="请输入搜索关键词" v-model="queryParam.keyWord"></a-input> <a-input placeholder="请输入搜索关键词" v-model="queryParam.keyWord"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="8" :lg="8" :md="8" :sm="24"> <a-col :xl="9" :lg="8" :md="8" :sm="24">
<a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-range-picker <a-range-picker
style="width: 100%" style="width: 100%"
@@ -31,13 +31,13 @@
/> />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="8" :lg="8" :md="8" :sm="24" v-if="tabKey === '2' "> <a-col :xl="9" :lg="8" :md="8" :sm="24" v-if="tabKey === '2' ">
<a-form-item label="操作类型" style="left: 10px"> <a-form-item label="操作类型" style="left: 10px">
<j-dict-select-tag v-model="queryParam.operateType" placeholder="请选择操作类型" dictCode="operate_type"/> <j-dict-select-tag v-model="queryParam.operateType" placeholder="请选择操作类型" dictCode="operate_type"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="4" :lg="8" :md="8" :sm="24">
<a-button type="primary" style="left: 10px" @click="searchQuery" icon="search" v-has="'sys:log:search'">查询</a-button> <a-button type="primary" style="left: 10px" @click="searchQuery" icon="search" v-has="'sys:log:search'">查询</a-button>
<a-button class="reset-button" @click="searchReset" icon="reload" <a-button class="reset-button" @click="searchReset" icon="reload"
style="margin-left: 8px;left: 10px">重置</a-button> style="margin-left: 8px;left: 10px">重置</a-button>
@@ -49,7 +49,7 @@
</a-form> </a-form>
</div> </div>
<div class="table-operator"> <div class="table-operator">
<a-button type="danger" @click="batchDel" icon="delete" v-has="'sys:log:batchDelete'" <a-button type="danger" @click="batchDel" icon="delete" v-has="'sys:log:batchDelete'"
style="margin-left: 8px;left: 10px">批量删除 style="margin-left: 8px;left: 10px">批量删除
</a-button> </a-button>
</div> </div>
@@ -81,8 +81,8 @@
</template> </template>
<script> <script>
import {filterObj} from '@/utils/util' import { filterObj } from '@/utils/util'
import {JeroListMixin} from '@/mixins/JeroListMixin' import { JeroListMixin } from '@/mixins/JeroListMixin'
import JEllipsis from '@/components/jero/JEllipsis' import JEllipsis from '@/components/jero/JEllipsis'
import IconImg from '@/assets/imgs/icon/icon_system.png' import IconImg from '@/assets/imgs/icon/icon_system.png'
import PageHeaderTitle from '../../components/layouts/PageHeaderTitle' import PageHeaderTitle from '../../components/layouts/PageHeaderTitle'
@@ -131,14 +131,14 @@ export default {
title: '日志内容', title: '日志内容',
align: 'center', align: 'center',
dataIndex: 'logContent', dataIndex: 'logContent',
scopedSlots: {customRender: 'logContent'}, scopedSlots: { customRender: 'logContent' },
sorter: true sorter: true
}, { }, {
title: '创建时间', title: '创建时间',
dataIndex: 'createTime', dataIndex: 'createTime',
align: 'center', align: 'center',
sorter: true sorter: true
}, }
// { // {
// title: '操作人ID', // title: '操作人ID',
// dataIndex: 'userid', // dataIndex: 'userid',
@@ -166,18 +166,18 @@ export default {
align: 'center' align: 'center'
}, },
labelCol: { labelCol: {
xs: {span: 1}, xs: { span: 1 },
sm: {span: 2} sm: { span: 2 }
}, },
wrapperCol: { wrapperCol: {
xs: {span: 10}, xs: { span: 10 },
sm: {span: 16} sm: { span: 16 }
}, },
url: { url: {
list: '/sys/log/page', list: '/sys/log/page',
deleteBatch:'/sys/log/deleteBatch', deleteBatch: '/sys/log/deleteBatch'
}, },
newColumns: [], newColumns: []
} }
}, },
created() { created() {
@@ -185,7 +185,7 @@ export default {
}, },
methods: { methods: {
getQueryParams() { getQueryParams() {
var param = Object.assign({}, this.lastQueryParam, this.isorter, {logType: this.tabKey}) var param = Object.assign({}, this.lastQueryParam, this.isorter, { logType: this.tabKey })
param.field = this.getQueryField() param.field = this.getQueryField()
param.pageNo = this.ipagination.current param.pageNo = this.ipagination.current
param.pageSize = this.ipagination.pageSize param.pageSize = this.ipagination.pageSize
@@ -238,4 +238,8 @@ export default {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
/deep/ .ant-card-body {
padding-top: 0 !important;
}
</style> </style>
+21 -21
View File
@@ -39,28 +39,28 @@
<span slot="action" slot-scope="text, record" class="action-span-cell"> <span slot="action" slot-scope="text, record" class="action-span-cell">
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
<!-- <a-dropdown>--> <a-dropdown>
<!-- <a class="ant-dropdown-link">--> <a class="ant-dropdown-link">
<!-- 更多 <a-icon type="down"/>--> 更多 <a-icon type="down"/>
<!-- </a>--> </a>
<!-- <a-menu slot="overlay">--> <a-menu slot="overlay">
<!-- <a-menu-item>--> <a-menu-item>
<!-- <a href="javascript:;" @click="handleDetail(record)">详情</a>--> <a href="javascript:;" @click="handleDetail(record)">详情</a>
<!-- </a-menu-item>--> </a-menu-item>
<!-- <a-menu-item>--> <a-menu-item>
<!-- <a href="javascript:;" @click="handleAddSub(record)">添加下级</a>--> <a href="javascript:;" @click="handleAddSub(record)">添加下级</a>
<!-- </a-menu-item>--> </a-menu-item>
<!-- <a-menu-item>--> <a-menu-item>
<!-- <a href="javascript:;" @click="handleDataRule(record)">数据规则</a>--> <a href="javascript:;" @click="handleDataRule(record)">数据规则</a>
<!-- </a-menu-item>--> </a-menu-item>
<!-- <a-menu-item>--> <a-menu-item>
<!--&lt;!&ndash; <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">&ndash;&gt;--> <!-- <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">-->
<!-- &lt;!&ndash; </a-popconfirm>&ndash;&gt;--> <!-- </a-popconfirm>-->
<!-- <a @click="handleDelete(record.id)">删除</a>--> <a @click="handleDelete(record.id)">删除</a>
<!-- </a-menu-item>--> </a-menu-item>
<!-- </a-menu>--> </a-menu>
<!-- </a-dropdown>--> </a-dropdown>
</span> </span>
<!-- 字符串超长截取省略号显示 --> <!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text"> <span slot="url" slot-scope="text">
+1 -1
View File
@@ -51,7 +51,7 @@
</div> </div>
</a-form-item> </a-form-item>
<a-form-item class="btn-form"> <a-form-item class="btn-form">
<a-button type="primary" class="btn-form-save" @click="handleOk">保存</a-button> <a-button type="primary" class="btn-form-save" @click="handleOk" v-has="'system:dept:save'">保存</a-button>
<a-button class="btn-form-cancel" @click="handleCancel">取消</a-button> <a-button class="btn-form-cancel" @click="handleCancel">取消</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
+4 -4
View File
@@ -7,19 +7,19 @@
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="8" :lg="8" :md="8" :sm="24">
<a-form-item label="用户账号"> <a-form-item label="用户账号">
<a-input placeholder="请输入用户账号" v-model="queryParam.username"></a-input> <a-input placeholder="请输入用户账号" v-model="queryParam.username"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="8" :lg="8" :md="8" :sm="24">
<a-form-item label="用户姓名"> <a-form-item label="用户姓名">
<a-input placeholder="请输入用户姓名" v-model="queryParam.realname"></a-input> <a-input placeholder="请输入用户姓名" v-model="queryParam.realname"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="8" :lg="8" :md="8" :sm="24">
<a-form-item <a-form-item
label="角色类型" label="角色类型"
:labelCol="labelCol" :labelCol="labelCol"
@@ -39,7 +39,7 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="8" :md="8" :sm="24"> <a-col :xl="8" :lg="8" :md="8" :sm="24">
<a-form-item <a-form-item
label="组织机构" label="组织机构"
:labelCol="labelCol" :labelCol="labelCol"
+4 -3
View File
@@ -56,7 +56,7 @@
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="电话"> label="电话">
<a-input placeholder="请输入电话" @change="event => event.target.value = event.target.value.trim()" :maxLength="50" v-decorator="['mobile',validatorRules.mobile]" /> <a-input placeholder="请输入电话" @change="e => e.target.value = (e.target.value.replace(/[^0-9-]/g, '')).trim()" :maxLength="15" v-decorator="['mobile',validatorRules.mobile]" />
</a-form-item> </a-form-item>
<!-- <a-form-item--> <!-- <a-form-item-->
<!-- :labelCol="labelCol"--> <!-- :labelCol="labelCol"-->
@@ -97,6 +97,7 @@ import { queryIdTree } from '@/api/api'
import pick from 'lodash.pick' import pick from 'lodash.pick'
import ATextarea from 'ant-design-vue/es/input/TextArea' import ATextarea from 'ant-design-vue/es/input/TextArea'
import {checkDepartName} from '@/utils/validateOnly' import {checkDepartName} from '@/utils/validateOnly'
import { isPhone } from '../../../utils/validate'
export default { export default {
name: 'SysDepartModal', name: 'SysDepartModal',
@@ -225,10 +226,10 @@ export default {
}) })
}, },
validateMobile(rule, value, callback) { validateMobile(rule, value, callback) {
if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)) { if (!value || isPhone(value)) {
callback() callback()
} else { } else {
callback('您的手机号码格式不正确!') callback('您的电话格式不正确!')
} }
} }
+1 -1
View File
@@ -37,7 +37,7 @@
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="排序值"> label="排序值">
<a-input-number :min="1" :max="99999" v-decorator="['sortOrder',{'initialValue':1}]"/> <a-input-number :min="1" :max="99999" v-decorator="['sortOrder',{'initialValue':1}]"/>
值越小越靠前,支持小数 值越小越靠前
</a-form-item> </a-form-item>
<!-- <a-form-item--> <!-- <a-form-item-->
+1 -1
View File
@@ -62,7 +62,7 @@
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), form: this.$form.createForm(this),
validatorRules: { validatorRules: {
dictName: { rules: [{ required: true, message: '请输入字典名称!' }], validateTrigger: 'blur' }, dictName: { rules: [{ required: true, message: '请输入字典名称' }], validateTrigger: 'blur' },
dictCode: { dictCode: {
rules: [{ required: true,validator: this.validateDictCode }, rules: [{ required: true,validator: this.validateDictCode },
], ],
+1 -1
View File
@@ -91,7 +91,7 @@ export default {
validatorRules: { validatorRules: {
roleName: { roleName: {
rules: [ rules: [
{required: true, message: '请输入角色名称!'}, {required: true, message: '请输入角色名称'},
{min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur'} {min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur'}
], ],
validateTrigger: 'blur' validateTrigger: 'blur'
+16 -8
View File
@@ -24,7 +24,7 @@
<a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入用户账号" @change="event => event.target.value = event.target.value.trim()" :maxLength="50" v-decorator.trim="[ 'username', validatorRules.username]" <a-input placeholder="请输入用户账号" @change="event => event.target.value = event.target.value.trim()" :maxLength="50" v-decorator.trim="[ 'username', validatorRules.username]"
:readOnly="!!model.id" :disabled="disableSubmit" /> :readOnly="!!model.id" :disabled="disableSubmit || disabledEdit" />
</a-form-item> </a-form-item>
<template v-if="!model.id"> <template v-if="!model.id">
@@ -227,7 +227,7 @@ export default {
password: { password: {
rules: [{ rules: [{
required: true, required: true,
message: '请输入密码' message: '请输入登录密码'
}, { }, {
validator: this.validateToNextPassword, validator: this.validateToNextPassword,
}], }],
@@ -235,13 +235,13 @@ export default {
}, },
confirmpassword: { confirmpassword: {
rules: [{ rules: [{
required: true, message: '请输入确认密码!', required: true, message: '请输入确认密码',
}, { }, {
validator: this.compareToFirstPassword, validator: this.compareToFirstPassword,
}], }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
realname: {rules: [{required: true, message: '请输入用户名称!'}], validateTrigger: 'blur'}, realname: {rules: [{required: true, message: '请输入用户姓名'}], validateTrigger: 'blur'},
phone: {rules: [{required: true,validator: this.validatePhone}], validateTrigger: 'blur'}, phone: {rules: [{required: true,validator: this.validatePhone}], validateTrigger: 'blur'},
email: { email: {
rules: [{ rules: [{
@@ -286,7 +286,8 @@ export default {
tenantList: [], tenantList: [],
currentTenant: [], currentTenant: [],
// 公钥 // 公钥
rsaPublicKey:'' rsaPublicKey:'',
disabledEdit: false, // 用户账号是否可编辑
} }
}, },
created() { created() {
@@ -357,7 +358,6 @@ export default {
this.edit({activitiSync: '1'}) this.edit({activitiSync: '1'})
}, },
edit(record) { edit(record) {
this.resetScreenSize() // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度 this.resetScreenSize() // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
// 加载组织机构数据 // 加载组织机构数据
this.loadDepartTreeData() this.loadDepartTreeData()
@@ -381,6 +381,11 @@ export default {
that.userId = record.id that.userId = record.id
that.visible = true that.visible = true
that.model = Object.assign({}, record) that.model = Object.assign({}, record)
if (that.model.id) {
that.disabledEdit = true
} else {
that.disabledEdit = false
}
// 组织机构修改成了单选,此处不需要了 // 组织机构修改成了单选,此处不需要了
if(record.departIds !== '' && record.id){ if(record.departIds !== '' && record.id){
// 部门是数组的时候以逗号拼接 // 部门是数组的时候以逗号拼接
@@ -576,7 +581,7 @@ export default {
callback() callback()
} }
if (!passwordReg(value)) { if (!passwordReg(value)) {
callback('密码长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类') callback('密码由8位及以上数字、大小写字母和特殊符号组成!')
} }
if (value && this.confirmDirty) { if (value && this.confirmDirty) {
form.validateFields(['confirm'], {force: true}) form.validateFields(['confirm'], {force: true})
@@ -585,6 +590,9 @@ export default {
}, },
compareToFirstPassword(rule, value, callback) { compareToFirstPassword(rule, value, callback) {
const form = this.form const form = this.form
if (value && !passwordReg(value)) {
callback('密码由8位及以上数字、大小写字母和特殊符号组成!')
}
if (value && value !== form.getFieldValue('password')) { if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不一样!') callback('两次输入的密码不一样!')
} else { } else {
@@ -614,7 +622,7 @@ export default {
if(res.success){ if(res.success){
callback() callback()
}else { }else {
callback(res.code === 500 ? '用户已存在': res) callback(res.code === 500 ? '用户账号已存在': res)
} }
}) })
}, },
+4 -4
View File
@@ -82,10 +82,10 @@
}, },
methods: { methods: {
onTreeNodeSelect(id){ onTreeNodeSelect(id){
if(id && id.length>0){ // if(id && id.length>0){
this.selectedKeys = id // this.selectedKeys = id
} // }
this.$refs.datarule.show(this.selectedKeys[0],this.roleId) // this.$refs.datarule.show(this.selectedKeys[0],this.roleId)
}, },
onCheck (o) { onCheck (o) {
if(this.checkStrictly){ if(this.checkStrictly){
+20 -11
View File
@@ -13,14 +13,14 @@
<a-row> <a-row>
<a-col :span='22'> <a-col :span='22'>
<a-form-item <a-form-item
label="用户名" label="账号"
:labelCol="{span: 5}" :labelCol="{span: 5}"
:wrapperCol="{span: 19}" :wrapperCol="{span: 19}"
> >
<a-input <a-input
type="text" type="text"
v-decorator="['username',validatorRules.username]" v-decorator="['username',validatorRules.username]"
placeholder="请输入用户名"> placeholder="请输入账号">
</a-input> </a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -29,7 +29,7 @@
<a-row> <a-row>
<a-col :span='22'> <a-col :span='22'>
<a-form-item <a-form-item
label="手机" label="手机号"
:labelCol="{span: 5}" :labelCol="{span: 5}"
:wrapperCol="{span: 19}" :wrapperCol="{span: 19}"
> >
@@ -129,33 +129,36 @@ export default {
validatorRules: { validatorRules: {
username: { username: {
rules: [ rules: [
{ required: true, message: '请输入用户名!' }], { required: true, message: '请输入账号!' }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
phone: { phone: {
rules: [ rules: [
{ required: true, message: '请输入手机号码!' }, { required: true, message: '请输入手机号!' },
{ validator: this.validatePhone } { validator: this.validatePhone }
], ],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
verifyCode: { verifyCode: {
rules: [{ required: true, message: '请输入短信验证码!' }], rules: [{ required: true, message: '请输入验证码!' }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
password: { password: {
rules: [ rules: [
{ required: true, message: '请输入新密码!' },
{ {
required: true, pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/, message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
message: '密码由8位数字、大小写字母和特殊符号组成!!'
} }
], ],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
confirmPassword: { confirmPassword: {
rules: [ rules: [
{ required: true, message: '密码不能为空!' }, { required: true, message: '请确认新密码!' },
{ pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
},
{ validator: this.handlePasswordCheck } { validator: this.handlePasswordCheck }
], ],
validateTrigger: 'blur' validateTrigger: 'blur'
@@ -236,15 +239,21 @@ export default {
e.preventDefault() e.preventDefault()
let that = this let that = this
let phone = that.form.getFieldValue('phone') let phone = that.form.getFieldValue('phone')
let username = that.form.getFieldValue('username')
if (!phone) { if (!phone) {
this.cmsFailed('手机号不能为空!') this.cmsFailed('手机号不能为空!')
return return
} }
if (!username) {
this.cmsFailed('用户名不能为空!')
return
}
this.form.validateFields(['phone'], { force: true }, (err) => { this.form.validateFields(['phone'], { force: true }, (err) => {
if (!err) { if (!err) {
const hide = this.$message.loading('验证码发送中..', 0) const hide = this.$message.loading('验证码发送中..', 0)
let smsParams = { let smsParams = {
phone: phone phone: phone,
userName: username
} }
getAction('/sys/sendVerificationCode', smsParams).then(res => { getAction('/sys/sendVerificationCode', smsParams).then(res => {
if (!res.success) { if (!res.success) {