server-vue-gxb
31353 2024-04-08 10:57:11 +08:00
parent 88bfa643ec
commit f81ed63672
7 changed files with 498 additions and 19 deletions

View File

@ -5,7 +5,7 @@
"author": "若依",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",

View File

@ -0,0 +1,11 @@
import request from '@/utils/request'
// 查询用户列表
export function deptlist(data) {
return request({
url: '/corpor/corpor/deptlist',
method: 'get',
params: data
})
}

View File

@ -34,6 +34,15 @@ export function addDept(data) {
})
}
// 新增部门
export function addcomper(data) {
return request({
url: '/system/dept/addComper',
method: 'post',
data: data
})
}
// 修改部门
export function updateDept(data) {
return request({

View File

@ -16,6 +16,12 @@ export function getData(dictCode) {
method: 'get'
})
}
export function test() {
return request({
url: '/system/user/ssss',
method: 'get'
})
}
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {

View File

@ -0,0 +1,363 @@
<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" size="small">
<el-form-item label="部门名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
clearable
placeholder="请输入部门名称"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" clearable placeholder="部门状态">
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-button-->
<!-- v-hasPermi="['system:dept:add']"-->
<!-- icon="el-icon-plus"-->
<!-- plain-->
<!-- size="mini"-->
<!-- type="primary"-->
<!-- @click="handleAdd"-->
<!-- >新增-->
<!-- </el-button>-->
</el-col>
<el-col :span="1.5">
<el-button
icon="el-icon-sort"
plain
size="mini"
type="info"
@click="toggleExpandAll"
>展开/折叠
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table
v-if="refreshTable"
v-loading="loading"
:data="deptList"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
row-key="deptId"
>
<el-table-column label="部门名称" prop="deptName" width="260"></el-table-column>
<el-table-column label="排序" prop="orderNum" width="200"></el-table-column>
<el-table-column label="状态" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column align="center" label="创建时间" prop="createTime" width="200">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:dept:edit']"
icon="el-icon-edit"
size="mini"
type="text"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
v-hasPermi="['system:dept:add']"
icon="el-icon-plus"
size="mini"
type="text"
@click="handleAdd(scope.row)"
>新增
</el-button>
<el-button
v-if="scope.row.parentId != 0"
v-hasPermi="['system:dept:remove']"
icon="el-icon-delete"
size="mini"
type="text"
@click="handleDelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" append-to-body width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col v-if="form.parentId !== 0" :span="24">
<el-form-item label="上级部门" prop="parentId">
<treeselect v-model="form.parentId" :normalizer="normalizer" :options="deptOptions"
placeholder="选择上级部门"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入部门名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企业标识" prop="companySign">
<el-input v-model="form.companySign" placeholder="请输入企业标识符"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" :min="0" controls-position="right"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="负责人" prop="leader">
<el-input v-model="form.leader" maxlength="20" placeholder="请输入负责人"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" maxlength="11" placeholder="请输入联系电话"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" maxlength="50" placeholder="请输入邮箱"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { addcomper, addDept, delDept, getDept, listDept, listDeptExcludeChild, updateDept } from '@/api/system/dept'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { deptlist } from '@/api/corpor/comper/comp'
export default {
name: "Dept",
dicts: ['sys_normal_disable'],
components: {Treeselect},
data() {
return {
//
loading: true,
//
showSearch: true,
//
deptList: [],
//
deptOptions: [],
//
title: "",
//
open: false,
opens: false,
//
isExpandAll: true,
//
refreshTable: true,
//
queryParams: {
deptName: undefined,
status: undefined,
companySign: undefined,
},
//
form: {
parentId: 0
},
//
rules: {
parentId: [
{required: true, message: "上级部门不能为空", trigger: "blur"}
],
deptName: [
{required: true, message: "部门名称不能为空", trigger: "blur"}
],
companySign: [
{required: true, message: '企业标识不能为空', trigger: 'blur' },
{pattern: /^[A-Z]+$/, message: '企业标识必须为大写的英文字母', trigger: 'change' }
],
orderNum: [
{required: true, message: "显示排序不能为空", trigger: "blur"}
],
email: [
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phone: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
};
},
created() {
this.getList();
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true;
listDept(this.queryParams).then(response => {
this.deptList = this.handleTree(response.data, "deptId");
this.loading = false;
});
},
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.deptId,
label: node.deptName,
children: node.children
};
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
deptId: undefined,
parentId: undefined,
deptName: undefined,
orderNum: undefined,
leader: undefined,
phone: undefined,
email: undefined,
status: "0"
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
if (row != undefined) {
this.form.parentId = row.deptId;
}
this.open = true;
this.title = "公司入驻";
listDept().then(response => {
this.deptOptions = this.handleTree(response.data, "deptId");
});
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getDept(row.deptId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改部门";
});
listDeptExcludeChild(row.deptId).then(response => {
this.deptOptions = this.handleTree(response.data, "deptId");
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.deptId != undefined) {
updateDept(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addDept(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function () {
return delDept(row.deptId);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
}
}
};
</script>

View File

@ -27,15 +27,6 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:dept:add']"
icon="el-icon-plus"
plain
size="mini"
type="primary"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@ -85,7 +76,7 @@
icon="el-icon-plus"
size="mini"
type="text"
@click="handleAdd(scope.row)"
@click="handleAdds(scope.row)"
>新增
</el-button>
<el-button
@ -103,6 +94,73 @@
<!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" append-to-body width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- <el-row>-->
<!-- <el-col v-if="form.parentId !== 0" :span="24">-->
<!-- <el-form-item label="上级部门" prop="parentId">-->
<!-- <treeselect v-model="form.parentId" :normalizer="normalizer" :options="deptOptions"-->
<!-- placeholder="选择上级部门"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="12">
<el-form-item label="公司名称" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入公司名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企业标识" prop="companySign">
<el-input v-model="form.companySign" placeholder="请输入企业标识符"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" :min="0" controls-position="right"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="负责人" prop="leader">
<el-input v-model="form.leader" maxlength="20" placeholder="请输入负责人"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" maxlength="11" placeholder="请输入联系电话"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" maxlength="50" placeholder="请输入邮箱"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-dialog :title="title" :visible.sync="opens" append-to-body width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col v-if="form.parentId !== 0" :span="24">
@ -112,12 +170,18 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="部门名称" prop="deptName">
<el-input v-model="form.deptName" placeholder="请输入部门名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企业标识" prop="companySign">
<el-input v-model="form.companySign" placeholder="请输入企业标识符"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="orderNum">
<el-input-number v-model="form.orderNum" :min="0" controls-position="right"/>
@ -165,9 +229,10 @@
</template>
<script>
import {addDept, delDept, getDept, listDept, listDeptExcludeChild, updateDept} from "@/api/system/dept";
import { addcomper, addDept, delDept, getDept, listDept, listDeptExcludeChild, updateDept } from '@/api/system/dept'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { deptlist } from '@/api/corpor/comper/comp'
export default {
name: "Dept",
@ -187,6 +252,7 @@ export default {
title: "",
//
open: false,
opens: false,
//
isExpandAll: true,
//
@ -194,10 +260,13 @@ export default {
//
queryParams: {
deptName: undefined,
status: undefined
status: undefined,
companySign: undefined,
},
//
form: {},
form: {
parentId: 0
},
//
rules: {
parentId: [
@ -206,9 +275,14 @@ export default {
deptName: [
{required: true, message: "部门名称不能为空", trigger: "blur"}
],
companySign: [
{required: true, message: '企业标识不能为空', trigger: 'blur' },
{pattern: /^[A-Z]+$/, message: '企业标识必须为大写的英文字母', trigger: 'change' }
],
orderNum: [
{required: true, message: "显示排序不能为空", trigger: "blur"}
],
email: [
{
type: "email",
@ -278,12 +352,12 @@ export default {
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
handleAdds(row) {
this.reset();
if (row != undefined) {
this.form.parentId = row.deptId;
}
this.open = true;
this.opens = true;
this.title = "添加部门";
listDept().then(response => {
this.deptOptions = this.handleTree(response.data, "deptId");
@ -320,7 +394,7 @@ export default {
this.getList();
});
} else {
addDept(this.form).then(response => {
addcomper(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();

View File

@ -1,5 +1,9 @@
<template>
<div class="app-container">
<el-button type="primary" @click="test"></el-button>
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
@ -238,6 +242,12 @@
<el-input v-model="form.phonenumber" maxlength="11" placeholder="请输入手机号码"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企业标识符" prop="userComper">
<el-input v-model="form.userComper" maxlength="11" placeholder="请输入企业标识符"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" maxlength="50" placeholder="请输入邮箱"/>
@ -374,6 +384,7 @@ import {
import {getToken} from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { test } from '@/api/system/dict/data'
export default {
name: "User",
@ -489,12 +500,17 @@ export default {
},
created() {
this.getList();
this.getDeptTree();
this.getDeptTree();
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.data.msg;
});
},
methods: {
test(){
test().then(res=>{
this.$message.success(res.msg)
})
},
/** 查询用户列表 */
getList() {
this.loading = true;