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={}){ get: async function(data={}){
return await http.get(this.url, 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: { rpjfile: {
list: { list: {

View File

@ -142,7 +142,7 @@ export default {
}, },
role: { role: {
list: { list: {
url: `${config.API_URL}/system/role`, url: `${config.API_URL}/system/role/`,
name: "获取角色列表", name: "获取角色列表",
req: async function(data){ req: async function(data){
return await http.get(this.url, 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"> <el-card header="作业人员" style="margin-top:8px" shadow="hover">
<scTable <scTable
ref="workerTable" ref="workerTable"
:data="apiworkerObj" :data="workerData"
row-key="id" row-key="id"
hidePagination hidePagination
stripe stripe
@ -232,7 +232,7 @@
<el-card header="气体检测记录" style="margin-top: 8px" shadow="hover"> <el-card header="气体检测记录" style="margin-top: 8px" shadow="hover">
<scTable <scTable
ref="gasTable" ref="gasTable"
:data="apigasObj" :data="gasData"
row-key="id" row-key="id"
hidePagination hidePagination
stripe stripe
@ -337,10 +337,10 @@
{value: 40, label: "电工"}, {value: 40, label: "电工"},
], ],
certificatesOptions: [], certificatesOptions: [],
apiworkerObj: [], workerData: [],
workerdialog: false, workerdialog: false,
gasdialog: false, gasdialog: false,
apigasObj: [], gasData: [],
is_ok_: { is_ok_: {
true: "正常", true: "正常",
false: "不正常", false: "不正常",
@ -413,15 +413,15 @@
// }); // });
// }, // },
// //
getworkerList(id) { getworkerList() {
this.$API.opm.worker.list.req({opl: id, page: 0}).then((res) => { this.$API.opm.worker.list.req({opl: this.oplId, page: 0}).then((res) => {
this.apiworkerObj = res; this.workerData = res;
}); });
}, },
// //
getgasList(id) { getgasList() {
this.$API.opm.gas.list.req({opl: id, page: 0}).then((res) => { this.$API.opm.gas.list.req({opl: this.oplId, page: 0}).then((res) => {
this.apigasObj = res; this.gasData = res;
}); });
}, },
}, },

View File

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

View File

@ -5,7 +5,7 @@ import tool from '@/utils/tool'
export default { export default {
successCode: 200, //请求完成代码 successCode: 200, //请求完成代码
pageSize: 20, //表格每一页条数 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" paginationLayout: "total, sizes, prev, pager, next, jumper", //表格分页布局,可设置"total, sizes, prev, pager, next, jumper"
parseData: function (res) { //数据分析 parseData: function (res) { //数据分析
return { 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/dist/index.css'
import 'element-plus/theme-chalk/display.css' import 'element-plus/theme-chalk/display.css'
import scui from './scui' import scui from './scui'
import ehsui from './ehs'
import i18n from './locales' import i18n from './locales'
import router from './router' import router from './router'
import store from './store' import store from './store'
@ -16,6 +17,7 @@ app.use(router);
app.use(ElementPlus); app.use(ElementPlus);
app.use(i18n); app.use(i18n);
app.use(scui); app.use(scui);
app.use(ehsui);
//挂载app //挂载app
app.mount('#app'); app.mount('#app');

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -23,6 +23,7 @@
highlightCurrentRow highlightCurrentRow
@row-click="rowClick" @row-click="rowClick"
:hidePagination="true" :hidePagination="true"
hideDo
> >
<el-table-column <el-table-column
label="#" label="#"
@ -108,6 +109,7 @@
row-key="id" row-key="id"
stripe stripe
:hidePagination="true" :hidePagination="true"
hideDo
> >
<el-table-column label="#" type="index" fixed="left" width="50"></el-table-column> <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"> <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> <el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template> </template>
</el-table-column> </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"> <template #default="scope">
<el-icon v-if="scope.row.wechat_enable" color="green" <el-icon v-if="scope.row.wechat_enable" color="green"
><CircleCheckFilled ><CircleCheckFilled
/></el-icon> /></el-icon>
<el-icon v-else color="red"><CircleCloseFilled /></el-icon> <el-icon v-else color="red"><CircleCloseFilled /></el-icon>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column label="操作" fixed="right" align="right"> <el-table-column label="操作" fixed="right" align="right">
<template #default="scope"> <template #default="scope">
<el-button <el-button
@ -256,7 +259,7 @@ export default {
}; };
}, },
mounted() { mounted() {
this.apiObj2 = this.$API.ecm.notify_setting.list; // this.apiObj2 = this.$API.ecm.notify_setting.list;
}, },
methods: { methods: {
rowClick(row) { rowClick(row) {
@ -265,7 +268,7 @@ export default {
}; };
this.apiObj2 = this.$API.ecm.notify_setting.list; this.apiObj2 = this.$API.ecm.notify_setting.list;
this.chosen_cate = row.id; this.chosen_cate = row.id;
this.$refs.table2.reload(params); this.$refs.table2.queryData(params);
}, },
// //
add() { add() {
@ -306,9 +309,11 @@ export default {
// //
this.$refs.table.refresh(); this.$refs.table.refresh();
this.dialog.save = false;
}, },
handleSaveSuccess2() { handleSaveSuccess2() {
this.$refs.table2.refresh(); this.$refs.table2.refresh();
this.dialog2.save = false;
}, },
}, },
}; };

View File

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

View File

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

View File

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

View File

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

View File

@ -32,7 +32,7 @@
</el-form-item> </el-form-item>
<el-form-item style="margin-bottom: 10px"> <el-form-item style="margin-bottom: 10px">
<el-col :span="12" class="login-reg"> <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>
<el-col :span="12" class="login-forgot"> <el-col :span="12" class="login-forgot">
<router-link to="/reset_password" <router-link to="/reset_password"

View File

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

View File

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

View File

@ -109,12 +109,25 @@
label-width="120px" label-width="120px"
> >
<el-row> <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-col :md="12" :sm="24">
<el-form-item label="证书名称" prop="name"> <el-form-item label="证书名称" prop="name">
<el-input <el-input
v-model="form.name" v-model="form.name"
placeholder="请输入证书名称" placeholder="请输入证书名称"
clearable clearable
:disabled="mode != 'add'"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -124,12 +137,13 @@
v-model="form.number" v-model="form.number"
placeholder="请输入证书编号" placeholder="请输入证书编号"
clearable clearable
:disabled="mode != 'add'"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="证书类型" prop="type"> <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 <el-option
v-for="item in typeoptions" v-for="item in typeoptions"
:key="item.id" :key="item.id"
@ -170,18 +184,6 @@
/> />
</el-form-item> </el-form-item>
</el-col> </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-col :md="24" :sm="12" :xs="24">
<el-form-item label="上传证书"> <el-form-item label="上传证书">
<sc-upload-file <sc-upload-file
@ -237,6 +239,7 @@ export default {
this.$refs.table.queryData(this.query); this.$refs.table.queryData(this.query);
}, },
handleForm(type, row) { handleForm(type, row) {
this.mode = type
if (type === "add") { if (type === "add") {
this.dialogcart = true; this.dialogcart = true;
this.form = Object.assign({}, defaultform); 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="#" 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="name" ></el-table-column>
<el-table-column label="手机号" prop="phone" ></el-table-column> <el-table-column label="手机号" prop="phone" ></el-table-column>
<el-table-column label="身份证号" prop="id_number" ></el-table-column> <el-table-column label="身份证号" prop="id_number" ></el-table-column>
@ -49,13 +50,13 @@
@click="table_show(scope.row, scope.$index)" @click="table_show(scope.row, scope.$index)"
>查看</el-button >查看</el-button
> >
<!-- <el-button <el-button
link link
type="warning" type="warning"
size="small" size="small"
@click="table_edit(scope.row, scope.$index)" @click="table_edit(scope.row, scope.$index)"
>编辑</el-button >编辑</el-button
>--> >
<el-popconfirm <el-popconfirm
title="确定删除吗?" title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)" @confirm="table_del(scope.row, scope.$index)"

View File

@ -37,13 +37,13 @@
</el-col> </el-col>
<el-col :md="24" :sm="12" :xs="24"> <el-col :md="24" :sm="12" :xs="24">
<el-form-item label="身份证号"> <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-form-item>
</el-col> </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-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 <el-option
v-for="item in rpartyOptions" v-for="item in rpartyOptions"
:key="item.id" :key="item.id"
@ -95,14 +95,22 @@ export default {
isSaveing: false, isSaveing: false,
selectionFilters: [], selectionFilters: [],
setFiltersVisible: false, setFiltersVisible: false,
rpartyOptions: [] rpartyOptions: [],
rparty_show: false
}; };
}, },
mounted() { mounted() {
this.getRpartyOptions(); this.rpartyShow()
}, },
methods: { methods: {
rpartyShow(){
var userInfo = this.$TOOL.data.get("USER_INFO");
if(userInfo.type=='employee'){
this.rparty_show = true
this.getRpartyOptions();
}
},
// //
open(mode = "add") { open(mode = "add") {
this.mode = mode; 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" width="180"
></el-table-column> --> ></el-table-column> -->
<el-table-column <el-table-column
label="账号" label="管理员"
prop="admin_username" prop="admin_username"
></el-table-column> ></el-table-column>
@ -91,9 +91,15 @@
</scTable> </scTable>
</el-main> </el-main>
</el-container> </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 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-input v-model="adminform.username"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -101,7 +107,7 @@
<el-button @click="adminvisible = false"> </el-button> <el-button @click="adminvisible = false"> </el-button>
<el-button type="primary" @click="submitAdmin"> </el-button> <el-button type="primary" @click="submitAdmin"> </el-button>
</template> </template>
</sc-dialog> </el-dialog>
<save-dialog <save-dialog
v-if="dialog.save" v-if="dialog.save"
ref="saveDialog" ref="saveDialog"
@ -137,9 +143,14 @@ export default {
// //
rules: { rules: {
phone: [ phone: [
{required: true, message: '请输入账户名称'} {required: true, message: '请输入'}
],
name: [
{required: true, message: '请输入'}
],
username: [
{required: true, message: '请输入'}
], ],
}, },
}; };
}, },
@ -180,6 +191,7 @@ export default {
).then((res) => { ).then((res) => {
this.$message.success("账号分配成功"); this.$message.success("账号分配成功");
this.adminvisible = false; this.adminvisible = false;
this.$refs.table.refresh()
}) })
.catch((err) => { .catch((err) => {

View File

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

View File

@ -1,241 +1,312 @@
<template> <template>
<el-container> <el-container>
<el-header> <el-header>
<div class="left-panel"> <div class="left-panel">
<el-button type="primary" icon="el-icon-plus" @click="addDept" v-auth="'dept.create'"></el-button> <el-button
<el-button type="danger" plain icon="el-icon-delete" v-auth="'dept.delete'" :disabled="selection.length==0" @click="batch_del"></el-button> type="primary"
</div> icon="el-icon-plus"
<div class="right-panel"> @click="addDept"
<div class="right-panel-search"> v-auth="'dept.create'"
<el-input v-model="query.search" placeholder="部门名称"></el-input> ></el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button> <el-button
</div> type="danger"
</div> plain
</el-header> icon="el-icon-delete"
<el-main class="nopadding"> v-auth="'dept.delete'"
<scTable ref="table" :isTree="true" :apiObj="apiObj" row-key="id" @selection-change="selectionChange" stripe default-expand-all hidePagination> :disabled="selection.length == 0"
<!-- <el-table-column type="selection" width="50"></el-table-column> --> @click="batch_del"
<el-table-column label="#" type="index" width="50"></el-table-column> ></el-button>
<el-table-column label="部门名称" prop="name" min-width="200"></el-table-column> </div>
<el-table-column label="部门类型" prop="type" min-width="200"></el-table-column> <div class="right-panel">
<el-table-column label="创建日期" prop="create_time" min-width="200"></el-table-column> <div class="right-panel-search">
<el-table-column label="操作" fixed="right" align="center" width="200"> <el-input v-model="query.search" placeholder="部门名称"></el-input>
<template #default="scope"> <el-button
<el-button link type="primary" size="small" @click="editDept(scope.row, scope.$index)" v-auth="'dept.update'">编辑</el-button> type="primary"
<el-divider direction="vertical"></el-divider> icon="el-icon-search"
<el-popconfirm title="确定删除吗?" @confirm="delDept(scope.row, scope.$index)"> @click="handleQuery"
<template #reference> ></el-button>
<el-button link type="danger" size="small" v-auth="'dept.delete'">删除</el-button> </div>
</template> </div>
</el-popconfirm> </el-header>
</template> <el-main class="nopadding">
</el-table-column> <scTable
</scTable> ref="table"
</el-main> :isTree="true"
</el-container> :apiObj="apiObj"
<el-dialog :title="titleMap[type]" v-model="limitedVisible" :width="600"> row-key="id"
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="100px" label-position="left"> @selection-change="selectionChange"
<el-form-item label="部门名称" prop="name"> stripe
<el-input v-model="addForm.name" clearable></el-input> default-expand-all
</el-form-item> hidePagination
<el-form-item label="上级部门"> >
<el-cascader <!-- <el-table-column type="selection" width="50"></el-table-column> -->
v-model="addForm.parent" <el-table-column label="#" type="index" width="50"></el-table-column>
:options="group" <el-table-column
:props="groupsProps" label="部门名称"
:show-all-levels="false" prop="name"
clearable min-width="200"
style="width: 100%" ></el-table-column>
@change="handleChange" <el-table-column label="部门类型" prop="type" min-width="200">
></el-cascader> <template #default="scope">
<!--<el-input v-model="addForm.parent" clearable></el-input>--> {{ deptTypeOptions[scope.row.type] }}
</el-form-item> </template>
<el-form-item label="类型"> </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-select v-model="addForm.type" placeholder="Select" style="width: 100%;">
<el-option label="公司" value="company"></el-option> <el-option label="公司" value="company"></el-option>
<el-option label="部门" value="dept"></el-option> <el-option label="部门" value="dept"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="排序"> <el-form-item label="排序">
<el-input-number v-model="addForm.sort" controls-position="right" :min="1" style="width: 100%;"></el-input-number> <el-input-number
</el-form-item> v-model="addForm.sort"
</el-form> controls-position="right"
<template #footer> :min="1"
<el-button @click="limitedVisible=false" > </el-button> style="width: 100%"
<el-button type="primary" :loading="isSaving" @click="submitHandle()"> </el-button> ></el-input-number>
</template> </el-form-item>
</el-dialog> </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> </template>
<script> <script>
import {genTree} from "@/utils/verificate"; import { genTree } from "@/utils/verificate";
export default { export default {
name: 'dept', name: "dept",
data() { data() {
return { return {
dialog: { dialog: {
save: false, save: false,
permission: false permission: false,
}, },
apiObj: this.$API.system.dept.list, apiObj: this.$API.system.dept.list,
selection: [], selection: [],
query:{}, query: {},
search: { search: {
keyword: null keyword: null,
}, },
params:{}, params: {},
isSaving: false, isSaving: false,
limitedVisible : false, limitedVisible: false,
type: "add", type: "add",
titleMap: { titleMap: {
add: '新增', add: "新增",
edit: '编辑', edit: "编辑",
}, },
// //
addForm: { addForm: {
id:"", id: "",
name: "", name: "",
type: "dept", type: "dept",
sort: 1, sort: 1,
parent: "", parent: "",
}, },
// //
rules: { rules: {
name: [ name: [{ required: true, message: "请输入部门名称" }],
{required: true, message: '请输入部门名称'} },
], groupsProps: {
}, // value: "id",
groupsProps: { multiple: false,
// value: "id", emitPath: false,
multiple: false, checkStrictly: true,
emitPath: false, },
checkStrictly: true, group: [],
}, postList: [],
group: [], temp: [],
postList: [], deptTypeOptions: {
temp:[] dept: "本部",
} rparty: "相关方",
}, },
};
},
mounted() { mounted() {
this.getGroup(); this.getGroup();
}, },
methods: { methods: {
handleChange(value) { handleChange(value) {
// this.menu.checked = check.checkedKeys; // this.menu.checked = check.checkedKeys;
//debugger; //debugger;
console.log(value); console.log(value);
console.log(this.addForm.parent); console.log(this.addForm.parent);
}, },
// //
async getGroup() { async getGroup() {
let res = await this.$API.system.dept.list.req({page: 0}); let res = await this.$API.system.dept.list.req({ page: 0 });
this.group = genTree(res); this.group = genTree(res);
}, },
// //
addDept(){ addDept() {
this.type='add'; this.type = "add";
this.limitedVisible = true; this.limitedVisible = true;
}, },
// //
editDept(row){ editDept(row) {
// debugger; // debugger;
this.temp = []; this.temp = [];
this.type='edit'; this.type = "edit";
this.addForm.id=row.id; this.addForm.id = row.id;
this.addForm.name=row.name; this.addForm.name = row.name;
this.addForm.parent=row.parent; this.addForm.parent = row.parent;
this.addForm.type=row.type+""; this.addForm.type = row.type + "";
this.addForm.sort=row.sort; this.addForm.sort = row.sort;
this.limitedVisible = true; this.limitedVisible = true;
}, },
// //
delDept(row){ delDept(row) {
let id = row.id; let id = row.id;
let res = this.$API.system.dept.delete.req(id); let res = this.$API.system.dept.delete.req(id);
if(res.err_msg){ if (res.err_msg) {
this.$message.error(res.err_msg) this.$message.error(res.err_msg);
}else{ } else {
this.$refs.table.refresh(); this.$refs.table.refresh();
this.$message.success("删除成功") this.$message.success("删除成功");
} }
}, },
submitHandle(){ submitHandle() {
let that = this; let that = this;
this.$refs.addForm.validate( (valid) => { this.$refs.addForm.validate((valid) => {
if (valid) { if (valid) {
this.isSaveing = true; this.isSaveing = true;
var res; var res;
if(this.type==='add'){ if (this.type === "add") {
res = this.$API.system.dept.create.req(that.addForm); res = this.$API.system.dept.create.req(that.addForm);
}else{ } else {
res = this.$API.system.dept.update.req(that.addForm.id,that.addForm); res = this.$API.system.dept.update.req(
} that.addForm.id,
console.log(res); that.addForm
debugger; );
if(res.err_msg){ }
this.$message.error(res.err_msg) console.log(res);
}else{ debugger;
this.isSaveing = false; if (res.err_msg) {
this.limitedVisible = false; this.$message.error(res.err_msg);
this.$refs.table.refresh(); } else {
} this.isSaveing = false;
} this.limitedVisible = false;
}) this.$refs.table.refresh();
}, }
// }
selectionChange(selection){ });
this.selection = selection; },
}, //
// selectionChange(selection) {
handleQuery(){ this.selection = selection;
this.$refs.table.queryData(this.search) },
}, //
handleQuery() {
this.$refs.table.queryData(this.search);
},
findParents(arr,parent){ findParents(arr, parent) {
let that = this; let that = this;
arr.forEach(item=>{ arr.forEach((item) => {
if(item.id===parent){ if (item.id === parent) {
that.temp.push(item.id); that.temp.push(item.id);
if(item.parent!==null){ if (item.parent !== null) {
this.findParents(arr,item.parent) this.findParents(arr, item.parent);
}else{ } else {
return that.temp return that.temp;
} }
} }
}); });
return that.temp return that.temp;
}, },
treeData(postList){ treeData(postList) {
let posts = []; let posts = [];
postList.forEach(item => { postList.forEach((item) => {
let obj = new Object(); let obj = new Object();
obj.id = item.id; obj.id = item.id;
obj.sort = item.sort; obj.sort = item.sort;
obj.label = item.name; obj.label = item.name;
obj.type = item.type; obj.type = item.type;
obj.parent = item.parent; obj.parent = item.parent;
obj.create_time = item.create_time; obj.create_time = item.create_time;
posts.push(obj) posts.push(obj);
}); });
let obj = posts.reduce((res, v) => (res[v.id] = v , res), {});//Object let obj = posts.reduce((res, v) => ((res[v.id] = v), res), {}); //Object
let arr = []; let arr = [];
for (let item of posts) { for (let item of posts) {
if (item.parent == null) { if (item.parent == null) {
arr.push(item); arr.push(item);
continue continue;
} }
let parent = obj[item.parent]; let parent = obj[item.parent];
parent.children = parent.children ? parent.children : []; parent.children = parent.children ? parent.children : [];
parent.children.push(item); parent.children.push(item);
} }
return arr; return arr;
}, },
} },
} };
</script> </script>
<style> <style>
</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'"> <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 type="selection" width="50"></el-table-column> -->
<el-table-column label="序号" type="index"></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="name" width="360"></el-table-column>
<el-table-column label="键值" prop="value" min-width="100"></el-table-column> <el-table-column label="标识" prop="code"></el-table-column>
<el-table-column label="描述" prop="description" min-width="100"></el-table-column> <el-table-column label="排序" prop="sort"></el-table-column>
<el-table-column label="是否有效" prop="yx" width="100"> <el-table-column label="是否有效" prop="is_used" width="80">
<template #default="scope"> <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> <el-icon v-if="scope.row.is_used" color="green"
</template> ><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="center" width="140"> <el-table-column label="操作" fixed="right" align="center" width="140">
<template #default="scope"> <template #default="scope">
<el-button link size="small" @click="editDic(scope.row)" v-auth="'dicttype.update'" type="primary">编辑</el-button> <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)"> <el-popconfirm title="确定删除吗?" @confirm="delDic(scope.row,scope.$index)">
<template #reference> <template #reference>
<el-button link size="small" v-auth="'dicttype.delete'" type="danger">删除</el-button> <el-button link size="small" v-auth="'dicttype.delete'" type="danger">删除</el-button>
@ -63,20 +65,20 @@
</el-container> </el-container>
</el-container> </el-container>
<el-dialog :title="titleMap[mode]" v-model="visibleDicType" destroy-on-close> <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 :model="typeForm" :rules="typeRules" ref="dialogTypeForm" label-width="80px">
<el-form-item label="编码" prop="code"> <el-form-item label="标识" prop="code">
<el-input v-model="typeForm.code" clearable placeholder="字典编码"></el-input> <el-input v-model="typeForm.code" clearable placeholder="字典编码"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="字典名称" prop="name"> <el-form-item label="字典名称" prop="name">
<el-input v-model="typeForm.name" clearable placeholder="字典显示名称"></el-input> <el-input v-model="typeForm.name" clearable placeholder="字典显示名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="父路径" prop="parentId"> <!-- <el-form-item label="父路径" prop="parentId">
<el-cascader <el-cascader
v-model="typeForm.parent" v-model="typeForm.parent"
:options="group" :options="group"
:props="dicProps" :props="dicProps"
:show-all-levels="false" clearable></el-cascader> :show-all-levels="false" clearable></el-cascader>
</el-form-item> </el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="visibleDicType=false" > </el-button> <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-input-number v-model="dicForm.sort" style="width: 100%;" clearable></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="是否有效"> <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-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -169,13 +171,13 @@
description:'', description:'',
type:'', type:'',
sort:'', sort:'',
is_used:'', is_used:true,
parent:'', parent:'',
}, },
dicRules:{ dicRules:{
value: [ // code: [
{required: true, message: '请输入字典值'} // {required: true, message: ''}
], // ],
name: [ name: [
{required: true, message: '请输入字典名称'} {required: true, message: '请输入字典名称'}
], ],
@ -385,10 +387,10 @@
async delDic(row,index){ async delDic(row,index){
var delId = row.id; var delId = row.id;
var res = await this.$API.system.dict.delete.req(delId); var res = await this.$API.system.dict.delete.req(delId);
if(res.err.msg){ if(res.err_msg){
this.$message.error(res.err.msg) this.$message.error(res.err_msg)
}else{ }else{
this.$refs.table.tableData.splice(index, 1); this.$refs.table.refresh();
this.$message.success("删除成功") this.$message.success("删除成功")
} }
}, },

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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