[add] 注册页面,分标委在研项目
This commit is contained in:
@@ -17,6 +17,8 @@ const batchDownloadFile = (param) => getAction('/project/payWorkingGroupDistribu
|
|||||||
const getContractDetailById = (param) => getAction('/contract/payIncomeContract/queryCompanyById', param)
|
const getContractDetailById = (param) => getAction('/contract/payIncomeContract/queryCompanyById', param)
|
||||||
// 理事会详情
|
// 理事会详情
|
||||||
const getCouncilDetailById = (param) => getAction('/payCaseCouncil/payCaseCouncil/detail', param)
|
const getCouncilDetailById = (param) => getAction('/payCaseCouncil/payCaseCouncil/detail', param)
|
||||||
|
// 分标委在研项目
|
||||||
|
const getCommitteeUnderStudyProject = (param) => getAction('/payResearchProject/payResearchProject/listForThree', param)
|
||||||
|
|
||||||
export {
|
export {
|
||||||
queryCommonProjectById,
|
queryCommonProjectById,
|
||||||
@@ -27,5 +29,6 @@ export {
|
|||||||
getSubBidCommitteeDetail,
|
getSubBidCommitteeDetail,
|
||||||
batchDownloadFile,
|
batchDownloadFile,
|
||||||
getContractDetailById,
|
getContractDetailById,
|
||||||
getCouncilDetailById
|
getCouncilDetailById,
|
||||||
|
getCommitteeUnderStudyProject
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,382 @@
|
|||||||
|
<template>
|
||||||
|
<j-modal
|
||||||
|
:title="title"
|
||||||
|
:width="width"
|
||||||
|
:visible="visible"
|
||||||
|
:confirmLoading="confirmLoading"
|
||||||
|
switchFullscreen
|
||||||
|
@ok="handleOk"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
cancelText="关闭">
|
||||||
|
<a-spin :spinning="confirmLoading">
|
||||||
|
<a-form :form="form">
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="企业名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入企业名称"
|
||||||
|
v-decorator="['companyName',validatorRules.companyName]"
|
||||||
|
:maxLength='50'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="信用代码" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入信用代码"
|
||||||
|
v-decorator="['dutyCode', validatorRules.dutyCode]"
|
||||||
|
:maxLength='18'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="公司地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入公司地址"
|
||||||
|
v-decorator="['companyAddress', validatorRules.companyAddress]"
|
||||||
|
:maxLength='50'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="公司电话" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入公司电话"
|
||||||
|
v-decorator="['companyPhone', validatorRules.companyPhone]"
|
||||||
|
:maxLength='15'
|
||||||
|
@change="e => e.target.value = (e.target.value.replace(/[^0-9-]/g, '')).trim()"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="邮政编码" :labelCol="labelCol" :wrapperCol="wrapperCol" class="form-item-postcode">
|
||||||
|
<a-input placeholder="请输入邮政编码"
|
||||||
|
v-decorator="['postalCode', validatorRules.postalCode]"
|
||||||
|
:maxLength='6'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
<a class="search-postcode" href="https://www.youbianku.com" target="_blank">查询邮编</a>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="银行户名" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入银行户名"
|
||||||
|
v-decorator="['bankAccountName', validatorRules.bankAccountName]"
|
||||||
|
:maxLength='50'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="开户行" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入开户行"
|
||||||
|
v-decorator="['openingBank', validatorRules.openingBank]"
|
||||||
|
:maxLength='50'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item label="银行账号" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-input placeholder="请输入银行账号"
|
||||||
|
v-decorator="['bankAccount', validatorRules.bankAccount]"
|
||||||
|
:maxLength='50'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col>
|
||||||
|
<a-form-item label="备注" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
|
||||||
|
<a-textarea
|
||||||
|
placeholder="请输入备注"
|
||||||
|
v-decorator="['remarks']"
|
||||||
|
:auto-size="{ minRows: 3, maxRows: 6 }"
|
||||||
|
:maxLength='200'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</a-spin>
|
||||||
|
</j-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { postcode, phoneReg, isPhone, number, dutyCode } from '@/utils/validate'
|
||||||
|
import pick from 'lodash.pick'
|
||||||
|
import { httpAction } from '@api/manage'
|
||||||
|
import { duplicateCheck } from '@api/api'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'BusinessMangementModule',
|
||||||
|
props: {
|
||||||
|
// 数据来源,用于给后端接口传值,1--管理端,2--报名
|
||||||
|
dataForm: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
// 是否报名新增,用于给后端接口传值,1--是,2--否
|
||||||
|
applyAdd: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
default: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: '操作',
|
||||||
|
width: 800,
|
||||||
|
visible: false,
|
||||||
|
confirmLoading: false,
|
||||||
|
form: this.$form.createForm(this),
|
||||||
|
model: {},
|
||||||
|
labelCol: {
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 6 }
|
||||||
|
},
|
||||||
|
wrapperCol: {
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 18 }
|
||||||
|
},
|
||||||
|
remarksLabelCol: {
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 3 }
|
||||||
|
},
|
||||||
|
remarksWrapperCol: {
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 21 }
|
||||||
|
},
|
||||||
|
validatorRules: {
|
||||||
|
companyName: {
|
||||||
|
rules: [{ required: true, validator: this.checkCompanyName }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
companyAddress: {
|
||||||
|
rules: [{ required: true, message: '请输入公司地址' }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
companyPhone: {
|
||||||
|
rules: [{ required: false, validator: this.checkCompanyPhone }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
postalCode: {
|
||||||
|
rules: [{ required: false, validator: this.checkPostcode }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
bankAccountName: {
|
||||||
|
rules: [{ required: false, message: '请输入银行户名' }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
openingBank: {
|
||||||
|
rules: [{ required: true, message: '请输入开户行' }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
bankAccount: {
|
||||||
|
rules: [{ required: true, validator: this.checkBankAccount }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
},
|
||||||
|
dutyCode: {
|
||||||
|
rules: [{ required: true, validator: this.checkDutyCode }],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
add: '/company/payCompanyManagement/add',
|
||||||
|
edit: '/company/payCompanyManagement/edit'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
add(limit) {
|
||||||
|
// true 是调用无权限接口
|
||||||
|
if (limit) {
|
||||||
|
this.url.add = '/company/payCompanyManagement/addMeeting'
|
||||||
|
} else {
|
||||||
|
this.url.add = '/company/payCompanyManagement/add'
|
||||||
|
}
|
||||||
|
this.edit({})
|
||||||
|
},
|
||||||
|
edit(record) {
|
||||||
|
this.form.resetFields()
|
||||||
|
this.model = Object.assign({}, record)
|
||||||
|
this.visible = true
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.form.setFieldsValue(pick(this.model, 'companyName', 'companyAddress', 'companyPhone', 'postalCode', 'bankAccountName', 'openingBank', 'bankAccount', 'dutyCode', 'remarks'))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.$emit('close')
|
||||||
|
this.visible = false
|
||||||
|
},
|
||||||
|
handleOk: function () {
|
||||||
|
if (this.confirmLoading) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.confirmLoading = true
|
||||||
|
const that = this
|
||||||
|
// 触发表单验证
|
||||||
|
this.form.validateFields((err, values) => {
|
||||||
|
if (!err) {
|
||||||
|
// values.dataSource = this.dataForm
|
||||||
|
// values.signingUp = this.applyAdd
|
||||||
|
let httpurl = ''
|
||||||
|
let method = 'post'
|
||||||
|
if (!this.model.id) {
|
||||||
|
httpurl += this.url.add
|
||||||
|
} else {
|
||||||
|
httpurl += this.url.edit
|
||||||
|
}
|
||||||
|
const formData = Object.assign(this.model, values)
|
||||||
|
// 写这个判断是因为 在公司电话的输入框聚焦但是不输入情况下的 字段值会是一个空字符串 会导致后端接口 addMeeting 的报错
|
||||||
|
if (formData.companyPhone === '') {
|
||||||
|
formData.companyPhone = undefined
|
||||||
|
}
|
||||||
|
console.log('表单提交数据', formData)
|
||||||
|
httpAction(httpurl, formData, method).then((res) => {
|
||||||
|
if (res.success) {
|
||||||
|
that.$message.success(res.message)
|
||||||
|
that.$emit('ok', res.result)
|
||||||
|
that.close()
|
||||||
|
} else {
|
||||||
|
that.$message.warning(res.message)
|
||||||
|
}
|
||||||
|
}).finally(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.confirmLoading = false
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.confirmLoading = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.close()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 电话号码校验
|
||||||
|
* @param rules
|
||||||
|
* @param value
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
checkCompanyPhone(rules, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
if (phoneReg(value) || isPhone(value)) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('请输入正确的电话号码')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 邮编校验
|
||||||
|
* @param rules
|
||||||
|
* @param value
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
checkPostcode(rules, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
if (postcode(value)) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('请输入正确格式的邮政编码')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 限制银行账号只能输入数字
|
||||||
|
* @param rules
|
||||||
|
* @param value
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
checkBankAccount(rules, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
if (number(value)) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('请输入数字')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback('请输入银行账号')
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 校验信用代码唯一性
|
||||||
|
* @param rules
|
||||||
|
* @param value
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
checkDutyCode(rules, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
if (!dutyCode(value)) {
|
||||||
|
callback('请输入15位、18位的信用代码')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (this.model.dutyCode !== value) {
|
||||||
|
const params = {
|
||||||
|
confusionCode: 'pay_company_duty_code',
|
||||||
|
fieldVal: value
|
||||||
|
}
|
||||||
|
duplicateCheck(params).then(res => {
|
||||||
|
if (res.success) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('信用代码已存在')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback('请输入信用代码')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 企业名称唯一性校验
|
||||||
|
* @param rules
|
||||||
|
* @param value
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
checkCompanyName(rules, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
if (!this.model.id) {
|
||||||
|
const params = {
|
||||||
|
confusionCode: 'pay_company_management_company_name',
|
||||||
|
fieldVal: value
|
||||||
|
}
|
||||||
|
duplicateCheck(params).then(res => {
|
||||||
|
if (res.success) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('企业名称已存在')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback('请输入企业名称')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.form-item-postcode {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-postcode {
|
||||||
|
color: #0090ff;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
<template>
|
||||||
|
<j-modal
|
||||||
|
:title="title"
|
||||||
|
:width="width"
|
||||||
|
:visible="visible"
|
||||||
|
:confirmLoading="confirmLoading"
|
||||||
|
switchFullscreen
|
||||||
|
@ok="handleOk"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
cancelText="关闭">
|
||||||
|
<div class="table-page-search-wrapper">
|
||||||
|
<a-form layout="inline" @keyup.enter.native="searchQuery">
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<a-form-item>
|
||||||
|
<a-input placeholder="请输入企业名称" v-model="queryParam.companyName"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<span class="table-page-search-submitButtons">
|
||||||
|
<a-button type="primary" icon="search" @click="searchQuery">查询</a-button>
|
||||||
|
<a-button icon="reload" @click="searchReset">重置</a-button>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a-table
|
||||||
|
ref="table"
|
||||||
|
size="middle"
|
||||||
|
bordered
|
||||||
|
rowKey="id"
|
||||||
|
:columns="columns"
|
||||||
|
:dataSource="dataSource"
|
||||||
|
:pagination="ipagination"
|
||||||
|
:loading="loading"
|
||||||
|
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio'}"
|
||||||
|
@change="handleTableChange"
|
||||||
|
class="j-table-force-nowrap">
|
||||||
|
<template slot="htmlSlot" slot-scope="text">
|
||||||
|
<div v-html="text"></div>
|
||||||
|
</template>
|
||||||
|
<template slot="imgSlot" slot-scope="text">
|
||||||
|
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
|
||||||
|
<img v-else :src="getImgView(text)" height="25px" alt=""
|
||||||
|
style="max-width:80px;font-size: 12px;font-style: italic;"/>
|
||||||
|
</template>
|
||||||
|
<template slot="fileSlot" slot-scope="text,record">
|
||||||
|
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||||
|
<j-ellipsis @click.native="uploadFile(record.chargeNoticeFileId)" style="color:#219AFF;cursor: pointer"
|
||||||
|
:value="text" :length="20"/>
|
||||||
|
</template>
|
||||||
|
<template slot="text" slot-scope="text">
|
||||||
|
<j-ellipsis :value="text" :length="30"></j-ellipsis>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</div>
|
||||||
|
</j-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { JeroListMixin } from '@/mixins/JeroListMixin'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'BusinessSelect',
|
||||||
|
mixins: [JeroListMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: '选择企业',
|
||||||
|
width: 800,
|
||||||
|
visible: false,
|
||||||
|
confirmLoading: false,
|
||||||
|
url: {
|
||||||
|
list: '/company/payCompanyManagement/list'
|
||||||
|
},
|
||||||
|
selectedCompany: {},
|
||||||
|
selectedRowKeys: [],
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: '序号',
|
||||||
|
dataIndex: '',
|
||||||
|
key: 'rowIndex',
|
||||||
|
width: 60,
|
||||||
|
align: 'center',
|
||||||
|
customRender: function (t, r, index) {
|
||||||
|
return parseInt(index) + 1
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
title: '企业名称',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'companyName',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dataSource: [],
|
||||||
|
// 是否调用无权限接口
|
||||||
|
isLimit: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleOk() {
|
||||||
|
this.$emit('ok', this.selectedCompany)
|
||||||
|
this.close()
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.close()
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.visible = false
|
||||||
|
this.selectedCompany = {}
|
||||||
|
},
|
||||||
|
onSelectChange(selectedRowKeys, selectionRows) {
|
||||||
|
this.selectedCompany = selectionRows[0]
|
||||||
|
this.selectedRowKeys = selectedRowKeys
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
* 重写一下查询 之前调用的是混入的查询
|
||||||
|
* */
|
||||||
|
searchReset() {
|
||||||
|
// 调用无权限接口
|
||||||
|
if(this.isLimit){
|
||||||
|
this.url.list = '/company/payCompanyManagement/listMeeting'
|
||||||
|
}
|
||||||
|
this.lastQueryParam = {}
|
||||||
|
this.queryParam = {}
|
||||||
|
this.loadData(1)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
@import '~@assets/less/common.less';
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
<template>
|
||||||
|
<div class="company-select">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="20">
|
||||||
|
<a-input @click="chooseBusiness" :value="value[valueKey]" v-bind="$attrs" :readOnly="true" unselectable="on"></a-input>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="4" class="form-btn" v-if="canAdd">
|
||||||
|
<a-button v-bind="$attrs" icon="plus" @click="addCompany"></a-button>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
|
||||||
|
<business-select ref="businessSelect" @ok="handleOk" v-bind="$attrs"></business-select>
|
||||||
|
<business-management-module ref="businessAdd" @ok="addCompanyOk"></business-management-module>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import BusinessSelect from '@comp/company/BusinessSelect'
|
||||||
|
import BusinessManagementModule from '@comp/company/BusinessManagementModule'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'CompanySelect',
|
||||||
|
components: { BusinessSelect, BusinessManagementModule },
|
||||||
|
props: {
|
||||||
|
// 是否可以选择
|
||||||
|
isCompanyDisabled: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
type: [Object],
|
||||||
|
default: () => {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 回显数据的key
|
||||||
|
valueKey: {
|
||||||
|
type: String,
|
||||||
|
default: 'companyName'
|
||||||
|
},
|
||||||
|
// 是否可以新增:true--可以;false--不可以(组件作为查询条件时不可新增)
|
||||||
|
canAdd: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 是否调用无权限接口
|
||||||
|
isLimit:{
|
||||||
|
type:Boolean,
|
||||||
|
required:false,
|
||||||
|
default:false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* 打开选择企业的模态框,如果父级传参为true则点击不弹模态框
|
||||||
|
*/
|
||||||
|
chooseBusiness() {
|
||||||
|
if (this.isCompanyDisabled) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 修改参数 是否调用无权限接口
|
||||||
|
this.$refs.businessSelect.isLimit = this.isLimit
|
||||||
|
this.$refs.businessSelect.searchReset()
|
||||||
|
this.$refs.businessSelect.visible = true
|
||||||
|
this.$refs.businessSelect.selectedRowKeys[0] = this.value.id
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 选中后抛出企业信息(id, companyName)
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
handleOk(value) {
|
||||||
|
let company = {
|
||||||
|
id: value.id,
|
||||||
|
companyName: value.companyName
|
||||||
|
}
|
||||||
|
this.$emit('change', company)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 新增企业
|
||||||
|
*/
|
||||||
|
addCompany() {
|
||||||
|
this.$refs.businessAdd.title = '新增企业'
|
||||||
|
// 传参是否调用无权限接口
|
||||||
|
this.$refs.businessAdd.add(this.isLimit)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 接收回显
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
addCompanyOk(value) {
|
||||||
|
let { id, companyName } = value
|
||||||
|
this.$emit('change', { id, companyName })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//2.2新增 在组件内定义 指定父组件调用时候的传值属性和事件类型
|
||||||
|
model: {
|
||||||
|
prop: 'value',
|
||||||
|
event: 'change'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
a-input:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-btn {
|
||||||
|
padding-top: 1px;
|
||||||
|
padding-left: 8px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<a-table
|
<a-table
|
||||||
ref="table"
|
ref="table"
|
||||||
|
size="middle"
|
||||||
:rowKey="record => record.id || record.fileId"
|
:rowKey="record => record.id || record.fileId"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:dataSource="dataSource"
|
:dataSource="dataSource"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<a-table
|
<a-table
|
||||||
ref="table"
|
ref="table"
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
|
size="middle"
|
||||||
:scroll="{x: 1200}"
|
:scroll="{x: 1200}"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:dataSource="dataSource"
|
:dataSource="dataSource"
|
||||||
|
|||||||
@@ -1,158 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<a-table
|
|
||||||
ref="table"
|
|
||||||
rowKey="id"
|
|
||||||
:scroll="{x: 1200}"
|
|
||||||
:columns="columns"
|
|
||||||
:dataSource="dataSource"
|
|
||||||
:pagination="false"
|
|
||||||
:loading="loading"
|
|
||||||
@change="handleTableChange"
|
|
||||||
class="j-table-force-nowrap">
|
|
||||||
|
|
||||||
<template slot="text" slot-scope="text">
|
|
||||||
<j-ellipsis :value="text" :length="18"></j-ellipsis>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- 立项文件-->
|
|
||||||
<span slot="project-approval" class="action-span-cell" slot-scope="text, record">
|
|
||||||
<a @click="viewProjectApproval(record)">查看</a>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<!-- 征求意见-->
|
|
||||||
<span slot="advice" class="action-span-cell" slot-scope="text, record">
|
|
||||||
<a @click="viewAdvice(record)">查看</a>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<!-- 送审材料-->
|
|
||||||
<span slot="review-material" class="action-span-cell" slot-scope="text, record">
|
|
||||||
<a @click="viewReviewMaterial(record)">查看</a>
|
|
||||||
</span>
|
|
||||||
</a-table>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const columns = [
|
|
||||||
{
|
|
||||||
title: '序号',
|
|
||||||
dataIndex: '',
|
|
||||||
key: 'rowIndex',
|
|
||||||
width: 60,
|
|
||||||
align: 'center',
|
|
||||||
customRender: function (t, r, index) {
|
|
||||||
return parseInt(index) + 1
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
title: '项目名称',
|
|
||||||
align: 'center',
|
|
||||||
dataIndex: 'companyName',
|
|
||||||
scopedSlots: { customRender: 'text' }
|
|
||||||
}, {
|
|
||||||
title: '计划号',
|
|
||||||
align: 'center',
|
|
||||||
dataIndex: 'dutyCode',
|
|
||||||
scopedSlots: { customRender: 'text' }
|
|
||||||
}, {
|
|
||||||
title: '起草单位',
|
|
||||||
align: 'center',
|
|
||||||
dataIndex: 'companyAddress',
|
|
||||||
scopedSlots: { customRender: 'text' }
|
|
||||||
}, {
|
|
||||||
title: '项目进度',
|
|
||||||
align: 'center',
|
|
||||||
dataIndex: 'companyPhone',
|
|
||||||
scopedSlots: { customRender: 'text' }
|
|
||||||
}, {
|
|
||||||
title: '立项文件',
|
|
||||||
align: 'center',
|
|
||||||
width: 100,
|
|
||||||
fixed: 'right',
|
|
||||||
dataIndex: 'status_dictText',
|
|
||||||
scopedSlots: { customRender: 'project-approval' }
|
|
||||||
}, {
|
|
||||||
title: '征求意见',
|
|
||||||
align: 'center',
|
|
||||||
width: 100,
|
|
||||||
fixed: 'right',
|
|
||||||
dataIndex: 'createTime',
|
|
||||||
scopedSlots: { customRender: 'advice' }
|
|
||||||
}, {
|
|
||||||
title: '送审材料',
|
|
||||||
align: 'center',
|
|
||||||
width: 100,
|
|
||||||
fixed: 'right',
|
|
||||||
dataIndex: 'bankAccountName',
|
|
||||||
scopedSlots: { customRender: 'review-material' }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
export default {
|
|
||||||
name: 'UnderStudyProjectList',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
columns,
|
|
||||||
dataSource: [],
|
|
||||||
loading: false,
|
|
||||||
/* 分页参数 */
|
|
||||||
ipagination: {
|
|
||||||
current: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
pageSizeOptions: ['10', '20', '30', '50', '100'],
|
|
||||||
showTotal: (total, range) => {
|
|
||||||
return range[0] + '-' + range[1] + ' 共' + total + '条'
|
|
||||||
},
|
|
||||||
showQuickJumper: true,
|
|
||||||
showSizeChanger: true,
|
|
||||||
total: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
loadData() {
|
|
||||||
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 分页变化
|
|
||||||
* @param pagination
|
|
||||||
* @param filters
|
|
||||||
* @param sorter
|
|
||||||
*/
|
|
||||||
handleTableChange(pagination, filters, sorter) {
|
|
||||||
//分页、排序、筛选变化时触发
|
|
||||||
//TODO 筛选
|
|
||||||
if (Object.keys(sorter).length > 0) {
|
|
||||||
this.isorter.column = sorter.field
|
|
||||||
this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
|
|
||||||
}
|
|
||||||
this.ipagination = pagination
|
|
||||||
this.loadData()
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 查看立项文件
|
|
||||||
* @param record
|
|
||||||
*/
|
|
||||||
viewProjectApproval(record) {
|
|
||||||
console.log('查看立项文件', record)
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 查看征求意见
|
|
||||||
* @param record
|
|
||||||
*/
|
|
||||||
viewAdvice(record) {
|
|
||||||
console.log('查看征求意见', record)
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* 查看送审材料
|
|
||||||
* @param record
|
|
||||||
*/
|
|
||||||
viewReviewMaterial(record) {
|
|
||||||
console.log('查看送审材料', record)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="less">
|
|
||||||
@import '~@assets/less/common.less';
|
|
||||||
</style>
|
|
||||||
@@ -577,3 +577,22 @@ export function encrypt(publicKey, message) {
|
|||||||
const txt = encrypt.encrypt(message)
|
const txt = encrypt.encrypt(message)
|
||||||
return txt
|
return txt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将时间戳转换为YYYY-MM-DD HH:mm:ss格式
|
||||||
|
*/
|
||||||
|
export function processingTimestamp(value) {
|
||||||
|
let data = new Date(value)
|
||||||
|
let y = data.getFullYear()
|
||||||
|
let m = data.getMonth() + 1
|
||||||
|
m = m < 10 ? ('0' + m) : m
|
||||||
|
let d = data.getDate()
|
||||||
|
d = d < 10 ? ('0' + d) : d
|
||||||
|
let h = data.getHours()
|
||||||
|
h = h < 10 ? ('0' + h) : h
|
||||||
|
let minute = data.getMinutes()
|
||||||
|
let second = data.getSeconds()
|
||||||
|
minute = minute < 10 ? ('0' + minute) : minute
|
||||||
|
second = second < 10 ? ('0' + second) : second
|
||||||
|
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second
|
||||||
|
}
|
||||||
@@ -25,7 +25,6 @@
|
|||||||
<a-table
|
<a-table
|
||||||
ref="table"
|
ref="table"
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
:scroll="{x: 1200}"
|
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:dataSource="dataSource"
|
:dataSource="dataSource"
|
||||||
:pagination="ipagination"
|
:pagination="ipagination"
|
||||||
@@ -108,7 +107,8 @@ export default {
|
|||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/subBidCommittee/SubBidCommitteeDetailPage',
|
path: '/subBidCommittee/SubBidCommitteeDetailPage',
|
||||||
query: {
|
query: {
|
||||||
id: record.id
|
id: record.id,
|
||||||
|
abbreviation: record.abbreviation
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -19,7 +19,36 @@
|
|||||||
<!-- 在研项目-->
|
<!-- 在研项目-->
|
||||||
<div class="under-study basic-box">
|
<div class="under-study basic-box">
|
||||||
<h3 class="title">在研项目</h3>
|
<h3 class="title">在研项目</h3>
|
||||||
<under-study-project-list></under-study-project-list>
|
<a-table
|
||||||
|
ref="table"
|
||||||
|
rowKey="id"
|
||||||
|
size="middle"
|
||||||
|
:scroll="{x: 1200}"
|
||||||
|
:columns="columns"
|
||||||
|
:dataSource="dataSource"
|
||||||
|
:pagination="ipagination"
|
||||||
|
:loading="loading"
|
||||||
|
class="j-table-force-nowrap">
|
||||||
|
|
||||||
|
<template slot="text" slot-scope="text">
|
||||||
|
<j-ellipsis :value="text" :length="18"></j-ellipsis>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 立项文件-->
|
||||||
|
<span slot="project-approval" class="action-span-cell" slot-scope="text, record">
|
||||||
|
<a @click="viewProjectApproval(record)">查看</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<!-- 征求意见-->
|
||||||
|
<span slot="advice" class="action-span-cell" slot-scope="text, record">
|
||||||
|
<a @click="viewAdvice(record)">查看</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<!-- 送审材料-->
|
||||||
|
<span slot="review-material" class="action-span-cell" slot-scope="text, record">
|
||||||
|
<a @click="viewReviewMaterial(record)">查看</a>
|
||||||
|
</span>
|
||||||
|
</a-table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 分标委会议-->
|
<!-- 分标委会议-->
|
||||||
@@ -34,18 +63,74 @@
|
|||||||
<file-list ref="fileList"></file-list>
|
<file-list ref="fileList"></file-list>
|
||||||
</div>
|
</div>
|
||||||
</a-card>
|
</a-card>
|
||||||
|
|
||||||
|
<committee-under-study-files-modal ref="filesModal"></committee-under-study-files-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getSubBidCommitteeDetail } from '@api/incomePaymentsApi'
|
import { getSubBidCommitteeDetail, getCommitteeUnderStudyProject } from '@api/incomePaymentsApi'
|
||||||
import UnderStudyProjectList from '@comp/detailPage/UnderStudyProjectList'
|
|
||||||
import MeetingList from '@comp/detailPage/MeetingList'
|
import MeetingList from '@comp/detailPage/MeetingList'
|
||||||
import FileList from '@comp/detailPage/FileList'
|
import FileList from '@comp/detailPage/FileList'
|
||||||
|
import CommitteeUnderStudyFilesModal from '@views/subBidCommittee/modules/CommitteeUnderStudyFilesModal'
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: '序号',
|
||||||
|
dataIndex: '',
|
||||||
|
key: 'rowIndex',
|
||||||
|
width: 60,
|
||||||
|
align: 'center',
|
||||||
|
customRender: function (t, r, index) {
|
||||||
|
return parseInt(index) + 1
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
title: '项目名称',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'projectName',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}, {
|
||||||
|
title: '计划号',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'planNo',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}, {
|
||||||
|
title: '起草单位',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'draftCompany',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}, {
|
||||||
|
title: '项目进度',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'projectSchedule',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}, {
|
||||||
|
title: '立项文件',
|
||||||
|
align: 'center',
|
||||||
|
width: 100,
|
||||||
|
fixed: 'right',
|
||||||
|
dataIndex: 'FILE_LIST10',
|
||||||
|
scopedSlots: { customRender: 'project-approval' }
|
||||||
|
}, {
|
||||||
|
title: '征求意见',
|
||||||
|
align: 'center',
|
||||||
|
width: 100,
|
||||||
|
fixed: 'right',
|
||||||
|
dataIndex: 'FILE_LIST20',
|
||||||
|
scopedSlots: { customRender: 'advice' }
|
||||||
|
}, {
|
||||||
|
title: '送审材料',
|
||||||
|
align: 'center',
|
||||||
|
width: 100,
|
||||||
|
fixed: 'right',
|
||||||
|
dataIndex: 'FILE_LIST30',
|
||||||
|
scopedSlots: { customRender: 'review-material' }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SubBidCommitteeDetailPage',
|
name: 'SubBidCommitteeDetailPage',
|
||||||
components: { UnderStudyProjectList, MeetingList, FileList },
|
components: { MeetingList, FileList, CommitteeUnderStudyFilesModal },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
basicLoading: false,
|
basicLoading: false,
|
||||||
@@ -53,14 +138,31 @@ export default {
|
|||||||
committeeDetail: {},
|
committeeDetail: {},
|
||||||
// 文件数据
|
// 文件数据
|
||||||
fileList: [],
|
fileList: [],
|
||||||
|
// 在研项目
|
||||||
|
columns,
|
||||||
|
dataSource: [],
|
||||||
|
/* 分页参数 */
|
||||||
|
ipagination: {
|
||||||
|
current: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
pageSizeOptions: ['10', '20', '30', '50', '100'],
|
||||||
|
showTotal: (total, range) => {
|
||||||
|
return range[0] + '-' + range[1] + ' 共' + total + '条'
|
||||||
|
},
|
||||||
|
showQuickJumper: true,
|
||||||
|
showSizeChanger: true,
|
||||||
|
total: 0
|
||||||
|
},
|
||||||
|
loading: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getCommitteeDetail()
|
this.getCommitteeDetail()
|
||||||
|
this.getUnderStudyProjectList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/**
|
/**
|
||||||
* 获取分标委详情数据
|
* 获取基本信息、其他分发资料数据
|
||||||
*/
|
*/
|
||||||
getCommitteeDetail() {
|
getCommitteeDetail() {
|
||||||
if (!this.$route.query.id) {
|
if (!this.$route.query.id) {
|
||||||
@@ -86,7 +188,68 @@ export default {
|
|||||||
this.$refs.fileList.loading = false
|
this.$refs.fileList.loading = false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
|
/**
|
||||||
|
* 获取在研项目
|
||||||
|
*/
|
||||||
|
getUnderStudyProjectList() {
|
||||||
|
let param = {
|
||||||
|
abbreviation: this.$route.query.abbreviation
|
||||||
|
}
|
||||||
|
getCommitteeUnderStudyProject(param).then(res => {
|
||||||
|
if (res.success) {
|
||||||
|
this.dataSource = res.result.result.records
|
||||||
|
if (res.result.result.total) {
|
||||||
|
this.ipagination.total = res.result.result.total
|
||||||
|
} else {
|
||||||
|
this.ipagination.total = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 查看立项文件
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
viewProjectApproval(record) {
|
||||||
|
this.$refs.filesModal.title = '立项文件'
|
||||||
|
this.$refs.filesModal.dataSource = record.FILE_LIST10
|
||||||
|
this.$refs.filesModal.visible = true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 查看征求意见
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
viewAdvice(record) {
|
||||||
|
this.$refs.filesModal.title = '征求意见'
|
||||||
|
this.$refs.filesModal.dataSource = record.FILE_LIST20
|
||||||
|
this.$refs.filesModal.visible = true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 查看送审材料
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
viewReviewMaterial(record) {
|
||||||
|
this.$refs.filesModal.title = '送审材料'
|
||||||
|
this.$refs.filesModal.dataSource = record.FILE_LIST30
|
||||||
|
this.$refs.filesModal.visible = true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 分页变化
|
||||||
|
* @param pagination
|
||||||
|
* @param filters
|
||||||
|
* @param sorter
|
||||||
|
*/
|
||||||
|
handleTableChange(pagination, filters, sorter) {
|
||||||
|
//分页、排序、筛选变化时触发
|
||||||
|
//TODO 筛选
|
||||||
|
if (Object.keys(sorter).length > 0) {
|
||||||
|
this.isorter.column = sorter.field
|
||||||
|
this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
|
||||||
|
}
|
||||||
|
this.ipagination = pagination
|
||||||
|
this.getUnderStudyProjectList()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -130,6 +293,7 @@ export default {
|
|||||||
.file-title {
|
.file-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
|||||||
@@ -0,0 +1,118 @@
|
|||||||
|
<template>
|
||||||
|
<j-modal
|
||||||
|
:title="title"
|
||||||
|
:width="width"
|
||||||
|
:visible="visible"
|
||||||
|
:confirmLoading="confirmLoading"
|
||||||
|
switchFullscreen
|
||||||
|
@cancel="handleCancel"
|
||||||
|
cancelText="关闭">
|
||||||
|
<!-- table表格区域-->
|
||||||
|
<div>
|
||||||
|
<a-table
|
||||||
|
ref="table"
|
||||||
|
size="middle"
|
||||||
|
bordered
|
||||||
|
:columns="columns"
|
||||||
|
:dataSource="dataSource"
|
||||||
|
:pagination="false"
|
||||||
|
:loading="confirmLoading"
|
||||||
|
class="j-table-force-nowrap">
|
||||||
|
|
||||||
|
<template slot="text" slot-scope="text">
|
||||||
|
<j-ellipsis :value="text" :length="18"></j-ellipsis>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 时间戳转时间-->
|
||||||
|
<template slot="time" slot-scope="text">
|
||||||
|
<j-ellipsis :value="processingTimestamp(text)" :length="20"></j-ellipsis>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 操作-->
|
||||||
|
<span slot="action" class="action-span-cell" slot-scope="text, record">
|
||||||
|
<a @click="handleDownload(record)">下载</a>
|
||||||
|
<a @click="handlePreview(record)">查看</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</a-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template slot="footer">
|
||||||
|
<a-button key="back" @click="handleCancel">关闭</a-button>
|
||||||
|
</template>
|
||||||
|
</j-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { downloadFile } from '@api/manage'
|
||||||
|
import Vue from 'vue'
|
||||||
|
import { ACCESS_TOKEN } from '@/store/mutation-types'
|
||||||
|
import { processingTimestamp } from '@/utils/util'
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: '文件名',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'FILE_NAME',
|
||||||
|
scopedSlots: { customRender: 'text' }
|
||||||
|
}, {
|
||||||
|
title: '上传时间',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'CREAT_TIME',
|
||||||
|
scopedSlots: { customRender: 'time' }
|
||||||
|
}, {
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
dataIndex: 'action',
|
||||||
|
width: 160,
|
||||||
|
scopedSlots: { customRender: 'action' }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
name: 'CommitteeUnderStudyFilesModal',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: '操作',
|
||||||
|
width: 800,
|
||||||
|
visible: false,
|
||||||
|
confirmLoading: false,
|
||||||
|
columns,
|
||||||
|
dataSource: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
processingTimestamp,
|
||||||
|
/**
|
||||||
|
* 下载
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
handleDownload(record) {
|
||||||
|
let param = {
|
||||||
|
fileId: record.FILE_ID,
|
||||||
|
fileName: record.FILE_NAME
|
||||||
|
}
|
||||||
|
downloadFile(`/payResearchProject/payResearchProject/downLoad`, record.FILE_NAME, param)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 预览
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
handlePreview(record) {
|
||||||
|
if (record && record.FILE_ID) {
|
||||||
|
const fileFullUrl = `${ window._CONFIG['domianWebSocketURL'] }/sys/common/download/${ record.FILE_ID }?token=${ Vue.ls.get(ACCESS_TOKEN) }&fullfilename=${ record.FILE_NAME }`
|
||||||
|
let url = `${ window._CONFIG['onlinePreviewDomainURL'] }?url=${ encodeURIComponent(fileFullUrl) }`
|
||||||
|
// let url = `${window._CONFIG['onlinePreviewDomainURL']}?url=${encodeURIComponent(fileFullUrl)}`
|
||||||
|
window.open(url)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.dataSource = []
|
||||||
|
this.visible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
@import '~@assets/less/common.less';
|
||||||
|
</style>
|
||||||
@@ -128,16 +128,19 @@
|
|||||||
<!-- 切换登录方式-->
|
<!-- 切换登录方式-->
|
||||||
<a-col :span="4">
|
<a-col :span="4">
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<span @click="switchingLoginMode" class="forget-password" style="margin-left: 5px; color: #BFBFBF;">
|
<div @click="handleRegister" class="forget-password" style="margin-left: 5px;">注册</div>
|
||||||
{{ isVerificationCodeLogin ? '账号密码登录' : '手机验证码登录' }}
|
|
||||||
</span>
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="3">
|
<a-col :span="4">
|
||||||
</a-col>
|
|
||||||
<a-col :span="5" style="text-align: right;">
|
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<span @click='forgetPassword' class="forget-password" style="float: right;color: #BFBFBF;">
|
<div @click="switchingLoginMode" class="forget-password" style="text-align: center;">
|
||||||
|
{{ isVerificationCodeLogin ? '账号密码登录' : '手机验证码登录' }}
|
||||||
|
</div>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="4" style="text-align: right;">
|
||||||
|
<a-form-item>
|
||||||
|
<span @click='forgetPassword' class="forget-password" style="float: right;">
|
||||||
忘记密码 <img style='height: 14px' src='../../assets/wenhao.png' alt=''>
|
忘记密码 <img style='height: 14px' src='../../assets/wenhao.png' alt=''>
|
||||||
</span>
|
</span>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -413,6 +416,14 @@ export default {
|
|||||||
// 密码禁止粘贴
|
// 密码禁止粘贴
|
||||||
handleOperate() {
|
handleOperate() {
|
||||||
return false
|
return false
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 注册
|
||||||
|
*/
|
||||||
|
handleRegister() {
|
||||||
|
this.$router.push({
|
||||||
|
path: 'register'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -493,6 +504,7 @@ export default {
|
|||||||
|
|
||||||
.forget-password {
|
.forget-password {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
color: #BFBFBF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,281 +1,400 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="main user-layout-register">
|
<a-card :bordered="false" style="width: 100%;height: 100%;text-align: left;">
|
||||||
<h3><span>注册</span></h3>
|
<div class='alteration-head logo'>
|
||||||
<a-form ref="formRegister" :autoFormCreate="(form)=>{this.form = form}" id="formRegister">
|
<router-link :to="{name:'dashboard'}">
|
||||||
<a-form-item
|
<img src="~@/assets/logo.png" alt="logo">
|
||||||
fieldDecoratorId="username"
|
<h1>汽车标准化工作平台</h1>
|
||||||
:fieldDecoratorOptions="{rules: [{ required: false}, { validator: this.checkUsername }]}">
|
</router-link>
|
||||||
<a-input size="large" type="text" autocomplete="false" placeholder="请输入用户名"></a-input>
|
</div>
|
||||||
</a-form-item>
|
<div class='alteration-center'>
|
||||||
|
<div class='alteration-content' >
|
||||||
<a-popover placement="rightTop" trigger="click" :visible="state.passwordLevelChecked">
|
<a-form :form="form">
|
||||||
<template slot="content">
|
<span class='setPassword'>注册</span>
|
||||||
<div :style="{ width: '240px' }">
|
<div class="steps-box">
|
||||||
<div :class="['user-register', passwordLevelClass]">强度:<span>{{ passwordLevelName }}</span></div>
|
<a-steps :current="current">
|
||||||
<a-progress :percent="state.percent" :showInfo="false" :strokeColor=" passwordLevelColor "/>
|
<a-step v-for="item in steps" :key="item.title" :title="item.title"/>
|
||||||
<div style="margin-top: 10px;">
|
</a-steps>
|
||||||
<span>请至少输入 8 个字符。请不要使用容易被猜到的密码。</span>
|
</div>
|
||||||
</div>
|
<!-- 设置密码部分-->
|
||||||
|
<div v-show="current === 0">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span='22'>
|
||||||
|
<a-form-item
|
||||||
|
label="手机号"
|
||||||
|
:labelCol="{span: 5}"
|
||||||
|
:wrapperCol="{span: 19}"
|
||||||
|
>
|
||||||
|
<a-input
|
||||||
|
type="text"
|
||||||
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
|
placeholder="请输入手机号">
|
||||||
|
</a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span='6'></a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span='22'>
|
||||||
|
<a-form-item
|
||||||
|
class='captcha'
|
||||||
|
label="验证码"
|
||||||
|
:labelCol="{span: 5}"
|
||||||
|
:wrapperCol="{span: 19}">
|
||||||
|
<a-input
|
||||||
|
v-decorator="['captcha', validatorRules.captcha]"
|
||||||
|
type="text"
|
||||||
|
autocomplete="new-password"
|
||||||
|
placeholder="请输入验证码">
|
||||||
|
</a-input>
|
||||||
|
<a-button
|
||||||
|
tabindex="-1"
|
||||||
|
size="default"
|
||||||
|
:disabled="state.smsSendBtn"
|
||||||
|
@click.stop.prevent="getCaptcha"
|
||||||
|
v-text="!state.smsSendBtn && '获取验证码' || (state.time+' s')"></a-button>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span='6'></a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span='22'>
|
||||||
|
<a-form-item
|
||||||
|
label="新密码"
|
||||||
|
:labelCol="{span: 5}"
|
||||||
|
:wrapperCol="{span: 19}">
|
||||||
|
<a-input-password
|
||||||
|
placeholder="请输入新密码"
|
||||||
|
v-decorator="['password', validatorRules.password]"
|
||||||
|
autocomplete="new-password"
|
||||||
|
@paste.native.capture.prevent="handleOperate"
|
||||||
|
type="password">
|
||||||
|
</a-input-password>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span='6'></a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span='22'>
|
||||||
|
<a-form-item
|
||||||
|
label="确认密码"
|
||||||
|
:labelCol="{span: 5}"
|
||||||
|
:wrapperCol="{span: 19}">
|
||||||
|
<a-input-password
|
||||||
|
placeholder="请输入确认密码"
|
||||||
|
v-decorator="['confirmPassword', validatorRules.confirmPassword]"
|
||||||
|
type="password"
|
||||||
|
@paste.native.capture.prevent="handleOperate"
|
||||||
|
autocomplete="new-password">
|
||||||
|
</a-input-password>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span='6'></a-col>
|
||||||
|
</a-row>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
|
||||||
<a-form-item
|
|
||||||
fieldDecoratorId="password"
|
|
||||||
:fieldDecoratorOptions="{rules: [{ required: false}, { validator: this.handlePasswordLevel }]}">
|
|
||||||
<a-input size="large" type="password" @click="handlePasswordInputClick" autocomplete="false" placeholder="至少8位密码,区分大小写"></a-input>
|
|
||||||
</a-form-item>
|
|
||||||
</a-popover>
|
|
||||||
|
|
||||||
<a-form-item
|
<!-- 完善信息部分-->
|
||||||
fieldDecoratorId="password2"
|
<div v-show="current===1">
|
||||||
:fieldDecoratorOptions="{rules: [{ required: false}, { validator: this.handlePasswordCheck }]}">
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
<a-input size="large" type="password" autocomplete="false" placeholder="确认密码"></a-input>
|
<a-form-item
|
||||||
</a-form-item>
|
label="企业名称"
|
||||||
<!-- <a-form-item-->
|
:labelCol="labelCol"
|
||||||
<!-- fieldDecoratorId="email">-->
|
:wrapperCol="wrapperCol">
|
||||||
<!-- <a-input size="large" type="text" placeholder="邮箱"></a-input>-->
|
<company-select placeholder="请选择企业"
|
||||||
<!-- </a-form-item>-->
|
v-decorator="['chargeCompany',validatorRules.chargeCompany]"
|
||||||
<a-form-item
|
:maxLength='50'></company-select>
|
||||||
fieldDecoratorId="mobile"
|
</a-form-item>
|
||||||
:fieldDecoratorOptions="{rules: [{ required: false}, { validator: this.handlePhoneCheck }]}">
|
</a-col>
|
||||||
<a-input size="large" placeholder="11 位手机号">
|
<a-col :xl="12" :sm="24">
|
||||||
<a-select slot="addonBefore" size="large" defaultValue="+86">
|
<a-form-item
|
||||||
<a-select-option value="+86">+86</a-select-option>
|
label="姓名"
|
||||||
<a-select-option value="+87">+87</a-select-option>
|
:labelCol="labelCol"
|
||||||
</a-select>
|
:wrapperCol="wrapperCol">
|
||||||
</a-input>
|
<a-input
|
||||||
</a-form-item>
|
type="text"
|
||||||
<!--<a-input-group size="large" compact>
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
<a-select style="width: 20%" size="large" defaultValue="+86">
|
placeholder="请输入姓名">
|
||||||
<a-select-option value="+86">+86</a-select-option>
|
</a-input>
|
||||||
<a-select-option value="+87">+87</a-select-option>
|
</a-form-item>
|
||||||
</a-select>
|
</a-col>
|
||||||
<a-input style="width: 80%" size="large" placeholder="11 位手机号"></a-input>
|
</a-row>
|
||||||
</a-input-group>-->
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
<a-row :gutter="16">
|
<a-form-item
|
||||||
<a-col class="gutter-row" :span="16">
|
label="性别"
|
||||||
<a-form-item
|
:labelCol="labelCol"
|
||||||
fieldDecoratorId="captcha"
|
:wrapperCol="wrapperCol">
|
||||||
:fieldDecoratorOptions="{rules: [{ required: false}, { validator: this.handleCaptchaCheck }]}">
|
<j-dict-select-tag
|
||||||
<a-input size="large" type="text" placeholder="验证码">
|
v-decorator="['gender']"
|
||||||
<a-icon slot="prefix" type="mail" :style="{ color: 'rgba(0,0,0,.25)' }"/>
|
:triggerChange="true"
|
||||||
</a-input>
|
placeholder="请选择性别"
|
||||||
</a-form-item>
|
dictCode="sex"/>
|
||||||
</a-col>
|
</a-form-item>
|
||||||
<a-col class="gutter-row" :span="8">
|
</a-col>
|
||||||
<a-button
|
<a-col :xl="12" :sm="24">
|
||||||
class="getCaptcha"
|
<a-form-item
|
||||||
size="large"
|
label="职务"
|
||||||
:disabled="state.smsSendBtn"
|
:labelCol="labelCol"
|
||||||
@click.stop.prevent="getCaptcha"
|
:wrapperCol="wrapperCol">
|
||||||
v-text="!state.smsSendBtn && '获取验证码'||(state.time+' s')"></a-button>
|
<a-input
|
||||||
</a-col>
|
type="text"
|
||||||
</a-row>
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
|
placeholder="请输入职务">
|
||||||
<a-form-item>
|
</a-input>
|
||||||
<a-button
|
</a-form-item>
|
||||||
size="large"
|
</a-col>
|
||||||
type="primary"
|
</a-row>
|
||||||
htmlType="submit"
|
<a-row>
|
||||||
class="register-button"
|
<a-col :xl="12" :sm="24">
|
||||||
:loading="registerBtn"
|
<a-form-item
|
||||||
@click.stop.prevent="handleSubmit"
|
label="手机号"
|
||||||
:disabled="registerBtn">注册
|
:labelCol="labelCol"
|
||||||
</a-button>
|
:wrapperCol="wrapperCol">
|
||||||
<router-link class="login" :to="{ name: 'login' }">使用已有账户登录</router-link>
|
<a-input
|
||||||
</a-form-item>
|
type="text"
|
||||||
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
</a-form>
|
placeholder="请输入手机号">
|
||||||
</div>
|
</a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item
|
||||||
|
label="邮箱"
|
||||||
|
:labelCol="labelCol"
|
||||||
|
:wrapperCol="wrapperCol">
|
||||||
|
<a-input
|
||||||
|
type="text"
|
||||||
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
|
placeholder="请输入邮箱">
|
||||||
|
</a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item
|
||||||
|
label="通讯地址"
|
||||||
|
:labelCol="labelCol"
|
||||||
|
:wrapperCol="wrapperCol">
|
||||||
|
<a-input
|
||||||
|
type="text"
|
||||||
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
|
placeholder="请输入通讯地址">
|
||||||
|
</a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="12" :sm="24">
|
||||||
|
<a-form-item
|
||||||
|
label="邮政编码"
|
||||||
|
:labelCol="labelCol"
|
||||||
|
:wrapperCol="wrapperCol">
|
||||||
|
<a-input
|
||||||
|
type="text"
|
||||||
|
v-decorator="['phone', validatorRules.phone]"
|
||||||
|
placeholder="请输入邮政编码">
|
||||||
|
</a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row>
|
||||||
|
<a-col>
|
||||||
|
<a-form-item label="备注" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
|
||||||
|
<a-textarea
|
||||||
|
placeholder="请输入备注"
|
||||||
|
v-decorator="['remarks']"
|
||||||
|
:auto-size="{ minRows: 3, maxRows: 6 }"
|
||||||
|
:maxLength='200'
|
||||||
|
@change="e => {e.target.value = (e.target.value + '').trim()}"/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</a-form>
|
||||||
|
<div class="btn">
|
||||||
|
<template v-if="current === 0">
|
||||||
|
<a-button :loading="loading" type="primary" @click="toNextStep" style="margin-left:20px">下一步</a-button>
|
||||||
|
<a-button @click='cancel'>取消</a-button>
|
||||||
|
</template>
|
||||||
|
<template v-if="current === 1">
|
||||||
|
<a-button :loading="loading" type="primary" @click="submit" style="margin-left:20px">提交</a-button>
|
||||||
|
<a-button @click='prev'>上一步</a-button>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {mixinDevice} from '@/utils/mixin.js'
|
import { mapActions } from 'vuex'
|
||||||
// import {getSmsCaptcha} from '@/api/login'
|
import { JSEncrypt } from 'jsencrypt'
|
||||||
import { postAction} from '@/api/manage'
|
import { getAction, postAction } from '@api/manage'
|
||||||
import {checkOnlyUser} from '@/api/api'
|
import { getRSAPublicKey } from '@api/login'
|
||||||
|
import CompanySelect from '@comp/company/CompanySelect'
|
||||||
|
|
||||||
const levelNames = {
|
export default {
|
||||||
0: '低',
|
name: 'Register',
|
||||||
1: '低',
|
components: { CompanySelect },
|
||||||
2: '中',
|
mixins: [],
|
||||||
3: '强'
|
data() {
|
||||||
}
|
return {
|
||||||
const levelClass = {
|
form: this.$form.createForm(this),
|
||||||
0: 'error',
|
loading: false,
|
||||||
1: 'error',
|
labelCol: {
|
||||||
2: 'warning',
|
xs: { span: 24 },
|
||||||
3: 'success'
|
sm: { span: 6 }
|
||||||
}
|
},
|
||||||
const levelColor = {
|
wrapperCol: {
|
||||||
0: '#ff0000',
|
xs: { span: 24 },
|
||||||
1: '#ff0000',
|
sm: { span: 18 }
|
||||||
2: '#ff7e05',
|
},
|
||||||
3: '#52c41a',
|
remarksLabelCol: {
|
||||||
}
|
xs: { span: 24 },
|
||||||
export default {
|
sm: { span: 3 }
|
||||||
name: 'Register',
|
},
|
||||||
components: {},
|
remarksWrapperCol: {
|
||||||
mixins: [mixinDevice],
|
xs: { span: 24 },
|
||||||
data() {
|
sm: { span: 21 }
|
||||||
return {
|
},
|
||||||
form: null,
|
validatorRules: {
|
||||||
|
phone: {
|
||||||
state: {
|
rules: [
|
||||||
time: 60,
|
{ required: true, message: '请输入手机号!' }, { validator: this.validatePhone }],
|
||||||
smsSendBtn: false,
|
validateTrigger: 'blur'
|
||||||
passwordLevel: 0,
|
|
||||||
passwordLevelChecked: false,
|
|
||||||
percent: 10,
|
|
||||||
progressColor: '#FF0000'
|
|
||||||
},
|
},
|
||||||
registerBtn: false
|
captcha: {
|
||||||
}
|
rules: [{ required: true, message: '请输入验证码!' }],
|
||||||
},
|
validateTrigger: 'blur'
|
||||||
computed: {
|
},
|
||||||
passwordLevelClass() {
|
password: {
|
||||||
return levelClass[this.state.passwordLevel]
|
rules: [
|
||||||
},
|
{ required: true, message: '请输入新密码!' },
|
||||||
passwordLevelName() {
|
{
|
||||||
return levelNames[this.state.passwordLevel]
|
pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/,
|
||||||
},
|
message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
|
||||||
passwordLevelColor() {
|
|
||||||
return levelColor[this.state.passwordLevel]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
checkUsername(rule, value, callback) {
|
|
||||||
if(!value){
|
|
||||||
callback(new Error('请输入用户名'))
|
|
||||||
}else{
|
|
||||||
var params = {
|
|
||||||
username: value,
|
|
||||||
}
|
|
||||||
checkOnlyUser(params).then((res) => {
|
|
||||||
if (res.success) {
|
|
||||||
callback()
|
|
||||||
} else {
|
|
||||||
callback('用户名已存在!')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleEmailCheck(rule, value, callback) {
|
|
||||||
var params = {
|
|
||||||
email: value,
|
|
||||||
}
|
|
||||||
checkOnlyUser(params).then((res) => {
|
|
||||||
if (res.success) {
|
|
||||||
callback()
|
|
||||||
} else {
|
|
||||||
callback('邮箱已存在!')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
handlePasswordLevel(rule, value, callback) {
|
|
||||||
|
|
||||||
let level = 0
|
|
||||||
let reg = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/
|
|
||||||
if (!reg.test(value)) {
|
|
||||||
callback(new Error('密码由8位数字、大小写字母和特殊符号组成!'))
|
|
||||||
}
|
|
||||||
// 判断这个字符串中有没有数字
|
|
||||||
if (/[0-9]/.test(value)) {
|
|
||||||
level++
|
|
||||||
}
|
|
||||||
// 判断字符串中有没有字母
|
|
||||||
if (/[a-zA-Z]/.test(value)) {
|
|
||||||
level++
|
|
||||||
}
|
|
||||||
// 判断字符串中有没有特殊符号
|
|
||||||
if (/[^0-9a-zA-Z_]/.test(value)) {
|
|
||||||
level++
|
|
||||||
}
|
|
||||||
this.state.passwordLevel = level
|
|
||||||
this.state.percent = level * 30
|
|
||||||
if (level >= 2) {
|
|
||||||
if (level >= 3) {
|
|
||||||
this.state.percent = 100
|
|
||||||
}
|
|
||||||
callback()
|
|
||||||
} else {
|
|
||||||
if (level === 0) {
|
|
||||||
this.state.percent = 10
|
|
||||||
}
|
|
||||||
callback(new Error('密码强度不够'))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
handlePasswordCheck(rule, value, callback) {
|
|
||||||
let password = this.form.getFieldValue('password')
|
|
||||||
//console.log('value', value)
|
|
||||||
if (value === undefined) {
|
|
||||||
callback(new Error('请输入密码'))
|
|
||||||
}
|
|
||||||
if (value && password && value.trim() !== password.trim()) {
|
|
||||||
callback(new Error('两次密码不一致'))
|
|
||||||
}
|
|
||||||
callback()
|
|
||||||
},
|
|
||||||
handleCaptchaCheck(rule, value, callback){
|
|
||||||
if(!value){
|
|
||||||
callback(new Error('请输入验证码'))
|
|
||||||
}else{
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handlePhoneCheck(rule, value, callback) {
|
|
||||||
var reg=/^1[3456789]\d{9}$/
|
|
||||||
if(!reg.test(value)){
|
|
||||||
callback(new Error('请输入正确手机号'))
|
|
||||||
}else{
|
|
||||||
var params = {
|
|
||||||
phone: value,
|
|
||||||
}
|
|
||||||
checkOnlyUser(params).then((res) => {
|
|
||||||
if (res.success) {
|
|
||||||
callback()
|
|
||||||
} else {
|
|
||||||
callback('手机号已存在!')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
handlePasswordInputClick() {
|
|
||||||
if (!this.isMobile()) {
|
|
||||||
this.state.passwordLevelChecked = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.state.passwordLevelChecked = false
|
|
||||||
},
|
|
||||||
|
|
||||||
handleSubmit() {
|
|
||||||
this.form.validateFields((err, values) => {
|
|
||||||
if (!err) {
|
|
||||||
var register = {
|
|
||||||
username: values.username,
|
|
||||||
password: values.password,
|
|
||||||
phone: values.mobile,
|
|
||||||
smscode: values.captcha
|
|
||||||
}
|
}
|
||||||
postAction('/sys/user/register', register).then((res) => {
|
],
|
||||||
if (!res.success) {
|
validateTrigger: 'blur'
|
||||||
this.registerFailed(res.message)
|
},
|
||||||
} else {
|
confirmPassword: {
|
||||||
this.$router.push({name: 'registerResult', params: {...values}})
|
rules: [
|
||||||
}
|
{ required: true, message: '请输入确认密码!' },
|
||||||
})
|
{
|
||||||
}
|
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
|
||||||
})
|
message: '密码由8位及以上数字、大小写字母和特殊符号组成!'
|
||||||
|
},
|
||||||
|
{ validator: this.handlePasswordCheck }
|
||||||
|
],
|
||||||
|
validateTrigger: 'blur'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
state: {
|
||||||
getCaptcha(e) {
|
time: 60,
|
||||||
e.preventDefault()
|
smsSendBtn: false
|
||||||
let that = this
|
},
|
||||||
this.form.validateFields(['mobile'], {force: true}, (err, values) => {
|
userList: {},
|
||||||
if (!err) {
|
temporaryUserInfo: null, // 临时用户数据
|
||||||
|
// 默认步骤
|
||||||
|
current: 1,
|
||||||
|
steps: [
|
||||||
|
{ title: '设置密码' },
|
||||||
|
{ title: '完善信息' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
document.title = '汽车标准化工作平台'
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions(['FirstPhoneLogin']),
|
||||||
|
/**
|
||||||
|
* 下一步
|
||||||
|
*/
|
||||||
|
toNextStep() {
|
||||||
|
this.current++
|
||||||
|
},
|
||||||
|
prev() {
|
||||||
|
this.current--
|
||||||
|
},
|
||||||
|
submit() {
|
||||||
|
let that = this
|
||||||
|
that.loading = true
|
||||||
|
this.form.validateFields((err, values) => {
|
||||||
|
if (!err) {
|
||||||
|
let params = {}
|
||||||
|
params.rsaPublicKey = this.rsaPublicKey
|
||||||
|
let encrypt = new JSEncrypt()
|
||||||
|
encrypt.setPublicKey(params.rsaPublicKey)
|
||||||
|
let url = ''
|
||||||
|
params.newPassword = encrypt.encrypt(values.password)
|
||||||
|
// 初次登录用password字段存了token
|
||||||
|
params.password = that.temporaryUserInfo.result.token
|
||||||
|
url = '/company/changePasswordWithToken'
|
||||||
|
params.verifyPassword = encrypt.encrypt(values.confirmPassword)
|
||||||
|
postAction(url, params).then((res) => {
|
||||||
|
if (res.success) {
|
||||||
|
that.loading = false
|
||||||
|
that.$router.go(-1)
|
||||||
|
} else {
|
||||||
|
this.passwordFailed(res.message)
|
||||||
|
that.loading = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
that.loading = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.$router.go(-1)
|
||||||
|
},
|
||||||
|
passwordFailed(err) {
|
||||||
|
this.$notification['error']({
|
||||||
|
message: '更改密码失败',
|
||||||
|
description: err,
|
||||||
|
duration: 4
|
||||||
|
})
|
||||||
|
},
|
||||||
|
validatePhone(rule, value, callback) {
|
||||||
|
if (value) {
|
||||||
|
var myreg = /^[1][3,4,5,7,8][0-9]{9}$/
|
||||||
|
if (!myreg.test(value)) {
|
||||||
|
callback('请输入正确的手机号')
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handlePasswordCheck(rule, value, callback) {
|
||||||
|
let password = this.form.getFieldValue('password')
|
||||||
|
if (value && password && value.trim() !== password.trim()) {
|
||||||
|
callback(new Error('两次密码不一致'))
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
getCaptcha(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
let that = this
|
||||||
|
let phone = that.form.getFieldValue('phone')
|
||||||
|
if (!phone) {
|
||||||
|
this.cmsFailed('手机号不能为空!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.form.validateFields(['phone'], { force: true }, (err) => {
|
||||||
|
if (!err) {
|
||||||
|
const hide = this.$message.loading('验证码发送中..', 0)
|
||||||
|
let smsParams = {
|
||||||
|
phone: phone,
|
||||||
|
// 忘记密码是2
|
||||||
|
codeType: 2
|
||||||
|
}
|
||||||
|
getAction('/company/sendVerificationCode', smsParams).then(res => {
|
||||||
|
if (!res.success) {
|
||||||
|
setTimeout(hide, 1)
|
||||||
|
this.cmsFailed(res.message)
|
||||||
|
} else {
|
||||||
this.state.smsSendBtn = true
|
this.state.smsSendBtn = true
|
||||||
let interval = window.setInterval(() => {
|
let interval = window.setInterval(() => {
|
||||||
if (that.state.time-- <= 0) {
|
if (that.state.time-- <= 0) {
|
||||||
@@ -284,97 +403,178 @@
|
|||||||
window.clearInterval(interval)
|
window.clearInterval(interval)
|
||||||
}
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
const hide = this.$message.loading('验证码发送中..', 0)
|
|
||||||
const params = {
|
|
||||||
mobile: values.mobile,
|
|
||||||
smsmode: '1'
|
|
||||||
}
|
|
||||||
postAction('/sys/sms', params).then((res) => {
|
|
||||||
if (!res.success) {
|
|
||||||
this.registerFailed(res.message)
|
|
||||||
setTimeout(hide, 0)
|
|
||||||
}
|
|
||||||
setTimeout(hide, 500)
|
|
||||||
}).catch(err => {
|
|
||||||
setTimeout(hide, 1)
|
|
||||||
clearInterval(interval)
|
|
||||||
that.state.time = 60
|
|
||||||
that.state.smsSendBtn = false
|
|
||||||
this.requestFailed(err)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
setTimeout(hide, 500)
|
||||||
)
|
})
|
||||||
},
|
this.getPublicKey()
|
||||||
registerFailed(message) {
|
}
|
||||||
this.$notification['error']({
|
})
|
||||||
message: '注册失败',
|
|
||||||
description: message,
|
|
||||||
duration: 2,
|
|
||||||
})
|
|
||||||
|
|
||||||
},
|
|
||||||
requestFailed(err) {
|
|
||||||
this.$notification['error']({
|
|
||||||
message: '错误',
|
|
||||||
description: ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试',
|
|
||||||
duration: 4,
|
|
||||||
})
|
|
||||||
this.registerBtn = false
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
watch: {
|
cmsFailed(err) {
|
||||||
'state.passwordLevel'(val) {
|
this.$notification['error']({
|
||||||
console.log(val)
|
message: '验证错误',
|
||||||
|
description: err,
|
||||||
}
|
duration: 4
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getPublicKey() {
|
||||||
|
getRSAPublicKey().then(res => {
|
||||||
|
this.rsaPublicKey = res.result
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 密码禁止粘贴
|
||||||
|
handleOperate() {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="less">
|
<style scoped lang="less">
|
||||||
.user-register {
|
/deep/ .ant-card {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
&.error {
|
/deep/ .ant-card-body {
|
||||||
color: #ff0000;
|
padding: 0 !important;
|
||||||
}
|
height: 100%;
|
||||||
|
background: #F0F2F5;
|
||||||
|
}
|
||||||
|
|
||||||
&.warning {
|
.alteration-center {
|
||||||
color: #ff7e05;
|
min-height: calc(100% - 60px);
|
||||||
}
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background: #F0F2F5;
|
||||||
|
}
|
||||||
|
|
||||||
&.success {
|
.alteration-content {
|
||||||
color: #52c41a;
|
//margin: auto;
|
||||||
}
|
width: 1000px;
|
||||||
|
flex-direction: column;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background: #fff;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
|
||||||
|
.setPassword {
|
||||||
|
font-size: 26px;
|
||||||
|
display: block;
|
||||||
|
background: #fff;
|
||||||
|
height: 60px;
|
||||||
|
text-align: center !important;
|
||||||
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.user-layout-register {
|
/deep/ .ant-form {
|
||||||
.ant-input-group-addon:first-child {
|
width: 700px;
|
||||||
background-color: #fff;
|
}
|
||||||
|
|
||||||
|
.alteration-head {
|
||||||
|
//position: absolute;
|
||||||
|
//top: 0;
|
||||||
|
width: 100%;
|
||||||
|
background: #069F99;
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
box-shadow: none !important;
|
||||||
|
transition: background 300ms;
|
||||||
|
height: 60px;
|
||||||
|
line-height: 60px;
|
||||||
|
padding-left: 12px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style lang="less" scoped>
|
|
||||||
.user-layout-register {
|
|
||||||
|
|
||||||
& > h3 {
|
h1 {
|
||||||
|
margin-left: 12px;
|
||||||
|
color: #fff;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
margin-bottom: 20px;
|
display: inline-block;
|
||||||
}
|
|
||||||
|
|
||||||
.getCaptcha {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.register-button {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login {
|
|
||||||
float: right;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-row {
|
||||||
|
margin-bottom: 20px !important;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-form-item-label {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-input {
|
||||||
|
border-radius: 30px;
|
||||||
|
height: 30px;
|
||||||
|
border: 1px solid #E6E3E3;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-select {
|
||||||
|
border-radius: 30px;
|
||||||
|
height: 30px;
|
||||||
|
border: 1px solid #E6E3E3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-select-selection {
|
||||||
|
border: none;
|
||||||
|
border-radius: 30px;
|
||||||
|
height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-select-selection__rendered {
|
||||||
|
border: none;
|
||||||
|
border-radius: 30px;
|
||||||
|
height: 28px;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .ant-btn-icon-only {
|
||||||
|
height: 30px;
|
||||||
|
width: 30px;
|
||||||
|
border-radius: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
padding-top: 20px;
|
||||||
|
|
||||||
|
/deep/ button {
|
||||||
|
border-radius: 30px;
|
||||||
|
margin: 0 20px;
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-btn-primary {
|
||||||
|
background: #069F99;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.captcha {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
/deep/ button {
|
||||||
|
border: none;
|
||||||
|
color: #069F99;
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: -6px;
|
||||||
|
box-shadow: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.steps-box {
|
||||||
|
padding: 30px 25%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user