Commit 7dbfa459 authored by 张冬's avatar 张冬

角色和成员

parent 48821df5
......@@ -165,21 +165,8 @@ export function projectEnd(projectId) {
method: 'put'
})
}
// 权限菜单树
export function roleMenus(companyType) {
return request({
url: `/sys/menu/roleMenus?companyType=${companyType}`,
method: 'get'
})
}
// 添加角色
export function roleadd(data) {
return request({
url:"sys/role/add",
method: 'post',
data:data
})
}
// 部署线上
export function autodeploy() {
......
import request from '@/utils/request'
// 添加角色
export function roleadd(data) {
return request({
url:"sys/role/add",
method: 'post',
data:data
})
}
// 角色列表删除
export function userdelete(userId) {
return request({
url:`sys/user/delete/${userId}`,
method: 'delete',
})
}
// 角色列表
export function roleList(companyType) {
return request({
url:`sys/role/roleList?companyType=${companyType}`,
method: 'get',
})
}
// 角色编辑
export function useredit(data) {
return request({
url:"sys/user/edit",
method: 'post',
data:data
})
}
// 添加成员
export function useradd(data) {
return request({
url:"sys/user/add",
method: 'post',
data:data
})
}
// 验证手机唯一性
export function checkAccount(account) {
return request({
url:`/sys/user/check/account/${account}`,
method: 'get',
})
}
// 权限菜单树
export function roleMenus(companyType) {
return request({
url: `/sys/menu/roleMenus?companyType=${companyType}`,
method: 'get'
})
}
......@@ -277,6 +277,14 @@ export function contractdetail(projectId) {
method: 'get',
})
}
// 中标公告查看
export function noticeWin(projectId) {
return request({
url: `notice/winNotice/${projectId}`,
method: 'get',
})
}
// 中标候选人公示查看
export function publicitydetail(projectId) {
return request({
......
......@@ -146,7 +146,7 @@ img {
.navs>.active {
border-bottom: 2px solid #2288EE;
color:#2288EE
color: #2288EE
}
.content-head {
......@@ -193,17 +193,23 @@ img {
justify-content: flex-end;
background: #fff;
}
.centerButton {
padding: 20px 20px;
display: flex;
justify-content: center;
background: #fff;
}
.tips{
color:#FF0000
.tips {
color: #FF0000
}
.message .el-input {
width: 250px!important;
.message .el-input {
width: 250px !important;
}
.el-icon-circle-close {
color: white;
}
\ No newline at end of file
......@@ -163,13 +163,12 @@ export default {
})
this.objInput = obj
}
let pageObj = this.pageObj
console.log(pageObj)
this.getauditList(pageObj)
this.getauditList()
},
//
methods: {
async getauditList(pageObj) {
async getauditList() {
let pageObj = this.pageObj
let url = this.url
const { code, data, total } = await getList(pageObj, url)
if (code === 200) {
......@@ -209,7 +208,8 @@ export default {
query() {
let message=this.objInput;
Object.assign(message,this.pageObj)
this.getauditList(message)
console.log(message)
this.list(message)
},
// check选择id
handleSelectionChange(val) {
......
......@@ -15,8 +15,12 @@ import store from "@/store/index";
import VueClipboard from 'vue-clipboard2'
Vue.use(VueClipboard)
// 右边导航栏自动到最底部
import VueChatScroll from 'vue-chat-scroll'
Vue.use(VueChatScroll)
// 按钮6S后可以点击
import preventClick from '@utils/clickStatefrom' // 根据自己的路径
Vue.use(preventClick)
Vue.config.productionTip = false;
Vue.use(VueI18n);
......
......@@ -19,11 +19,12 @@
<el-input v-model.trim="ruleForm.type" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="澄清质询回复截止时间" prop="cutOffTime">
<el-date-picker v-model="ruleForm.cutOffTime" type="datetime" placeholder="选择日期时间">
<el-date-picker v-model="ruleForm.cutOffTime" type="datetime" placeholder="选择日期时间" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="选择投标人" prop="CompanyId">
<el-radio v-model="ruleForm.CompanyId" v-for="(item,index) in CompanyIds" :label="item.companyId">{{item.companyName}}</el-radio>
<el-radio v-model="ruleForm.CompanyId" v-for="(item,index) in CompanyIds" :label="item.companyId" :key="item.companyId">{{item.companyName}}</el-radio>
</el-form-item>
<el-form-item label="澄清质询问题内容" prop="content">
<el-input v-model.trim="ruleForm.content" :rows="2" type="textarea" maxlength="300"></el-input>
......@@ -82,7 +83,6 @@
trigger: 'blur'
}],
cutOffTime: [{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
......
......@@ -70,7 +70,7 @@
<el-button @click="failDetail" v-else>流标信息</el-button>
<div>
<el-button icon="el-icon-refresh" @click="refrsh">刷新</el-button>
<el-button @click="isopenInfo1=true" :disabled="!endbidButton" v-if="!issueTable">下发开标一览表</el-button>
<el-button @click="openInfo1" :disabled="!endbidButton" v-if="!issueTable">下发开标一览表</el-button>
<el-button @click="openInfo" :disabled="!issueTable">查看开标一览表</el-button>
</div>
<el-button @click="back">退出大厅<i class="el-icon-right"></i></el-button>
......
......@@ -30,7 +30,7 @@
</div>
<div class="button">
<el-button @click="upper">上一步</el-button>
<el-button type="primary" @click="next">发布</el-button>
<el-button type="primary" @click="next" >发布</el-button>
</div>
</div>
</div>
......
......@@ -15,7 +15,8 @@
</template>
<script>
import dataTable from '@components/dataTable.vue'
import {roleList} from '@api/purchaser/organization'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
......@@ -25,20 +26,16 @@ export default {
data() {
return {
breads: ['系统管理', '角色权限'],
tableData: [{
name: '部长',
remark: 'XXXXX'
}],
tableData: [],
columns: [{
label: '角色名称',
prop: 'name',
prop: 'roleName',
width: 400
},
{
label: '备注',
prop: 'remark',
width: 400
width: 400
},
{
slot: 'operate'
......@@ -62,7 +59,23 @@ export default {
},
add(){
this.$router.push("/purchaser/organization/jurisdictionSee")
}
},
async getroleList() {
let type=JSON.parse(localStorage.getItem("userInfo")).type
const {
data,
code
} = await roleList(type)
for(let item of data){
if(!item.remark){
item.remark="空"
}
}
this.tableData=data
}
},
created() {
this.getroleList()
}
}
</script>
......
......@@ -28,7 +28,7 @@
<script>
import {
roleMenus,roleadd
} from '@api/common/list'
} from '@api/purchaser/organization'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
......
<template>
<div>
<div class="content">
<dataTable :table-data="tableData" :columns="columns" :page-obj="pageObj" :breads="breads" :checklist="checklist">
<el-button slot="moreButton" type="primary" @click="add">添加新用户</el-button>
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" size="small" @click="delete(scope.row)">删除</el-button>
</template>
</el-table-column>
</dataTable>
<el-dialog :visible.sync="dialogFormVisible" title="添加">
<el-form ref="form" :model="form" :rules="rules">
<el-form-item label="姓名" label-width="50px" prop="name">
<el-input v-model.trim="form.name" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="手机" label-width="50px" prop="phone">
<el-input v-model.trim="form.phone" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="邮箱" label-width="50px" prop="email">
<el-input v-model.trim="form.email" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="密码" label-width="50px" prop="password">
<el-input v-model.trim="form.password" autocomplete="off" show-password placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="角色" label-width="50px" prop="role">
<el-select v-model="form.role" placeholder="请选择">
<el-option v-for="item in roles" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
</div>
</el-dialog>
</div>
</div>
<div>
<div class="content">
<dataTable :columns="columns" :page-obj="pageObj" :breads="breads" :checklist="checklist" ref="table" url="sys/user/member/list">
<el-button slot="moreButton" type="primary" @click="add('form')">添加新用户</el-button>
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" size="small" @click="handdelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</dataTable>
<el-dialog :visible.sync="dialogFormVisible" title="添加">
<el-form ref="form" :model="form" :rules="rules">
<el-form-item label="姓名" label-width="100px" prop="name">
<el-input v-model.trim="form.name" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="手机" label-width="100px" prop="phone">
<el-input v-model.trim="form.phone" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="邮箱" label-width="100px" prop="email">
<el-input v-model.trim="form.email" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="密码" label-width="100px" prop="password">
<el-input v-model.trim="form.password" autocomplete="off" show-password placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="角色" label-width="100px" prop="roleId">
<el-select v-model="form.roleId" placeholder="请选择">
<el-option v-for="item in roles" :key="item.roleId" :label="item.roleName" :value="item.roleId">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="submitData">确 定</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogFormVisible1" title="编辑">
<el-form ref="form" :model="form1" :rules="rules">
<el-form-item label="姓名" label-width="100px" prop="name">
<el-input v-model.trim="form1.name" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="手机" label-width="100px" prop="phone">
<el-input v-model.trim="form1.phone" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="邮箱" label-width="100px" prop="email">
<el-input v-model.trim="form1.email" autocomplete="off" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="角色" label-width="100px" prop="roleId">
<el-select v-model="form1.roleId" placeholder="请选择">
<el-option v-for="item in roles" :key="item.roleId" :label="item.roleName" :value="item.roleId">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false">取 消</el-button>
<el-button type="primary" @click="submitData1">确 定</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import dataTable from '@components/dataTable.vue'
export default {
components: {
dataTable
},
data() {
return {
checklist: [{
title: '姓名',
type: 'input',
model: ' name'
}, {
title: '手机',
type: 'input',
model: 'phone'
}],
breads: ['组织管理', '成员管理'],
tableData: [{
name: '胡彦斌',
phone: '17877666666',
role: '管理员',
data: '2017-10-01 12:00'
}],
columns: [{
label: '姓名',
prop: 'name'
},
{
label: '手机',
prop: 'phone'
},
{
label: '角色',
prop: 'role'
},
{
label: '创建时间',
prop: 'data',
sortable: true
},
{
slot: 'operate'
}
], // 操作列
import {
roleList,
checkAccount,
useradd,
userdelete,
useredit
} from '@api/purchaser/organization'
import dataTable from '@components/dataTable.vue'
export default {
components: {
dataTable
},
data() {
let checkPhone = async (rule, value, callback) => {
if (!value) {
return callback(new Error('手机号不能为空'));
} else {
const reg = /^1[3|4|5|7|8][0-9]\d{8}$/
if (reg.test(value)) {
callback();
} else {
return callback(new Error('请输入正确的手机号'));
}
}
};
return {
checklist: [{
title: '姓名',
type: 'input',
model: 'name'
}, {
title: '手机',
type: 'input',
model: 'phone'
}],
breads: ['组织管理', '成员管理'],
tableData: [],
columns: [{
label: '姓名',
prop: 'name'
},
{
label: '手机',
prop: 'phone'
},
{
label: '角色',
prop: 'roleName'
},
{
label: '创建时间',
prop: 'createTime',
sortable: true
},
{
slot: 'operate'
}
], // 操作列
pageObj: {
size: 10,
total: 1,
currentPage: 1,
sizes: [100, 200, 300],
func: (currentPage) => {
this.pageTurning(currentPage)
}
},
dialogFormVisible: false,
form: {
name: '',
phone: '',
email: '',
password: '',
role: ''
},
roles: [{
value: '1',
label: '管理员'
}, {
value: '2',
label: '经理'
}, {
value: '3',
label: '专员'
}],
rules: {
name: [{
required: true,
message: '请输入',
trigger: 'blur'
}],
phone: [{
required: true,
message: '请输入',
trigger: 'blur'
}],
email: [{
required: true,
message: '请输入',
trigger: 'blur'
}],
password: [{
required: true,
message: '请输入',
trigger: 'blur'
}],
role: [{
required: true,
message: '请选择',
trigger: 'change'
}]
}
}
},
methods: {
edit(row) {
this.form = row
this.dialogFormVisible = true
},
}
}
pageObj: {
size: 10,
currentPage: 1,
func: (currentPage) => {
this.pageTurning(currentPage)
}
},
dialogFormVisible1:false,
dialogFormVisible: false,
form1:{},
form: {
name: '',
phone: '',
email: '',
password: '',
roleId: ''
},
roles: [],
rules: {
name: [{
required: true,
message: '请输入',
trigger: 'blur'
}],
phone: [{
required: true,
validator: checkPhone,
trigger: 'blur'
}],
email: [{
required: true,
message: '请输入电子邮箱',
trigger: 'blur'
},
{
pattern: /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,
message: '请输入正确的邮箱地址'
}
],
password: [{
required: true,
message: '请输入密码',
trigger: 'blur'
},
{
pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/,
message: '密码需由8-16位数字字母组合'
}
],
roleId: [{
required: true,
message: '请选择',
trigger: 'change'
}],
uid:""
}
}
},
methods: {
// 删除
async handdelete(row) {
try {
await this.$confirm("确定要删除么?", '提示', {
type: 'warning'
})
const {
msg,
code
} = await userdelete(row.uid)
if (code == 200) {
this.$message.success(msg)
this.$refs.table.getauditList()
} else {
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
},
// 编辑
edit(row) {
this.form1 = Object.assign({}, row)
this.dialogFormVisible1 = true
this.uid=row.uid
},
// 获取角色列表
async getroleList() {
let type = JSON.parse(localStorage.getItem("userInfo")).type
const {
data,
code
} = await roleList(type)
this.roles = data
},
// 添加新用户
add(form) {
this.form = Object.assign({})
this.dialogFormVisible = true
},
// 提交添加
async submitData() {
try {
const valid = await this.$refs['form'].validate()
if (valid) {
let form = this.form
const {
code,
msg
} = await useradd(form)
if (code === 200) {
this.$message.success(msg)
this.dialogFormVisible = false
this.$refs.table.getauditList()
} else {
this.$message.error(msg)
}
}
} catch (e) {
console.log(e)
}
},
// 提交编辑
async submitData1() {
try {
const valid = await this.$refs['form'].validate()
if (valid) {
let form = this.form1
form.uid=this.uid
const {
code,
msg
} = await useredit(form)
if (code === 200) {
this.$message.success(msg)
this.dialogFormVisible1 = false
this.$refs.table.getauditList()
} else {
this.$message.error(msg)
}
}
} catch (e) {
console.log(e)
}
},
},
created() {
this.getroleList()
}
}
</script>
<style scoped>
......
......@@ -4,20 +4,23 @@
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<div class="message">
<div>
<div class="flex-between">
<div>项目编号:{{projectCode}}</div>
<div>项目名称:{{projectName}}</div>
</div>
<div>
<div v-if="state" class="flex-between">
<div>日期:2018-12-12</div>
<div>招标结果通知书编号:11111</div>
</div>
<div >
<div class="flex-item">
<div v-if="state">
<div class="flex-between">
<div style="margin-right: 20px;">附件:中标通知书.pdf</div>
<el-button size="mini">下载</el-button>
</div>
</div>
<div v-else class="detail1">
没找到招标结果通知书!
</div>
</div>
<div class="centerButton">
<el-button @click="back">返回</el-button>
......@@ -37,10 +40,12 @@ export default {
},
data() {
return {
breads: ['投标管理 ', '我参加的项目', '工作台'],
breads: ['投标管理 ', '我参加的项目', '工作s台'],
navs: ['招标结果通知书'],
projectCode:"",
projectName:""
projectName:"",
detail:"",
state:true
}
},
methods: {
......@@ -55,6 +60,12 @@ export default {
data,
code
} = await bidResultBook(message)
if(code==200){
this.detail=data
}else{
this.state=false
}
}
},
created() {
......@@ -68,6 +79,12 @@ export default {
<style scoped>
.detail1{
text-align: center;
font-size: 20px;
font-weight: bold;
margin-top: 30px;
}
.content>h1{
text-align: center;
margin-top:20px;
......@@ -86,8 +103,7 @@ export default {
margin:0 auto
}
.message>div{
display:flex;
justify-content: space-between;
margin-bottom: 30px;
}
......
......@@ -9,13 +9,18 @@
<div class="flex-arround">
<div>项目编号:{{projectCode}}</div>
<div>项目名称:{{projectName}}</div>
<div>发布时间:2020-08-08 18:12</div>
<div v-if="state">发布时间:2020-08-08 18:12</div>
</div>
<h1>一级标题</h1>
<div class="img">
<img src="@static/images/content.png" alt="">
</div>
<div class="enclosure">相关附件:34567890-678.pdf</div>
<div class='detail' v-if="state">
<h1>一级标题</h1>
<div class="img">
<img src="@static/images/content.png" alt="">
</div>
<div class="enclosure">相关附件:34567890-678.pdf</div>
</div>
<div v-else class="detail1">
未找到该公告详情!
</div>
<div class="centerButton">
<el-button @click="back">返回</el-button>
</div>
......@@ -24,7 +29,7 @@
</template>
<script>
import { winBookdetail} from '@api/supply/bid'
import { noticeWin} from '@api/supply/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
......@@ -34,31 +39,44 @@ export default {
return {
breads: ['投标管理 ', '我参加的项目', '工作台'],
projectCode:"",
projectName:""
projectName:"",
state:true,
detail:""
}
},
methods: {
back(){
this.$router.go(-1)
},
async getwinBookdetail() {
async getnoticeWin() {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await winBookdetail(projectId)
} = await noticeWin(projectId)
if(code==200){
this.detail=data
}else{
this.state=false
}
}
},
created() {
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getwinBookdetail()
this.getnoticeWin()
}
}
</script>
<style scoped>
.detail1{
text-align: center;
font-size: 20px;
font-weight: bold;
margin-top: 30px;
}
.content>h1{
text-align: center;
margin-top:20px;
......
export default {
install (Vue) {
// 防止重复点击
Vue.directive('preventClick', {
inserted (el, binding) {
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true
setTimeout(() => {
el.disabled = false
}, 6000)
}
})
}
})
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment