qa-prevention-gwj-vue/src/views/xgf/insert/components/corpInfoAdd.vue

661 lines
23 KiB
Vue

<template>
<div class="reform-bg">
<div class="reform-warp">
<div class="reform-content" style="padding: 10px">
<el-form ref="form" :model="form" :rules="rules" label-width="200px">
<el-row>
<el-col :span="12">
<el-form-item label="相关方单位名称" prop="RELEVANT_UNIT_NAME">
<el-input id="RELEVANT_UNIT_NAME" ref="RELEVANT_UNIT_NAME" v-model="form.RELEVANT_UNIT_NAME" maxlength="255" placeholder="这里输入相关方单位名称..." title="相关方单位名称"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="股份监管部门" prop="MANAGER_DEPARTMENT_ID">
<Treeselect
:options="treeData"
:normalizer="normalizergfjg"
:flat="true"
:default-expand-level="0"
:props="defaultProps"
v-model="form.MANAGER_DEPARTMENT_ID"
multiple
placeholder="请选择部门"
no-options-text="暂无数据"
no-children-text="暂无数据"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="基层单位监管部门" prop="COMPETENT_DEPT_ID">
<Treeselect
:options="treeDataSupervise"
:normalizer="normalizergfjg"
:flat="true"
:default-expand-level="0"
:props="defaultProps"
v-model="form.COMPETENT_DEPT_ID"
multiple
placeholder="请选择基层单位监管部门"
no-options-text="暂无数据"
no-children-text="暂无数据"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="股份主管部门" prop="MAIN_DEPARTMENT">
<Treeselect
:options="treeData"
:normalizer="normalizer"
v-model="form.MAIN_DEPARTMENT"
placeholder="请选择部门"
multiple
no-options-text="暂无数据"
no-children-text="暂无数据"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="基层单位主管部门" prop="SUPERVISE_DEPARTMENT_ID">
<Treeselect
:options="treeDataSupervise"
:normalizer="normalizer"
v-model="form.SUPERVISE_DEPARTMENT_ID"
placeholder="请选择基层单位主管部门"
no-options-text="暂无数据"
no-children-text="暂无数据"
@select="selectValue"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="开户人" prop="CREATOR">
<el-input id="CREATOR" ref="CREATOR" v-model="CREATOR_NAME" maxlength="50" placeholder="开户人" title="开户人" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="属地" prop="POSSESSION">
<el-cascader id="POSSESSION" ref="POSSESSION" v-model="form.POSSESSION" :options="areaList" :props="areaProps" placeholder="请选择省市县" style="width: 100%" @change="cascaderChange"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属行业" prop="INDUSTRY">
<el-select v-model="form.INDUSTRY" style="width: 100%">
<el-option v-for="item in industryList" :key="item.BIANMA" :label="item.NAME" :value="item.BIANMA"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="集团单位" prop="CORP_TYPE">
<el-select v-model="form.CORP_TYPE" multiple style="width: 100%">
<el-option v-for="item in corpTypeList" :key="item.BIANMA" :label="item.NAME" :value="item.BIANMA"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="统一社会信用代码" prop="SOCIAL_CODE">
<el-input id="SOCIAL_CODE" ref="SOCIAL_CODE" v-model="form.SOCIAL_CODE" maxlength="255" placeholder="这里输入统一社会信用代码..." title="统一社会信用代码"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="经度" prop="LONGITUDE">
<el-input v-model="form.LONGITUDE" placeholder="请输入内容" disabled @focus="handleMap" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度" prop="LATITUDE">
<div style="display: flex">
<el-input v-model="form.LATITUDE" placeholder="请输入内容" disabled style="width: 100%" @focus="handleMap"/>
<el-button style="margin-left:10px" @click="handleMap">
<span class="svg-container">
<svg-icon icon-class="international" />
</span>
</el-button>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企事业单位经营地址" prop="BUSINESS_ADDRESS">
<el-input id="BUSINESS_ADDRESS" ref="BUSINESS_ADDRESS" v-model="form.BUSINESS_ADDRESS" maxlength="255" placeholder="这里输入企事业单位经营地址..." title="企事业单位经营地址"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="法人" prop="LEGAL_PERSON">
<el-input id="LEGAL_PERSON" ref="LEGAL_PERSON" v-model="form.LEGAL_PERSON" maxlength="255" placeholder="这里输入法人..." title="法人"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="联系人" prop="CONTACT_PERSON">
<el-input id="CONTACT_PERSON" ref="CONTACT_PERSON" v-model="form.CONTACT_PERSON" maxlength="255" placeholder="这里输入联系人..." title="联系人"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="CONTACT_TEL">
<el-input id="CONTACT_TEL" ref="CONTACT_TEL" v-model="form.CONTACT_TEL" maxlength="255" placeholder="这里输入联系电话..." title="联系电话"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用工形式" prop="EMPLOYMENT_FORM">
<Treeselect
:options="employmentTypeList"
:normalizer="normalizer"
v-model="form.EMPLOYMENT_FORM"
placeholder="请选择用工形式"
no-options-text="暂无数据"
no-children-text="暂无数据"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="选取形式" prop="SELECT_FORMS">
<el-select v-model="form.SELECT_FORMS" multiple style="width: 100%;">
<el-option v-for="item in selectFormList" :key="item.BIANMA" :label="item.NAME" :value="item.BIANMA" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="text-align: center">
<el-button :loading="submitButtonLoading" type="primary" @click="submitForm">提交</el-button>
<el-button @click="back">取消</el-button>
</div>
<!-- 坐标选择 -->
<el-dialog :visible.sync="dialogFormMap" title="编辑坐标" width="800px" class="dy-dialog">
<baidu-map
v-loading="loadingMap"
:zoom="zoom"
:scroll-wheel-zoom="true"
:style="{height: clientHeight+'px'}"
@click="getClickInfo"
@ready="handler">
<bm-view style="width: 100%; height:100%; flex: 1" />
<bm-control ref="control" :offset="{width: 10, height: 10}" anchor="BMAP_ANCHOR_TOP_LEFT">
<div class="map-flex">
<div class="map-lable">关键词:</div>
<div style="flex:1;">
<el-autocomplete v-model="addressKeyword" :fetch-suggestions="querySearch" :trigger-on-focus="false" placeholder="请输入详细地址" style="width:100%" @select="handleSelect" />
</div>
</div>
</bm-control>
</baidu-map>
<div slot="footer" class="dialog-footer">
<span>经度:</span>
<el-input v-model="LONGITUDE" style="width: 200px" placeholder="请输入内容" disabled />
<span>纬度:</span>
<el-input v-model="LATITUDE" style="width: 200px" placeholder="请输入内容" disabled />
<el-button @click="dialogFormMap = false">取 消</el-button>
<el-button type="primary" @click="setPosition"> </el-button>
</div>
</el-dialog>
</div>
</div>
</div>
</template>
<script>
import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
import waves from '@/directive/waves' // waves directive
import { requestFN } from '@/utils/request'
import DeptSelectTree from '@/components/DeptSelectTree'
import SelectTree from '@/components/SelectTree'
import Treeselect from '@riophae/vue-treeselect'
export default {
components: { Pagination, DeptSelectTree, SelectTree, Treeselect },
directives: { waves },
data() {
const hasName = (rule, value, callback) => {
requestFN(
'/relevantunits/hasName',
{
RELEVANT_UNIT_NAME: value,
CORPINFO_ID: ''
}
).then((data) => {
if (data.pd) {
callback(new Error('相关方单位名称重复'))
}
callback()
}).catch((e) => {
callback()
})
}
return {
submitButtonLoading: false,
dialogFormMap: false,
loadingMap: true,
zoom: 10,
clientHeight: 600,
addressKeyword: '',
BMap: '',
pointLngLat: '',
map: '',
LONGITUDE: '',
LATITUDE: '',
treeData: [],
normalizergfjg(node) {
return {
id: node.id,
label: node.name,
children: node.nodes,
isDisabled: node.pId === '0'
}
},
normalizer(node) {
return {
id: node.id,
label: node.name,
children: node.nodes
}
},
areaList: [],
industryProps: {
lazy: true,
lazyLoad: this.lazyLoad,
value: 'id',
id: 'id',
label: 'label',
children: 'children',
checkStrictly: false
},
defaultProps: {
value: 'id',
children: 'nodes',
label: 'name'
},
areaProps: {
lazy: true,
lazyLoad: async(node, resolve) => {
const resData = await this.getAreaDict(
(node.data && node.data.DICTIONARIES_ID) || 'e725d2a91b8248f4b8f49889038df7de'
)
const { level } = node
resolve(
resData.map((item) => {
return {
DICTIONARIES_ID: item.DICTIONARIES_ID,
BIANMA: item.BIANMA,
NAME: item.NAME,
leaf: level >= 3
}
})
)
},
value: 'BIANMA',
id: 'DICTIONARIES_ID',
label: 'NAME',
children: 'children',
checkStrictly: true
},
CREATOR_NAME: JSON.parse(sessionStorage.getItem('user')).NAME,
treeDataSupervise: [],
form: {
CREATOR: JSON.parse(sessionStorage.getItem('user')).USER_ID,
OPERATOR: JSON.parse(sessionStorage.getItem('user')).USER_ID,
MAIN_DEPARTMENT: null,
MANAGER_DEPARTMENT_ID: null, // 股份监管部门
COMPETENT_DEPT_ID: null, // 基层单位监管部门
SUPERVISE_DEPARTMENT_ID: null,
SUPERVISE_CORPINFO_ID: '',
RELEVANT_UNIT_NAME: '',
SOCIAL_CODE: '',
LOCAL: '',
INDUSTRY: '',
BUSINESS_ADDRESS: '',
LONGITUDE: '',
LATITUDE: '',
LEGAL_PERSON: '',
CONTACT_PERSON: '',
CONTACT_TEL: '',
EMPLOYMENT_FORM: null,
SELECT_FORM: '',
SELECT_FORMS: [],
FLOATING_PERCENT: '',
COMPANY_AREA: '',
POSSESSION: [],
PROVINCE: '',
CITY: '',
COUNTY: '',
VILLAGE: '',
INDUSTRYALL: ''
},
hylxList: [], // 国民经济行业分类 (GB-T4754-2017)
dialogImageUrl: '', // 上传图片预览
dialogVisible: false,
operationTypeList: [], // 作业类型词典
employmentTypeList: [], // 用工形式数据
selectFormList: [], // 选取形式数据
industryList: [], // 行业类型
corpTypeList: [], // 集团单位
rules: {
MAIN_DEPARTMENT: [{ required: true, message: '请选择主管部门', trigger: 'blur' }],
INDUSTRY: [{ required: false, message: '请选择所属行业', trigger: 'blur' }],
CORP_TYPE: [{ required: true, message: '请选择集团单位', trigger: 'blur' }],
RELEVANT_UNIT_NAME: [
{ required: true, message: '相关方单位名称不能为空', trigger: 'blur' },
{ validator: hasName, trigger: 'blur' }
],
CONTACT_TEL: [
{ min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' },
{
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
message: '请输入正确的手机号码'
}
]
}
}
},
created() {
this.getDict()
this.getTreeList()
},
mounted() {},
methods: {
selectValue(value, node, extra) {
this.form.SUPERVISE_CORPINFO_ID = value.CORPINFO_ID
},
async getAreaDict(DICTIONARIES_ID) {
const { list } = await requestFN(
'/xgf/dictionaries/getAreaLevels',
{
DICTIONARIES_ID
}
)
return list
},
cascaderChange(e) {
const newVal = e[e.length - 1]
if (newVal === '1' || newVal === '2' || newVal === '3' || newVal === '4') {
this.$message({
message: '请选择正确的属地...',
type: 'error'
})
this.form.POSSESSION.pop()
}
},
// 加载级联的方法
lazyLoad(nodeValue, resolve) {
if (nodeValue.data && (!nodeValue.children || nodeValue.children.length == 0)) {
this.getDictByDicId(nodeValue.data.id).then(data => {
resolve(data)
})
} else {
resolve(null)
}
},
getClickInfo(e) {
this.LONGITUDE = e.point.lng
this.LATITUDE = e.point.lat
},
handleMap() {
this.dialogFormMap = true
this.LATITUDE = this.form.LATITUDE
this.LONGITUDE = this.form.LONGITUDE
},
getTreeList() {
requestFN(
'/department/listTreeManageAndCorp1/',
{}
).then((data) => {
const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
this.treeData = this.removeEmptyChildren(treeData)
}).catch((e) => {
})
},
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
// 提交表单
submitForm() {
this.$refs.form.validate(valid => {
if (valid) {
if (this.form.MAIN_DEPARTMENT.indexOf('0') > -1 && this.form.MAIN_DEPARTMENT.length > 1) {
this.listLoading = false
this.submitButtonLoading = false
this.$message.error('主管部门选无时不能选择其他部门')
return
}
this.listLoading = true
this.submitButtonLoading = true
if (this.form.POSSESSION && this.form.POSSESSION.length > 0) {
this.form.PROVINCE = this.form.POSSESSION[0] || ''
this.form.CITY = this.form.POSSESSION[1] || ''
this.form.COUNTY = this.form.POSSESSION[2] || ''
this.form.VILLAGE = this.form.POSSESSION[3] || ''
this.form.COMPANY_AREA = this.$refs.POSSESSION.getCheckedNodes()[0].pathLabels ? this.$refs.POSSESSION.getCheckedNodes()[0].pathLabels.join(',') : ''
}
this.form.SELECT_FORM = this.form.SELECT_FORMS.join(',')
if (this.form.COMPETENT_DEPT_ID) {
this.form.COMPETENT_DEPT_ID = this.form.COMPETENT_DEPT_ID.join(',')
}
if (this.form.MANAGER_DEPARTMENT_ID) {
this.form.MANAGER_DEPARTMENT_ID = this.form.MANAGER_DEPARTMENT_ID.join(',')
}
this.form.CORP_TYPE = JSON.stringify(this.form.CORP_TYPE)
this.form.MAIN_DEPARTMENT = JSON.stringify(this.form.MAIN_DEPARTMENT)
requestFN(
'/relevantunits/saveCorpInfo',
this.form
).then((data) => {
if (data.result === 'exist') {
this.$message({
message: '用户名已存在,请重新填写...',
type: 'error'
})
} else {
this.$message({
message: '保存成功!',
type: 'success'
})
this.form = {}
this.$parent.activeName = 'CorpInfoList'
}
this.listLoading = false
}).catch((e) => {
this.listLoading = false
})
} else {
return false
}
})
},
back() {
this.$parent.activeName = 'CorpInfoList'
},
// 获取数据字典数据
getDict: function() {
requestFN(
'/department/listTree/', {}
).then((data) => {
const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
this.treeDataSupervise = this.removeEmptyChildren(treeData)
}).catch((e) => {
})
requestFN(
'/xgf/dictionaries/listSelectTree',
{
DICTIONARIES_ID: '720992d898bf4fd7b44bf0ba1f1bbb88'
}
).then((data) => {
const employmentTypeList = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
this.employmentTypeList = this.removeEmptyChildren(employmentTypeList)
})
requestFN(
'/xgf/dictionaries/getLevels',
{
DICTIONARIES_ID: '9ce2e9a4636b4d41b460ce16c346d497'
}
).then((data) => {
this.selectFormList = data.list
})
requestFN(
'/xgf/dictionaries/getLevels',
{
DICTIONARIES_ID: 'f2598ba72e864eadabf0ca4b664d26b9'
}
).then((data) => {
this.industryList = data.list
})
requestFN(
'/xgf/dictionaries/getLevels',
{
DICTIONARIES_ID: '37d8385931f14bb0b962082cf6bb3395'
}
).then((data) => {
this.corpTypeList = data.list
})
},
// 地图相关
mapOpen() {
this.top = this.getScrollTop()
if (this.top) {
this.setScrollTop(0)
}
},
getScrollTop() {
let scrollTop = 0
if (document.documentElement && document.documentElement.scrollTop) {
scrollTop = document.documentElement.scrollTop
} else if (document.body) {
scrollTop = document.body.scrollTop
}
return scrollTop
},
setScrollTop(top) {
if (!isNaN(top)) {
if (document.documentElement && document.documentElement.scrollTop !== undefined) {
document.documentElement.scrollTop = top
} else if (document.body) {
document.body.scrollTop = top
}
}
},
// 关闭地图后调用
mapClose() {
this.setScrollTop(this.top)
this.top = 0
this.showMap = false
},
// 地图初始化
handler({ BMap, map }) {
this.mapOpen()
this.BMap = BMap
this.map = map
this.loadingMap = true
var geolocation = new BMap.Geolocation()
const myGeo = new BMap.Geocoder()
var $this = this
// 调用百度地图api 中的获取当前位置接口
geolocation.getCurrentPosition(function(r) {
myGeo.getLocation(new BMap.Point(r.point.lng, r.point.lat), function(result) {
if (result) {
$this.loadingMap = false
$this.$set($this, 'pointLngLat', { lng: result.point.lng, lat: result.point.lat })
map.enableScrollWheelZoom(true) // 开启鼠标滚轮缩放,默认关闭
$this.setCenter({ BMap, map })
}
})
})
},
// 搜索地图
querySearch(queryString, cb) {
var options = {
onSearchComplete: function(results) {
if (local.getStatus() === 0) {
// 判断状态是否正确
var s = []
for (var i = 0; i < results.getCurrentNumPois(); i++) {
var x = results.getPoi(i)
var item = { value: x.address + x.title, point: x.point }
s.push(item)
cb(s)
}
} else {
cb()
}
}
}
var local = new this.BMap.LocalSearch(this.map, options)
local.search(queryString)
},
handleSelect(item) {
var { point } = item
this.map.clearOverlays() // 清除地图上所有覆盖物
this.map.centerAndZoom(point, this.zoom)
const marker = new this.BMap.Marker(point) // 创建标注
this.map.addOverlay(marker) // 将标注添加到地图中
marker.enableDragging() // 可拖拽
this.LONGITUDE = point.lng
this.LATITUDE = point.lat
},
setPosition() {
this.dialogFormMap = false
this.form.LATITUDE = this.LATITUDE
this.form.LONGITUDE = this.LONGITUDE
},
// 设置打开中心位置
setCenter({ BMap, map }) {
var lng = ''
var lat = ''
if (this.form.LONGITUDE == '' || this.form.LATITUDE == '') {
lng = '119.525971'
lat = '39.894727'
} else {
lng = this.form.LONGITUDE
lat = this.form.LATITUDE
}
var point = new BMap.Point(lng, lat)
const zoom = map.getZoom()
setTimeout(() => {
map.centerAndZoom(point, zoom)
}, 0)
}
}
}
</script>
<style lang="scss" scoped>
.map-flex {
display: flex;
width: 500px;
align-items :center
}
.tools {
text-align: right;
}
.dialogContent {
.title {
text-align: center;
}
.tableFooter {
width: 80%;
display: flex;
justify-content: space-between;
padding: 15px 0;
}
}
</style>