rpm vm 等模块的界面优化

This commit is contained in:
曹前明 2022-08-03 12:25:27 +08:00
parent f40bee35be
commit 8ef71cf24e
45 changed files with 2541 additions and 1780 deletions

View File

@ -15,5 +15,19 @@ export default {
get: async function(data={}){
return await http.get(this.url, data);
}
}
},
sms_code: {
url: `${config.API_URL}/auth/sms_code/`,
name: "获取验证码",
req: async function(data={}){
return await http.post(this.url, data);
}
},
reset_password: {
url: `${config.API_URL}/auth/reset_password/`,
name: "重置密码",
req: async function(data={}){
return await http.post(this.url, data);
}
},
}

View File

@ -172,6 +172,40 @@ export default {
}
}
},
/*相关方文件 */
rfile: {
list: {
name: "获取",
req: async function (data) {
return await http.get(
`${config.API_URL}/rpm/rfile/`,
data
);
}
},
read:{
name: "详情",
req: async function (id) {
return await http.get(
`${config.API_URL}/rpm/rfile/${id}/`);
}
},
update: {
name: "更新",
req: async function (id, data) {
return await http.put(
`${config.API_URL}/rpm/rfile/${id}/`,
data);
}
},
delete: {
name: "删除",
req: async function (id) {
return await http.delete(
`${config.API_URL}/rpm/rfile/${id}/`);
}
}
},
/*相关方入场项目文件 */
rpjfile: {
list: {

View File

@ -142,7 +142,7 @@ export default {
},
role: {
list: {
url: `${config.API_URL}/system/role`,
url: `${config.API_URL}/system/role/`,
name: "获取角色列表",
req: async function(data){
return await http.get(this.url, data);

View File

@ -0,0 +1,386 @@
<template>
<div style="display:flex;row nowrap">
<!-- <el-tag
v-for="user in userData"
:key="user.id"
>
{{ user.name }}
</el-tag>-->
<el-button
v-if="selectable"
type="primary"
circle
size="mini"
icon="el-icon-plus"
@click="showDialog()"
/>
</div>
<el-dialog
title="选择人员"
width="70%"
v-model="dialoguser"
:before-close="handleClose"
:append-to-body="true"
:close-on-click-modal="false"
>
<el-row :gutter="4">
<el-col :md="multiple?18:24" :sm="24">
<el-card header="人员列表" shadow="never">
<el-row >
<!-- <el-col :md="6" :sm="24">
<el-select v-model="query.type" placeholder="人员类型" @change="handleTypeChange">
<el-option v-for="item in choseTypeOptions" :key="item" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-col> -->
<!-- <el-col :md="8" :sm="24">
<el-cascader style="width:90%" v-model="query.depts" :options="deptdata" clearable placeholder="部门/单位" @change="handleQuery" :show-all-levels="false" :props="{emitPath:false}"/>
</el-col>
<el-col :md="8" :sm="24">
<el-cascader style="width:90%" v-model="query.posts" :options="postdata" clearable placeholder="岗位" @change="handleQuery" :show-all-levels="false" :props="{emitPath:false}"/>
</el-col> -->
<el-col :md="8" :sm="24">
<div style="display:flex">
<el-input
v-model="query.search"
placeholder="姓名/身份证号"
clearable
@keyup.enter="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-col>
</el-row>
<scTable
ref="table"
:apiObj="apiObj"
:params="params"
row-key="id"
@selection-change="selectionChange"
stripe
hideDo
height="400px"
@resetQuery="resetQuery"
@row-click="rowClick"
>
<el-table-column type="selection" width="50" v-if="multiple" :reserve-selection="true"></el-table-column>
<el-table-column
label="#"
type="index"
width="50"
></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="身份证号" prop="id_number"></el-table-column>
<el-table-column label="手机号" prop="phone"></el-table-column>
<el-table-column label="部门/单位" prop="belong_dept">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{
scope.row.belong_dept_.name
}}</span>
</template>
</el-table-column>
<el-table-column label="人员类型" prop="type">
<template #default="scope">
<span>{{userTypeOptions[scope.row.type]}}</span>
</template>
</el-table-column>
</scTable>
</el-card>
</el-col>
<el-col :md="6" :sm="24" v-if="multiple">
<el-card shadow="never">
<template #header>
<div class="card-header">
<span>已选人员</span>
<el-button type="danger" @click="clearChose" size="small">清空</el-button>
</div>
</template>
<el-tag v-for="item, index in selection" v-bind:key="item.id" style="margin-right:4px; margin-top: 4px" size="large">{{index+1}}-{{item.name}}</el-tag>
</el-card>
</el-col>
</el-row>
<!-- <el-row>
<el-col :md="16" :sm="24">
<el-header style="border-bottom: none">
<div class="left-panel">
</div>
<div class="right-panel">
<el-button type="primary" icon="el-icon-plus" @click="addUser" v-if="multiple"
>添加选择</el-button>
</div>
</el-header>
<el-main class="nopadding">
</el-main>
<el-row style="padding-top: 8px">
<el-col :md="16" :sm="24" v-if="multiple">
<span style="font-weight:bold">已选人员:</span>{{username}}
</el-col>
</el-row>
</el-col>
<el-col :md="8" :sm="24">
<el-main class="nopadding">
<el-tabs type="border-card" stretch="true">
<el-tab-pane label="按部门分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="deptdata"
default-expand-all
:filter-node-method="filterNode"
ref="tree"
@node-click="handleNodeClick"
>
</el-tree>
</el-tab-pane>
<el-tab-pane label="按岗位分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterTexts">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="postdata"
default-expand-all
:filter-node-method="filterNodes"
ref="tree"
@node-click="handleNodeClicks"
>
</el-tree>
</el-tab-pane>
</el-tabs>
</el-main>
</el-col>
</el-row> -->
<template #footer v-if="multiple">
<el-button @click="dialoguser = false"
>取消</el-button>
<el-button
v-if="mode != 'show'"
type="primary"
:loading="isSaveing"
@click="confirm()"
>确定</el-button >
</template>
</el-dialog>
</template>
<script>
import { genTree } from "@/utils/verificate";
export default {
name: "userChoose",
components: {},
props: {
value: {
// v-model
type: [String],
default: "",
},
user: {
// v-model
type: [String],
default: "",
},
closable: {
//
type: Boolean,
default: () => {
return true;
},
},
selectable: {
//
type: Boolean,
default: () => {
return true;
},
},
multiple: {
// ,
type: Boolean,
default: true,
},
},
data() {
return {
apiObj: this.$API.hrm.employee.list,
params: {},
query: {},
selection: [],
filterText: "",
filterTexts: "",
deptdata: [],
postdata: [],
username: [],
userData: [],
dialoguser: false,
dataValue: this.value,
choseData: {},
// choseType: 'employee',
// choseTypeOptions: [
// {
// value: 'employee',
// label: ''
// },
// {
// value: 'remployee',
// label: ''
// }
// ]
userTypeOptions :{
'employee': '企业员工',
'remployee': '相关方',
'visitor': '访客'
}
};
},
mounted() {
// this.getDept();
// this.getPost();
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
filterTexts(val) {
this.$refs.tree.filter(val);
},
dataValue(val) {
this.$emit("input", val);
console.log(val);
},
userData(val) {
if (val) {
this.change();
}
},
},
methods: {
showDialog() {
this.dialoguser = true;
// this.$nextTick(function () {
// this.apiObj.map((item) => {
// if (item.id === this.user) {
// this.$refs.table.toggleRowSelection(item, true);
// }
// });
// });
},
//
handleQuery() {
this.$refs.table.queryData(this.query)
},
//
async getDept() {
let res = await this.$API.system.dept.list.req({ page: 0 });
this.deptdata = genTree(res);
},
//
async getPost() {
let res = await this.$API.system.post.list.req({ page: 0 });
this.postdata = genTree(res);
},
// filterNode(value, data) {
// console.log(value);
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
// filterNodes(value, data) {
// console.log(value);
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
// //
// handleNodeClick(data) {
// this.query.depts = data.id
// this.handleQuery()
// },
// //
// handleNodeClicks(data) {
// this.query.posts = data.id
// this.handleQuery()
// },
rowClick(row, column, event){
if(!this.multiple){
this.choseData = {'id': row.id, 'name': row.name}
this.$emit("submit", this.choseData);
this.dialoguser=false
}
},
//
selectionChange(selection) {
this.selection = selection;
},
//Tag
// closeTag(name) {
// this.userData.splice(this.userData.indexOf(name), 1);
// },
// addUser() {
// this.username = [];
// this.userData = [];
// if (!this.multiple && this.selection.length > 1) {
// this.$message.error("");
// return;
// }
// if (!this.selection || this.selection.length === 0) {
// this.msgError("");
// return;
// }
// this.selection.forEach((item) => {
// this.username.push(item.name);
// this.userData.push({ id: item.id, name: item.name });
// });
// console.log(this.userData);
// },
// change() {
// if (this.tags) {
// alert(1);
// this.dataValue = this.userData.map((e) => e.id).join(",");
// console.log(this.dataValue);
// this.$emit("change", this.dataValue);
// }
// },
clearChose() {
this.$refs.table.clearSelection()
},
confirm() {
this.dialoguser = false;
// this.change(); //
// this.dataValue = this.userData.map((e) => e.id).join(",");
this.$emit("submit", this.selection);
},
//
// permission() {
// this.dialog.permission = true;
// this.$nextTick(() => {
// this.$refs.permissionDialog.open();
// });
// },
resetQuery() {
this.query = {};
},
},
};
</script>
<style scoped>
.card-header{
display: flex;
justify-content: space-between;
align-items: center;
}
</style>

View File

@ -0,0 +1,390 @@
<template>
<div style="display:flex;row nowrap">
<!-- <el-tag
v-for="user in userData"
:key="user.id"
>
{{ user.name }}
</el-tag>-->
<el-button
v-if="selectable"
type="primary"
circle
size="mini"
icon="el-icon-plus"
@click="showDialog()"
/>
</div>
<el-dialog
title="选择账号"
width="70%"
v-model="dialoguser"
:before-close="handleClose"
:append-to-body="true"
:close-on-click-modal="false"
>
<el-row :gutter="4">
<el-col :md="multiple?18:24" :sm="24">
<el-card header="账号列表" shadow="never">
<el-row >
<!-- <el-col :md="6" :sm="24">
<el-select v-model="query.type" placeholder="人员类型" @change="handleTypeChange">
<el-option v-for="item in choseTypeOptions" :key="item" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-col> -->
<el-col :md="8" :sm="24">
<el-cascader style="width:90%" v-model="query.depts" :options="deptdata" clearable placeholder="部门/单位" @change="handleQuery" :show-all-levels="false" :props="{emitPath:false}"/>
</el-col>
<el-col :md="8" :sm="24">
<el-cascader style="width:90%" v-model="query.posts" :options="postdata" clearable placeholder="岗位" @change="handleQuery" :show-all-levels="false" :props="{emitPath:false}"/>
</el-col>
<el-col :md="8" :sm="24">
<div style="display:flex">
<el-input
v-model="query.search"
placeholder="账户/姓名"
clearable
@keyup.enter="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-col>
</el-row>
<scTable
ref="table"
:apiObj="apiObj"
:params="params"
row-key="id"
@selection-change="selectionChange"
stripe
hideDo
height="400px"
@resetQuery="resetQuery"
@row-click="rowClick"
>
<el-table-column type="selection" width="50" v-if="multiple" :reserve-selection="true"></el-table-column>
<el-table-column
label="#"
type="index"
width="50"
></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="手机号" prop="phone"></el-table-column>
<el-table-column label="部门" prop="belong_dept">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{
scope.row.belong_dept_.name
}}</span>
</template>
</el-table-column>
<el-table-column label="账号类型" prop="type">
<template #default="scope">
<span>{{userTypeOptions[scope.row.type]}}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
></el-table-column>
</scTable>
</el-card>
</el-col>
<el-col :md="6" :sm="24" v-if="multiple">
<el-card shadow="never">
<template #header>
<div class="card-header">
<span>已选人员</span>
<el-button type="danger" @click="clearChose" size="small">清空</el-button>
</div>
</template>
<el-tag v-for="item, index in selection" v-bind:key="item.id" style="margin-right:4px; margin-top: 4px" size="large">{{index+1}}-{{item.name}}</el-tag>
</el-card>
</el-col>
</el-row>
<!-- <el-row>
<el-col :md="16" :sm="24">
<el-header style="border-bottom: none">
<div class="left-panel">
</div>
<div class="right-panel">
<el-button type="primary" icon="el-icon-plus" @click="addUser" v-if="multiple"
>添加选择</el-button>
</div>
</el-header>
<el-main class="nopadding">
</el-main>
<el-row style="padding-top: 8px">
<el-col :md="16" :sm="24" v-if="multiple">
<span style="font-weight:bold">已选人员:</span>{{username}}
</el-col>
</el-row>
</el-col>
<el-col :md="8" :sm="24">
<el-main class="nopadding">
<el-tabs type="border-card" stretch="true">
<el-tab-pane label="按部门分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="deptdata"
default-expand-all
:filter-node-method="filterNode"
ref="tree"
@node-click="handleNodeClick"
>
</el-tree>
</el-tab-pane>
<el-tab-pane label="按岗位分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterTexts">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="postdata"
default-expand-all
:filter-node-method="filterNodes"
ref="tree"
@node-click="handleNodeClicks"
>
</el-tree>
</el-tab-pane>
</el-tabs>
</el-main>
</el-col>
</el-row> -->
<template #footer v-if="multiple">
<el-button @click="dialoguser = false"
>取消</el-button>
<el-button
v-if="mode != 'show'"
type="primary"
:loading="isSaveing"
@click="confirm()"
>确定</el-button >
</template>
</el-dialog>
</template>
<script>
import { genTree } from "@/utils/verificate";
export default {
name: "userChoose",
components: {},
props: {
value: {
// v-model
type: [String],
default: "",
},
user: {
// v-model
type: [String],
default: "",
},
closable: {
//
type: Boolean,
default: () => {
return true;
},
},
selectable: {
//
type: Boolean,
default: () => {
return true;
},
},
multiple: {
// ,
type: Boolean,
default: true,
},
},
data() {
return {
apiObj: this.$API.system.user.list,
params: {},
query: {},
selection: [],
filterText: "",
filterTexts: "",
deptdata: [],
postdata: [],
username: [],
userData: [],
dialoguser: false,
dataValue: this.value,
choseData: {},
// choseType: 'employee',
// choseTypeOptions: [
// {
// value: 'employee',
// label: ''
// },
// {
// value: 'remployee',
// label: ''
// }
// ]
userTypeOptions :{
'employee': '企业员工',
'remployee': '相关方',
'visitor': '访客'
}
};
},
mounted() {
this.getDept();
this.getPost();
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
filterTexts(val) {
this.$refs.tree.filter(val);
},
dataValue(val) {
this.$emit("input", val);
console.log(val);
},
userData(val) {
if (val) {
this.change();
}
},
},
methods: {
showDialog() {
this.dialoguser = true;
// this.$nextTick(function () {
// this.apiObj.map((item) => {
// if (item.id === this.user) {
// this.$refs.table.toggleRowSelection(item, true);
// }
// });
// });
},
//
handleQuery() {
this.$refs.table.queryData(this.query)
},
//
async getDept() {
let res = await this.$API.system.dept.list.req({ page: 0 });
this.deptdata = genTree(res);
},
//
async getPost() {
let res = await this.$API.system.post.list.req({ page: 0 });
this.postdata = genTree(res);
},
// filterNode(value, data) {
// console.log(value);
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
// filterNodes(value, data) {
// console.log(value);
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
// //
// handleNodeClick(data) {
// this.query.depts = data.id
// this.handleQuery()
// },
// //
// handleNodeClicks(data) {
// this.query.posts = data.id
// this.handleQuery()
// },
rowClick(row, column, event){
if(!this.multiple){
this.choseData = {'id': row.id, 'name': row.name}
this.$emit("submit", this.choseData);
this.dialoguser=false
}
},
//
selectionChange(selection) {
this.selection = selection;
},
//Tag
// closeTag(name) {
// this.userData.splice(this.userData.indexOf(name), 1);
// },
// addUser() {
// this.username = [];
// this.userData = [];
// if (!this.multiple && this.selection.length > 1) {
// this.$message.error("");
// return;
// }
// if (!this.selection || this.selection.length === 0) {
// this.msgError("");
// return;
// }
// this.selection.forEach((item) => {
// this.username.push(item.name);
// this.userData.push({ id: item.id, name: item.name });
// });
// console.log(this.userData);
// },
// change() {
// if (this.tags) {
// alert(1);
// this.dataValue = this.userData.map((e) => e.id).join(",");
// console.log(this.dataValue);
// this.$emit("change", this.dataValue);
// }
// },
clearChose() {
this.$refs.table.clearSelection()
},
confirm() {
this.dialoguser = false;
// this.change(); //
// this.dataValue = this.userData.map((e) => e.id).join(",");
this.$emit("submit", this.selection);
},
//
// permission() {
// this.dialog.permission = true;
// this.$nextTick(() => {
// this.$refs.permissionDialog.open();
// });
// },
resetQuery() {
this.query = {};
},
},
};
</script>
<style scoped>
.card-header{
display: flex;
justify-content: space-between;
align-items: center;
}
</style>

View File

@ -187,7 +187,7 @@
<el-card header="作业人员" style="margin-top:8px" shadow="hover">
<scTable
ref="workerTable"
:data="apiworkerObj"
:data="workerData"
row-key="id"
hidePagination
stripe
@ -232,7 +232,7 @@
<el-card header="气体检测记录" style="margin-top: 8px" shadow="hover">
<scTable
ref="gasTable"
:data="apigasObj"
:data="gasData"
row-key="id"
hidePagination
stripe
@ -337,10 +337,10 @@
{value: 40, label: "电工"},
],
certificatesOptions: [],
apiworkerObj: [],
workerData: [],
workerdialog: false,
gasdialog: false,
apigasObj: [],
gasData: [],
is_ok_: {
true: "正常",
false: "不正常",
@ -413,15 +413,15 @@
// });
// },
//
getworkerList(id) {
this.$API.opm.worker.list.req({opl: id, page: 0}).then((res) => {
this.apiworkerObj = res;
getworkerList() {
this.$API.opm.worker.list.req({opl: this.oplId, page: 0}).then((res) => {
this.workerData = res;
});
},
//
getgasList(id) {
this.$API.opm.gas.list.req({opl: id, page: 0}).then((res) => {
this.apigasObj = res;
getgasList() {
this.$API.opm.gas.list.req({opl: this.oplId, page: 0}).then((res) => {
this.gasData = res;
});
},
},

View File

@ -232,15 +232,15 @@ const routes = [
"component": "wf/ccwork"
},
{
"name": "visitdetail",
"path": "/wf/visitdetail",
"name": "ticketdetail",
"path": "/wf/ticketdetail",
"meta": {
"title": "工单详情",
"icon": "el-icon-menu",
"hidden": true,
"perms": ["allwork"]
},
"component": "wf/visitdetail"
"component": "wf/ticketdetail"
},
@ -413,7 +413,7 @@ const routes = [
"name": "remployee",
"path": "/rpm/remployee",
"meta": {
"title": "相关方人员",
"title": "我的人员",
"icon": "el-icon-user",
"perms": ["remployee"]
},
@ -423,7 +423,7 @@ const routes = [
"name": "rcertificate",
"path": "/rpm/rcertificate",
"meta": {
"title": "人员证书",
"title": "我的证书",
"icon": "el-icon-postcard",
"perms": ["rcertificate"]
},
@ -433,7 +433,7 @@ const routes = [
"name": "rfile",
"path": "/rpm/rfile",
"meta": {
"title": "资料",
"title": "我的资料",
"icon": "el-icon-shopping-bag",
"perms": ["rfile"]
},
@ -487,9 +487,9 @@ const routes = [
"name": "visitor",
"path": "/vm/visitor",
"meta": {
"title": "来访人员",
"title": "我的访客",
"icon": "el-icon-user",
"perms": ["visitor"]
"perms": ["visit"]
},
"component": "vm/visitor"
},{
@ -507,7 +507,7 @@ const routes = [
"name": "vistoradd",
"path": "/vm/vistoradd",
"meta": {
"title": "来访项目相关信息",
"title": "项目信息",
"icon": "el-icon-menu",
"hidden": true,
"perms": ["visit"]
@ -594,7 +594,7 @@ const routes = [
"name": "employee",
"path": "/hrm/employee",
"meta": {
"title": "企业员工",
"title": "人员信息",
"icon": "el-icon-user",
"perms": ["employee"]
},

View File

@ -5,7 +5,7 @@ import tool from '@/utils/tool'
export default {
successCode: 200, //请求完成代码
pageSize: 20, //表格每一页条数
pageSizes: [10, 20, 30, 40, 50], //表格可设置的一页条数
pageSizes: [1, 10, 20, 30, 40, 50], //表格可设置的一页条数
paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper"
parseData: function (res) { //数据分析
return {

8
src/ehs.js Normal file
View File

@ -0,0 +1,8 @@
import ehsUserSelect from './components/ehsSelect/userselect'
import ehsEpSelect from './components/ehsSelect/epselect'
export default {
install(app) {
app.component('ehsUserSelect', ehsUserSelect);
app.component('ehsEpSelect', ehsEpSelect);
}
}

View File

@ -1,327 +0,0 @@
<template>
<div style="display:flex;row nowrap">
<!-- <el-tag
v-for="user in userData"
:key="user.id"
>
{{ user.name }}
</el-tag>-->
<el-button
v-if="selectable"
type="primary"
circle
size="mini"
icon="el-icon-plus"
@click="showDialog()"
/>
</div>
<el-dialog
title="选择人员"
width="80%"
height="100px"
v-model="dialoguser"
:before-close="handleClose"
:append-to-body="true"
:close-on-click-modal="false"
>
<el-row>
<el-col :md="8" :sm="24">
<el-main class="nopadding">
<el-tabs type="border-card" stretch="true">
<el-tab-pane label="按部门分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterText">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="deptdata"
default-expand-all
:filter-node-method="filterNode"
ref="tree"
@node-click="handleNodeClick"
>
</el-tree>
</el-tab-pane>
<el-tab-pane label="按岗位分类">
<el-input placeholder="输入关键字进行过滤" v-model="filterTexts">
</el-input>
<el-tree
class="filter-tree"
style="padding-top: 15px"
:data="postdata"
default-expand-all
:filter-node-method="filterNodes"
ref="tree"
@node-click="handleNodeClicks"
>
</el-tree>
</el-tab-pane>
</el-tabs>
</el-main>
</el-col>
<el-col :md="16" :sm="24">
<el-header style="border-bottom: none">
<div class="left-panel">
<el-input
v-model="search.keyword"
placeholder="姓名"
clearable
@click="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
<div class="right-panel">
<el-button type="primary" icon="el-icon-plus" @click="addUser"
>添加选择</el-button
>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:data="apiObj"
row-key="id"
@selection-change="selectionChange"
stripe
hideDo
@resetQuery="resetQuery"
>
<el-table-column type="selection" width="50"></el-table-column>
<el-table-column
label="#"
type="index"
width="50"
></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="手机号" prop="phone"></el-table-column>
<el-table-column label="部门" prop="belong_dept">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{
scope.row.belong_dept_.name
}}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
></el-table-column>
</scTable>
</el-main>
<el-row style="padding-top: 8px">
<el-col :md="16" :sm="24">
<span style="font-weight:bold">已选人员:</span>{{username}}
</el-col>
<el-col :md="8" :sm="24" style="text-align:right">
<el-button @click="visible = false"
> </el-button>
<el-button
v-if="mode != 'show'"
type="primary"
:loading="isSaveing"
@click="submitfrom()"
> </el-button >
</el-col>
</el-row>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { genTree } from "@/utils/verificate";
export default {
name: "employee",
components: {},
props: {
value: {
// v-model
type: [String],
default: "",
},
user: {
// v-model
type: [String],
default: "",
},
closable: {
//
type: Boolean,
default: () => {
return true;
},
},
selectable: {
//
type: Boolean,
default: () => {
return true;
},
},
multiple: {
// ,
type: Boolean,
default: true,
},
},
data() {
return {
apiObj: [],
query: {},
selection: [],
search: {
keyword: null,
},
filterText: "",
filterTexts: "",
deptdata: [],
postdata: [],
username: [],
userData: [],
dialoguser: false,
dataValue: this.value,
};
},
mounted() {
this.getUser();
this.getDept();
this.getPost();
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
filterTexts(val) {
this.$refs.tree.filter(val);
},
dataValue(val) {
this.$emit("input", val);
console.log(val);
},
userData(val) {
if (val) {
this.change();
}
},
},
methods: {
showDialog() {
this.dialoguser = true;
this.$nextTick(function () {
this.apiObj.map((item) => {
if (item.id === this.user) {
this.$refs.table.toggleRowSelection(item, true);
}
});
});
},
//
getUser() {
this.$API.system.user.list.req({ page: 0 }).then((res) => {
this.apiObj = res;
});
},
handleQuery() {
this.$API.system.user.list
.req({ name: this.search.keyword, page: 0 })
.then((res) => {
this.apiObj = res;
});
},
//
async getDept() {
let res = await this.$API.system.dept.list.req({ page: 0 });
this.deptdata = genTree(res);
},
//
async getPost() {
let res = await this.$API.system.post.list.req({ page: 0 });
this.postdata = genTree(res);
},
filterNode(value, data) {
console.log(value);
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
filterNodes(value, data) {
console.log(value);
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
//
handleNodeClick(data) {
this.$API.system.user.list
.req({ belong_dept: data.id, page: 0 })
.then((res) => {
this.apiObj = res;
});
},
//
handleNodeClicks(data) {
this.$API.system.user.list.req({ post: data.id, page: 0 }).then((res) => {
this.apiObj = res;
});
},
//
selectionChange(selection) {
this.selection = selection;
},
//Tag
closeTag(name) {
this.userData.splice(this.userData.indexOf(name), 1);
},
addUser() {
this.username = [];
this.userData = [];
if (!this.multiple && this.selection.length > 1) {
this.$message.error("对应的人员只允许选择一人!");
return;
}
if (!this.selection || this.selection.length === 0) {
this.msgError("请选择至少一个人员!");
return;
}
this.selection.forEach((item) => {
this.username.push(item.name);
this.userData.push({ id: item.id, name: item.name });
});
console.log(this.userData);
},
change() {
if (this.tags) {
alert(1);
this.dataValue = this.userData.map((e) => e.id).join(",");
console.log(this.dataValue);
this.$emit("change", this.dataValue);
}
},
submitfrom() {
this.dialoguser = false;
this.change(); //
this.dataValue = this.userData.map((e) => e.id).join(",");
this.$emit("submit", this.dataValue);
},
//
permission() {
this.dialog.permission = true;
this.$nextTick(() => {
this.$refs.permissionDialog.open();
});
},
resetQuery() {
this.query = {};
},
},
};
</script>

View File

@ -2,6 +2,7 @@ import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import 'element-plus/theme-chalk/display.css'
import scui from './scui'
import ehsui from './ehs'
import i18n from './locales'
import router from './router'
import store from './store'
@ -16,6 +17,7 @@ app.use(router);
app.use(ElementPlus);
app.use(i18n);
app.use(scui);
app.use(ehsui);
//挂载app
app.mount('#app');

View File

@ -41,14 +41,14 @@ axios.interceptors.response.use(
message: "账户密码错误或已禁用"
});
}else{
ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
type: 'error',
closeOnClickModal: false,
center: true,
confirmButtonText: '重新登录'
}).then(() => {
// ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
// type: 'error',
// closeOnClickModal: false,
// center: true,
// confirmButtonText: '重新登录'
// }).then(() => {
router.replace({path: '/login'});
}).catch(() => {})
// }).catch(() => {})
}
} else {

View File

@ -39,7 +39,6 @@
<el-select
v-model="form.obj_cate"
style="width: 100%"
@change="cateChange"
>
<el-option
v-for="item in cateOptions"
@ -50,7 +49,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-show="postshow">
<el-col :md="12" :sm="24" v-show="form.obj_cate=='post'">
<el-form-item label="关联岗位" prop="post">
<el-select v-model="form.post" style="width: 100%">
<el-option
@ -62,19 +61,15 @@
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-show="peopleshow">
<el-col :md="12" :sm="24" v-show="form.obj_cate=='people'">
<el-form-item label="关联人员" prop="employee">
<el-select v-model="form.employee" style="width: 100%">
<el-option
v-for="item in employeeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<span style="display:flex">
<el-input readonly v-model="form.employee_name"></el-input>
<ehsEpSelect :multiple="false" @submit="getEmployee"/>
</span>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-show="orgshow">
<el-col :md="12" :sm="24" v-show="form.obj_cate=='org'">
<el-form-item label="关联部门" prop="dept">
<el-cascader
v-model="form.dept"
@ -108,7 +103,14 @@
></el-input-number>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="排序">
<el-input-number
v-model="form.sort"
controls-position="right"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
@ -139,7 +141,7 @@ export default {
},
cateOptions: [
{ id: "post", name: "岗位" },
{ id: "org", name: "单位" },
{ id: "org", name: "部门/单位" },
{ id: "people", name: "人员" },
],
@ -172,7 +174,7 @@ export default {
mounted() {
this.getArea();
this.getPost();
this.getEmployee();
// this.getEmployee();
this.getDept();
},
methods: {
@ -188,12 +190,16 @@ export default {
this.postOptions = res;
});
},
getEmployee(data){
this.form.employee=data.id;
this.form.employee_name=data.name
},
//
getEmployee() {
this.$API.hrm.employee.list.req({ page: 0 }).then((res) => {
this.employeeOptions = res;
});
},
// getEmployee() {
// this.$API.hrm.employee.list.req({ page: 0 }).then((res) => {
// this.employeeOptions = res;
// });
// },
//
getDept() {
this.$API.system.dept.list.req({ page: 0 }).then((res) => {
@ -202,22 +208,22 @@ export default {
},
//
cateChange() {
if (this.form.obj_cate == 'post') {
// cateChange() {
// if (this.form.obj_cate == 'post') {
this.postshow=true;
this.peopleshow=false;
this.orgshow=false;
} else if (this.form.obj_cate == "people") {
this.postshow=false;
this.peopleshow=true;
this.orgshow=false;
} else {
this.postshow=false;
this.peopleshow=false;
this.orgshow=true;
}
},
// this.postshow=true;
// this.peopleshow=false;
// this.orgshow=false;
// } else if (this.form.obj_cate == "people") {
// this.postshow=false;
// this.peopleshow=true;
// this.orgshow=false;
// } else {
// this.postshow=false;
// this.peopleshow=false;
// this.orgshow=true;
// }
// },
//
open(mode) {
this.mode = mode;
@ -242,6 +248,7 @@ export default {
.then((res) => {
this.isSaveing = false;
this.visible = false;
console.log('x')
this.$emit("success", this.form, this.mode);
this.$message.success("操作成功");
return res;

View File

@ -16,7 +16,7 @@
<div class="right-panel-search">
<el-input
v-model="search.keyword"
placeholder="姓名/手机号"
placeholder="编号/名称"
clearable
@click="handleQuery"
></el-input>
@ -36,6 +36,8 @@
stripe
@resetQuery="resetQuery"
@row-click="rowClick"
hidePagination
hideDo
>
<el-table-column
label="序号"
@ -53,7 +55,6 @@
label="区域名称"
prop="name"
min-width="150"
fixed="left"
></el-table-column>
<el-table-column label="区域类型" min-width="100">
<template #default="scope">{{
@ -105,7 +106,7 @@
></el-table-column>
<el-table-column
label="所属部门"
prop="create_time"
prop="belong_dept_name"
min-width="180"
></el-table-column>
<el-table-column
@ -164,7 +165,7 @@
@click="handleFormaccess('add')"
></el-button>
</div>
<div class="right-panel">
<!-- <div class="right-panel">
<div class="right-panel-search">
<el-input
v-model="search.keyword"
@ -178,15 +179,17 @@
@click="handleQuery"
></el-button>
</div>
</div>
</div> -->
</el-header>
<el-main class="nopadding">
<scTable
ref="accesstable"
:data="apiaccessObj"
:apiObj="apiObj2"
row-key="id"
stripe
@resetQuery="resetQuery"
hidePagination
hideDo
>
<el-table-column
label="序号"
@ -212,6 +215,17 @@
cate_[scope.row.obj_cate]
}}</template></el-table-column
>
<el-table-column
label="对象"
prop="post_name"
width="160"
>
<template #default="scope">
{{scope.row.post_name}}
{{scope.row.dept_name}}
{{scope.row.employee_name}}
</template>
</el-table-column>
<el-table-column
label="最短停留时间(分)"
prop="stay_minute_min"
@ -222,26 +236,6 @@
prop="stay_minute_max"
width="160"
></el-table-column>
<el-table-column
label="关联区域"
prop="area"
width="160"
></el-table-column>
<el-table-column
label="关联岗位"
prop="post_name"
width="160"
></el-table-column>
<el-table-column
label="关联部门"
prop="dept_name"
width="160"
></el-table-column>
<el-table-column
label="关联人员"
prop="employee_name"
width="160"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
@ -328,14 +322,15 @@ export default {
20: "一般区域",
30: "重点区域",
},
apiaccessObj: [],
apiObj2: null,
query2: {},
areaId: null,
areaName: "",
cate_: { post: "岗位", org: "单位", people: "人员" },
};
},
mounted() {
this.getAccessList();
// this.getAccessList();
},
methods: {
///
@ -362,10 +357,11 @@ export default {
},
//
rowClick(row) {
this.$API.am.access.list.req({ area: row.id, page: 0 }).then((res) => {
this.apiaccessObj = res;
});
this.area = row.id;
if(this.apiObj2 == null){
this.apiObj2 = this.$API.am.access.list
}
this.$refs.accesstable.queryData({area: row.id})
},
//
handleRail(row) {
@ -374,14 +370,16 @@ export default {
this.dialog.saveRail = true;
},
//
async handleDel(row) {
await this.$API.am.area.delete.req(row.id).then((res) => {
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
handleDel(row) {
this.$API.am.area.delete.req(row.id).then((res) => {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
});
},
handleDelaccess(row) {
this.$API.am.access.delete.req(row.id).then(() => {
this.$refs.accesstable.refresh();
this.$message.success("删除成功");
});
},
//
@ -461,11 +459,7 @@ export default {
},
//
handleSaveSuccessAccess(data, mode) {
if (mode == "add") {
this.$refs.accesstable.refresh();
} else if (mode == "edit") {
this.$refs.accesstable.refresh();
}
this.$refs.accesstable.refresh()
},
resetQuery() {

View File

@ -62,6 +62,7 @@
:options="group"
:props="groupsProps"
clearable
:show-all-levels="false"
style="width: 100%"
>
</el-cascader>
@ -69,14 +70,10 @@
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="区域负责人">
<el-select v-model="form.manager" placeholder="选择区域负责人">
<el-option
v-for="item in useroptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<span style="display:flex">
<el-input readonly v-model="form.manager_name"></el-input>
<ehsUserSelect :multiple="false" @submit="getManager"/>
</span>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
@ -194,7 +191,7 @@
},
mounted() {
this.getGroup();
this.getUser();
// this.getUser();
},
methods: {
//
@ -203,10 +200,14 @@
this.group = genTree(res);
},
//
getUser() {
this.$API.system.user.list.req({page: 0}).then((res) => {
this.useroptions = res;
});
// getUser() {
// this.$API.system.user.list.req({page: 0}).then((res) => {
// this.useroptions = res;
// });
// },
getManager(data){
this.form.manager=data.id;
this.form.manager_name=data.name
},
//
open(mode) {

View File

@ -69,7 +69,7 @@ export default {
form: {
algo: "",
vchannels: [],
always_on: false,
always_on: true,
},
//
rules: {

View File

@ -23,6 +23,7 @@
highlightCurrentRow
@row-click="rowClick"
:hidePagination="true"
hideDo
>
<el-table-column
label="#"
@ -108,6 +109,7 @@
row-key="id"
stripe
:hidePagination="true"
hideDo
>
<el-table-column label="#" type="index" fixed="left" width="50"></el-table-column>
<el-table-column label="事件名称" prop="event_cate_name" fixed="left" width="100">
@ -169,14 +171,15 @@
<el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template>
</el-table-column>
<el-table-column label="微信通知" prop="wechat_enable" width="80">
<el-table-column label="排序" prop="sort"/>
<!-- <el-table-column label="微信通知" prop="wechat_enable" width="80">
<template #default="scope">
<el-icon v-if="scope.row.wechat_enable" color="green"
><CircleCheckFilled
/></el-icon>
<el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-button
@ -256,7 +259,7 @@ export default {
};
},
mounted() {
this.apiObj2 = this.$API.ecm.notify_setting.list;
// this.apiObj2 = this.$API.ecm.notify_setting.list;
},
methods: {
rowClick(row) {
@ -265,7 +268,7 @@ export default {
};
this.apiObj2 = this.$API.ecm.notify_setting.list;
this.chosen_cate = row.id;
this.$refs.table2.reload(params);
this.$refs.table2.queryData(params);
},
//
add() {
@ -306,9 +309,11 @@ export default {
//
this.$refs.table.refresh();
this.dialog.save = false;
},
handleSaveSuccess2() {
this.$refs.table2.refresh();
this.dialog2.save = false;
},
},
};

View File

@ -53,14 +53,12 @@
</el-col>
<el-col :md="12" :sm="24" v-show="usershow">
<el-form-item label="人员" prop="user">
<el-select v-model="form.user" style="width: 100%">
<el-option
v-for="item in user_options"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-input
v-model="form.user_name"
disabled
style="width:200px"
></el-input>
<ehsUserSelect :multiple="false" @submit="getUser"/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" v-show="variableshow">
@ -232,7 +230,7 @@ export default {
},
mounted() {
this.getPostOptions();
this.getUserOptions();
// this.getUserOptions();
this.getEventCate();
},
methods: {
@ -275,11 +273,10 @@ export default {
this.post_options = res;
});
},
//
getUserOptions() {
this.$API.system.user.list.req({ page: 0 }).then((res) => {
this.user_options = res;
});
getUser(data) {
//
this.form.user=data.id;
this.form.user_name=data.name
},
//
async submit() {

View File

@ -31,7 +31,7 @@
<el-main class="nopadding">
<scTable
ref="table"
:data="apiObj"
:apiObj="apiObj"
row-key="id"
stripe
@ -40,7 +40,7 @@
<el-table-column label="#" fixed="left" type="index" width="50"></el-table-column>
<el-table-column label="人员" prop="employee_name"></el-table-column>
<el-table-column label="证书名称" fixed="left" prop="name" width="150">
<el-table-column label="证书名称" fixed="left" prop="name">
<template #default="scope">
<el-link
v-if="scope.row.file"
@ -52,12 +52,12 @@
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="证书编号" prop="number" width="200"> </el-table-column>
<el-table-column label="证书类型" prop="type" width="200"><template #default="scope">{{type_[scope.row.type]}} </template></el-table-column>
<el-table-column label="发证日期" prop="issue_date" width="180"></el-table-column>
<el-table-column label="有效期" prop="expiration_date" width="200"> </el-table-column>
<el-table-column label="下一次复审日期" prop="review_date" width="180"></el-table-column>
<el-table-column label="操作" fixed="right" align="left" width="170">
<el-table-column label="证书编号" prop="number"> </el-table-column>
<el-table-column label="证书类型" prop="type"><template #default="scope">{{type_[scope.row.type]}} </template></el-table-column>
<el-table-column label="发证日期" prop="issue_date"></el-table-column>
<el-table-column label="有效期" prop="expiration_date"> </el-table-column>
<el-table-column label="下一次复审日期" prop="review_date"></el-table-column>
<el-table-column label="操作" fixed="right" align="left">
<template #default="scope">
<el-button-group>
<el-button
@ -76,24 +76,22 @@
</el-main>
</el-container>
<sc-dialog v-model="dialogcart" draggable title="人员证书">
<el-dialog v-model="dialogcart" draggable title="人员证书">
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
:disabled="mode === 'show'"
label-width="120px"
label-width="140px"
>
<el-row>
<el-col :md="24" :sm="24">
<el-form-item label="所属人员" prop="employee">
<el-input
v-model="form.employee_name"
disabled
style="width:200px"
></el-input>
<ehsEpSelect :multiple="false" @submit="getEmployee" v-if="mode=='add'"/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="证书名称" prop="name">
<el-input
v-model="form.name"
@ -101,8 +99,6 @@
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="证书编号" prop="number">
<el-input
v-model="form.number"
@ -110,8 +106,6 @@
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="证书类型" prop="type">
<el-select v-model="form.type" placeholder="选择证书类型">
<el-option
@ -122,9 +116,7 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="发证日期">
<el-form-item label="发证日期" prop="issue_date">
<el-date-picker
v-model="form.issue_date"
type="date"
@ -132,10 +124,7 @@
placeholder="选择发证日期"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="有效期">
<el-form-item label="有效期" prop="expiration_date">
<el-date-picker
v-model="form.expiration_date"
type="date"
@ -143,9 +132,7 @@
placeholder="选择有效期"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="下一次复审日期">
<el-form-item label="下一次复审日期" prop="review_date">
<el-date-picker
v-model="form.review_date"
type="date"
@ -153,8 +140,6 @@
placeholder="选择下一次复审日期"
/>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="上传证书">
<sc-upload-file
v-model="form.file"
@ -166,14 +151,12 @@
>
</sc-upload-file>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="dialogcart = false"> </el-button>
<el-button type="primary" @click="submitcert"> </el-button>
</template>
</sc-dialog>
</el-dialog>
</template>
<script>
const defaultform=
@ -187,6 +170,7 @@ export default {
components: {},
data() {
return {
apiObj: this.$API.hrm.certificate.list,
form:defaultform,
typeoptions: [
{ id: 10, name: "特种作业证书" },
@ -199,25 +183,37 @@ export default {
30: "安全管理人员证书",
},
dialogcart: false,
apiObj:[],
query: {},
selection: [],
search: {
keyword: null,
},
mode: 'add',
rules: {
employee: [{ required: true, message: "请输入" }],
name: [{ required: true, message: "请输入" }],
number: [{ required: true, message: "请输入" }],
type: [{ required: true, message: "请输入" }],
issue_date: [{ required: true, message: "请输入" }],
expiration_date: [{ required: true, message: "请输入" }],
review_date: [{ required: true, message: "请输入" }]
},
};
},
mounted() {
this.getcertificatelist();
// this.getcertificatelist();
},
methods: {
handleForm(type, row) {
if (type === "add") {
handleForm(mode, row) {
this.mode = mode;
if (mode === "add") {
// this.form = Object.assign({}, defaultform);
this.dialogcart = true;
this.form = Object.assign({}, defaultform);
this.$nextTick(()=>{
this.form = Object.assign({}, defaultform);
})
} else {
this.dialogcart = true;
@ -225,17 +221,22 @@ export default {
}
},
getEmployee(data) {
//
this.form.employee=data.id;
this.form.employee_name=data.name
},
handleQuery(){
this.$refs.table.queryData(this.query)
},
//
getcertificatelist() {
this.$API.hrm.certificate.list
.req({ employee:this.$route.query.id, page: 0 })
.then((res) => {
this.apiObj = res;
});
},
// getcertificatelist() {
// this.$API.hrm.certificate.list
// .req({ employee:this.$route.query.id, page: 0 })
// .then((res) => {
// this.apiObj = res;
// });
// },
//
submitcert() {
this.form.employee = this.$route.query.id;

View File

@ -39,14 +39,14 @@
>
<el-table-column label="#" fixed="left" type="index" width="50"></el-table-column>
<el-table-column label="姓名" fixed="left" prop="employee_name" width="150"></el-table-column>
<el-table-column label="证书名称" fixed="left" prop="name" width="150"></el-table-column>
<el-table-column label="证书编号" prop="number" width="200"> </el-table-column>
<el-table-column label="证书类型" prop="type" width="200"><template #default="scope">{{type_[scope.row.type]}} </template></el-table-column>
<el-table-column label="发证日期" prop="issue_date" width="180"></el-table-column>
<el-table-column label="有效期" prop="expiration_date" width="200"> </el-table-column>
<el-table-column label="下一次复审日期" prop="review_date" width="180"></el-table-column>
<el-table-column label="证书文件" prop="file" width="180"></el-table-column>
<el-table-column label="姓名" fixed="left" prop="employee_name"></el-table-column>
<el-table-column label="证书名称" fixed="left" prop="name"></el-table-column>
<el-table-column label="证书编号" prop="number"> </el-table-column>
<el-table-column label="证书类型" prop="type"><template #default="scope">{{type_[scope.row.type]}} </template></el-table-column>
<el-table-column label="发证日期" prop="issue_date"></el-table-column>
<el-table-column label="有效期" prop="expiration_date"> </el-table-column>
<el-table-column label="下一次复审日期" prop="review_date"></el-table-column>
<el-table-column label="证书文件" prop="file"></el-table-column>
</scTable>
</el-main>

View File

@ -1,68 +1,88 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button
<el-container>
<el-header>
<div class="left-panel">
<!-- <el-button
type="primary"
icon="el-icon-plus"
v-auth="'employee.create'"
@click="handleForm('add')"
></el-button>
<!--
></el-button> -->
<!--
<el-button type="danger" plain icon="el-icon-delete" :disabled="selection.length==0" @click="batch_del"></el-button>
<el-button type="primary" plain :disabled="selection.length!=1" @click="permission">权限设置</el-button> -->
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input
v-model="query.search"
placeholder="姓名/手机号"
clearable
@click="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
@selection-change="selectionChange"
stripe
@resetQuery="resetQuery"
>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="证件照" prop="photo">
<template #default="scope">
<sc-upload v-if="scope.row.photo" v-model="scope.row.photo" :disabled="true" width="70" height="80"></sc-upload>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input
v-model="query.search"
placeholder="姓名/手机号"
clearable
@click="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
@selection-change="selectionChange"
stripe
@resetQuery="resetQuery"
>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="人员类型" prop="type">
<template #default="scope">
<span>{{ userTypeOptions[scope.row.type] }}</span>
</template>
</el-table-column>
<el-table-column
label="手机号"
prop="phone"
width="120"
></el-table-column>
<el-table-column label="部门" prop="belong_dept" width="180">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{scope.row.belong_dept_.name}}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
width="180"
></el-table-column>
<el-table-column label="操作" fixed="right" align="left" width="170">
<template #default="scope">
<!-- <el-button
</el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="证件照" prop="photo">
<template #default="scope">
<sc-upload
v-if="scope.row.photo"
v-model="scope.row.photo"
:disabled="true"
width="70"
height="80"
></sc-upload>
</template>
</el-table-column>
<el-table-column
label="手机号"
prop="phone"
width="120"
></el-table-column>
<el-table-column label="部门" prop="belong_dept" width="180">
<template #default="scope">
<span v-if="scope.row.belong_dept_">{{
scope.row.belong_dept_.name
}}</span>
</template>
</el-table-column>
<el-table-column label="定位卡号" prop="blt_">
<template #default="scope">
<span v-if="scope.row.blt_">{{
scope.row.blt_.code
}}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
width="180"
></el-table-column>
<el-table-column label="操作" fixed="right" align="left" width="170">
<template #default="scope">
<!-- <el-button
link
type="primary"
size="small"
@ -70,138 +90,143 @@
v-auth="'employee.update'"
>证书
</el-button> -->
<el-button
link
type="success"
size="small"
@click="handleForm('show', scope.row)"
>查看
</el-button>
<el-button
link
type="warning"
size="small"
v-auth="'employee.update'"
@click="handleForm('edit', scope.row)"
>编辑
</el-button>
<el-button
v-if="scope.row.blt_"
link
type="danger"
size="small"
@click="handleBindBlt(20, scope.row)"
>解绑
</el-button>
<el-button
v-else
link
type="primary"
size="small"
@click="handleBindBlt(10, scope.row)"
>绑卡
</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
<el-Dialog
title="绑定定位卡"
v-model="showBindBlt"
destroy-on-close
@closed="closeDrawer"
>
<el-form
ref="dialogForm"
:model="form"
label-width="120px"
>
<el-form-item label="姓名">
{{bindBltName}}
</el-form-item>
<el-form-item label="绑定卡号">
<el-select v-model="form.blt" style="width: 100%" :disabled="dis">
<el-option
v-for="item in bltList"
:key="item.id"
:label="item.id"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button v-if="form.type===10" type="primary" @click="submitBindBlt">绑定</el-button>
<el-button v-if="form.type===20" type="primary" @click="submitBindBlt">解绑</el-button>
<el-button @click="showBindBlt = false">取消</el-button>
</template>
</el-Dialog>
<el-button
link
type="success"
size="small"
@click="handleForm('show', scope.row)"
>查看
</el-button>
<el-button
link
type="warning"
size="small"
v-auth="'employee.update'"
@click="handleForm('edit', scope.row)"
>编辑
</el-button>
<el-button
v-if="scope.row.blt_"
link
type="danger"
size="small"
@click="handleBindBlt(20, scope.row)"
>解绑
</el-button>
<el-button
v-else
link
type="primary"
size="small"
@click="handleBindBlt(10, scope.row)"
>绑卡
</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
<el-Dialog
title="绑定定位卡"
v-model="showBindBlt"
destroy-on-close
@closed="closeDrawer"
>
<el-form ref="dialogForm" :model="form" label-width="120px">
<el-form-item label="姓名">
{{ bindBltName }}
</el-form-item>
<el-form-item label="绑定卡号">
<el-select v-model="form.blt" style="width: 100%" :disabled="dis">
<el-option
v-for="item in bltList"
:key="item.id"
:label="item.code"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button v-if="form.type === 10" type="primary" @click="submitBindBlt"
>绑定</el-button
>
<el-button v-if="form.type === 20" type="primary" @click="submitBindBlt"
>解绑</el-button
>
<el-button @click="showBindBlt = false">取消</el-button>
</template>
</el-Dialog>
</template>
<script>
import saveDialog from "./ep_form.vue";
import saveDialog from "./ep_form.vue";
export default {
name: "employee",
components: {
saveDialog,
},
data() {
return {
dialog: {
save: false,
permission: false,
},
apiObj: this.$API.hrm.employee.list,
query: {},
tdevice: [],
selection: [],
search: {
keyword: null,
},
dis: false,
showBindBlt: false,
bltList: [],
bindBltName: '',
form: {
type: 10,
blt: '',
employee: '',
},
};
},
mounted() {
this.getBltList();
},
methods: {
//
// Addcertificate(row) {
// this.$router.push({
// name: "certificate",
// query: {
// id: row.id,
// },
// });
// },
//
handleForm(type, row) {
this.dialog.save = true;
this.$nextTick(() => {
if (type === "add") {
this.$refs.saveDialog.open(type);
} else {
this.$refs.saveDialog.open(type).setData(row);
}
});
},
export default {
name: "employee",
components: {
saveDialog,
},
data() {
return {
dialog: {
save: false,
permission: false,
},
apiObj: this.$API.hrm.employee.list,
query: {},
tdevice: [],
selection: [],
search: {
keyword: null,
},
dis: false,
showBindBlt: false,
bltList: [],
bindBltName: "",
form: {
type: 10,
blt: "",
employee: "",
},
userTypeOptions: {
employee: "企业员工",
remployee: "相关方",
visitor: "访客",
},
};
},
mounted() {
this.getBltList();
},
methods: {
//
// Addcertificate(row) {
// this.$router.push({
// name: "certificate",
// query: {
// id: row.id,
// },
// });
// },
//
handleForm(type, row) {
this.dialog.save = true;
this.$nextTick(() => {
if (type === "add") {
this.$refs.saveDialog.open(type);
} else {
this.$refs.saveDialog.open(type).setData(row);
}
});
},
/*//添加
/*//添加
add(){
this.dialog.save = true
this.$nextTick(() => {
@ -222,121 +247,120 @@
this.$refs.saveDialog.open('show').setData(row)
})
},*/
//
permission() {
this.dialog.permission = true;
this.$nextTick(() => {
this.$refs.permissionDialog.open();
});
},
//
async table_del(row) {
await this.$API.hrm.employee.create.req(row.id).then((res) => {
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
});
},
//
async batch_del() {
this.$confirm(
`确定删除选中的 ${this.selection.length} 项吗?如果删除项中含有子集将会被一并删除`,
"提示",
{
type: "warning",
}
)
.then(() => {
const loading = this.$loading();
this.$refs.table.refresh();
loading.close();
this.$message.success("操作成功");
})
.catch(() => {
});
},
//
selectionChange(selection) {
this.selection = selection;
},
//
changeSwitch(val, row) {
row.status = row.status == "1" ? "0" : "1";
row.$switch_status = true;
setTimeout(() => {
delete row.$switch_status;
row.status = val;
this.$message.success("操作成功");
}, 500);
},
//
handleQuery() {
this.$refs.table.queryData(this.query)
},
//ID
filterTree(id) {
var target = null;
//
permission() {
this.dialog.permission = true;
this.$nextTick(() => {
this.$refs.permissionDialog.open();
});
},
//
async table_del(row) {
await this.$API.hrm.employee.create.req(row.id).then((res) => {
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
});
},
//
async batch_del() {
this.$confirm(
`确定删除选中的 ${this.selection.length} 项吗?如果删除项中含有子集将会被一并删除`,
"提示",
{
type: "warning",
}
)
.then(() => {
const loading = this.$loading();
this.$refs.table.refresh();
loading.close();
this.$message.success("操作成功");
})
.catch(() => {});
},
//
selectionChange(selection) {
this.selection = selection;
},
//
changeSwitch(val, row) {
row.status = row.status == "1" ? "0" : "1";
row.$switch_status = true;
setTimeout(() => {
delete row.$switch_status;
row.status = val;
this.$message.success("操作成功");
}, 500);
},
//
handleQuery() {
this.$refs.table.queryData(this.query);
},
//ID
filterTree(id) {
var target = null;
function filter(tree) {
tree.forEach((item) => {
if (item.id == id) {
target = item;
}
if (item.children) {
filter(item.children);
}
});
}
function filter(tree) {
tree.forEach((item) => {
if (item.id == id) {
target = item;
}
if (item.children) {
filter(item.children);
}
});
}
filter(this.$refs.table.tableData);
return target;
},
//
handleSaveSuccess(data, mode) {
if (mode == "add") {
this.$refs.table.refresh();
} else if (mode == "edit") {
this.$refs.table.refresh();
}
},
resetQuery() {
this.query = {};
},
getBltList() {
let that = this;
that.$API.third.tdevice.list.req({type: 30, page: 0}).then(res => {
that.tdevice = res;
that.bltList = res.filter(item => {
return item.employee_ === null
})
;
console.log(res);
console.log(that.bltList);
})
},
handleBindBlt(type, row) {
this.dis = false;
this.bindBltName = row.name;
this.form.type = type;
this.form.employee = row.id;
if(type===20){
this.dis = true;
this.form.blt = row.blt_.id;
}
this.showBindBlt = true;
},
submitBindBlt() {
let that = this;
that.$API.third.tdevice.bltBind.req(this.form).then(res => {
if(res.err_msg){}else{
that.showBindBlt = false;
that.$refs.table.refresh();
}
})
},
},
};
filter(this.$refs.table.tableData);
return target;
},
//
handleSaveSuccess(data, mode) {
if (mode == "add") {
this.$refs.table.refresh();
} else if (mode == "edit") {
this.$refs.table.refresh();
}
},
resetQuery() {
this.query = {};
},
getBltList() {
let that = this;
that.$API.third.tdevice.list.req({ type: 30, page: 0 }).then((res) => {
that.tdevice = res;
that.bltList = res.filter((item) => {
return item.employee_ === null;
});
console.log(res);
console.log(that.bltList);
});
},
handleBindBlt(type, row) {
this.dis = false;
this.bindBltName = row.name;
this.form.type = type;
this.form.employee = row.id;
if (type === 20) {
this.dis = true;
this.form.blt = row.blt_.id;
}
this.showBindBlt = true;
},
submitBindBlt() {
let that = this;
that.$API.third.tdevice.bltBind.req(this.form).then((res) => {
if (res.err_msg) {
} else {
that.showBindBlt = false;
that.$refs.table.refresh();
}
});
},
},
};
</script>

View File

@ -45,7 +45,8 @@
:options="group"
:props="groupsProps"
clearable
style="width: 100%;">
style="width: 100%;"
disabled>
</el-cascader>
</el-form-item>
</el-col>
@ -63,7 +64,9 @@
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="系统账号">
<el-input v-model="form.user" placeholder="请输入系统账号" clearable></el-input>
<span v-if="form.user">{{form.user_.username}}</span>
<!-- <span></span>
<el-input v-model="form.user" placeholder="请输入系统账号" clearable></el-input> -->
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
@ -71,11 +74,11 @@
<el-input v-model="form.email" placeholder="请输入邮箱" clearable></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<!-- <el-col :md="12" :sm="24">
<el-form-item label="学历">
<el-input v-model="form.qualification" placeholder="学历" clearable></el-input>
</el-form-item>
</el-col>
</el-col> -->
<el-col :md="12" :sm="24">
<el-form-item label="生日">
<el-date-picker
@ -85,11 +88,11 @@
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<!-- <el-col :md="12" :sm="24">
<el-form-item label="在岗状态展示">
<el-switch v-model="form.show_atwork"/>
</el-form-item>
</el-col>
</el-col> -->
<el-col :md="12" :sm="24">
<el-form-item label="性别">
<el-radio-group v-model="form.gender">

View File

@ -32,7 +32,7 @@
</el-form-item>
<el-form-item style="margin-bottom: 10px">
<el-col :span="12" class="login-reg">
<el-link @click="visitors">{{$t('login.fangke')}}</el-link>
<!-- <el-link @click="visitors">{{$t('login.fangke')}}</el-link> -->
</el-col>
<el-col :span="12" class="login-forgot">
<router-link to="/reset_password"

View File

@ -1,124 +1,152 @@
<template>
<common-page title="重置密码">
<el-steps :active="stepActive" simple finish-status="success">
<el-step title="填写新密码" />
<el-step title="完成重置" />
</el-steps>
<el-form v-if="stepActive==0" ref="form" :model="form" :rules="rules" :label-width="120">
<el-form-item label="登录账号" prop="user">
<common-page title="重置密码">
<el-steps :active="stepActive" simple finish-status="success">
<el-step title="填写新密码" />
<el-step title="完成重置" />
</el-steps>
<el-form
v-if="stepActive == 0"
ref="form"
:model="form"
:rules="rules"
:label-width="120"
>
<!-- <el-form-item label="登录账号" prop="user">
<el-input v-model="form.user" placeholder="请输入登录账号"></el-input>
<div class="el-form-item-msg">请输入注册时填写的登录账号</div>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="form.phone" placeholder="请输入手机号码"></el-input>
</el-form-item>
<el-form-item label="短信验证码" prop="yzm">
<div class="yzm">
<el-input v-model="form.yzm" placeholder="请输入6位短信验证码"></el-input>
<el-button @click="getYzm" :disabled="disabled">获取验证码<span v-if="disabled"> ({{time}})</span></el-button>
</div>
</el-form-item>
<el-form-item label="新密码" prop="newpw">
<el-input v-model="form.newpw" show-password placeholder="请输入新密码"></el-input>
<div class="el-form-item-msg">请输入包含英文数字的8位以上密码</div>
</el-form-item>
<el-form-item label="确认新密码" prop="newpw2">
<el-input v-model="form.newpw2" show-password placeholder="请再一次输入新密码"></el-input>
</el-form-item>
</el-form-item> -->
<el-form-item label="手机号码" prop="phone">
<el-input v-model="form.phone" placeholder="请输入手机号码"></el-input>
</el-form-item>
<el-form-item label="短信验证码" prop="code">
<div class="code">
<el-input
v-model="form.code"
placeholder="请输入6位短信验证码"
></el-input>
<el-button @click="getcode" :disabled="disabled"
>获取验证码<span v-if="disabled"> ({{ time }})</span></el-button
>
</div>
</el-form-item>
<el-form-item label="新密码" prop="password">
<el-input
v-model="form.password"
show-password
placeholder="请输入新密码"
></el-input>
<div class="el-form-item-msg">请输入包含英文数字的8位以上密码</div>
</el-form-item>
<el-form-item label="确认新密码" prop="password2">
<el-input
v-model="form.password2"
show-password
placeholder="请再一次输入新密码"
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="save">提交</el-button>
</el-form-item>
</el-form>
<el-result v-if="stepActive==1" icon="success" title="密码重置成功" sub-title="请牢记自己的新密码,返回登录后使用新密码登录">
<template #extra>
<el-button type="primary" @click="backLogin">返回登录</el-button>
</template>
</el-result>
</common-page>
<el-form-item>
<el-button type="primary" @click="save">提交</el-button>
</el-form-item>
</el-form>
<el-result
v-if="stepActive == 1"
icon="success"
title="密码重置成功"
sub-title="请牢记自己的新密码,返回登录后使用新密码登录"
>
<template #extra>
<el-button type="primary" @click="backLogin">返回登录</el-button>
</template>
</el-result>
</common-page>
</template>
<script>
import commonPage from './components/commonPage'
import commonPage from "./components/commonPage";
export default {
components: {
commonPage
},
data() {
return {
stepActive: 0,
form: {
user: "",
phone: "",
yzm: "",
newpw: "",
newpw2: ""
},
rules: {
user: [
{ required: true, message: '请输入登录账号'}
],
phone: [
{ required: true, message: '请输入手机号'}
],
yzm: [
{ required: true, message: '请输入短信验证码'}
],
newpw: [
{ required: true, message: '请输入新的密码'}
],
newpw2: [
{ required: true, message: '请再次输入新的密码'},
{validator: (rule, value, callback) => {
if (value !== this.form.newpw) {
callback(new Error('两次输入密码不一致'));
}else{
callback();
}
}}
],
},
disabled: false,
time: 0
}
},
mounted() {
},
methods: {
async getYzm(){
var validate = await this.$refs.form.validateField("phone").catch(()=>{})
if(!validate){ return false }
this.$message.success("已发送短信至手机号码")
this.disabled = true
this.time = 60
var t = setInterval(() => {
this.time -= 1
if(this.time < 1){
clearInterval(t)
this.disabled = false
this.time = 0
}
},1000)
},
async save(){
var validate = await this.$refs.form.validate().catch(()=>{})
if(!validate){ return false }
this.stepActive = 1
},
backLogin(){
this.$router.push({
path: '/login'
})
}
}
}
export default {
components: {
commonPage,
},
data() {
return {
stepActive: 0,
form: {
// user: "",
phone: "",
code: "",
password: "",
password2: "",
},
rules: {
// user: [
// { required: true, message: ''}
// ],
phone: [{ required: true, message: "请输入手机号" }],
code: [{ required: true, message: "请输入短信验证码" }],
password: [{ required: true, message: "请输入新的密码" }],
password2: [
{ required: true, message: "请再次输入新的密码" },
{
validator: (rule, value, callback) => {
if (value !== this.form.password) {
callback(new Error("两次输入密码不一致"));
} else {
callback();
}
},
},
],
},
disabled: false,
time: 0,
};
},
mounted() {},
methods: {
async getcode() {
var validate = await this.$refs.form
.validateField("phone")
.catch(() => {});
if (!validate) {
return false;
}
try {
await this.$API.auth.sms_code.req({ phone: this.form.phone });
this.$message.success("已发送短信至手机号码");
this.disabled = true;
this.time = 60;
var t = setInterval(() => {
this.time -= 1;
if (this.time < 1) {
clearInterval(t);
this.disabled = false;
this.time = 0;
}
}, 1000);
} catch (err) {}
},
save() {
this.$refs.form
.validate()
.then((valid) => {
if (valid) {
this.$API.auth.reset_password.req(this.form).then(() => {
this.stepActive = 1;
});
}
})
.catch(() => {});
},
backLogin() {
this.$router.push({
path: "/login",
});
},
},
};
</script>
<style scoped>
</style>

View File

@ -44,7 +44,7 @@
<el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope">
<el-button
text
link
type="primary"
size="small"
@click="editMenu(scope.row, scope.$index)"
@ -52,7 +52,7 @@
>
<el-divider direction="vertical"></el-divider>
<el-button
text
link
type="danger"
size="small"
@click="delMenu(scope.row.id)"

View File

@ -109,12 +109,25 @@
label-width="120px"
>
<el-row>
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="选择相关方人员">
<el-select v-model="form.remployee" placeholder="选择相关方人员" :disabled="mode != 'add'">
<el-option
v-for="item in remployeeoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="证书名称" prop="name">
<el-input
v-model="form.name"
placeholder="请输入证书名称"
clearable
:disabled="mode != 'add'"
></el-input>
</el-form-item>
</el-col>
@ -124,12 +137,13 @@
v-model="form.number"
placeholder="请输入证书编号"
clearable
:disabled="mode != 'add'"
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="证书类型" prop="type">
<el-select v-model="form.type" placeholder="选择证书类型">
<el-select v-model="form.type" placeholder="选择证书类型" :disabled="mode != 'add'">
<el-option
v-for="item in typeoptions"
:key="item.id"
@ -170,18 +184,6 @@
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="12" :xs="24">
<el-form-item label="选择相关方人员">
<el-select v-model="form.remployee" placeholder="选择相关方人员">
<el-option
v-for="item in remployeeoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="上传证书">
<sc-upload-file
@ -237,6 +239,7 @@ export default {
this.$refs.table.queryData(this.query);
},
handleForm(type, row) {
this.mode = type
if (type === "add") {
this.dialogcart = true;
this.form = Object.assign({}, defaultform);

View File

@ -32,6 +32,7 @@
>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="单位" prop="rparty_name" ></el-table-column>
<el-table-column label="姓名" prop="name" ></el-table-column>
<el-table-column label="手机号" prop="phone" ></el-table-column>
<el-table-column label="身份证号" prop="id_number" ></el-table-column>
@ -49,13 +50,13 @@
@click="table_show(scope.row, scope.$index)"
>查看</el-button
>
<!-- <el-button
<el-button
link
type="warning"
size="small"
@click="table_edit(scope.row, scope.$index)"
>编辑</el-button
>-->
>
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"

View File

@ -37,13 +37,13 @@
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="身份证号">
<el-input v-model="form.id_number" type="text" clearable></el-input>
<el-input v-model="form.id_number" type="text" clearable :disabled="mode != 'add'"></el-input>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-col :md="24" :sm="12" :xs="24" v-if="rparty_show">
<el-form-item label="相关方">
<el-select v-model="form.rparty" style="width: 100%">
<el-select v-model="form.rparty" style="width: 100%" :disabled="mode != 'add'">
<el-option
v-for="item in rpartyOptions"
:key="item.id"
@ -95,14 +95,22 @@ export default {
isSaveing: false,
selectionFilters: [],
setFiltersVisible: false,
rpartyOptions: []
rpartyOptions: [],
rparty_show: false
};
},
mounted() {
this.getRpartyOptions();
this.rpartyShow()
},
methods: {
rpartyShow(){
var userInfo = this.$TOOL.data.get("USER_INFO");
if(userInfo.type=='employee'){
this.rparty_show = true
this.getRpartyOptions();
}
},
//
open(mode = "add") {
this.mode = mode;

View File

@ -0,0 +1,112 @@
<template>
<el-container>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
hidePagination
hideDo
stripe
>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="单位" prop="rparty" >
<template #default="scope">
{{scope.row.rparty_.name}}
</template>
</el-table-column>
<el-table-column label="文件分类" prop="file_cate" >
<template #default="scope">
{{scope.row.file_cate_.name}}
</template>
</el-table-column>
<el-table-column label="文件" prop="files" >
<template #default="scope">
<div v-for="item in scope.row.files_" :key="item.id">
<el-link style="font-size:12px" type="primary" :href="item.path" target="_blank">{{item.name}}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="操作" fixed="right" align="left" width="170">
<template #default="scope">
<el-button
link
type="primary"
size="small"
@click="table_show(scope.row, scope.$index)"
>查看</el-button
>
<el-button
link
type="warning"
size="small"
@click="table_edit(scope.row, scope.$index)"
>编辑</el-button
>
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button link type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column> -->
</scTable>
</el-main>
</el-container>
</template>
<script>
export default {
name: "remployee",
components: {
},
data() {
return {
apiObj: this.$API.rpm.rfile.list,
query: {},
selection: [],
};
},
methods: {
//
table_show(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("show").setData(row);
});
},
//
permission() {
this.dialog.permission = true;
this.$nextTick(() => {
this.$refs.permissionDialog.open();
});
},
//
async table_del(row) {
this.$API.rpm.remployee.delete
.req(row.id)
.then((res) => {
this.$message.success("删除成功");
return res;
})
.catch((err) => {
return err;
});
},
resetQuery() {
this.query = {};
},
},
};
</script>

View File

@ -49,7 +49,7 @@
width="180"
></el-table-column> -->
<el-table-column
label="账号"
label="管理员"
prop="admin_username"
></el-table-column>
@ -91,9 +91,15 @@
</scTable>
</el-main>
</el-container>
<sc-dialog v-model="adminvisible" title="分配相关方账号" @closed="$emit('closed')">
<el-dialog v-model="adminvisible" title="分配账号" @closed="$emit('closed')">
<el-form ref="ruleForm" :model="adminform" :rules="rules" label-width="100px">
<el-form-item label="账户名称" prop="username">
<el-form-item label="姓名" prop="name">
<el-input v-model="adminform.name"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-input v-model="adminform.phone"></el-input>
</el-form-item>
<el-form-item label="账户名称" prop="username">
<el-input v-model="adminform.username"></el-input>
</el-form-item>
</el-form>
@ -101,7 +107,7 @@
<el-button @click="adminvisible = false"> </el-button>
<el-button type="primary" @click="submitAdmin"> </el-button>
</template>
</sc-dialog>
</el-dialog>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@ -137,9 +143,14 @@ export default {
//
rules: {
phone: [
{required: true, message: '请输入账户名称'}
{required: true, message: '请输入'}
],
name: [
{required: true, message: '请输入'}
],
username: [
{required: true, message: '请输入'}
],
},
};
},
@ -180,6 +191,7 @@ export default {
).then((res) => {
this.$message.success("账号分配成功");
this.adminvisible = false;
this.$refs.table.refresh()
})
.catch((err) => {

View File

@ -92,13 +92,9 @@
<script>
import {genTree} from "@/utils/verificate";
import selectUser from "@/layout/components/userselect";
export default {
emits: ["success", "closed"],
components: {
selectUser,
},
props: {
rpjId: {
type: String,

View File

@ -1,241 +1,312 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="addDept" v-auth="'dept.create'"></el-button>
<el-button type="danger" plain icon="el-icon-delete" v-auth="'dept.delete'" :disabled="selection.length==0" @click="batch_del"></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="query.search" placeholder="部门名称"></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :isTree="true" :apiObj="apiObj" row-key="id" @selection-change="selectionChange" stripe default-expand-all hidePagination>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="部门名称" prop="name" min-width="200"></el-table-column>
<el-table-column label="部门类型" prop="type" min-width="200"></el-table-column>
<el-table-column label="创建日期" prop="create_time" min-width="200"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope">
<el-button link type="primary" size="small" @click="editDept(scope.row, scope.$index)" v-auth="'dept.update'">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="delDept(scope.row, scope.$index)">
<template #reference>
<el-button link type="danger" size="small" v-auth="'dept.delete'">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600">
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="100px" label-position="left">
<el-form-item label="部门名称" prop="name">
<el-input v-model="addForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="上级部门">
<el-cascader
v-model="addForm.parent"
:options="group"
:props="groupsProps"
:show-all-levels="false"
clearable
style="width: 100%"
@change="handleChange"
></el-cascader>
<!--<el-input v-model="addForm.parent" clearable></el-input>-->
</el-form-item>
<el-form-item label="类型">
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
@click="addDept"
v-auth="'dept.create'"
></el-button>
<el-button
type="danger"
plain
icon="el-icon-delete"
v-auth="'dept.delete'"
:disabled="selection.length == 0"
@click="batch_del"
></el-button>
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input v-model="query.search" placeholder="部门名称"></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:isTree="true"
:apiObj="apiObj"
row-key="id"
@selection-change="selectionChange"
stripe
default-expand-all
hidePagination
>
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column
label="部门名称"
prop="name"
min-width="200"
></el-table-column>
<el-table-column label="部门类型" prop="type" min-width="200">
<template #default="scope">
{{ deptTypeOptions[scope.row.type] }}
</template>
</el-table-column>
<el-table-column
label="创建日期"
prop="create_time"
min-width="200"
></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope">
<el-button
link
type="primary"
size="small"
@click="editDept(scope.row, scope.$index)"
v-auth="'dept.update'"
>编辑</el-button
>
<el-divider direction="vertical"></el-divider>
<el-popconfirm
title="确定删除吗?"
@confirm="delDept(scope.row, scope.$index)"
>
<template #reference>
<el-button
link
type="danger"
size="small"
v-auth="'dept.delete'"
>删除</el-button
>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600">
<el-form
:model="addForm"
:rules="rules"
ref="addForm"
label-width="100px"
label-position="left"
>
<el-form-item label="部门名称" prop="name">
<el-input v-model="addForm.name" clearable></el-input>
</el-form-item>
<el-form-item label="上级部门">
<el-cascader
v-model="addForm.parent"
:options="group"
:props="groupsProps"
:show-all-levels="false"
clearable
style="width: 100%"
@change="handleChange"
></el-cascader>
<!--<el-input v-model="addForm.parent" clearable></el-input>-->
</el-form-item>
<!-- <el-form-item label="类型">
<el-select v-model="addForm.type" placeholder="Select" style="width: 100%;">
<el-option label="公司" value="company"></el-option>
<el-option label="部门" value="dept"></el-option>
</el-select>
</el-form-item>
<el-form-item label="排序">
<el-input-number v-model="addForm.sort" controls-position="right" :min="1" style="width: 100%;"></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible=false" > </el-button>
<el-button type="primary" :loading="isSaving" @click="submitHandle()"> </el-button>
</template>
</el-dialog>
</el-form-item> -->
<el-form-item label="排序">
<el-input-number
v-model="addForm.sort"
controls-position="right"
:min="1"
style="width: 100%"
></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible = false"> </el-button>
<el-button type="primary" :loading="isSaving" @click="submitHandle()"
> </el-button
>
</template>
</el-dialog>
</template>
<script>
import {genTree} from "@/utils/verificate";
export default {
name: 'dept',
data() {
return {
dialog: {
save: false,
permission: false
},
apiObj: this.$API.system.dept.list,
selection: [],
query:{},
search: {
keyword: null
},
params:{},
isSaving: false,
limitedVisible : false,
type: "add",
titleMap: {
add: '新增',
edit: '编辑',
},
import { genTree } from "@/utils/verificate";
export default {
name: "dept",
data() {
return {
dialog: {
save: false,
permission: false,
},
apiObj: this.$API.system.dept.list,
selection: [],
query: {},
search: {
keyword: null,
},
params: {},
isSaving: false,
limitedVisible: false,
type: "add",
titleMap: {
add: "新增",
edit: "编辑",
},
//
addForm: {
id:"",
name: "",
type: "dept",
sort: 1,
parent: "",
},
//
rules: {
name: [
{required: true, message: '请输入部门名称'}
],
},
groupsProps: {
// value: "id",
multiple: false,
emitPath: false,
checkStrictly: true,
},
group: [],
postList: [],
temp:[]
}
},
//
addForm: {
id: "",
name: "",
type: "dept",
sort: 1,
parent: "",
},
//
rules: {
name: [{ required: true, message: "请输入部门名称" }],
},
groupsProps: {
// value: "id",
multiple: false,
emitPath: false,
checkStrictly: true,
},
group: [],
postList: [],
temp: [],
deptTypeOptions: {
dept: "本部",
rparty: "相关方",
},
};
},
mounted() {
this.getGroup();
},
methods: {
handleChange(value) {
// this.menu.checked = check.checkedKeys;
//debugger;
console.log(value);
console.log(this.addForm.parent);
},
//
async getGroup() {
let res = await this.$API.system.dept.list.req({page: 0});
this.group = genTree(res);
},
mounted() {
this.getGroup();
},
methods: {
handleChange(value) {
// this.menu.checked = check.checkedKeys;
//debugger;
console.log(value);
console.log(this.addForm.parent);
},
//
async getGroup() {
let res = await this.$API.system.dept.list.req({ page: 0 });
this.group = genTree(res);
},
//
addDept(){
this.type='add';
this.limitedVisible = true;
},
//
editDept(row){
// debugger;
this.temp = [];
this.type='edit';
this.addForm.id=row.id;
this.addForm.name=row.name;
this.addForm.parent=row.parent;
this.addForm.type=row.type+"";
this.addForm.sort=row.sort;
this.limitedVisible = true;
},
//
addDept() {
this.type = "add";
this.limitedVisible = true;
},
//
editDept(row) {
// debugger;
this.temp = [];
this.type = "edit";
this.addForm.id = row.id;
this.addForm.name = row.name;
this.addForm.parent = row.parent;
this.addForm.type = row.type + "";
this.addForm.sort = row.sort;
this.limitedVisible = true;
},
//
delDept(row){
let id = row.id;
let res = this.$API.system.dept.delete.req(id);
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$refs.table.refresh();
this.$message.success("删除成功")
}
},
submitHandle(){
let that = this;
this.$refs.addForm.validate( (valid) => {
if (valid) {
this.isSaveing = true;
var res;
if(this.type==='add'){
res = this.$API.system.dept.create.req(that.addForm);
}else{
res = this.$API.system.dept.update.req(that.addForm.id,that.addForm);
}
console.log(res);
debugger;
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}
}
})
},
//
selectionChange(selection){
this.selection = selection;
},
//
handleQuery(){
this.$refs.table.queryData(this.search)
},
//
delDept(row) {
let id = row.id;
let res = this.$API.system.dept.delete.req(id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
submitHandle() {
let that = this;
this.$refs.addForm.validate((valid) => {
if (valid) {
this.isSaveing = true;
var res;
if (this.type === "add") {
res = this.$API.system.dept.create.req(that.addForm);
} else {
res = this.$API.system.dept.update.req(
that.addForm.id,
that.addForm
);
}
console.log(res);
debugger;
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}
}
});
},
//
selectionChange(selection) {
this.selection = selection;
},
//
handleQuery() {
this.$refs.table.queryData(this.search);
},
findParents(arr,parent){
let that = this;
arr.forEach(item=>{
if(item.id===parent){
that.temp.push(item.id);
if(item.parent!==null){
this.findParents(arr,item.parent)
}else{
return that.temp
}
}
});
return that.temp
},
treeData(postList){
let posts = [];
postList.forEach(item => {
let obj = new Object();
obj.id = item.id;
obj.sort = item.sort;
obj.label = item.name;
obj.type = item.type;
obj.parent = item.parent;
obj.create_time = item.create_time;
posts.push(obj)
});
let obj = posts.reduce((res, v) => (res[v.id] = v , res), {});//Object
let arr = [];
for (let item of posts) {
if (item.parent == null) {
arr.push(item);
continue
}
let parent = obj[item.parent];
parent.children = parent.children ? parent.children : [];
parent.children.push(item);
}
return arr;
},
}
}
findParents(arr, parent) {
let that = this;
arr.forEach((item) => {
if (item.id === parent) {
that.temp.push(item.id);
if (item.parent !== null) {
this.findParents(arr, item.parent);
} else {
return that.temp;
}
}
});
return that.temp;
},
treeData(postList) {
let posts = [];
postList.forEach((item) => {
let obj = new Object();
obj.id = item.id;
obj.sort = item.sort;
obj.label = item.name;
obj.type = item.type;
obj.parent = item.parent;
obj.create_time = item.create_time;
posts.push(obj);
});
let obj = posts.reduce((res, v) => ((res[v.id] = v), res), {}); //Object
let arr = [];
for (let item of posts) {
if (item.parent == null) {
arr.push(item);
continue;
}
let parent = obj[item.parent];
parent.children = parent.children ? parent.children : [];
parent.children.push(item);
}
return arr;
},
},
};
</script>
<style>
</style>

View File

@ -39,18 +39,20 @@
<scTable ref="table" :apiObj="listApi" row-key="id" :params="listApiParams" @selection-change="selectionChange" stripe :paginationLayout="'prev, pager, next'">
<!-- <el-table-column type="selection" width="50"></el-table-column> -->
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="名称" prop="name" min-width="150"></el-table-column>
<el-table-column label="键值" prop="value" min-width="100"></el-table-column>
<el-table-column label="描述" prop="description" min-width="100"></el-table-column>
<el-table-column label="是否有效" prop="yx" width="100">
<template #default="scope">
<el-switch v-if="scope.row.yx" v-model="scope.row.yx" @change="changeSwitch($event, scope.row)" :loading="scope.row.$switch_yx" active-value="1" inactive-value="0"></el-switch>
</template>
<el-table-column label="名称" prop="name" width="360"></el-table-column>
<el-table-column label="标识" prop="code"></el-table-column>
<el-table-column label="排序" prop="sort"></el-table-column>
<el-table-column label="是否有效" prop="is_used" width="80">
<template #default="scope">
<el-icon v-if="scope.row.is_used" color="green"
><CircleCheckFilled
/></el-icon>
<el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="140">
<template #default="scope">
<el-button link size="small" @click="editDic(scope.row)" v-auth="'dicttype.update'" type="primary">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="delDic(scope.row,scope.$index)">
<template #reference>
<el-button link size="small" v-auth="'dicttype.delete'" type="danger">删除</el-button>
@ -63,20 +65,20 @@
</el-container>
</el-container>
<el-dialog :title="titleMap[mode]" v-model="visibleDicType" destroy-on-close>
<el-form :model="typeForm" :rules="typeRules" ref="dialogTypeForm" label-width="80px" label-position="left">
<el-form-item label="编码" prop="code">
<el-form :model="typeForm" :rules="typeRules" ref="dialogTypeForm" label-width="80px">
<el-form-item label="标识" prop="code">
<el-input v-model="typeForm.code" clearable placeholder="字典编码"></el-input>
</el-form-item>
<el-form-item label="字典名称" prop="name">
<el-input v-model="typeForm.name" clearable placeholder="字典显示名称"></el-input>
</el-form-item>
<el-form-item label="父路径" prop="parentId">
<!-- <el-form-item label="父路径" prop="parentId">
<el-cascader
v-model="typeForm.parent"
:options="group"
:props="dicProps"
:show-all-levels="false" clearable></el-cascader>
</el-form-item>
</el-form-item> -->
</el-form>
<template #footer>
<el-button @click="visibleDicType=false" > </el-button>
@ -107,7 +109,7 @@
<el-input-number v-model="dicForm.sort" style="width: 100%;" clearable></el-input-number>
</el-form-item>
<el-form-item label="是否有效">
<el-switch v-model="dicForm.is_used" active-value="true" inactive-value="false"></el-switch>
<el-switch v-model="dicForm.is_used"></el-switch>
</el-form-item>
</el-form>
<template #footer>
@ -169,13 +171,13 @@
description:'',
type:'',
sort:'',
is_used:'',
is_used:true,
parent:'',
},
dicRules:{
value: [
{required: true, message: '请输入字典值'}
],
// code: [
// {required: true, message: ''}
// ],
name: [
{required: true, message: '请输入字典名称'}
],
@ -385,10 +387,10 @@
async delDic(row,index){
var delId = row.id;
var res = await this.$API.system.dict.delete.req(delId);
if(res.err.msg){
this.$message.error(res.err.msg)
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$refs.table.tableData.splice(index, 1);
this.$refs.table.refresh();
this.$message.success("删除成功")
}
},

View File

@ -206,14 +206,14 @@ export default {
//
handleSaveSuccess(data, mode) {
//
if (mode == "add") {
this.$refs.table.unshiftRow(data);
} else if (mode == "edit") {
this.$refs.table.updateKey(data);
}
// if (mode == "add") {
// this.$refs.table.unshiftRow(data);
// } else if (mode == "edit") {
// this.$refs.table.updateKey(data);
// }
//
// this.$refs.table.refresh()
this.$refs.table.refresh()
},
//
handleSaveRoleSuccess() {

View File

@ -53,8 +53,6 @@
show-checkbox
:data="menu.list"
:props="menu.props"
check-strictly="true"
:default-checked-keys="menu.checked"
@check="handleChange"
></el-tree>
</div>
@ -138,7 +136,10 @@
//
roleAdd(){
this.limitedVisible = true;
this.addForm = defaultForm;
this.$nextTick(()=>{
this.$refs.menu.setCheckedKeys([])
})
this.addForm = Object.assign({}, defaultForm);
},
/*handleChange(value){
debugger;
@ -173,19 +174,20 @@
//
roleEdit(row){
this.type='edit';
this.menu.checked = null;
this.addForm.id=row.id;
this.addForm.name=row.name;
this.addForm.code=row.code;
this.menu.checked = row.perms;
this.addForm.description=row.description;
this.limitedVisible = true;
this.$nextTick(()=>{
this.$refs.menu.setCheckedKeys(row.perms)
})
},
//
async roleDel(row){
var id = row.id;
var res = await this.$API.system.roleDel.delete(id);
var res = await this.$API.system.role.delete.req(id);
if(res.err_msg){
this.$message.error(res.err_msg)
}else{

View File

@ -1,393 +1,417 @@
<template>
<el-container>
<el-aside width="300px" v-loading="showGrouploading">
<el-container>
<el-header style="border-bottom: none">
<el-input
placeholder="输入关键字进行过滤"
v-model="groupFilterText"
clearable
></el-input>
</el-header>
<el-main class="nopadding">
<el-tree
ref="group"
class="menu"
node-key="id"
:data="group"
:current-node-key="''"
default-expand-all
:highlight-current="true"
:expand-on-click-node="false"
:filter-node-method="groupFilterNode"
@node-click="groupClick"
></el-tree>
</el-main>
</el-container>
</el-aside>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
v-auth="'user.create'"
@click="add"
></el-button>
<!-- <el-button
<el-container>
<el-aside width="300px" v-loading="showGrouploading">
<el-container>
<el-header style="border-bottom: none">
<el-input
placeholder="输入关键字进行过滤"
v-model="groupFilterText"
clearable
></el-input>
</el-header>
<el-main class="nopadding">
<el-tree
ref="group"
class="menu"
node-key="id"
:data="group"
:current-node-key="''"
:default-expanded-keys="idArr"
:highlight-current="true"
:expand-on-click-node="false"
:filter-node-method="groupFilterNode"
@node-click="groupClick"
></el-tree>
</el-main>
</el-container>
</el-aside>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
v-auth="'user.create'"
@click="add"
></el-button>
<!-- <el-button
type="danger"
plain
icon="el-icon-delete"
:disabled="selection.length == 0"
@click="batch_del"
></el-button> -->
<!-- <el-button
<!-- <el-button
type="primary"
plain
:disabled="selection.length == 0"
>密码重置
</el-button> -->
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input
v-model="query.search"
placeholder="登录账号 / 姓名"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
stripe
remoteSort
remoteFilter
@selection-change="selectionChange"
>
<!-- <el-table-column
</div>
<div class="right-panel">
<div class="right-panel-search">
<el-input
v-model="query.search"
placeholder="登录账号 / 姓名"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
stripe
remoteSort
remoteFilter
@selection-change="selectionChange"
>
<!-- <el-table-column
type="selection"
width="50"
></el-table-column> -->
<el-table-column
label="ID"
prop="id"
></el-table-column>
<el-table-column
label="姓名"
prop="name"
></el-table-column>
<el-table-column
label="登录账号"
prop="username"
></el-table-column>
<el-table-column
label="是否启用"
prop="is_active"
>
<template #default="scope">
<el-tag type="success" v-if="scope.row.is_active">启用</el-tag>
<el-tag v-else type="danger">禁用</el-tag>
</template>
</el-table-column>
<!--sortable="custom"-->
<el-table-column
label="加入时间"
prop="create_time"
min-width="100"
sortable="custom"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="200"
>
<template #default="scope">
<el-button
type="primary"
link
size="small"
@click="formSetting(scope.row)"
v-auth="'user.create'"
>
设置
</el-button>
<el-button
link
size="small"
@click="formEdit(scope.row, '2')"
v-auth="'user.update'"
>
编辑
</el-button>
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button link type="danger" size="small" v-auth="'user.delete'">
删除
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-container>
<el-dialog
:title="titleMap[type]"
v-model="limitedVisible"
:width="600"
>
<el-form
:model="addForm"
:rules="rules"
ref="addForm"
label-width="100px"
label-position="left"
>
<el-form-item label="登录账号" prop="username">
<el-input
v-model="addForm.username"
placeholder="用于登录系统"
clearable
></el-input>
</el-form-item>
<el-form-item label="姓名">
<el-input
v-model="addForm.name"
placeholder="请输入完整的真实姓名"
clearable
></el-input>
</el-form-item>
<el-form-item label="手机">
<el-input
v-model="addForm.phone"
placeholder="请输入手机号码"
clearable
></el-input>
</el-form-item>
<el-form-item label="是否在用">
<el-switch v-model="addForm.is_active" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible = false"> </el-button>
<el-button
v-if="type !== 'show'"
type="primary"
:loading="isSaveing"
@click="submit()"
>
</el-button
>
</template>
</el-dialog>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" @closed="dialog.save=false"></save-dialog>
<el-table-column label="ID" prop="id" width="160"></el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
<el-table-column label="登录账号" prop="username"></el-table-column>
<el-table-column label="是否启用" prop="is_active">
<template #default="scope">
<el-tag type="success" v-if="scope.row.is_active">启用</el-tag>
<el-tag v-else type="danger">禁用</el-tag>
</template>
</el-table-column>
<el-table-column label="微信通知" width="80">
<template #default="scope">
<el-icon v-if="scope.row.wx_openid" color="green"
><CircleCheckFilled
/></el-icon>
<el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template>
</el-table-column>
<el-table-column label="账号类型" prop="type">
<template #default="scope">
<span>{{userTypeOptions[scope.row.type]}}</span>
</template>
</el-table-column>
<!-- <el-table-column label="小程序" width="80">
<template #default="scope">
<el-icon v-if="scope.row.wxmp_openid" color="green"
><CircleCheckFilled
/></el-icon>
<el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template>
</el-table-column> -->
<el-table-column
label="创建时间"
prop="create_time"
width="160"
sortable="custom"
></el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
width="200"
>
<template #default="scope">
<el-button
type="primary"
link
size="small"
@click="formSetting(scope.row)"
v-auth="'user.create'"
>
设置
</el-button>
<el-button
link
size="small"
@click="formEdit(scope.row, '2')"
v-auth="'user.update'"
>
编辑
</el-button>
<!-- <el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button
link
type="danger"
size="small"
v-auth="'user.delete'"
>
删除
</el-button>
</template>
</el-popconfirm> -->
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-container>
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600">
<el-form
:model="addForm"
:rules="rules"
ref="addForm"
label-width="100px"
label-position="left"
>
<el-form-item label="登录账号" prop="username">
<el-input
v-model="addForm.username"
placeholder="用于登录系统"
clearable
></el-input>
</el-form-item>
<el-form-item label="姓名">
<el-input
v-model="addForm.name"
placeholder="请输入完整的真实姓名"
clearable
></el-input>
</el-form-item>
<el-form-item label="手机">
<el-input
v-model="addForm.phone"
placeholder="请输入手机号码"
clearable
></el-input>
</el-form-item>
<el-form-item label="是否在用">
<el-switch v-model="addForm.is_active" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="limitedVisible = false"> </el-button>
<el-button
v-if="type !== 'show'"
type="primary"
:loading="isSaveing"
@click="submit()"
>
</el-button>
</template>
</el-dialog>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
</template>
<script>
import baseUrl from "@/config";
import {genTree} from "@/utils/verificate";
import saveDialog from './user_form.vue'
import baseUrl from "@/config";
import { genTree } from "@/utils/verificate";
import saveDialog from "./user_form.vue";
import { CircleCheckFilled, CircleCloseFilled } from "@element-plus/icons-vue";
// import certDialog from './cert_form.vue'
export default {
name: "user",
components: {
saveDialog,
// certDialog,
},
data() {
return {
dialog: {
save: false,
// certSave:false,
},
query: {},
baseUrl : baseUrl.API_URL,
type: "add",
titleMap: {
add: "新增用户",
edit: "编辑用户",
show: "查看",
},
//
addForm: {
id: "",
username: "",
name: "",
// email: "",
phone: "",
// belong_dept: [],
is_active:true
},
//
rules: {
username: [{required: true, message: "请输入登录账号"}],
name: [{required: true, message: "请输入真实姓名"}],
group: [{required: true, message: "请选择所属角色"}],
},
//
groups: [],
groupsProps: {
value: "id",
multiple: false,
checkStrictly: true,
},
isSaveing: false,
limitedVisible: false,
showGrouploading: false,
groupFilterText: "",
group: [],
userList: [],
selection: [],
search: {
name: null,
},
imageUrl: "",
filterParams: {},
tableParams: {},
apiObj: this.$API.system.user.list,
temp:[],
postList:[],
};
},
watch: {
groupFilterText(val) {
this.$refs.group.filter(val);
},
},
mounted() {
this.getGroup();
},
methods: {
//
async getGroup() {
let res = await this.$API.system.dept.list.req({page: 0});
this.group = genTree(res);
},
getImgUrl (img) {
return 'http://49.232.14.174:2226'+ img;
},
//
add() {
this.type = "add";
this.limitedVisible = true;
this.addForm = {};
},
//
formEdit(row,index) {
console.log(row);
this.limitedVisible = true;
if(index==='1'){
this.type = "show";
}else{
this.type = "edit";
}
this.addForm.id = row.id;
this.addForm.name = row.name;
this.addForm.username = row.username;
this.addForm.phone = row.phone;
this.addForm.is_active = row.is_active;
},
formSetting(row){
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open().setData(row)
export default {
name: "user",
components: {
saveDialog,
// certDialog,
},
data() {
return {
dialog: {
save: false,
// certSave:false,
},
query: {},
baseUrl: baseUrl.API_URL,
type: "add",
titleMap: {
add: "新增用户",
edit: "编辑用户",
show: "查看",
},
//
addForm: {
id: "",
username: "",
name: "",
// email: "",
phone: "",
// belong_dept: [],
is_active: true,
},
//
rules: {
username: [{ required: true, message: "请输入登录账号" }],
name: [{ required: true, message: "请输入真实姓名" }],
group: [{ required: true, message: "请选择所属角色" }],
},
//
groups: [],
groupsProps: {
value: "id",
multiple: false,
checkStrictly: true,
},
isSaveing: false,
limitedVisible: false,
showGrouploading: false,
groupFilterText: "",
group: [],
userList: [],
selection: [],
search: {
name: null,
},
imageUrl: "",
filterParams: {},
tableParams: {},
apiObj: this.$API.system.user.list,
temp: [],
postList: [],
userTypeOptions :{
'employee': '企业员工',
'remployee': '相关方',
'visitor': '访客'
},
idArr: []
};
},
watch: {
groupFilterText(val) {
this.$refs.group.filter(val);
},
},
mounted() {
this.getGroup();
},
methods: {
//
async getGroup() {
let res = await this.$API.system.dept.list.req({ page: 0 });
this.group = genTree(res);
this.group.forEach(m=>{
this.idArr.push(m.id)
})
},
getImgUrl(img) {
return "http://49.232.14.174:2226" + img;
},
//
add() {
this.type = "add";
this.limitedVisible = true;
this.addForm = {};
},
//
formEdit(row, index) {
console.log(row);
this.limitedVisible = true;
if (index === "1") {
this.type = "show";
} else {
this.type = "edit";
}
this.addForm.id = row.id;
this.addForm.name = row.name;
this.addForm.username = row.username;
this.addForm.phone = row.phone;
this.addForm.is_active = row.is_active;
},
formSetting(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open().setData(row);
});
},
//
//Addcertificate(row){
// this.dialog.certSave = true;
// this.$nextTick(() => {
// this.$refs.certDialog.open().setData(row)
})
},
//
//Addcertificate(row){
// this.dialog.certSave = true;
// this.$nextTick(() => {
// this.$refs.certDialog.open().setData(row)
// })
// })
// },
//
table_show(row) {
this.limitedVisible = true;
this.type = "show";
this.addForm.id = row.id;
},
//
async table_del(row) {
let res = await this.$API.system.user.delete.req(row.id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
selectionChange(selection) {
this.selection = selection;
},
// },
//
table_show(row) {
this.limitedVisible = true;
this.type = "show";
this.addForm.id = row.id;
},
//
async table_del(row) {
let res = await this.$API.system.user.delete.req(row.id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//
selectionChange(selection) {
this.selection = selection;
},
//
groupFilterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
//
groupClick(data) {
console.log(data);
// debugger;
let params = { belong_dept: data.id };
this.$refs.table.reload(params);
},
//
handleQuery() {
this.$refs.table.queryData(this.query);
},
//
submit() {
// debugger;
this.$refs.addForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
let res;
if (this.type === "add") {
res = await this.$API.system.user.create.req(this.addForm);
} else if (this.type === "edit") {
res = await this.$API.system.user.update.req(
this.addForm.id,
this.addForm
);
}
this.isSaveing = false;
if (res.err_msg) {
this.$message(res.err_msg);
} else {
this.limitedVisible = false;
this.$refs.table.refresh()
this.$message.success("操作成功");
}
} else {
return false;
}
});
},
//
groupFilterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
//
groupClick(data) {
console.log(data);
// debugger;
let params = {belong_dept: data.id};
this.$refs.table.reload(params);
},
//
handleQuery() {
this.$refs.table.queryData(this.query)
},
//
submit(){
// debugger;
this.$refs.addForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
let res;
if(this.type==='add'){
res = await this.$API.system.user.create.req(this.addForm);
}else if(this.type==='edit'){
res = await this.$API.system.user.update.req(this.addForm.id,this.addForm);
}
this.isSaveing = false;
if(res.err_msg){
this.$message(res.err_msg);
}else{
this.limitedVisible = false;
this.$message.success("操作成功")
}
}else{
return false;
}
})
},
//
handleSaveSuccess(){
this.$refs.table.refresh()
},
},
};
//
handleSaveSuccess() {
this.$refs.table.refresh();
},
},
};
</script>
<style></style>

View File

@ -96,12 +96,8 @@
<script>
import { genTree } from "@/utils/verificate";
import selectUser from "@/layout/components/userselect";
export default {
emits: ["success", "closed"],
components: {
selectUser,
},
data() {
return {
loading: false,

View File

@ -64,19 +64,19 @@
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="接待人">
<el-select v-model="form.receptionist" disabled placeholder="选择接待人">
<span style="display:flex">
<el-input readonly v-model="receptionist_name"></el-input>
<!-- <el-select v-model="form.receptionist" disabled placeholder="选择接待人">
<el-option
v-for="item in receptionistoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<select-user ref="form.receptionist" :user="form.receptionist" :closable="true" :multiple="false" @submit="refresh" >
</select-user>
</el-select> -->
<ehsUserSelect :multiple="false" @submit="getReceptionist" >
</ehsUserSelect >
</span>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
@ -125,12 +125,8 @@
<script>
import { genTree } from "@/utils/verificate";
import selectUser from '@/layout/components/userselect'
export default {
emits: ["success", "closed"],
components: {
selectUser,
},
data() {
return {
loading: false,
@ -160,22 +156,13 @@ export default {
{ id: 40, name: "开会" },
],
receptionistoptions: [],
receptionist_name: null,
};
},
mounted() {
this.getUser();
},
methods: {
//访
getUser() {
this.$API.system.user.list.req({ page: 0 }).then((res) => {
this.receptionistoptions = res;
});
},
//
open(mode = "add") {
@ -186,10 +173,10 @@ export default {
refresh(data) {
getReceptionist(data) {
//
console.log(data);
this.form.receptionist=data;
this.form.receptionist=data.id;
this.receptionist_name=data.name
},

View File

@ -3,7 +3,7 @@
<el-header>
<el-steps
:active="active"
style="width: 100%"
style="width: 100%;margin-top:16px"
:align-center="true"
finish-status="success"
>
@ -100,40 +100,18 @@
</el-col>
<el-col :md="8" :sm="24" :xs="24">
<el-form-item label="接待人">
<el-select
v-model="form.receptionist"
disabled
placeholder="选择接待人"
>
<el-option
v-for="item in receptionistoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<select-user
ref="form.receptionist"
:user="form.receptionist"
:closable="true"
:multiple="false"
@submit="refresh"
>
</select-user>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item>
<el-button style="margin-top: 12px" @click="handleNextStep"
>下一步</el-button
>
<span style="display:flex">
<el-input readonly v-model="form.receptionist_name"></el-input>
<ehsUserSelect :multiple="false" @submit="getReceptionist"/>
</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="margin-top:20px;text-align:center">
<el-button style="margin-top: 20px" @click="handleNextStep"
type="primary">下一步</el-button>
</div>
</el-main>
<!--选择人员!-->
@ -191,7 +169,7 @@
</template>
</el-table-column>
</scTable>
<sc-dialog v-model="dialogpeople" draggable title="创建来访人员">
<el-dialog v-model="dialogpeople" draggable title="创建来访人员">
<el-form
ref="dialofrom"
:model="formpeople"
@ -201,10 +179,10 @@
>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="访客姓名" prop="visitor">
<el-form-item label="访客" prop="visitor">
<el-select
v-model="formpeople.visitor"
placeholder="选择接待人"
placeholder="选择访客"
>
<el-option
v-for="item in visitoroptions"
@ -229,19 +207,19 @@
<el-button @click="dialogpeople = false"> </el-button>
<el-button type="primary" @click="submitpeople"> </el-button>
</template>
</sc-dialog>
<span> <el-button style="margin-top: 20px" @click="handleLastStep"
>上一步</el-button
> </span>
</el-dialog>
<div style="margin-top:20px;text-align:center">
<el-button @click="handleLastStep"
style="margin-right:4px">上一步</el-button
>
<span v-for=" item in initform.transitions" :key="item.id">
<el-button style="margin-top: 20px" @click="submitticket(item.id)"
>{{item.name}}</el-button
<el-button @click="submitticket(item.id)"
style="margin-right:4px" type="primary">{{item.name}}</el-button
>
</span>
<span>
<el-button style="margin-top: 20px" @click="submitOut">退出</el-button> </span>
<el-button @click="submitOut" type="warning">退出</el-button>
</div>
</el-main>
</el-container>
</template>
@ -268,7 +246,6 @@
</style>
<script>
import { genTree } from "@/utils/verificate";
import selectUser from "@/layout/components/userselect";
const defaultformworker = {
duty: "",
@ -277,7 +254,6 @@ const defaultformworker = {
};
export default {
name: "vistoradd",
components: { selectUser },
data() {
return {
active: 0,
@ -315,7 +291,7 @@ export default {
mounted() {
this.visitid = this.$route.query.visitid; //ID
this.getRpj();
this.getUser();
// this.getUser();
this.getpeoplelistlist();
this.getvisitorlist();
},
@ -326,12 +302,17 @@ export default {
this.form = res;
});
},
//
getUser() {
this.$API.system.user.list.req({ page: 0 }).then((res) => {
this.receptionistoptions = res;
});
getReceptionist(data) {
//
this.form.receptionist=data.id;
this.form.receptionist_name=data.name
},
//
// getUser() {
// this.$API.system.user.list.req({ page: 0 }).then((res) => {
// this.receptionistoptions = res;
// });
// },
//
getInit(){
this.$API.wf.workflow.initkey.req('visit').then((res) => {
@ -392,7 +373,7 @@ export default {
});
},
//访
//访
getvisitorlist() {
this.$API.vm.visitor.list.req({ page: 0 }).then((res) => {
this.visitoroptions = res;

View File

@ -86,7 +86,7 @@
projectId = row.ticket_data.opl;
}
this.$router.push({
name: "visitdetail",
name: "ticketdetail",
query: {
id: row.id,
type: 'show',

View File

@ -3,28 +3,32 @@
<el-main class="nopadding">
<scTable
ref="table"
:data="list"
:apiObj = "apiObj"
:params = "params"
row-key="id"
stripe
highlightCurrentRow
hidePagination
>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="工单标题" prop="title"></el-table-column>
<el-table-column label="流水号" prop="sn"></el-table-column>
<el-table-column label="当前状态">
<el-table-column label="ID" prop="id" width="180"></el-table-column>
<el-table-column label="流水号" prop="sn" width="180"></el-table-column>
<el-table-column label="工单标题" prop="title" width="180"></el-table-column>
<el-table-column label="工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
</template>
</el-table-column>
<el-table-column label="所在节点">
<template #default="scope">
{{ scope.row.state_.name }}
</template>
</el-table-column>
<el-table-column label="进行状态" prop="sort">
<template #default="scope">
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="关联工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
<el-tag
:type="scope.row.act_state===0?'':scope.row.act_state===1?'':scope.row.act_state===2?'danger':scope.row.act_state===3?'danger':scope.row.act_state===5?'danger':scope.row.act_state===4?'success':''"
>{{act_states[scope.row.act_state]}}</el-tag>
</template>
</el-table-column>
<el-table-column label="处理人类型">
@ -32,7 +36,7 @@
{{ participant_[scope.row.participant_type] }}
</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="创建时间" prop="create_time" width="150"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button text size="small" type="primary" @click="handleShow(scope.row)">查看详情</el-button>
@ -48,9 +52,9 @@
name: "state",
data() {
return {
list: [],
actstate_: {
apiObj: this.$API.wf.ticket.list,
params: {"category": "cc"},
act_states: {
0: "草稿中",
1: "进行中",
2: "被退回",
@ -66,14 +70,8 @@
};
},
mounted() {
this.getList();
},
methods: {
async getList() {
let res = await this.$API.wf.ticket.list.req({category: "cc", page: 0});
console.log(res);
this.list = res;
},
handleShow(row) {
let cateType = row.workflow_.key;
let projectId = '', operation = null;
@ -86,7 +84,7 @@
projectId = row.ticket_data.opl;
}
this.$router.push({
name: "visitdetail",
name: "ticketdetail",
query: {
id: row.id,
type: 'show',

View File

@ -3,28 +3,32 @@
<el-main class="nopadding">
<scTable
ref="table"
:data="list"
:apiObj="apiObj"
:params="params"
row-key="id"
stripe
highlightCurrentRow
hidePagination
>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="工单标题" prop="title"></el-table-column>
<el-table-column label="流水号" prop="sn"></el-table-column>
<el-table-column label="当前状态">
<el-table-column label="ID" prop="id" width="180"></el-table-column>
<el-table-column label="流水号" prop="sn" width="180"></el-table-column>
<el-table-column label="工单标题" prop="title" width="180"></el-table-column>
<el-table-column label="工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
</template>
</el-table-column>
<el-table-column label="所在节点">
<template #default="scope">
{{ scope.row.state_.name }}
</template>
</el-table-column>
<el-table-column label="进行状态" prop="sort">
<template #default="scope">
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="关联工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
<el-tag
:type="scope.row.act_state===0?'':scope.row.act_state===1?'':scope.row.act_state===2?'danger':scope.row.act_state===3?'danger':scope.row.act_state===5?'danger':scope.row.act_state===4?'success':''"
>{{act_states[scope.row.act_state]}}</el-tag>
</template>
</el-table-column>
<el-table-column label="处理人类型">
@ -32,11 +36,12 @@
{{ participant_[scope.row.participant_type] }}
</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="创建时间" prop="create_time" width="150"></el-table-column>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
text
link
size="small"
v-if="(scope.row.act_state===1||scope.row.act_state===3)&&scope.row.state_.type===0"
type="primary"
@click="handleDetail(scope.row)"
@ -44,15 +49,17 @@
处理
</el-button>
<el-button v-if="scope.row.state_.distribute_type===1&&scope.row.participant_type===2"
type="text" size="small" @click="handleAccept(scope.row)">
link type="success" size="small" @click="handleAccept(scope.row)">
接单
</el-button>
<el-link
<el-button
type="success"
link
size="small"
@click="handleLogs(scope.row)"
>
工单日志
</el-link>
</el-button>
</template>
</el-table-column>
</scTable>
@ -73,8 +80,9 @@
name: "state",
data() {
return {
list: [],
actstate_: {
apiObj: this.$API.wf.ticket.list,
params: {"category": "duty"},
act_states: {
0: "草稿中",
1: "进行中",
2: "被退回",
@ -93,14 +101,8 @@
};
},
mounted() {
this.getList();
},
methods: {
async getList() {
let res = await this.$API.wf.ticket.list.req({category: "duty", page: 0});
console.log(res);
this.list = res;
},
//
handleDetail(row) {
let projectId = '', operation = null;
@ -112,7 +114,7 @@
operation = row.ticket_data.operation ? row.ticket_data.operation : null;
}
this.$router.push({
name: "visitdetail",
name: "ticketdetail",
query: {
id: row.id,
projectId: projectId,
@ -139,7 +141,7 @@
this.$API.wf.ticket.ticketAccept.req(row.id, {}).then(res => {
if (res.err_msg) {
} else {
this.getList();
this.$refs.table.refresh()
}
})
},

View File

@ -3,28 +3,32 @@
<el-main class="nopadding">
<scTable
ref="table"
:data="list"
:apiObj="apiObj"
:params="params"
row-key="id"
stripe
highlightCurrentRow
hidePagination
>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="工单标题" prop="title"></el-table-column>
<el-table-column label="流水号" prop="sn"></el-table-column>
<el-table-column label="当前状态">
<el-table-column label="ID" prop="id" width="180"></el-table-column>
<el-table-column label="流水号" prop="sn" width="180"></el-table-column>
<el-table-column label="工单标题" prop="title" width="180"></el-table-column>
<el-table-column label="工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
</template>
</el-table-column>
<el-table-column label="所在节点">
<template #default="scope">
{{ scope.row.state_.name }}
</template>
</el-table-column>
<el-table-column label="进行状态" prop="sort">
<template #default="scope">
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="关联工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
<el-tag
:type="scope.row.act_state===0?'':scope.row.act_state===1?'':scope.row.act_state===2?'danger':scope.row.act_state===3?'danger':scope.row.act_state===5?'danger':scope.row.act_state===4?'success':''"
>{{act_states[scope.row.act_state]}}</el-tag>
</template>
</el-table-column>
<el-table-column label="处理人类型">
@ -32,26 +36,30 @@
{{ participant_[scope.row.participant_type] }}
</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="创建时间" prop="create_time" width="150"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="160">
<template #default="scope">
<el-button text size="small" type="primary" @click="handleShow(scope.row)">查看详情</el-button>
<el-button text size="small" type="primary" @click="handleShow(scope.row)">查看</el-button>
<!--创建人在初始状态-->
<el-link
<el-button
v-if="scope.row.state_.type===1&&userId===scope.row.create_by"
type="danger"
size="small"
link
@click="handleClose(scope,'2')"
>
关闭
</el-link>
</el-button>
<!--如果state_.retreat/state_.type==1处于草稿状态 -->
<el-link
<el-button
v-if="scope.row.state_.enable_retreat&&userId===scope.row.create_by&&scope.row.state_.type!==1"
type="danger"
@click="handleClose(scope,'1')"
size="small"
link
>
撤回
</el-link>
</el-button>
</template>
</el-table-column>
</scTable>
@ -75,9 +83,10 @@
name: "state",
data() {
return {
list: [],
apiObj: this.$API.wf.ticket.list,
params: {"category": "owner"},
userId: this.$TOOL.data.get("USER_INFO").id,
actstate_: {
act_states: {
0: "草稿中",
1: "进行中",
2: "被退回",
@ -100,8 +109,6 @@
};
},
mounted() {
this.getList();
this.userId = this.$TOOL.data.get("USER_INFO").id;
},
methods: {
handleShow(row) {
@ -116,7 +123,7 @@
projectId = row.ticket_data.opl;
}
this.$router.push({
name: "visitdetail",
name: "ticketdetail",
query: {
id: row.id,
type: 'show',
@ -126,11 +133,6 @@
},
});
},
async getList() {
let res = await this.$API.wf.ticket.list.req({category: "owner", page: 0});
console.log(res);
this.list = res;
},
handleClose(scope, index) {
if (index === '1') {
this.handleTitle = '撤回工单';
@ -160,10 +162,10 @@
res = that.$API.wf.ticket.ticketClose.req(that.ticketId, that.handleForm);
}
if (res.err_msg) {
that.getList();
that.$refs.table.refresh()
} else {
that.limitedRetreat = false;
that.getList();
that.$refs.table.refresh()
}
})
.catch((err) => {

View File

@ -207,17 +207,15 @@
<script>
import workDetails from "./details.vue";
import workStep from "./steps.vue";
import showDialog from "./../rpm/rpj_show.vue";
import selectUser from '@/layout/components/userselect'
import showDialog from "../rpm/rpj_show.vue";
export default {
components: {
workDetails,
workStep,
selectUser,
showDialog
},
name: "visitdetail",
name: "ticketdetail",
data() {
return {
ticketId: "",//id

View File

@ -3,28 +3,32 @@
<el-main class="nopadding">
<scTable
ref="table"
:data="list"
:apiObj="apiObj"
:params="params"
row-key="id"
stripe
highlightCurrentRow
hidePagination
>
<el-table-column label="ID" prop="id"></el-table-column>
<el-table-column label="工单标题" prop="title"></el-table-column>
<el-table-column label="流水号" prop="sn"></el-table-column>
<el-table-column label="当前状态">
<el-table-column label="ID" prop="id" width="180"></el-table-column>
<el-table-column label="流水号" prop="sn" width="180"></el-table-column>
<el-table-column label="工单标题" prop="title" width="180"></el-table-column>
<el-table-column label="工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
</template>
</el-table-column>
<el-table-column label="所在节点">
<template #default="scope">
{{ scope.row.state_.name }}
</template>
</el-table-column>
<el-table-column label="进行状态" prop="sort">
<template #default="scope">
{{ actstate_[scope.row.act_state] }}
</template>
</el-table-column>
<el-table-column label="关联工作流" prop="title">
<template #default="scope">
{{ scope.row.workflow_.name }}
<el-tag
:type="scope.row.act_state===0?'':scope.row.act_state===1?'':scope.row.act_state===2?'danger':scope.row.act_state===3?'danger':scope.row.act_state===5?'danger':scope.row.act_state===4?'success':''"
>{{act_states[scope.row.act_state]}}</el-tag>
</template>
</el-table-column>
<el-table-column label="处理人类型">
@ -32,7 +36,7 @@
{{ participant_[scope.row.participant_type] }}
</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="创建时间" prop="create_time" width="150"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="100">
<template #default="scope">
<el-button text size="small" type="primary" @click="handleShow(scope.row)">查看详情</el-button>
@ -48,8 +52,9 @@
name: "state",
data() {
return {
list: [],
actstate_: {
apiObj: this.$API.wf.ticket.list,
params: {"category": "worked"},
act_states: {
0: "草稿中",
1: "进行中",
2: "被退回",
@ -65,14 +70,8 @@
};
},
mounted() {
this.getList();
},
methods: {
async getList() {
let res = await this.$API.wf.ticket.list.req({category: "worked", page: 0});
console.log(res);
this.list = res;
},
handleShow(row) {
let cateType = row.workflow_.key;
let projectId = '', operation = null;
@ -85,7 +84,7 @@
projectId = row.ticket_data.opl;
}
this.$router.push({
name: "visitdetail",
name: "ticketdetail",
query: {
id: row.id,
type: 'show',