后台账号日志等修复

dev_2022-03-03
yujialong 3 years ago
parent 4822994d2d
commit b0d076fadc
  1. 4
      src/setting.js
  2. 26
      src/utils/api.js
  3. 19
      src/views/order/AddOrder.vue
  4. 6
      src/views/serve/projectAdd.vue
  5. 17
      src/views/system/log.vue
  6. 4
      src/views/system/manageLog.vue
  7. 123
      src/views/system/staff.vue

@ -13,8 +13,8 @@ if (isDev) {
// jumpPath = "http://39.108.250.202/judgmentPoint/"; // jumpPath = "http://39.108.250.202/judgmentPoint/";
jumpPath = "http://192.168.31.125:8087/"; // 本地调试-需要启动本地判分点系统 jumpPath = "http://192.168.31.125:8087/"; // 本地调试-需要启动本地判分点系统
// host = "http://www.huorantech.cn:9000";//线上 // host = "http://www.huorantech.cn:9000";//线上
// host = "http://39.108.250.202:9000/";//测试 host = "http://39.108.250.202:9000/";//测试
host = 'http://192.168.31.151:9000/'// 榕 // host = 'http://192.168.31.151:9000/'// 榕
// host = 'http://192.168.31.137:9000'// 赓 // host = 'http://192.168.31.137:9000'// 赓
} else if (isTest) { } else if (isTest) {
// jumpPath = "http://124.71.12.62/judgmentPoint/"; // jumpPath = "http://124.71.12.62/judgmentPoint/";

@ -1,7 +1,7 @@
import Setting from "@/setting"; import Setting from "@/setting";
const uploadURL = Setting.uploadURL const uploadURL = Setting.uploadURL
const host1 = 'http://192.168.31.137:9000' const host1 = 'http://192.168.31.137:9000/'
export default { export default {
@ -10,6 +10,8 @@ export default {
bindPhoneOrEmail: `users/users/userAccount/bindPhoneOrEmail`,// 绑定手机 bindPhoneOrEmail: `users/users/userAccount/bindPhoneOrEmail`,// 绑定手机
sendPhoneOrEmailCode: `users/users/userAccount/sendPhoneOrEmailCode`,// 手机验证码 sendPhoneOrEmailCode: `users/users/userAccount/sendPhoneOrEmailCode`,// 手机验证码
staffTemplate: `http://www.huorantech.cn/template/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%85%A5%E5%91%98%E5%B7%A5%E6%A8%A1%E6%9D%BF.xlsx`, // 后台账号模板
checkEmailOrPhone: `occupationlab/architecture/checkEmailOrPhone`, // 新增学生前:校验手机号或者邮箱 checkEmailOrPhone: `occupationlab/architecture/checkEmailOrPhone`, // 新增学生前:校验手机号或者邮箱
checkWorkNumOrAccount: `occupationlab/architecture/checkWorkNumOrAccount`, // 新增/编辑学生前:校验学号或者学生账号 checkWorkNumOrAccount: `occupationlab/architecture/checkWorkNumOrAccount`, // 新增/编辑学生前:校验学号或者学生账号
@ -214,15 +216,17 @@ export default {
getKeywordByCategoryId: `data/keyword/getKeywordByCategoryId`, getKeywordByCategoryId: `data/keyword/getKeywordByCategoryId`,
// 后台账号 // 后台账号
deleteArch: `${host1}/nakadai/staffAccountArchitecture/delete`, deleteArch: `${host1}nakadai/staffAccountArchitecture/delete`,
saveArch: `${host1}/nakadai/staffAccountArchitecture/save`, saveArch: `${host1}nakadai/staffAccountArchitecture/save`,
treeListArch: `${host1}/nakadai/staffAccountArchitecture/treeList`, treeListArch: `${host1}nakadai/staffAccountArchitecture/treeList`,
updateArch: `${host1}/nakadai/staffAccountArchitecture/update`, updateArch: `${host1}nakadai/staffAccountArchitecture/update`,
delStaff: `${host1}/nakadai/backstageStaff/delStaff`, delStaff: `${host1}nakadai/backstageStaff/delStaff`,
modifyStaff: `${host1}/nakadai/backstageStaff/modifyStaff`, modifyStaff: `${host1}nakadai/backstageStaff/modifyStaff`,
saveStaff: `${host1}/nakadai/backstageStaff/saveStaff`, saveStaff: `${host1}nakadai/backstageStaff/saveStaff`,
staffDetail: `${host1}/nakadai/backstageStaff/staffDetail`, staffDetail: `${host1}nakadai/backstageStaff/staffDetail`,
staffList: `${host1}/nakadai/backstageStaff/staffList`, staffList: `${host1}nakadai/backstageStaff/staffList`,
importStaff: `${host1}nakadai/backstageStaff/importStaff`,
exportFailure: `${host1}nakadai/backstageStaff/exportFailure`,
// 角色管理 // 角色管理
batchRemove: `users/role/batchRemove`, //批量删除角色 batchRemove: `users/role/batchRemove`, //批量删除角色
@ -241,5 +245,5 @@ export default {
logManagementList: `nakadai/log/logManagementList`, logManagementList: `nakadai/log/logManagementList`,
platformLogList: `nakadai/log/platformLogList`, platformLogList: `nakadai/log/platformLogList`,
listUpdate: `nakadai/log/update`, listUpdate: `nakadai/log/update`,
checkRepeat: `${host1}/nakadai/log/checkRepeat`, checkRepeat: `nakadai/log/checkRepeat`,
}; };

@ -119,20 +119,18 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="small"> <div class="small">
<el-input <el-input
style='width: 80px' class="time-input"
onkeyup="value=this.value.replace(/\D+/g,'')" onkeyup="value=this.value.replace(/\D+/g,'')"
:class="!scope.row.periodOfUse&&whetherSubmit?'red':''" :class="!scope.row.periodOfUse&&whetherSubmit?'red':''"
:disabled="viewDisabled||editDisabled" maxlength="4" :disabled="viewDisabled||editDisabled" maxlength="4"
@change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)"
oninput="value=value.replace(/[^0-9.]/g,'')" oninput="value=value.replace(/[^0-9.]/g,'')"
v-model="scope.row.periodOfUse" placeholder="输入时间"></el-input> v-model="scope.row.periodOfUse" placeholder="输入时间"></el-input>
<span style="margin-left:5px"> <el-select class="time-select" v-model="scope.row.options" :disabled="viewDisabled||editDisabled" placeholder="请选择" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)">
<el-select v-model="scope.row.options" :disabled="viewDisabled||editDisabled" placeholder="请选择" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)">
<el-option label="日" :value="0"></el-option> <el-option label="日" :value="0"></el-option>
<el-option label="月" :value="1"></el-option> <el-option label="月" :value="1"></el-option>
<el-option label="年" :value="2"></el-option> <el-option label="年" :value="2"></el-option>
</el-select> </el-select>
</span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -259,13 +257,14 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="small"> <div class="small">
<el-input onkeyup="value=this.value.replace(/\D+/g,'')" <el-input onkeyup="value=this.value.replace(/\D+/g,'')"
class="time-input"
:class="!scope.row.periodOfUse&&whetherSubmit?'red':''" :class="!scope.row.periodOfUse&&whetherSubmit?'red':''"
:disabled="viewDisabled||editDisabled" maxlength="4" :disabled="viewDisabled||editDisabled" maxlength="4"
@change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)"
oninput="value=value.replace(/[^0-9.]/g,'')" oninput="value=value.replace(/[^0-9.]/g,'')"
v-model="scope.row.periodOfUse" placeholder="输入时间"></el-input> v-model="scope.row.periodOfUse" placeholder="输入时间"></el-input>
<span style="margin-left:5px"> <span style="margin-left:5px">
<el-select v-model="scope.row.options" :disabled="viewDisabled||editDisabled" placeholder="请选择" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)"> <el-select class="time-select" v-model="scope.row.options" :disabled="viewDisabled||editDisabled" placeholder="请选择" @change="deadLine(scope.row.periodOfUse,scope.row,scope.row.options)">
<el-option label="日" :value="0"></el-option> <el-option label="日" :value="0"></el-option>
<el-option label="月" :value="1"></el-option> <el-option label="月" :value="1"></el-option>
<el-option label="年" :value="2"></el-option> <el-option label="年" :value="2"></el-option>
@ -1518,8 +1517,14 @@ export default {
/deep/ .course-input .el-input__inner { /deep/ .course-input .el-input__inner {
width: 100px; width: 100px;
} }
/deep/.orderTable .el-select>.el-input{ .time-input{
width: 30%; width: 90px !important;
}
/deep/.time-select{
margin-left: 5px;
.el-input {
width: 70px !important;
}
} }
/deep/.orderTables .el-select>.el-input{ /deep/.orderTables .el-select>.el-input{
width: 35%; width: 35%;

@ -392,7 +392,7 @@ export default {
}); });
} }
}, },
judgmentRelease() { // judgmentRelease(state) { //
let { let {
projectName, projectName,
experimentTarget, experimentTarget,
@ -408,6 +408,7 @@ export default {
this.$message.warning("该项目名称已存在"); this.$message.warning("该项目名称已存在");
return false; return false;
} }
if (state) {
let reg = /<\/?.+?\/?>/g let reg = /<\/?.+?\/?>/g
let experimentTargets = experimentTarget.replace(reg, '') let experimentTargets = experimentTarget.replace(reg, '')
if (!experimentTargets) { if (!experimentTargets) {
@ -436,11 +437,12 @@ export default {
this.$message.warning("请输入实验提示"); this.$message.warning("请输入实验提示");
return false; return false;
} }
}
return true; return true;
}, },
handleSubmit(state) { // handleSubmit(state) { //
if (this.submiting) return false if (this.submiting) return false
if (!this.judgmentRelease()) { // if (!this.judgmentRelease(state)) { //
return; return;
} }
this.submiting = true this.submiting = true

@ -11,11 +11,7 @@
<el-table :data="listData" class="table" ref="table" stripe header-align="center" row-key="id"> <el-table :data="listData" class="table" ref="table" stripe header-align="center" row-key="id">
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column> <el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column prop="roleName" label="平台名称" align="center" min-width="250" show-overflow-tooltip> <el-table-column prop="name" label="平台名称" align="center" min-width="250" show-overflow-tooltip></el-table-column>
<template slot-scope="scope">
{{ platformList.find(e => e.id === scope.row.platformId) && platformList.find(e => e.id === scope.row.platformId).name }}
</template>
</el-table-column>
<el-table-column prop="versionName" label="最新版本名称" align="center"></el-table-column> <el-table-column prop="versionName" label="最新版本名称" align="center"></el-table-column>
<el-table-column prop="roleName" label="最新版本状态" align="center"> <el-table-column prop="roleName" label="最新版本状态" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
@ -49,6 +45,7 @@ export default {
roleName: "", roleName: "",
remark: "" remark: ""
}, },
listDataAll: [],
listData: [], listData: [],
page: 1, page: 1,
pageSize: 10, pageSize: 10,
@ -59,7 +56,8 @@ export default {
keyword: function(val) { keyword: function(val) {
clearTimeout(this.searchTimer); clearTimeout(this.searchTimer);
this.searchTimer = setTimeout(() => { this.searchTimer = setTimeout(() => {
this.getData(); const list = this.listData
this.listData = val ? list.filter(e => e.name.includes(val)) : this.listDataAll
}, 500); }, 500);
} }
}, },
@ -69,6 +67,13 @@ export default {
methods: { methods: {
getData() { getData() {
this.$get(`${this.api.logManagementList}?search=${this.keyword}`).then(res => { this.$get(`${this.api.logManagementList}?search=${this.keyword}`).then(res => {
const list = res.logManagementListVo
const platformList = this.platformList
list.map(e => {
const item = platformList.find(n => n.id === e.platformId)
if (item) e.name = item.name
})
this.listDataAll = res.logManagementListVo
this.listData = res.logManagementListVo this.listData = res.logManagementListVo
}).catch(res => {}) }).catch(res => {})
}, },

@ -206,6 +206,10 @@ export default {
top: 15px; top: 15px;
padding-left: 40px; padding-left: 40px;
} }
.el-timeline-item__tail {
height: 250%;
border-left-width: 1px;
}
.sign { .sign {
position: relative; position: relative;
display: inline-block; display: inline-block;

@ -1,11 +1,10 @@
<template> <template>
<div> <div class="wrap">
<el-row :gutter="20"> <!-- 左边的组织 -->
<el-col :span="4"> <div class="side">
<div class="page">
<div class="m-b-20"> <div class="m-b-20">
<h6 class="p-title">后台员工账号</h6> <h6 class="p-title">后台员工账号</h6>
<el-radio-group v-model="studentType" @change="initData"> <el-radio-group v-model="studentType" @change="changeType">
<div class="m-b-20"> <div class="m-b-20">
<el-radio :label="1">所有员工</el-radio> <el-radio :label="1">所有员工</el-radio>
</div> </div>
@ -35,6 +34,11 @@
<span class="custom-tree-node" slot-scope="{ node, data }"> <span class="custom-tree-node" slot-scope="{ node, data }">
<span class="org-name">{{ node.label }}</span> <span class="org-name">{{ node.label }}</span>
<span> <span>
<el-button
type="text"
icon="el-icon-circle-plus-outline"
@click="() => addOrg(node, data)">
</el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@ -42,8 +46,8 @@
</el-button> </el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-circle-plus-outline" icon="el-icon-delete"
@click="() => addOrg(node, data)"> @click="() => delOrg(node, data)">
</el-button> </el-button>
</span> </span>
</span> </span>
@ -57,7 +61,7 @@
:close-on-click-modal="false" :close-on-click-modal="false"
width="50%" width="50%"
> >
<el-form v-if="orgVisible" ref="orgForm" :model="orgForm" :rules="rules" label-width="100px"> <el-form v-if="orgVisible" ref="orgForm" :model="orgForm" :rules="orgRules" label-width="100px">
<el-form-item label="部门名称" prop="organizationName"> <el-form-item label="部门名称" prop="organizationName">
<el-input v-model.trim="orgForm.organizationName" placeholder="请输入"></el-input> <el-input v-model.trim="orgForm.organizationName" placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
@ -75,16 +79,13 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button v-if="!orgForm.id" @click="closeOrg"> </el-button> <el-button @click="closeOrg"> </el-button>
<el-button v-else type="danger" plain @click="delOrg">删除</el-button>
<el-button type="primary" @click="orgSubmit"> </el-button> <el-button type="primary" @click="orgSubmit"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</el-col> <!-- 右边的员工 -->
<el-col :span="20"> <div class="right">
<div class="page">
<h6 class="p-title">筛选</h6> <h6 class="p-title">筛选</h6>
<div class="tool"> <div class="tool">
<ul class="filter"> <ul class="filter">
@ -178,7 +179,7 @@
:before-remove="beforeRemove" :before-remove="beforeRemove"
:limit="1" :limit="1"
:on-exceed="handleExceed" :on-exceed="handleExceed"
:action="this.api.importStudent" :action="this.api.importStaff"
:file-list="uploadList" :file-list="uploadList"
:headers="headers" :headers="headers"
> >
@ -192,8 +193,6 @@
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</el-col>
</el-row>
</div> </div>
</template> </template>
@ -288,6 +287,11 @@ export default {
account: '', account: '',
staffArchitectureId: [] staffArchitectureId: []
}, },
orgRules: {
organizationName: [
{ required: true, message: "请输入部门名称", trigger: "blur" }
]
},
rules: { rules: {
account: [ account: [
{ required: true,validator: accountPass, trigger: 'blur' } { required: true,validator: accountPass, trigger: 'blur' }
@ -325,7 +329,8 @@ export default {
multiple: true, multiple: true,
checkStrictly: true, checkStrictly: true,
label: 'organizationName', label: 'organizationName',
value: 'id' value: 'id',
isLeaf: 'leaf'
}, },
importVisible: false, importVisible: false,
@ -354,6 +359,17 @@ export default {
async getOrg() { async getOrg() {
const res = await this.$post(this.api.treeListArch) const res = await this.$post(this.api.treeListArch)
const list = res.treeList const list = res.treeList
// children
const handleLeaf = list => {
list.map(e => {
if (e.children.length) {
handleLeaf(e.children)
} else {
delete e.children
}
})
}
handleLeaf(list)
this.orgList = list this.orgList = list
this.handleOrgId(list) this.handleOrgId(list)
this.getStaff() this.getStaff()
@ -362,9 +378,13 @@ export default {
handleOrgId(list, ids) { handleOrgId(list, ids) {
list.forEach(e => { list.forEach(e => {
e.ids = ids ? [...ids, e.id] : [e.id] e.ids = ids ? [...ids, e.id] : [e.id]
this.handleOrgId(e.children, e.ids) e.children && this.handleOrgId(e.children, e.ids)
}) })
}, },
//
changeType() {
this.initData(true)
},
// //
addOrg(node, data) { addOrg(node, data) {
this.orgForm = { this.orgForm = {
@ -397,25 +417,25 @@ export default {
// disabled // disabled
if (disabled) { if (disabled) {
e.disabled = true e.disabled = true
this.handleOrg(e.children, id, 1) e.children && this.handleOrg(e.children, id, 1)
} else { } else {
if (e.id === id) { if (e.id === id) {
e.disabled = true e.disabled = true
this.handleOrg(e.children, id, 1) e.children && this.handleOrg(e.children, id, 1)
} else { } else {
this.handleOrg(e.children, id, 0) e.children && this.handleOrg(e.children, id, 0)
} }
} }
}) })
}, },
// //
delOrg() { delOrg(node, data) {
this.$confirm("确定要删除吗?", "提示", { this.$confirm("确定要删除吗?", "提示", {
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$post(`${this.api.deleteArch}?id=${this.orgForm.id}`).then(res => { this.$post(`${this.api.deleteArch}?id=${data.id}`).then(res => {
util.successMsg("删除成功") util.successMsg("删除成功")
this.closeOrg() this.getOrg()
}).catch(res => {}) }).catch(res => {})
}).catch(() => {}) }).catch(() => {})
}, },
@ -459,10 +479,11 @@ export default {
this.getOrg() this.getOrg()
}, },
// //
getStaff() { getStaff(fromType) {
const orgId = this.$refs.orgTree.getCurrentKey() || ''
this.$post(this.api.staffList, { this.$post(this.api.staffList, {
type: this.studentType || 1, type: this.studentType || 1,
staffArchitectureId: this.$refs.orgTree.getCurrentKey() || '', staffArchitectureId: fromType ? '' : orgId,
keyWord: this.keyWord, keyWord: this.keyWord,
pageNum: this.page, pageNum: this.page,
pageSize: this.pageSize pageSize: this.pageSize
@ -479,10 +500,10 @@ export default {
handleSelectionChange(val) { // handleSelectionChange(val) { //
this.multipleSelection = val this.multipleSelection = val
}, },
initData() { initData(fromType) {
this.$refs.table.clearSelection() this.$refs.table.clearSelection()
this.page = 1 this.page = 1
this.getStaff() this.getStaff(fromType)
}, },
// //
delStaff(row) { delStaff(row) {
@ -506,14 +527,34 @@ export default {
// //
addStaff() { addStaff() {
this.staffVisible = true this.staffVisible = true
this.$nextTick(() => {
this.$refs.form.clearValidate()
})
}, },
// / // /
queryStaff(row, isDetail) { queryStaff(row, isDetail) {
const archId = []
// id
const handleArchId = (list, ids, parentId = []) => {
list.map(e => {
// id[[1, 2], [3, 4]]idid
if (ids.includes(e.id)) {
archId.push([...parentId, e.id])
} else {
e.children && handleArchId(e.children, ids, [...parentId, e.id])
}
})
}
this.isDetail = isDetail this.isDetail = isDetail
this.staffVisible = true this.staffVisible = true
this.$get(`${this.api.staffDetail}?accountId=${row.accountId}`).then(res => { this.$get(`${this.api.staffDetail}?accountId=${row.accountId}`).then(res => {
const { data } = res const { data } = res
data.staffArchitectureId = data.staffArchitectureId.split(',') const { staffArchitectureId, roleId } = data
if (roleId) data.roleList = roleId.split(',').map(e => Number(e))
if (staffArchitectureId) {
handleArchId(this.orgList, staffArchitectureId.split(',').map(e => Number(e)))
data.staffArchitectureId = archId
}
this.form = data this.form = data
this.originAccount = data.account this.originAccount = data.account
this.originWorkNumber = data.workNumber this.originWorkNumber = data.workNumber
@ -521,7 +562,6 @@ export default {
}, },
// //
getRole() { getRole() {
this.roleList =[]
this.$get(`${this.api.roleList}?page=1&size=1000&name=&platformId=${Setting.platformId}`).then(res => { this.$get(`${this.api.roleList}?page=1&size=1000&name=&platformId=${Setting.platformId}`).then(res => {
this.roleList = res.rolePage.records this.roleList = res.rolePage.records
}).catch(res => {}) }).catch(res => {})
@ -586,16 +626,16 @@ export default {
submitStaff() { submitStaff() {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
debugger
if (this.submiting) return false if (this.submiting) return false
if (this.accountReapeat) return util.warningMsg("该账号已存在") if (this.accountReapeat) return util.warningMsg("该账号已存在")
if (this.workNumberReapeat) return util.warningMsg("该工号已存在") if (this.workNumberReapeat) return util.warningMsg("该工号已存在")
if (this.phoneRepeat) return util.warningMsg("该手机号已存在") if (this.phoneRepeat) return util.warningMsg("该手机号已存在")
if (this.emailRepeat) return util.warningMsg("该邮箱已存在") if (this.emailRepeat) return util.warningMsg("该邮箱已存在")
this.submiting = true this.submiting = true
const form = this.form const form = JSON.parse(JSON.stringify(this.form))
const ids = form.staffArchitectureId const ids = form.staffArchitectureId
form.staffArchitectureId = ids.map(e => e[e.length - 1]) form.staffArchitectureId = ids.map(e => e[e.length - 1])
console.log("🚀 ~ file: staff.vue ~ line 622 ~ this.$refs.form.validate ~ form", form)
if (form.accountId) { if (form.accountId) {
this.$post(this.api.modifyStaff, form).then(res => { this.$post(this.api.modifyStaff, form).then(res => {
util.successMsg("编辑成功!") util.successMsg("编辑成功!")
@ -651,7 +691,7 @@ export default {
}, },
// //
downLoad() { downLoad() {
location.href = this.api.studentTemplate location.href = this.api.staffTemplate
}, },
// //
handleExceed(files, fileList) { handleExceed(files, fileList) {
@ -710,4 +750,19 @@ export default {
.w-100 { .w-100 {
width: 100%; width: 100%;
} }
.wrap {
display: flex;
height: calc(100vh - 223px);
padding: 0 24px;
.side {
width: 300px;
padding: 24px 10px 24px 0;
margin-right: 24px;
border-right: 1px solid rgba(0, 0, 0, 0.06);
}
.right {
width: calc(100% - 374px);
padding: 24px 0;
}
}
</style> </style>
Loading…
Cancel
Save