单位管理功能同步完成

yfy
许宏杰 2 months ago
parent 41614b5762
commit 089adb43a9

File diff suppressed because it is too large Load Diff

@ -0,0 +1,26 @@
<template>
<div class="form-title">{{ title }}</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "表单标题",
},
},
};
</script>
<style lang="scss" scoped>
.form-title {
font-size: 18px;
font-weight: bold;
color: #333;
margin-bottom: 10px;
}
::v-deep .el-form-item__content {
width: 100% !important;
}
</style>

@ -0,0 +1,171 @@
import { options } from "runjs";
const list = [
{ key: "nickName", label: "新增单位名称", type: "input", prop: "nickName" },
{ key: "dwjc", label: "单位简称", type: "input" },
{
key: "ssqy",
label: "所属区域",
type: "cascader",
required: true,
options: require("@/utils/pca-code.json"),
props: {
value: "value",
label: "value",
checkStrictly: true,
},
},
{ key: "dwxxdz", label: "单位详细地址", type: "input", required: true },
{ key: "sshy", label: "所属行业", dict: "sshy", required: true },
{ key: "dwlx", label: "单位类型", dict: "dwlx", required: true },
{ key: "dwbq", label: "单位标签", dict: "zc_xtzyx" },
{ key: "ssjgdw", label: "所属监管单位", type: "input" },
{ key: "dwjs", label: "单位角色", dict: "dwjs" },
{ key: "dwzsxz", label: "单位直属性质", dict: "dwzsxz" },
{
key: "userName",
label: "统一社会信用代码",
type: "input",
prop: "userName",
},
{ key: "gjdw", label: "是否关基单位", dict: "is_no" },
{ key: "rcyyfzbm", label: "日常运营负责部门", type: "input", required: true },
{
key: "zzjg",
label: "组织架构",
type: "cascader",
prop: "zzjg",
props: {
value: "value",
label: "label",
checkStrictly: true,
},
options: [
{
value: "100",
label: "政务",
children: [
{
value: "101",
label: "党委机关",
},
{
value: "102",
label: "政府机关",
},
{
value: "200",
label: "事业单位",
},
{
value: "202",
label: "大型国企",
},
],
},
{
value: "10",
label: "民营企业",
children: [
{
value: "203",
label: "重点民企",
},
{
value: "204",
label: "一般民企",
},
],
},
{
value: "20",
label: "个人",
},
{
value: "30",
label: "社会团体",
},
],
},
{
key: "dwfzrxm",
key2: "dwfzrlxfs",
key3: "dwfzryx",
key4: "dwfzrzwzc",
label: "单位负责人",
type: "input",
required: true,
},
{
key: "fgfzrxm",
key2: "fgfzrlxfs",
key3: "fgfzryx",
key4: "fgfzrzwzc",
label: "分管负责人",
type: "input",
},
{
key: "bmfzrxm",
key2: "bmfzrlxfs",
key3: "bmfzryx",
key4: "bmfzrzwzc",
label: "部门负责人",
type: "input",
},
{
key: "dylxrxm",
key2: "dylxrlxfs",
key3: "dylxryx",
key4: "dylxrzwzc",
label: "第一联系人",
type: "input",
},
{
key: "sxsjg",
key2: "sxsjglxfs",
key3: "sxsjgyx",
key4: "sxsjgzwzc",
label: "首席数据官",
type: "input",
},
{
key: "sjgllr",
key2: "sjgllrlxfs",
key3: "sjgllryx",
key4: "sjgllrzwzc",
label: "数据官联络人",
type: "input",
},
{
key: "otherConcat",
label: "其他联系人",
type: "input",
add: true,
otherConcat: [
{
qtlxrxm: "",
qtlxrlxfs: "",
qtlxryx: "",
qtlxrzwzc: "",
},
],
},
{
key: "jcxxList",
jcxxList: [
{
sj: "",
xtym: "",
xthc: "",
dbjb: "",
dwmc: "",
jcjg: "",
},
],
},
];
console.log(list, "表单");
export default list;

@ -0,0 +1,435 @@
<template>
<!-- 新增/修改/查看-对话框 -->
<el-dialog
:title="title"
:visible.sync="open"
append-to-body
fullscreen
center
>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="170px"
class="demo-ruleForm"
label-position="right"
:disabled="disabled"
>
<form-title title="基本信息"></form-title>
<div class="grid-container">
<el-form-item
:label="item.label"
class="grid-item"
v-for="(item, index) in list.slice(0, 14)"
:key="index"
:prop="item.prop"
:required="item.required"
>
<!-- 输入框 -->
<el-input
v-if="item.type == 'input'"
v-model="ruleForm[item.key]"
:placeholder="'请输入' + item.label"
></el-input>
<!-- 选择框 -->
<el-select
v-if="item.dict"
v-model="ruleForm[item.key]"
:placeholder="'请选择' + item.label"
>
<el-option
v-for="dict in dict.type[item.dict]"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
<!-- 多级选择框 -->
<el-cascader
v-if="item.type == 'cascader'"
size="large"
:props="item.props"
:options="item.options"
v-model="ruleForm[item.key]"
:placeholder="'请选择' + item.label"
>
</el-cascader>
</el-form-item>
</div>
<form-title title="联系人"></form-title>
<el-form-item
:label="item.label"
v-for="(item, index) in list.slice(14, 21)"
:key="index"
:required="item.required"
>
<div class="linkBox" v-if="!item.add">
<el-input
v-model="ruleForm[item.key]"
:placeholder="'请输入' + item.label"
></el-input>
<el-input
v-model="ruleForm[item.key2]"
:placeholder="'请输入' + item.label + '方式'"
></el-input>
<el-input
v-model="ruleForm[item.key3]"
:placeholder="'请输入' + item.label + '邮箱'"
></el-input>
<el-input
v-model="ruleForm[item.key4]"
:placeholder="'请输入' + item.label + '职务'"
></el-input>
</div>
<div v-else>
<div
class="linkBox"
v-for="(domain, index2) in item.otherConcat"
:key="index2"
>
<el-input
v-model="domain.qtlxrxm"
:placeholder="'请输入' + item.label"
></el-input>
<el-input
v-model="domain.qtlxrlxfs"
:placeholder="'请输入' + item.label + '方式'"
></el-input>
<el-input
v-model="domain.qtlxryx"
:placeholder="'请输入' + item.label + '邮箱'"
></el-input>
<el-input
v-model="domain.qtlxrzwzc"
:placeholder="'请输入' + item.label + '职务'"
></el-input>
<i
class="el-icon-remove-outline"
@click="delLink(item.key, index2)"
></i>
</div>
<el-button style="margin-top: 10px" @click="handleAddLink(item.key)"
>添加联系人</el-button
>
</div>
</el-form-item>
<form-title title="检查信息"></form-title>
<div
class="grid-container2"
v-for="(check, checkIndex) in list[21].jcxxList"
:key="'check' + checkIndex"
>
<el-form-item label="时间">
<el-date-picker
v-model="check.sj"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="系统域名">
<el-input
v-model="check.xtym"
placeholder="请输入系统域名"
></el-input>
</el-form-item>
<el-form-item label="系统名称">
<el-input
v-model="check.xthc"
placeholder="请输入系统名称"
></el-input>
</el-form-item>
<el-form-item label="等保级别">
<el-select v-model="check.dbjb" placeholder="请选择等保级别">
<el-option
v-for="dict in dict.type.dbxx_dbdj"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="单位名称">
<el-input
v-model="check.dwmc"
placeholder="请输入单位名称"
></el-input>
</el-form-item>
<i
class="el-icon-remove-outline"
@click="delLink('jcxxList', checkIndex)"
></i>
<el-form-item label="检查结果" class="grid-item2">
<el-input
type="textarea"
resize="none"
placeholder="请输入检查结果"
:rows="5"
v-model="check.jcjg"
></el-input>
</el-form-item>
</div>
<el-button
style="margin-top: 10px; margin-left: 170px"
@click="handleAddLink('jcxxList')"
>添加检查信息</el-button
>
<form-title title="更多信息"> </form-title>
<div class="grid-container2">
<el-form-item label="官网">
<el-input v-model="ruleForm.gw" placeholder="请输入官网"></el-input>
</el-form-item>
<el-form-item label="地图经度">
<el-input
v-model="ruleForm.dtjd"
placeholder="请输入地图经度"
></el-input>
</el-form-item>
<el-form-item label="地图纬度">
<el-input
v-model="ruleForm.dtwd"
placeholder="请输入地图纬度"
></el-input>
</el-form-item>
<el-form-item label="上级单位" required>
<el-input
v-model="ruleForm.sjdw"
placeholder="请输入上级单位"
></el-input>
</el-form-item>
<el-form-item label="备注" class="grid-item2">
<el-input
type="textarea"
resize="none"
placeholder="请输入备注"
:rows="5"
v-model="ruleForm.remark"
></el-input>
</el-form-item>
</div>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="open = false" size="medium"> </el-button>
<el-button
type="primary"
size="medium"
@click="submit()"
v-show="!disabled"
> </el-button
>
</span>
</el-dialog>
</template>
<script>
import formTitle from "./formTitle.vue";
import formItem from "./unitNewAndEdit.js";
import { lookUnit, postUnit } from "@/api/auditPagesApi/index";
import { MessageBox } from "element-ui";
export default {
components: { formTitle },
dicts: ["zc_xtzyx", "is_no", "sshy", "dwlx", "dwjs", "dwzsxz", "dbxx_dbdj"],
data() {
const validateTyshxydm = (rule, value, callback) => {
const pattern = /^[a-zA-Z0-9]{18}$/;
if (!pattern.test(value)) {
callback(new Error("请输入正确格式的18位统一社会信用代码"));
return;
}
callback();
};
return {
disabled: false,
title: "",
open: false,
list: formItem,
ruleForm: {},
rules: {
userName: [
{
required: true,
message: "请输入统一社会信用代码",
trigger: "blur",
},
{ required: true, trigger: "blur", validator: validateTyshxydm },
],
nickName: [
{ required: true, message: "请输入单位名称", trigger: "blur" },
],
zzjg: [
{ required: true, message: "请选择组织机构", trigger: "change" },
],
},
};
},
methods: {
/** 打开对话框 */
openDialog(id, disabled) {
if (!id) {
this.title = "新增单位";
this.open = true;
} else {
this.getInfo(id);
this.disabled = disabled;
}
},
/**获取详情 */
getInfo(id) {
lookUnit(id).then((res) => {
this.ruleForm = res.data;
if (res.data.ssqyprovince && res.data.ssqycity && res.data.ssqycounty) {
this.ruleForm.ssqy = [
res.data.ssqyprovince,
res.data.ssqycity,
res.data.ssqycounty,
];
} else if (res.data.ssqyprovince && res.data.ssqycity) {
this.ruleForm.ssqy = [res.data.ssqyprovince, res.data.ssqycity];
} else if (res.data.ssqyprovince) {
this.ruleForm.ssqy = [res.data.ssqyprovince];
}
if (this.ruleForm.ancestors) {
let deptId = this.ruleForm.ancestors.split(",");
this.ruleForm.zzjg = deptId;
}
this.title = "修改单位";
this.open = true;
});
},
handleAddLink(key) {
let index = this.list.findIndex((item) => item.key == key);
let item = this.list[index];
if (key == "otherConcat") {
item[key].push({
qtlxrxm: "",
qtlxrlxfs: "",
qtlxryx: "",
qtlxrzwzc: "",
});
} else {
item[key].push({
sj: "",
xtym: "",
xthc: "",
dbjb: "",
dwmc: "",
jcjg: "",
});
}
},
delLink(key, ind) {
let index = this.list.findIndex((item) => item.key == key);
let item = this.list[index];
item[key].splice(ind, 1);
},
submit() {
this.$refs["ruleForm"].validate(async (valid) => {
if (valid) {
this.ruleForm.otherConcat = this.list.filter(
(item) => item.key == "otherConcat"
)[0].otherConcat;
this.ruleForm.jcxxList = this.list.filter(
(item) => item.key == "jcxxList"
)[0].jcxxList;
if (this.ruleForm.ssqy?.length > 0) {
this.ruleForm.ssqyprovince = this.ruleForm.ssqy[0];
this.ruleForm.ssqycity = this.ruleForm.ssqy[1];
this.ruleForm.ssqycounty = this.ruleForm.ssqy[2];
}
if (this.ruleForm.zzjg.length == 2) {
this.ruleForm.deptId = Number(this.ruleForm.zzjg[1]);
} else {
this.ruleForm.deptId = Number(this.ruleForm.zzjg[0]);
}
if (this.ruleForm.id != null) {
await postUnit("put", this.ruleForm);
this.$modal.msgSuccess("修改成功");
} else {
let res = await postUnit("post", this.ruleForm);
let msg = res.msg;
MessageBox.confirm(`${msg}`, "生成密码", {
confirmButtonText: "确定",
showClose: false,
type: "success ",
callback: (action) => {
if (window.clipboardData) {
window.clipboardData.setData("text", msg);
} else {
(function () {
document.oncopy = function (e) {
e.clipboardData.setData("text", msg);
e.preventDefault();
document.oncopy = null;
};
})(msg);
document.execCommand("Copy");
}
this.$message({
type: "success",
message: `密码复制成功: ${msg}`,
});
},
});
}
this.open = false;
this.$emit("finish");
} else {
return false;
}
});
},
},
};
</script>
<style lang="scss" scoped>
::v-deep .el-dialog.is-fullscreen {
margin-left: 260px;
width: calc(100% - 260px) !important;
}
.grid-container {
display: grid;
/* 定义两列布局,每列平均分配空间 */
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
.grid-item:only-child {
/* 从第 1 列线跨越到第 3 列线,占据整行 */
grid-column: 1 / 3;
}
::v-deep .el-select,
.el-cascader,
.el-date-editor {
width: 100%;
}
::v-deep .linkBox {
display: flex;
align-items: center;
margin-bottom: 10px;
.el-input {
margin-right: 10px;
}
}
.grid-container2 {
display: grid;
/* 定义两列布局,每列平均分配空间 */
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
/* 单个元素时占满整行 */
.grid-item2 {
/* 从第 1 列线跨越到第 3 列线,占据整行 */
grid-column: 1 / 4;
}
</style>

@ -32,7 +32,12 @@
>导出</el-button
>
<el-button type="primary" plain icon="el-icon-plus" size="mini"
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增单位</el-button
>
</template>
@ -43,6 +48,7 @@
size="small"
:inline="true"
label-width="88px"
class="search-form"
>
<el-form-item label="单位名称:" prop="nickName">
<el-input
@ -151,7 +157,12 @@
width="400"
>
<template slot-scope="scope">
<el-button type="primary" size="mini" plain icon="el-icon-view"
<el-button
type="primary"
size="mini"
plain
icon="el-icon-view"
@click="handleAdd(scope.row, true)"
>查看</el-button
>
<el-button
@ -159,6 +170,7 @@
size="mini"
plain
icon="el-icon-edit-outline"
@click="handleAdd(scope.row, false)"
>修改</el-button
>
<el-button
@ -231,6 +243,9 @@
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<!-- 新增/修改/查看对话框 -->
<unitNewAndEdit ref="addAndEdit" @finish="changefinish"></unitNewAndEdit>
</template>
</main-app>
</template>
@ -239,14 +254,12 @@
import { deptTreeSelect } from "@/api/system/user";
import { listUnit, delUnit, editPassword } from "@/api/auditPagesApi/index";
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { MessageBox } from "element-ui";
import unitNewAndEdit from "./components/unitNewAndEdit.vue";
export default {
name: "User",
dicts: ["dwlx", "sshy"],
components: { Treeselect },
components: { unitNewAndEdit },
data() {
return {
roles: this.$store.state.user.roles,
@ -358,6 +371,16 @@ export default {
this.getDeptTree();
},
methods: {
/**新增按钮 */
handleAdd(row, disabled) {
this.$refs.addAndEdit.openDialog(row.id, disabled);
},
/**
* 新增/修改完成
*/
changefinish() {
this.getList();
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "单位导入";
@ -509,11 +532,13 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-form-item__content {
width: 280px;
.el-select,
.el-date-editor {
width: 100%;
::v-deep .search-form {
.el-form-item__content {
width: 280px;
.el-select,
.el-date-editor {
width: 100%;
}
}
}
</style>

Loading…
Cancel
Save