|
|
@@ -0,0 +1,586 @@ |
|
|
|
<template> |
|
|
|
<div class="company-node-view"> |
|
|
|
<card-header class="company-node-view-header"> |
|
|
|
<template #title>{{node.label}}</template> |
|
|
|
<template #right> |
|
|
|
<el-dropdown v-if="!editing"> |
|
|
|
<el-button size="small">企业管理</el-button> |
|
|
|
<el-dropdown-menu slot="dropdown"> |
|
|
|
<el-dropdown-item> |
|
|
|
<span |
|
|
|
class="dropdown-button" |
|
|
|
@click.stop="editing = true" |
|
|
|
>编辑</span> |
|
|
|
</el-dropdown-item> |
|
|
|
<el-dropdown-item> |
|
|
|
<span |
|
|
|
class="dropdown-button" |
|
|
|
@click.stop="toggleState" |
|
|
|
>{{nodeDetailFormData.disable == 0 ? '禁用' : '启用'}}</span> |
|
|
|
</el-dropdown-item> |
|
|
|
<el-dropdown-item> |
|
|
|
<span class="dropdown-button danger_button" @click.stop="deleteCompany">删除</span> |
|
|
|
</el-dropdown-item> |
|
|
|
</el-dropdown-menu> |
|
|
|
</el-dropdown> |
|
|
|
<template v-if="editing"> |
|
|
|
<el-button |
|
|
|
size="small" |
|
|
|
@click.stop="editing = false" |
|
|
|
>取消</el-button> |
|
|
|
<el-button |
|
|
|
size="small" |
|
|
|
type="primary" |
|
|
|
@click.stop="updateCompanyInfo" |
|
|
|
>保存</el-button> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
</card-header> |
|
|
|
<div class="company-node-view-body"> |
|
|
|
<el-form |
|
|
|
ref="form" |
|
|
|
:model="nodeDetailFormData" |
|
|
|
:rules="companyRules" |
|
|
|
:show-message="editing" |
|
|
|
:hide-required-asterisk="!editing" |
|
|
|
label-position="left" |
|
|
|
label-width="100px" |
|
|
|
> |
|
|
|
<div class="form-subtitle">企业信息</div> |
|
|
|
<div class="yiyunTable_list_item"> |
|
|
|
<div :class="el_formLabelcolor +' UserEditinfoBox DivInputHeight'"> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="企业简称:" |
|
|
|
prop="companyName" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.companyName}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.companyName"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<!-- 2019-07-31 新加的 --> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="企业全称:" |
|
|
|
prop="compAllName" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.compAllName}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.compAllName"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="所属省份:" |
|
|
|
prop="proviceName" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.proviceName}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-select |
|
|
|
v-model="nodeDetailFormData.proviceID" |
|
|
|
placeholder="请选择" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="item in proviceOptions" |
|
|
|
:key="item.id" |
|
|
|
:label="item.label" |
|
|
|
:value="item.id" |
|
|
|
></el-option> |
|
|
|
</el-select> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item label="地址:"> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.address}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.address"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="所属行业:" |
|
|
|
prop="industryName" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.industryName}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-select |
|
|
|
v-model="nodeDetailFormData.industryID" |
|
|
|
placeholder="请选择" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="item in industryOptions" |
|
|
|
:key="item.industryID" |
|
|
|
:label="item.name" |
|
|
|
:value="item.industryID" |
|
|
|
></el-option> |
|
|
|
</el-select> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="单位电话:" |
|
|
|
prop="telphone" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.telphone}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.telphone"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="法人:" |
|
|
|
prop="cnName" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.cnName}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.cnName"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="性别:" |
|
|
|
prop="sex" |
|
|
|
> |
|
|
|
<div v-if="editing==false"> |
|
|
|
<div v-if="nodeDetailFormData.sex==1">帅哥</div> |
|
|
|
<div v-if="nodeDetailFormData.sex==0">美女</div> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-radio-group v-model="nodeDetailFormData.sex"> |
|
|
|
<el-radio :label="1">男</el-radio> |
|
|
|
<el-radio :label="0">女</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="手机号:" |
|
|
|
prop="phone" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.phone}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input |
|
|
|
v-model="nodeDetailFormData.phone" |
|
|
|
:disabled="!!nodeDetailFormData.companyID" |
|
|
|
></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="邮箱:" |
|
|
|
prop="email" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.email}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.email"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item label="税号:"> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.dutyParagraph}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.dutyParagraph"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="clear"></div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="存储API:" |
|
|
|
prop="ipfsApi" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.ipfsApi}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.ipfsApi"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item |
|
|
|
label="存储节点:" |
|
|
|
prop="ipfsBootstrap" |
|
|
|
> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.ipfsBootstrap}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.ipfsBootstrap"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item label="开户行:"> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.openingBank}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.openingBank"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div class="node-form-field"> |
|
|
|
<el-form-item label="银行账号:"> |
|
|
|
<div v-if="editing == false">{{nodeDetailFormData.bankAccount}}</div> |
|
|
|
<div |
|
|
|
v-if="editing == true" |
|
|
|
class="boolEdit_Input" |
|
|
|
> |
|
|
|
<el-input v-model="nodeDetailFormData.bankAccount"></el-input> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="node-form-field" |
|
|
|
v-if="editing == false" |
|
|
|
> |
|
|
|
<el-form-item label="企业成员:"> |
|
|
|
<div>{{nodeDetailFormData.userCount}}人</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="node-form-field" |
|
|
|
v-if="editing == false" |
|
|
|
> |
|
|
|
<el-form-item label="企业部门:"> |
|
|
|
<div>{{nodeDetailFormData.deptCount}}个</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="node-form-field" |
|
|
|
v-if="editing == false" |
|
|
|
> |
|
|
|
<el-form-item label="创建时间:"> |
|
|
|
<div>{{nodeDetailFormData.strCreateTime}}</div> |
|
|
|
</el-form-item> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</el-form> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import CardHeader from "@/components/card-header"; |
|
|
|
import * as services from "../services"; |
|
|
|
|
|
|
|
const dataParamRules = { |
|
|
|
companyName: [ |
|
|
|
{ required: true, message: "请输入企业简称", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
compAllName: [ |
|
|
|
{ required: true, message: "请输入企业全称", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
proviceName: [ |
|
|
|
// { type:'number', required: true, message: "请选择所属省份", trigger:'change' }, |
|
|
|
{ required: true, message: "请选择所属省份", trigger: "change" }, |
|
|
|
], |
|
|
|
industryName: [ |
|
|
|
{ required: true, message: "请选择所属行业", trigger: "change" }, |
|
|
|
], |
|
|
|
telphone: [ |
|
|
|
{ required: true, message: "请输入单位电话", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
cnName: [ |
|
|
|
{ required: true, message: "请输入法人", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
sex: [{ required: true, message: "请选择性别", trigger: "change" }], |
|
|
|
phone: [ |
|
|
|
{ required: true, message: "请输入手机号", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
email: [ |
|
|
|
{ required: true, message: "请输入邮箱", trigger: ["blur", "change"] }, |
|
|
|
], |
|
|
|
ipfsApi: [ |
|
|
|
{ |
|
|
|
max: 64, |
|
|
|
required: true, |
|
|
|
message: "请输入64个字数之内的任意字符串", |
|
|
|
trigger: ["blur", "change"], |
|
|
|
}, |
|
|
|
], |
|
|
|
ipfsBootstrap: [ |
|
|
|
{ |
|
|
|
max: 1024, |
|
|
|
required: true, |
|
|
|
message: "请输入1024个字数之内的任意字符串", |
|
|
|
trigger: ["blur", "change"], |
|
|
|
}, |
|
|
|
], |
|
|
|
}; |
|
|
|
|
|
|
|
export default { |
|
|
|
components: { CardHeader }, |
|
|
|
props: { |
|
|
|
node: { |
|
|
|
type: Object, |
|
|
|
default: () => ({}), |
|
|
|
}, |
|
|
|
}, |
|
|
|
data() { |
|
|
|
return { |
|
|
|
editing: false, |
|
|
|
companyRules: dataParamRules, |
|
|
|
nodeDetailFormData: {}, |
|
|
|
industryOptions: [], |
|
|
|
proviceOptions: [], |
|
|
|
nodeDetailData: {}, |
|
|
|
}; |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
el_formLabelcolor() { |
|
|
|
return this.editing ? "textlabelblock" : "textlabelgray"; |
|
|
|
}, |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
editing(v) { |
|
|
|
if(!v) { |
|
|
|
this.nodeDetailFormData = { ...this.nodeDetailData }; |
|
|
|
} |
|
|
|
}, |
|
|
|
node(nextNode) { |
|
|
|
if(nextNode) { |
|
|
|
this.loadCompanyInfo(nextNode.id); |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
this.loadIndustury(); |
|
|
|
this.loadProvinces(); |
|
|
|
if (this.node) { |
|
|
|
this.loadCompanyInfo(this.node.id); |
|
|
|
} |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
/** |
|
|
|
* 加载一级行业 |
|
|
|
*/ |
|
|
|
async loadIndustury() { |
|
|
|
const resData = await this.$fetchApi("industry/queryAllIndustry"); |
|
|
|
const indList = (resData.Data || []).map((obj) => ({ |
|
|
|
industryID: obj.Id, |
|
|
|
name: obj.Name, |
|
|
|
})); |
|
|
|
this.industryOptions = indList; |
|
|
|
}, |
|
|
|
/** |
|
|
|
* 省选项列表 |
|
|
|
*/ |
|
|
|
async loadProvinces() { |
|
|
|
const res = await this.$fetchApi("provice/queryAllProvice"); |
|
|
|
this.proviceOptions = (res.Data || []).map((o) => ({ |
|
|
|
id: o.Id, |
|
|
|
label: o.ProviceName, |
|
|
|
})); |
|
|
|
}, |
|
|
|
/** |
|
|
|
* 获取某个企业整体信息情况 |
|
|
|
*/ |
|
|
|
async loadCompanyInfo(companyId) { |
|
|
|
const resData = await services.fetchCompanyDetail(companyId); |
|
|
|
this.nodeDetailData = resData; |
|
|
|
this.nodeDetailFormData = { ...this.nodeDetailData }; |
|
|
|
}, |
|
|
|
/** |
|
|
|
* 更新企业信息 |
|
|
|
*/ |
|
|
|
updateCompanyInfo() { |
|
|
|
this.$refs['form'].validate(async (valid)=>{ |
|
|
|
console.log('valid', valid); |
|
|
|
if(!valid) return; |
|
|
|
this.nodeDetailFormData.modifyUserID = sessionStorage.userId; |
|
|
|
const res = await services.updateCompany(this.nodeDetailFormData); |
|
|
|
const flag = res.Code === 0; |
|
|
|
if (!flag) { |
|
|
|
this.$notify({ |
|
|
|
message: res.Msg, |
|
|
|
type: ["warning"], |
|
|
|
}) |
|
|
|
return; |
|
|
|
} |
|
|
|
this.$notify({ |
|
|
|
message: `企业“${this.nodeDetailFormData.companyName}”已完成修改。`, |
|
|
|
type: ["success"], |
|
|
|
duration: 2500, |
|
|
|
}); |
|
|
|
this.loadCompanyInfo(); |
|
|
|
this.nodeDetailData = this.nodeDetailFormData; |
|
|
|
// this.initCompanyRecord = {...this.nodeDetailFormData};//保存之后信息得同步 否则取消的时候回出问题 |
|
|
|
// this.el_formLabelcolor = "textlabelgray"; |
|
|
|
// this.editButtonGroup = 1; |
|
|
|
this.editing = false; |
|
|
|
// this.rightTitle = this.nodeDetailFormData.companyName; |
|
|
|
}); |
|
|
|
}, |
|
|
|
/** |
|
|
|
* 启用/禁用企业 |
|
|
|
*/ |
|
|
|
toggleState: function () { |
|
|
|
const nextState = this.nodeDetailFormData.disable == 0 ? 1 : 0; |
|
|
|
var thisApp = this; |
|
|
|
var actionText = ""; |
|
|
|
var type ="warning" |
|
|
|
if (nextState == 0) { |
|
|
|
actionText = "启用"; |
|
|
|
} else { |
|
|
|
actionText = "禁用"; |
|
|
|
type="error" |
|
|
|
} |
|
|
|
this.$confirm(`${actionText}的企业将${actionText == "禁用" ? "无法" : "有权"}访问LOCKING, 确定${actionText}企业“${this.nodeDetailFormData.companyName}”吗?`,"", |
|
|
|
{ |
|
|
|
confirmButtonText: "确定", |
|
|
|
cancelButtonText: "取消", |
|
|
|
type: type, |
|
|
|
} |
|
|
|
) |
|
|
|
.then(async () => { |
|
|
|
this.nodeDetailFormData.modifyUserID = sessionStorage.userId; |
|
|
|
this.nodeDetailFormData.disable = nextState; |
|
|
|
const res = await services.switchCompanyEnable( |
|
|
|
this.nodeDetailFormData.companyID, |
|
|
|
nextState |
|
|
|
); |
|
|
|
const flag = res.Code === 0; |
|
|
|
if (!flag) { |
|
|
|
thisApp.$notify({ |
|
|
|
type:'error', |
|
|
|
message: res.Msg, |
|
|
|
offset: 100, |
|
|
|
duration: 5000, |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
thisApp.$notify({ |
|
|
|
message: `企业“${this.nodeDetailFormData.companyName}”已${actionText}。`, |
|
|
|
type: ["success"], |
|
|
|
//offset: 100, |
|
|
|
duration: 2500, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(() => { |
|
|
|
}); |
|
|
|
}, |
|
|
|
/** |
|
|
|
* 删除企业 |
|
|
|
*/ |
|
|
|
deleteCompany: function () { |
|
|
|
this.$confirm(`确定删除企业“${this.nodeDetailFormData.companyName}”吗?`, |
|
|
|
"", |
|
|
|
{ |
|
|
|
confirmButtonText: "确定", |
|
|
|
cancelButtonText: "取消", |
|
|
|
type: "warning", |
|
|
|
} |
|
|
|
) |
|
|
|
.then(async () => { |
|
|
|
const companyId = this.nodeDetailFormData.companyID; |
|
|
|
const resData = await this.$fetchApi("company/deleteCompanyById", { |
|
|
|
id: companyId, |
|
|
|
}); |
|
|
|
const deleteSuccess = resData.Code === 0; |
|
|
|
if (deleteSuccess) { |
|
|
|
this.currentPain = 1; |
|
|
|
this.$notify({ |
|
|
|
message: `企业“${this.nodeDetailFormData.companyName}”已删除。`, |
|
|
|
type: ["success"], |
|
|
|
duration: 2500, |
|
|
|
}); |
|
|
|
this.$emit('remove', this.node); |
|
|
|
} else { |
|
|
|
this.$notify({ |
|
|
|
type:'error', |
|
|
|
message: resData.Data, |
|
|
|
offset: 100, |
|
|
|
duration: 5000, |
|
|
|
}); |
|
|
|
} |
|
|
|
}) |
|
|
|
.catch(() => { |
|
|
|
}); |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
.company-node-view { |
|
|
|
&-header { |
|
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.2); |
|
|
|
padding: 0 24px; |
|
|
|
} |
|
|
|
&-body { |
|
|
|
padding: 0 24px; |
|
|
|
} |
|
|
|
.form { |
|
|
|
&-subtitle { |
|
|
|
color: rgba(50, 50, 60, 100); |
|
|
|
font-size: 13px; |
|
|
|
height: 44px; |
|
|
|
line-height: 44px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.node-form-field { |
|
|
|
display: inline-block; |
|
|
|
box-sizing: border-box; |
|
|
|
vertical-align: top; |
|
|
|
width: 50%; |
|
|
|
padding-right: 20px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.dropdown-button { |
|
|
|
&.danger_button { |
|
|
|
color: red; |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |