pref#ncu_commit

This commit is contained in:
Paidax
2025-12-29 13:49:24 +08:00
parent bdff0a2472
commit f79b6ac24d
10 changed files with 178 additions and 108 deletions
@@ -1,34 +1,101 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style></style>
<style scoped>
.custom-tree {
background: transparent;
padding: 8px;
}
/* 节点行高调整 */
.custom-tree .el-tree-node {
margin: 2px 0;
border-radius: 6px;
transition: all 0.2s ease;
}
/* 选中状态 */
.custom-tree .el-tree-node.is-current > .el-tree-node__content {
background: #e8f4ff;
border-left: 3px solid #409eff;
}
/* 节点内容区域 */
.custom-tree .el-tree-node__content {
height: 36px;
line-height: 36px;
padding: 0 8px;
border-radius: 6px;
transition: all 0.2s ease;
}
/* 自定义节点内容 */
.custom-tree-node {
display: flex;
align-items: center;
width: 100%;
gap: 8px;
}
/* 文件夹图标颜色优化 */
.el-icon-folder {
color: #909399;
}
.el-icon-folder-opened {
color: #409eff;
}
/* 展开时图标旋转动画 */
.custom-tree .el-tree-node__expand-icon {
transition: transform 0.3s ease;
}
.custom-tree .el-tree-node__expand-icon.expanded {
transform: rotate(90deg);
}
/* 节点标签 */
.node-label {
flex: 1;
font-size: 13px;
color: #303133;
font-weight: 500;
}
/* 禁用展开图标(当无子节点时) */
.custom-tree .el-tree-node__expand-icon.is-leaf {
color: transparent;
cursor: default;
}
</style>
<div id="app" v-cloak>
<el-row type="flex" :gutter="20" style="height: calc(100vh - 126px)">
<el-col :span="5">
<el-card shadow="never">
<el-input placeholder="输入关键字进行查找" v-model="filterText" clearable></el-input>
<div style="max-height: calc(100vh - 200px); overflow-y: auto">
<el-tree
:data="treeData"
ref="treeRef"
:expand-on-click-node="false"
:props="{
children: 'children',
label: 'name'
}"
node-key="id"
@node-click="treeNodeClick"
:filter-node-method="filterNode"
highlight-current
>
<template slot-scope="{ node, data }">
<span class="el-tree-node__label">
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
<i class="el-icon-folder" v-else></i>
{{node.label}}
</span>
</template>
</el-tree>
<el-tree
:data="treeData"
ref="treeRef"
:expand-on-click-node="false"
:props="{ children: 'children', label: 'name' }"
node-key="id"
default-expand-all
@node-click="treeNodeClick"
:filter-node-method="filterNode"
highlight-current
class="custom-tree"
>
<template slot-scope="{ node, data }">
<span class="custom-tree-node">
<i class="el-icon-folder-opened" v-if="node.level===1"></i>
<i class="el-icon-folder" v-else></i>
<span class="node-label">{{ node.label }}</span>
</span>
</template>
</el-tree>
</div>
</el-card>
</el-col>
@@ -1,5 +1,5 @@
const UNIT_MANAGE_TEMPLATE = {
template: `
template: /*language=HTML*/ `
<div>
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter);">
<el-row :gutter="10" type="flex">
@@ -30,27 +30,37 @@ const UNIT_MANAGE_TEMPLATE = {
<el-dialog title="设置单位" :visible.sync="dialogVisible" :close-on-click-modal="false" width="40%" top="2%">
<el-form :model="formData" ref="form" :rules="formRules" size="small" label-width="80px">
<el-form-item v-if="formData.id === '' || formData.id === null || currentNode === 1" prop="parentId" label="上级单位" label-width="80px">
<el-cascader :props="props" :options="options" v-model="parentUnit" placeholder="请选择上次单位,不选择则为顶级" style="width: 100%"></el-cascader>
</el-form-item>
<el-form-item v-else label="上级单位">
<el-form-item label="上级单位">
<el-input maxlength="100" disabled :value="currentData?.name" type="text"></el-input>
</el-form-item>
<el-form-item prop="name" label="单位名称">
<el-input maxlength="100" placeholder="请输入单位名称" v-model="formData.name" auto-complete="off" tabindex="2" type="text"></el-input>
</el-form-item>
<el-form-item prop="name" label="单位名称">
<el-input maxlength="100" placeholder="请输入单位名称" v-model="formData.name" auto-complete="off" tabindex="2" type="text"></el-input>
</el-form-item>
<!-- <el-form-item prop="aliasName" label="单位别名">-->
<!-- <el-input maxlength="100" placeholder="请输入单位别名" v-model="formData.aliasName" auto-complete="off" tabindex="3" type="text"></el-input>-->
<!-- </el-form-item>-->
<el-form-item prop="unitcode" label="单位编码">
<el-input maxlength="100" placeholder="请输入单位编码" v-model="formData.unitcode" auto-complete="off" tabindex="4" type="text"></el-input>
</el-form-item>
<el-form-item prop="unitLevel" label="单位等级">
<el-form-item prop="unitLevel" label="单位等级">
<el-select v-model="formData.unitLevel" placeholder="请输入单位等级" style="width: 100%">
<el-option v-if="unitLevel === 1" label="一级单位" :value="1"></el-option>
<el-option v-if="unitLevel === 2" label="二级单位" :value="2"></el-option>
<el-option v-if="unitLevel === 3" label="三级单位" :value="3"></el-option>
<el-option v-if="unitLevel === 4" label="四级单位" :value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="unionId" label="所属工会">
<el-select v-model="formData.unionId" placeholder="请选择所属工会" style="width: 100%">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item prop="address" label="单位地址">-->
<!-- <el-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address" auto-complete="off" tabindex="5" type="text"></el-input>-->
<!-- </el-form-item>-->
@@ -88,6 +98,7 @@ const UNIT_MANAGE_TEMPLATE = {
required: true
}
},
store,
data() {
return {
pageForm: {
@@ -107,7 +118,7 @@ const UNIT_MANAGE_TEMPLATE = {
formRules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
unitcode: [{ required: true, message: "必填", trigger: "blur" }],
unitLevel: [{ required: true, message: "必填", trigger: "blur" }],
unitLevel: [{ required: false, message: "必填", trigger: "blur" }],
email: [
{ required: false, message: "单位邮箱", trigger: "blur" },
{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }
@@ -115,24 +126,8 @@ const UNIT_MANAGE_TEMPLATE = {
},
options: [],
parentUnit: [],
props: {
lazy: true,
checkStrictly: true,
multiple: false,
lazyLoad: function (node, resolve) {
var url = base + "/platform/sys/unit/cascaderData"
$.post(
url,
{ pid: node.value },
function (data) {
if (data.code === 0) {
resolve(data.data)
}
},
"json"
)
}
}
unions: [],
}
},
computed: {},
@@ -148,26 +143,29 @@ const UNIT_MANAGE_TEMPLATE = {
this.options = []
},
doHandle() {
const self = this
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
this.$refs["form"].validate(async function (valid) {
if (valid) {
if (!self.formData.id) {
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || ""
this.$confirm("确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
const self = this
const url = this.formData.id ? "/platform/sys/unit/editDo" : "/platform/sys/unit/addDo"
this.$refs["form"].validate(async function (valid) {
if (valid) {
if (self.currentNode) {
self.formData.parentId = self.currentData.id
}
const resp = await self.$axios.post(url, self.formData)
if (resp.code === 0) {
self.$message.success(resp.msg)
self.doSearch()
self.dialogVisible = false
self.$emit("refresh", null)
} else {
self.$message.warning(resp.msg)
}
}
if (self.currentNode !== 1) {
self.formData.parentId = self.currentData.id
}
const resp = await self.$axios.post(url, self.formData)
if (resp.code === 0) {
self.$message.success(resp.msg)
self.doSearch()
self.dialogVisible = false
self.$emit("refresh", null)
} else {
self.$message.warning(resp.msg)
}
}
})
})
},
async openEdit(id) {
@@ -216,7 +214,13 @@ const UNIT_MANAGE_TEMPLATE = {
})
}
},
created() {
async created() {
this.pageData()
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
this.unions = await this.$businessTool.listUnion()
} else {
this.unions = await this.$businessTool.listUnion(this.store.state.user.union.id)
}
}
}
@@ -16,7 +16,7 @@
<!-- 第 3 行 -->
<el-descriptions-item label="证件类型">{{ viewData.idCardType }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ viewData.idcard }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
<!-- 第 4 行 -->
@@ -39,7 +39,7 @@
<!-- 仅本人可见 -->
<template v-if="viewData.loginname === $store.state.user.loginname">
<el-descriptions-item label="家庭主要成员" :span="3">
<el-table v-if="viewData.families && viewData.families.length" :data="viewData.families" size="mini" border :header-cell-style="{background:'#eff3f6'}" style="width: 100%">
<el-table v-if="viewData.families && viewData.families.length > 0" :data="viewData.families" size="mini" border :header-cell-style="{background:'#eff3f6'}" style="width: 100%">
<el-table-column prop="relation" label="与本人关系" align="center"/>
<el-table-column prop="name" label="姓名" align="center"/>
<el-table-column prop="unit" label="单位" align="center"/>
@@ -45,25 +45,17 @@ layout("/layouts/platform.html"){
<el-table ref="table" :data="tableData" :size="tableSize" row-key="id"
style="width: 100%" @sort-change="pageOrder">
<el-table-column :index="indexMethod" header-align="center" label="序号" type="index" width="80px"></el-table-column>
<el-table-column v-for="column in tableColumns"
:key="column.prop"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
header-align="center"
show-overflow-tooltip>
<template scope="{row}" v-if="column.prop==='personnelRelationUnionName'">
<el-tag effect="plain">
{{row.personnelRelationUnionName || '无工会'}}
</el-tag>
</template>
<template scope="{row}" v-else-if="column.prop==='unionRelationUnionName'">
<el-tag>
{{row.unionRelationUnionName || '无工会'}}
</el-tag>
</template>
</el-table-column>
<el-table-column v-for="column in tableColumns"
:key="column.prop"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
header-align="center"
show-overflow-tooltip>
<template v-if="column.prop==='specialStaffType'" scope="{row:{specialStaffType}}">
<dict-tag :options="dict.type.SPECIAL_STAFF_TYPE" :value="specialStaffType"></dict-tag>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作">
<template scope="scope">
@@ -217,12 +209,14 @@ layout("/layouts/platform.html"){
{ prop: 'username', label: '姓名' },
{ prop: 'sex', label: '性别' },
{ prop: 'mobile', label: '联系电话' },
{ prop: 'personType', label: '教职工类别', sortable: true },
{ prop: 'personType', label: '人员类型', sortable: true },
{ prop: 'userState', label: '在职状态', sortable: true },
{ prop: 'distSpecialStaffType', label: '特别人员类型', sortable: true },
{ prop: 'personnelRelationUnionName', label: '人事关系工会', sortable: true, width: 180 },
{ prop: 'personnelRelationUnionName', label: '人事关系工会', sortable: true},
{ prop: 'personnelRelationUnitName', label: '人事关系单位', sortable: true },
{ prop: 'unionRelationUnionName', label: '工会关系工会', sortable: true, width: 180 },
{ prop: 'unionRelationUnionName', label: '工会关系工会', sortable: true},
{ prop: 'unionRelationUnitName', label: '工会关系单位', sortable: true },
{ prop: 'distSpecialStaffType', label: '特别人员类型', sortable: true },
// { prop: 'specialStaffRemark', label: '多单位人员备注', sortable: true, checked: 0 }
],
unions: [],