ticket&component
This commit is contained in:
parent
b2d50e536a
commit
490c0e489d
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
|
@ -82,6 +82,14 @@ export default {
|
|||
data);
|
||||
}
|
||||
},
|
||||
cateAgg: {
|
||||
name: "时间分类聚合",
|
||||
req: async function(data){
|
||||
return await http.post(
|
||||
`${config.API_URL}/ecm/event/cate_agg/`,
|
||||
data);
|
||||
}
|
||||
},
|
||||
}
|
||||
,
|
||||
|
||||
|
|
|
@ -99,8 +99,8 @@ export default {
|
|||
},
|
||||
ticketAccept: {
|
||||
name: "接单",
|
||||
req: async function(id){
|
||||
return await http.post(`${config.API_URL}/wf/ticket/${id}/accpet/`);
|
||||
req: async function(id,data){
|
||||
return await http.post(`${config.API_URL}/wf/ticket/${id}/accpet/`,data);
|
||||
}
|
||||
},
|
||||
addNodeEnd: {
|
||||
|
@ -118,7 +118,7 @@ export default {
|
|||
ticketClose: {
|
||||
name: "关闭工单",
|
||||
req: async function(id,data){
|
||||
return await http.post(`${config.API_URL}/wf/ticket/{id}/close/`,data);
|
||||
return await http.post(`${config.API_URL}/wf/ticket/${id}/close/`,data);
|
||||
}
|
||||
},
|
||||
ticketDeliver: {
|
||||
|
|
|
@ -0,0 +1,274 @@
|
|||
<template>
|
||||
<el-button
|
||||
v-if="selectable"
|
||||
type="primary"
|
||||
circle
|
||||
size="mini"
|
||||
icon="el-icon-plus"
|
||||
@click="showDialog()"
|
||||
/>
|
||||
|
||||
<el-dialog
|
||||
title="选择人员"
|
||||
width="80%"
|
||||
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="upsearch"
|
||||
></el-input>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="upsearch"
|
||||
></el-button>
|
||||
</div>
|
||||
</el-header>
|
||||
<el-main class="nopadding">
|
||||
<el-table
|
||||
ref="userTable"
|
||||
:data="apiObj"
|
||||
row-key="id"
|
||||
stripe
|
||||
height="400"
|
||||
@selection-change="selectionChange"
|
||||
>
|
||||
<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>
|
||||
</el-table>
|
||||
</el-main>
|
||||
<div class="right-panel">
|
||||
<el-button
|
||||
@click="handleClose"
|
||||
style="float: right"
|
||||
>取 消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="isSaveing"
|
||||
@click="submitfrom()"
|
||||
style="float: right;margin-right: 10px"
|
||||
>确定
|
||||
</el-button>
|
||||
</div>
|
||||
</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: "",
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
apiObj: [],
|
||||
query: {},
|
||||
selection: [],
|
||||
search: {
|
||||
keyword: null,
|
||||
},
|
||||
filterText: "",
|
||||
filterTexts: "",
|
||||
deptdata: [],
|
||||
postdata: [],
|
||||
username: [],
|
||||
selectable: true,
|
||||
dialoguser: false,
|
||||
isSaveing: 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)
|
||||
},
|
||||
|
||||
},
|
||||
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;
|
||||
});
|
||||
},
|
||||
upsearch() {
|
||||
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) {
|
||||
if (selection.length > 1) {
|
||||
let del_row = selection.shift();
|
||||
this.selection = selection[1];
|
||||
this.$refs.userTable.toggleRowSelection(del_row, false); // 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
|
||||
}else{
|
||||
this.selection = selection;
|
||||
}
|
||||
},
|
||||
|
||||
submitfrom() {
|
||||
if(this.selection.length===1){
|
||||
let obj={id:this.selection[0].id,name:this.selection[0].name};
|
||||
this.$emit("handlerSubmit", obj);
|
||||
this.dialoguser = false;
|
||||
}else{
|
||||
this.$message.warning('请选择您要加签的处理人')
|
||||
}
|
||||
},
|
||||
|
||||
resetQuery() {
|
||||
this.query = {};
|
||||
},
|
||||
handleClose(){
|
||||
this.$confirm(`您未更改人员,确定关闭吗?`, '提示', {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.dialoguser = false;
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
10
src/scui.js
10
src/scui.js
|
@ -14,6 +14,7 @@ import scFormTable from './components/scFormTable'
|
|||
import scTableSelect from './components/scTableSelect'
|
||||
import scPageHeader from './components/scPageHeader'
|
||||
import scSelect from './components/scSelect'
|
||||
import scUserSelect from './components/scSelect/userselect'
|
||||
import scDialog from './components/scDialog'
|
||||
import scForm from './components/scForm'
|
||||
import scTitle from './components/scTitle'
|
||||
|
@ -59,13 +60,14 @@ export default {
|
|||
app.component('scWaterMark', scWaterMark);
|
||||
app.component('scQrCode', scQrCode);
|
||||
app.component('scStatusIndicator', scStatusIndicator);
|
||||
app.component('scUserSelect', scUserSelect);
|
||||
app.component('scTrend', scTrend);
|
||||
|
||||
//注册全局指令
|
||||
app.directive('auth', auth)
|
||||
app.directive('role', role)
|
||||
app.directive('time', time)
|
||||
app.directive('copy', copy)
|
||||
app.directive('auth', auth);
|
||||
app.directive('role', role);
|
||||
app.directive('time', time);
|
||||
app.directive('copy', copy);
|
||||
|
||||
//统一注册el-icon图标
|
||||
for(let icon in elIcons){
|
||||
|
|
|
@ -1,266 +1,281 @@
|
|||
<template>
|
||||
<el-Dialog
|
||||
:title="titleMap[mode]"
|
||||
v-model="visible"
|
||||
destroy-on-close
|
||||
@closed="closeDrawer"
|
||||
>
|
||||
<el-form
|
||||
ref="dialogForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:disabled="mode === 'show'"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域名称" prop="name">
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入真实姓名"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域类型" prop="cate">
|
||||
<el-select v-model="form.cate" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in cateOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="风险等级" prop="level">
|
||||
<el-select v-model="form.level" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in levelOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域编号">
|
||||
<el-input
|
||||
v-model="form.number"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="所属部门">
|
||||
<el-cascader
|
||||
v-model="form.dept"
|
||||
:options="group"
|
||||
:props="groupsProps"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域负责人">
|
||||
<el-select v-model="form.manager" placeholder="选择区域负责人">
|
||||
<el-option
|
||||
v-for="item in useroptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最小人员数">
|
||||
<el-input
|
||||
v-model="form.count_people_min"
|
||||
placeholder="最小人员数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最大人员数">
|
||||
<el-input
|
||||
v-model="form.count_people_max"
|
||||
placeholder="最大人员数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="当前人数">
|
||||
<el-input
|
||||
v-model="form.count_people"
|
||||
placeholder="当前人数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许访客人员">
|
||||
<el-switch v-model="form.visitor_yes" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许相关方人员">
|
||||
<el-switch v-model="form.remployee_yes" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许全部员工">
|
||||
<el-switch v-model="form.employee_yes" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button type="primary" :loading="isSaveing" @click="submit">
|
||||
保存
|
||||
</el-button>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
</template>
|
||||
</el-Dialog>
|
||||
<el-Dialog
|
||||
:title="titleMap[mode]"
|
||||
v-model="visible"
|
||||
destroy-on-close
|
||||
@closed="closeDrawer"
|
||||
>
|
||||
<el-form
|
||||
ref="dialogForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:disabled="mode === 'show'"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域名称" prop="name">
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入真实姓名"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域类型" prop="cate">
|
||||
<el-select v-model="form.cate" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in cateOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="风险等级" prop="level">
|
||||
<el-select v-model="form.level" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in levelOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域编号">
|
||||
<el-input
|
||||
v-model="form.number"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="所属部门">
|
||||
<el-cascader
|
||||
v-model="form.dept"
|
||||
:options="group"
|
||||
:props="groupsProps"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="区域负责人">
|
||||
<el-select v-model="form.manager" placeholder="选择区域负责人">
|
||||
<el-option
|
||||
v-for="item in useroptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最小人员数">
|
||||
<el-input
|
||||
v-model="form.count_people_min"
|
||||
placeholder="最小人员数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="最大人员数">
|
||||
<el-input
|
||||
v-model="form.count_people_max"
|
||||
placeholder="最大人员数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="当前人数">
|
||||
<el-input
|
||||
v-model="form.count_people"
|
||||
placeholder="当前人数"
|
||||
clearable
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许访客人员">
|
||||
<el-switch v-model="visitor_yes"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许相关方人员">
|
||||
<el-switch v-model="remployee_yes"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24">
|
||||
<el-form-item label="准许全部员工">
|
||||
<el-switch v-model="employee_yes"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button type="primary" :loading="isSaveing" @click="submit">
|
||||
保存
|
||||
</el-button>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
</template>
|
||||
</el-Dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { genTree } from "@/utils/verificate";
|
||||
const defaultForm = {
|
||||
id: null,
|
||||
name: "",
|
||||
level: 10,
|
||||
number: "",
|
||||
visitor_yes: false,
|
||||
remployee_yes: false,
|
||||
employee_yes: false,
|
||||
belong_dept: "",
|
||||
count_people_min: 1,
|
||||
count_people_max: 1,
|
||||
count_people: 0,
|
||||
cate: 10,
|
||||
};
|
||||
export default {
|
||||
emits: ["success", "closed"],
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
mode: "add",
|
||||
titleMap: {
|
||||
add: "新增区域",
|
||||
edit: "区域编辑",
|
||||
},
|
||||
levelOptions: [
|
||||
{ id: 10, name: "低风险" },
|
||||
{ id: 20, name: "一般风险" },
|
||||
{ id: 30, name: "较大风险" },
|
||||
{ id: 40, name: "重大风险" },
|
||||
],
|
||||
cateOptions: [
|
||||
{ id: 10, name: "生活区域" },
|
||||
{ id: 20, name: "一般区域" },
|
||||
{ id: 30, name: "重点区域" },
|
||||
],
|
||||
visible: false,
|
||||
isSaveing: false,
|
||||
form: defaultForm,
|
||||
useroptions:[],
|
||||
//验证规则
|
||||
rules: {
|
||||
name: [{ required: true, message: "请输入区域名称" }],
|
||||
level: [{ required: true, message: " 区域风险等级" }],
|
||||
cate: [{ required: true, message: "区域分类" }],
|
||||
},
|
||||
groupsProps: {
|
||||
// value: "id",
|
||||
multiple: false,
|
||||
emitPath: false,
|
||||
checkStrictly: true,
|
||||
},
|
||||
group: [],
|
||||
postOptions: [],
|
||||
selectionFilters: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getGroup();
|
||||
this.getUser();
|
||||
},
|
||||
methods: {
|
||||
//加载树数据
|
||||
async getGroup() {
|
||||
let res = await this.$API.system.dept.list.req({ page: 0 });
|
||||
this.group = genTree(res);
|
||||
},
|
||||
//项目负责人
|
||||
getUser() {
|
||||
this.$API.system.user.list.req({ page: 0 }).then((res) => {
|
||||
this.useroptions = res;
|
||||
});
|
||||
},
|
||||
//显示
|
||||
open(mode) {
|
||||
this.mode = mode;
|
||||
this.visible = true;
|
||||
return this;
|
||||
},
|
||||
closeDrawer() {
|
||||
this.visible = false;
|
||||
this.$emit("closed");
|
||||
},
|
||||
//表单提交方法
|
||||
submit() {
|
||||
this.$refs.dialogForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.isSaveing = true;
|
||||
if (this.mode === "add") {
|
||||
this.$API.am.area.create
|
||||
.req(this.form)
|
||||
.then((res) => {
|
||||
this.isSaveing = false;
|
||||
this.visible = false;
|
||||
this.$emit("success", this.form, this.mode);
|
||||
this.$message.success("操作成功");
|
||||
return res;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.isSaveing = false;
|
||||
return err;
|
||||
});
|
||||
} else {
|
||||
this.$API.am.area.update
|
||||
.req(this.form.id, this.form)
|
||||
.then((res) => {
|
||||
this.isSaveing = false;
|
||||
this.visible = false;
|
||||
this.$emit("success", this.form, this.mode);
|
||||
this.$message.success("操作成功");
|
||||
return res;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.isSaveing = false;
|
||||
return err;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
//表单注入数据
|
||||
setData(data) {
|
||||
console.log(defaultForm);
|
||||
// this.form = defaultForm;
|
||||
Object.assign(this.form, data);
|
||||
},
|
||||
},
|
||||
};
|
||||
import {genTree} from "@/utils/verificate";
|
||||
|
||||
const defaultForm = {
|
||||
id: null,
|
||||
name: "",
|
||||
level: 10,
|
||||
number: "",
|
||||
access_list:[],
|
||||
belong_dept: "",
|
||||
count_people_min: 1,
|
||||
count_people_max: 1,
|
||||
count_people: 0,
|
||||
cate: 10,
|
||||
};
|
||||
export default {
|
||||
emits: ["success", "closed"],
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
mode: "add",
|
||||
titleMap: {
|
||||
add: "新增区域",
|
||||
edit: "区域编辑",
|
||||
},
|
||||
levelOptions: [
|
||||
{id: 10, name: "低风险"},
|
||||
{id: 20, name: "一般风险"},
|
||||
{id: 30, name: "较大风险"},
|
||||
{id: 40, name: "重大风险"},
|
||||
],
|
||||
cateOptions: [
|
||||
{id: 10, name: "生活区域"},
|
||||
{id: 20, name: "一般区域"},
|
||||
{id: 30, name: "重点区域"},
|
||||
],
|
||||
visible: false,
|
||||
isSaveing: false,
|
||||
form: defaultForm,
|
||||
useroptions: [],
|
||||
//验证规则
|
||||
rules: {
|
||||
name: [{required: true, message: "请输入区域名称"}],
|
||||
level: [{required: true, message: " 区域风险等级"}],
|
||||
cate: [{required: true, message: "区域分类"}],
|
||||
},
|
||||
groupsProps: {
|
||||
// value: "id",
|
||||
multiple: false,
|
||||
emitPath: false,
|
||||
checkStrictly: true,
|
||||
},
|
||||
visitor_yes: false,
|
||||
remployee_yes: false,
|
||||
employee_yes: false,
|
||||
group: [],
|
||||
postOptions: [],
|
||||
selectionFilters: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getGroup();
|
||||
this.getUser();
|
||||
},
|
||||
methods: {
|
||||
//加载树数据
|
||||
async getGroup() {
|
||||
let res = await this.$API.system.dept.list.req({page: 0});
|
||||
this.group = genTree(res);
|
||||
},
|
||||
//项目负责人
|
||||
getUser() {
|
||||
this.$API.system.user.list.req({page: 0}).then((res) => {
|
||||
this.useroptions = res;
|
||||
});
|
||||
},
|
||||
//显示
|
||||
open(mode) {
|
||||
this.mode = mode;
|
||||
this.visible = true;
|
||||
return this;
|
||||
},
|
||||
closeDrawer() {
|
||||
this.visible = false;
|
||||
this.$emit("closed");
|
||||
},
|
||||
//表单提交方法
|
||||
submit() {
|
||||
this.$refs.dialogForm.validate((valid) => {
|
||||
if (valid) {
|
||||
let arr = [];
|
||||
if (this.employee_yes){arr.push('employee')}
|
||||
if (this.remployee_yes){arr.push('remployee')}
|
||||
if (this.visitor_yes){arr.push('visitor')}
|
||||
this.form.access_list = arr;
|
||||
this.isSaveing = true;
|
||||
if (this.mode === "add") {
|
||||
this.$API.am.area.create
|
||||
.req(this.form)
|
||||
.then((res) => {
|
||||
this.isSaveing = false;
|
||||
this.visible = false;
|
||||
this.$emit("success", this.form, this.mode);
|
||||
this.$message.success("操作成功");
|
||||
return res;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.isSaveing = false;
|
||||
return err;
|
||||
});
|
||||
} else {
|
||||
this.$API.am.area.update
|
||||
.req(this.form.id, this.form)
|
||||
.then((res) => {
|
||||
this.isSaveing = false;
|
||||
this.visible = false;
|
||||
this.$emit("success", this.form, this.mode);
|
||||
this.$message.success("操作成功");
|
||||
return res;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.isSaveing = false;
|
||||
return err;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
//表单注入数据
|
||||
setData(data) {
|
||||
debugger;
|
||||
Object.assign(this.form, data);
|
||||
if (data.access_list.indexOf('employee')> -1) {
|
||||
this.employee_yes = true;
|
||||
}
|
||||
if (data.access_list.indexOf('remployee')>-1) {
|
||||
this.remployee_yes = true;
|
||||
}
|
||||
if (data.access_list.indexOf('visitor')>-1) {
|
||||
this.visitor_yes = true;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -150,7 +150,7 @@
|
|||
<div class="simple-title" @click="warningDetail= true">
|
||||
<span>报警实时展示</span>
|
||||
<div class="simple-btn-bg alarm-bell danger">
|
||||
<span>{{warningData.total}}</span> 报警
|
||||
<span>{{wStatistics.total_count}}</span> 报警
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-content">
|
||||
|
@ -158,22 +158,12 @@
|
|||
<div class="alarm-danger"></div>
|
||||
</div>
|
||||
<div class="content-right">
|
||||
<div title="缺员报警 3" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
|
||||
class="item-name">缺员报警</span><span class="item-number" style="">3</span></div>
|
||||
<div title="超员报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
|
||||
class="item-name">超员报警</span><span class="item-number" style="">2</span></div>
|
||||
<div title="静止报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
|
||||
class="item-name">静止报警</span><span class="item-number" style="display: none;">0</span></div>
|
||||
<div title="越界报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
|
||||
class="item-name">越界报警</span><span class="item-number" style="">2</span></div>
|
||||
<div title="一键报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
|
||||
class="item-name">一键报警</span><span class="item-number" style="display: none;">0</span></div>
|
||||
<div title="滞留报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
|
||||
class="item-name">滞留报警</span><span class="item-number" style="display: none;">0</span></div>
|
||||
<div title="车辆报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
|
||||
class="item-name">车辆报警</span><span class="item-number" style="display: none;">0</span></div>
|
||||
<div title="作业报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
|
||||
class="item-name">作业报警</span><span class="item-number" style="">2</span></div>
|
||||
<!--alarm-item-safe-->
|
||||
<div v-for="item in wStatistics.details" :key="item.cate" class="alarm-item alarm-item-danger">
|
||||
<span class="item-icon"></span>
|
||||
<span class="item-name">{{item.cate__name}}</span>
|
||||
<span class="item-number" style="">{{item.count}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-detail-info left_arrow" v-if="warningDetail">
|
||||
|
@ -195,48 +185,19 @@
|
|||
</div>
|
||||
<div v-show="warningTypeShow" class="multiple-select-wrap">
|
||||
<div class="multiple-select-ul">
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<div class="multiple-select-li" @click="warningTypeSelected(null)">
|
||||
<span class="multiple-select-label">全部</span>
|
||||
</div>
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<span title="超员报警" class="multiple-select-label">超员报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<span title="缺员报警" class="multiple-select-label">缺员报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<span title="静止报警" class="multiple-select-label">静止报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<span title="越界报警" class="multiple-select-label">越界报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li" @click="warningTypeSelected">
|
||||
<span title="滞留报警" class="multiple-select-label">滞留报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="一键报警" class="multiple-select-label">一键报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="车辆超速报警" class="multiple-select-label">车辆超速报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="车辆越界报警" class="multiple-select-label">车辆越界报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="车辆滞留报警" class="multiple-select-label">车辆滞留报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="非作业人员闯入报警" class="multiple-select-label">非作业人员闯入报警</span>
|
||||
</div>
|
||||
<div class="multiple-select-li">
|
||||
<span title="作业人员离开报警" class="multiple-select-label">作业人员离开报警</span>
|
||||
|
||||
<div v-for="type in warningTypes" :key="type.id" class="multiple-select-li" @click="warningTypeSelected(type.id)">
|
||||
<span title="超员报警" class="multiple-select-label">{{type.name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="head-sound sound-ring"></div>
|
||||
</div>
|
||||
<div class="content-body">
|
||||
<div class="content-body" v-if="warningData.total>0">
|
||||
<!--warningList-->
|
||||
<div class="alarm-item" v-for="(item) in warningData.list" :key="item.id">
|
||||
<div class="item-type">未处理</div>
|
||||
|
@ -248,64 +209,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="alarm-item">
|
||||
<div class="item-type">越界报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-07-01 11:39:03</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【生产管理部】【马经艺】进入【测试-绿地】【0分钟】触发了【越界报警】</div><!––><!––>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-item">
|
||||
<div class="item-type">超员报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-06-28 10:41:04</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【生产车间三】多于【5人】【1分钟】发生了【超员报警】</div><!––><!––></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-item">
|
||||
<div class="item-type">越界报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-06-28 10:38:40</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【生产管理部】【马浩初】进入【测试-绿地】【0分钟】触发了【越界报警】</div><!––><!––>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-item">
|
||||
<div class="item-type">缺员报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-06-28 10:37:53</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【生产车间三】少于【8人】发生了【缺员报警】</div><!––><!––></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-item">
|
||||
<div class="item-type">超员报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-06-28 10:37:41</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【承包商开票区】多于【2人】【0分钟】发生了【超员报警】</div><!––><!––></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alarm-item">
|
||||
<div class="item-type">缺员报警</div>
|
||||
<div class="item-content">
|
||||
<div class="item-content-top"><span class="time">2022-06-28 10:37:27</span><span
|
||||
class="status">未处理</span></div>
|
||||
<div class="item-content-middle mt6">
|
||||
<div class="alarm-info">【浓硫酸车间二】少于【2人】发生了【缺员报警】</div><!––><!––></div>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="content-footer" style="">
|
||||
<div v-if="warningData.total>0" class="content-footer" style="">
|
||||
<el-pagination
|
||||
:page-size="warningData.params.page_size"
|
||||
:pager-count="5"
|
||||
|
@ -314,8 +219,8 @@
|
|||
:total="warningData.total"
|
||||
@current-change="handleCurrentChange"/>
|
||||
</div>
|
||||
<div class="el-loading-mask" style="background-color: transparent; display: none;">
|
||||
<div class="el-loading-spinner"><i class="el-icon-loading"></i><!----></div>
|
||||
<div class="noData" v-else>
|
||||
<img src="/img/nodata.png">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -863,9 +768,17 @@
|
|||
total: 0,
|
||||
params: {
|
||||
page: 1,
|
||||
page_size: 10
|
||||
page_size: 10,
|
||||
start_create:'',
|
||||
}
|
||||
},
|
||||
cateAggForm:{
|
||||
start_create: '',
|
||||
is_handled: false,
|
||||
completed: true
|
||||
},
|
||||
wStatistics:{},
|
||||
warningTypes:[],//事件类型
|
||||
Vchannels: [],//摄像头列表
|
||||
warningList: [],//报警事件列表
|
||||
speakerList: [],//喇叭列表
|
||||
|
@ -881,6 +794,7 @@
|
|||
count_remployee: 0,//访客
|
||||
count_visitor: 0//相关方
|
||||
},
|
||||
|
||||
screenJobItem: {},//危险作业信息
|
||||
screenRiskItem: {},//风险区域信息
|
||||
screenWarningItem: {},//风险区域信息
|
||||
|
@ -916,6 +830,7 @@
|
|||
},
|
||||
LBType: '1',
|
||||
userMarker: {},
|
||||
todayDate:'',
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
@ -925,6 +840,8 @@
|
|||
document.head.appendChild(scriptInfo)
|
||||
},
|
||||
mounted() {
|
||||
let date = new Date();
|
||||
this.todayDate = this.warningData.params.start_create = this.cateAggForm.start_create =date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate();
|
||||
window.map = new jsmap.JSMap({
|
||||
mapType: jsmap.JSMapType.MAP_3D,
|
||||
container: 'mapContainer',
|
||||
|
@ -1094,12 +1011,27 @@
|
|||
this.getSpeakers();//喇叭$$
|
||||
// this.getAllMen();//人员
|
||||
this.getAllPost();//岗位
|
||||
setInterval(function () {
|
||||
|
||||
}, 3000)
|
||||
|
||||
this.getWarningTotal();//事件统计
|
||||
this.getWarningType();//事件类型
|
||||
setInterval(function () {}, 3000)
|
||||
},
|
||||
methods: {
|
||||
getWarningTotal(){
|
||||
let that = this;
|
||||
that.$API.ecm.event.cateAgg.req(that.cateAggForm).then(res=>{
|
||||
if(res.err_msg){}else{
|
||||
that.wStatistics = res;
|
||||
}
|
||||
})
|
||||
},
|
||||
getWarningType(){
|
||||
let that = this;
|
||||
that.$API.ecm.event_cate.list.req().then(res=>{
|
||||
if(res.err_msg){}else{
|
||||
that.warningTypes = res.results;
|
||||
}
|
||||
})
|
||||
},
|
||||
areaRowClick(data) {
|
||||
let that = this;
|
||||
that.areaDetail = true;
|
||||
|
@ -1134,7 +1066,6 @@
|
|||
arr.push(obj)
|
||||
}
|
||||
this.postList = arr;
|
||||
// console.log(arr)
|
||||
})
|
||||
},
|
||||
//人员统计
|
||||
|
@ -1223,8 +1154,20 @@
|
|||
})
|
||||
},
|
||||
//警报类型查询
|
||||
warningTypeSelected() {
|
||||
warningTypeSelected(id) {
|
||||
debugger;
|
||||
let that = this;
|
||||
this.warningTypeShow = false;
|
||||
let params = new Object();
|
||||
params = that.warningData.params;
|
||||
if(id!==null){
|
||||
params.cates = id;
|
||||
}
|
||||
that.$API.ecm.event.list.req(params).then(res=>{
|
||||
if(res.err_msg){}else{
|
||||
that.warningData.list = res;
|
||||
}
|
||||
})
|
||||
//获取新数据
|
||||
},
|
||||
//加载部门数据
|
||||
|
@ -2674,23 +2617,19 @@
|
|||
}
|
||||
|
||||
.content-right {
|
||||
width: calc(100% - 170px);
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
width: calc(100% - 130px);
|
||||
overflow: hidden;
|
||||
height: fit-content;
|
||||
.alarm-item {
|
||||
width: 50%;
|
||||
height: 25%;
|
||||
min-width: 50%;
|
||||
height: 26px;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
padding-left: 8px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
float: left;
|
||||
.item-name {
|
||||
margin-right: 4px;
|
||||
flex-shrink: 0;
|
||||
|
@ -3064,6 +3003,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
.noData{
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
img{
|
||||
margin: 50px auto;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.alarm-detail-info {
|
||||
|
@ -3075,6 +3023,7 @@
|
|||
border-radius: 4px;
|
||||
padding: 0 12px 0 12px;
|
||||
z-index: 20;
|
||||
/*min-height: 400px;*/
|
||||
|
||||
.action-group {
|
||||
display: flex;
|
||||
|
|
|
@ -1,102 +1,111 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" @click="handleShow(scope.row)"
|
||||
>查看详情</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" @click="handleShow(scope.row)">查看详情</el-button>
|
||||
<!--多人且主动接单-->
|
||||
<el-button v-if="scope.row.state_.distribute_type===1&&scope.row.participant_type===2"
|
||||
type="text" size="small" @click="handleAccept(scope.row)">接单
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({
|
||||
category: "all",
|
||||
page: 0,
|
||||
});
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleShow(row) {
|
||||
|
||||
var catetype = row.workflow_.key;
|
||||
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
visitID:row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({
|
||||
category: "all",
|
||||
page: 0,
|
||||
});
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleShow(row) {
|
||||
var catetype = row.workflow_.key;
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
type: 'show',
|
||||
visitID: row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
handleAccept(row) {
|
||||
this.$API.wf.ticket.ticketAccept.req(row.id, {}).then(res => {
|
||||
if (res.err_msg) {
|
||||
} else {
|
||||
this.getList();
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -28,15 +28,16 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
|
||||
<el-table-column label="操作" fixed="right" align="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" @click="handleShow(scope.row)">查看详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
|
@ -73,6 +74,21 @@ export default {
|
|||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleShow(row) {
|
||||
var catetype = row.workflow_.key;
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
type: 'show',
|
||||
visitID: row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -1,74 +1,83 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
|
||||
<el-card style="margin-left: 10px">
|
||||
<el-table
|
||||
:data="logs"
|
||||
fit
|
||||
stripe
|
||||
style="width: 100%; border-top: 1px solid #ebeef5"
|
||||
height="500"
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="工单标题" min-width="100">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.ticket_data.title">{{ scope.row.ticket_data.title }}中</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" min-width="100">
|
||||
<template #default="scope">
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<el-table
|
||||
:data="logs"
|
||||
fit
|
||||
stripe
|
||||
style="width: 100%;"
|
||||
height="500"
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="工单标题" min-width="100">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.ticket_data.title">{{ scope.row.ticket_data.title }}中</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" min-width="100">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.state_.type == 0"
|
||||
>{{ scope.row.state_.name }}中</span
|
||||
>
|
||||
<span v-else>已{{ scope.row.state_.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作人" min-width="100">
|
||||
<template #default="scope" ><el-span v-if="scope.row.participant_">{{
|
||||
scope.row.participant_.name
|
||||
}}</el-span></template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作意见"
|
||||
min-width="100"
|
||||
prop="suggestion"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="更新时间"
|
||||
min-width="100"
|
||||
prop="update_time"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
</el-main>
|
||||
</el-container>
|
||||
>{{ scope.row.state_.name }}中</span
|
||||
>
|
||||
<span v-else>已{{ scope.row.state_.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作人" min-width="100">
|
||||
<template #default="scope">
|
||||
<el-span v-if="scope.row.participant_">{{
|
||||
scope.row.participant_.name
|
||||
}}
|
||||
</el-span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作意见"
|
||||
min-width="100"
|
||||
prop="suggestion"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="更新时间"
|
||||
min-width="100"
|
||||
prop="update_time"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
<!--工单处理详情组件-->
|
||||
<script>
|
||||
export default {
|
||||
name: "detail",
|
||||
data() {
|
||||
return {
|
||||
logs: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.workId = this.$route.query.id;
|
||||
this.getFlowlogss();
|
||||
},
|
||||
methods: {
|
||||
async getFlowlogss() {
|
||||
|
||||
this.$API.wf.ticket.ticketFlowlogs.req(this.workId).then(res => {
|
||||
this.logs = res
|
||||
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
export default {
|
||||
name: "detail",
|
||||
props: {
|
||||
ticket: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
logs: [],
|
||||
ticketId: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
debugger;
|
||||
this.ticketId = this.ticket;
|
||||
this.getFlowlogss();
|
||||
},
|
||||
methods: {
|
||||
getFlowlogss() {
|
||||
let that = this;
|
||||
this.$API.wf.ticket.ticketFlowlogs.req(that.ticketId).then(res => {
|
||||
if (res.err_msg) {
|
||||
} else {
|
||||
that.logs = res;
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -1,80 +1,160 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-link
|
||||
v-if="(scope.row.act_state===1||scope.row.act_state===3)&&scope.row.participant_type!==2&&scope.row.state_.type===0"
|
||||
type="primary"
|
||||
@click="handleDetail(scope.row)"
|
||||
>
|
||||
处理
|
||||
</el-link>
|
||||
<el-link
|
||||
type="success"
|
||||
@click="handleLogs(scope.row)"
|
||||
>
|
||||
工单日志
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-dialog v-model="limitedFlowLogs" title="工单日志">
|
||||
<ticket-log ref="ticketLogs" :ticket="ticketId"></ticket-log>
|
||||
</el-dialog>
|
||||
|
||||
<!--<el-dialog v-model="limitedFlowLogs" title="工单日志">
|
||||
<el-table
|
||||
:data="floeLogs"
|
||||
fit
|
||||
stripe
|
||||
style="width: 100%;border-top:1px solid #EBEEF5;"
|
||||
>
|
||||
<el-table-column label="工单标题">
|
||||
<template #defalut="scope">
|
||||
<span v-if="scope.row.ticket_data">{{scope.row.ticket_data.title}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态">
|
||||
<template #defalut="scope">
|
||||
<span v-if="scope.row.state_">{{scope.row.state_.name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作人">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.participant_">{{ scope.row.participant_.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作意见" prop="suggestion">
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" prop="update_time">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>-->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list:[],
|
||||
import ticketLog from "./details.vue";
|
||||
export default {
|
||||
components: {
|
||||
ticketLog,
|
||||
},
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
floeLogs:[],
|
||||
ticketId:'',
|
||||
limitedFlowLogs:false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({category: "duty", page: 0});
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleDetail(row){
|
||||
let catetype = row.workflow_.key;
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
visitID:row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
handleLogs(row) {
|
||||
debugger;
|
||||
console.log(row)
|
||||
let that = this;
|
||||
let id = row.id;
|
||||
this.ticketId = row.id;
|
||||
that.limitedFlowLogs = true;
|
||||
that.$API.wf.ticket.ticketFlow.req({ticket:id}).then(res => {
|
||||
if (res.err_msg) {
|
||||
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({ category: "duty",page:0 });
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
},
|
||||
};
|
||||
}else{
|
||||
that.floeLogs = res.results;
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -1,80 +1,170 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" @click="handleShow(scope.row)">查看详情</el-button>
|
||||
<!--创建人在初始状态-->
|
||||
<el-link
|
||||
v-if="scope.row.state_.type===1&&userId===scope.row.create_by"
|
||||
type="danger"
|
||||
@click="handleClose(scope,'2')"
|
||||
>
|
||||
关闭
|
||||
</el-link>
|
||||
<!--如果state_.retreat/state_.type==1处于草稿状态 -->
|
||||
<el-link
|
||||
v-if="scope.row.state_.enable_retreat&&userId===scope.row.create_by&&scope.row.state_.type!==1"
|
||||
type="danger"
|
||||
@click="handleClose(scope,'1')"
|
||||
>
|
||||
撤回
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
<el-dialog v-model="limitedRetreat" :title="handleTitle">
|
||||
<el-form ref="Form" :model="handleForm" label-width="100px" label-position="right">
|
||||
<el-form-item :label="handleLabel">
|
||||
<el-input type="textarea" :rows="3" v-model="handleForm.suggestion" placeholder="原因"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: center">
|
||||
<el-button class="filter-item" type="" @click="handleCancel">取消</el-button>
|
||||
<el-button class="filter-item" type="primary" @click="handleSubmit">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list:[],
|
||||
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({ category: "owner",page:0 });
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
},
|
||||
};
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
userId:this.$TOOL.data.get("USER_INFO").id,
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
handleForm: {
|
||||
suggestion: '',
|
||||
},
|
||||
handleLabel: '撤回原因',
|
||||
handleTitle: '撤回工单',
|
||||
ticketId:null,
|
||||
limitedRetreat:false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
this.userId = this.$TOOL.data.get("USER_INFO").id;
|
||||
},
|
||||
methods: {
|
||||
handleShow(row) {
|
||||
var catetype = row.workflow_.key;
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
type: 'show',
|
||||
visitID: row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({category: "owner", page: 0});
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleClose(scope, index) {
|
||||
if (index === '1') {
|
||||
this.handleTitle = '撤回工单';
|
||||
this.handleLabel = '撤回原因';
|
||||
} else {
|
||||
this.handleTitle = '关闭工单';
|
||||
this.handleLabel = '关闭原因';
|
||||
}
|
||||
this.limitedRetreat = true;
|
||||
this.ticketId = scope.row.id;
|
||||
},
|
||||
handleCancel() {
|
||||
this.limitedRetreat = false;
|
||||
},
|
||||
handleSubmit() {
|
||||
let res = '';
|
||||
let that = this;
|
||||
that.$confirm('确认'+that.handleTitle+'吗?', "温馨提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(async () => {
|
||||
if (that.handleTitle === '撤回工单') {
|
||||
res = that.$API.wf.ticket.ticketRetreat.req(that.ticketId, that.handleForm);
|
||||
} else {
|
||||
res = that.$API.wf.ticket.ticketClose.req(that.ticketId, that.handleForm);
|
||||
}
|
||||
if(res.err_msg){
|
||||
that.getList();
|
||||
}else{
|
||||
that.limitedRetreat = false;
|
||||
that.getList();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -1,66 +1,69 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<el-card style="margin-bottom: 10px">
|
||||
<el-steps
|
||||
:active="actives"
|
||||
spac="400px"
|
||||
align-center=""
|
||||
style="padding-top: 20px"
|
||||
>
|
||||
<el-step
|
||||
:title="item.name"
|
||||
v-for="item in flowSteps"
|
||||
:key="item.id"
|
||||
></el-step>
|
||||
</el-steps>
|
||||
</el-card>
|
||||
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<el-card style="margin-bottom: 10px">
|
||||
<el-steps
|
||||
:active="actives"
|
||||
spac="400px"
|
||||
align-center=""
|
||||
style="padding-top: 20px"
|
||||
>
|
||||
<el-step
|
||||
:title="item.name"
|
||||
v-for="item in flowSteps"
|
||||
:key="item.id"
|
||||
></el-step>
|
||||
</el-steps>
|
||||
</el-card>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
<!--工单进度组件-->
|
||||
<script>
|
||||
export default {
|
||||
name: "workstep",
|
||||
data() {
|
||||
return {
|
||||
sort: 0,
|
||||
actives: 4,
|
||||
flowSteps: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.workId = this.$route.query.id;
|
||||
this.getFlowSteps();
|
||||
},
|
||||
methods: {
|
||||
getFlowSteps() {
|
||||
this.$API.wf.ticket.ticketFlowSteps.req(this.workId).then((res) => {
|
||||
this.flowSteps = res;
|
||||
this.$API.wf.ticket.ticketItem.req(this.workId).then((resp) => {
|
||||
let state = resp.state;
|
||||
let dat = this.flowSteps.filter((item) => {
|
||||
return item.id == state;
|
||||
});
|
||||
debugger;
|
||||
this.sort = dat[0].sort;
|
||||
this.actives = this.flowSteps.indexOf(dat[0]);
|
||||
if (this.flowSteps.length - this.actives > 1) {
|
||||
|
||||
export default {
|
||||
|
||||
name: "workstep",
|
||||
data() {
|
||||
return {
|
||||
sort: 0,
|
||||
actives: 4,
|
||||
flowSteps: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.workId = this.$route.query.id;
|
||||
this.getFlowSteps();
|
||||
},
|
||||
methods: {
|
||||
getFlowSteps() {
|
||||
|
||||
this.$API.wf.ticket.ticketFlowSteps.req(this.workId).then((res) => {;
|
||||
this.flowSteps = res
|
||||
this.$API.wf.ticket.ticketItem.req(this.workId).then((res) => {
|
||||
let state = res.state;
|
||||
let dat = this.flowSteps.filter((item) => {
|
||||
return item.id == state;
|
||||
})
|
||||
this.sort = dat[0].sort;
|
||||
this.actives = this.flowSteps.indexOf(dat[0]);
|
||||
if (this.flowSteps.length - this.actives > 1) {
|
||||
} else {
|
||||
this.actives = this.flowSteps.length;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
},
|
||||
},
|
||||
};
|
||||
} else {
|
||||
this.actives = this.flowSteps.length;
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style>
|
||||
.el-step__head.is-process .el-step__icon{
|
||||
border: 2px solid #409eff;
|
||||
background: #409eff;
|
||||
color: #ffffff;
|
||||
}
|
||||
.el-step__title.is-process{
|
||||
color: #409eff;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,112 +1,245 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<el-card style="margin-bottom: 10px">
|
||||
<work-step ref="workStep"></work-step>
|
||||
</el-card>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<el-card style="margin-bottom: 10px">
|
||||
<work-step ref="workStep"></work-step>
|
||||
</el-card>
|
||||
<el-card style="margin-left: 10px; margin-bottom: 10px">
|
||||
<el-descriptions title="来访信息" :column="3">
|
||||
<el-descriptions-item label="工单流水号:">
|
||||
{{ticketDetail.sn }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访概述:">
|
||||
{{visitDetail.name }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访单位:">
|
||||
{{visitDetail.company }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访人数:">
|
||||
<el-tag size="small">{{ visitDetail.count_people }}人</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访人员:">
|
||||
<el-tag v-for="item in visitDetail.visitors_" :key='item.id' size="small">
|
||||
{{ item.visitor_.name }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="状态:">
|
||||
{{state_[visitDetail.state] }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访时间:">
|
||||
{{visitDetail.visit_time }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="离开时间:">
|
||||
{{visitDetail.leave_time }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访事由:">
|
||||
{{purpose_[visitDetail.purpose] }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访详述:">
|
||||
{{visitDetail.description }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="接待人:" v-if="visitDetail.receptionist_">
|
||||
{{ visitDetail.receptionist_.name }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
<el-card style="margin-left: 10px; margin-bottom: 10px" v-if="type!=='show'">
|
||||
<scTitle title="处理"></scTitle>
|
||||
<el-form :model="form" ref="addForm" label-width="100px" label-position="left">
|
||||
<el-form-item label="处理意见">
|
||||
<el-input v-model="form.suggestion" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div v-if="ticketDetail.in_add_node" style="text-align: right">
|
||||
<el-button v-if="ticketDetail.in_add_node" class="filter-item" type="primary" @click="addNodeHandler('2')">加签处理</el-button>
|
||||
</div>
|
||||
<div v-else style="display: flex;justify-content: space-between;">
|
||||
<div>
|
||||
<el-button type="primary" @click="addNode">加签</el-button>
|
||||
<el-button v-if="ticketDetail.state_&&ticketDetail.state_.enable_deliver" type="primary" plain @click="deliverNode">转交</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<el-button v-for="item in operationBtn" :key="item.id" class="filter-item" type="primary" @click="operationSubmit(item.id)">{{item.name}}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card style="margin-left: 10px;">
|
||||
<work-details ref="workDetails" :ticket="ticketId"></work-details>
|
||||
</el-card>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-dialog v-model="limitedAdd" title="加签">
|
||||
<el-form ref="Form" :model="addForm" label-width="100px" label-position="right">
|
||||
<el-form-item label="处理人">
|
||||
<el-input style="width: 50%;" v-model="userName" disabled placeholder="选择处理人"></el-input>
|
||||
<scUserSelect :closable="true" :multiple="false" @addNodeHandlerSubmit="addNodeHandlerSubmit"></scUserSelect>
|
||||
</el-form-item>
|
||||
<el-form-item label="加签原因">
|
||||
<el-input type="textarea" :rows="3" v-model="addForm.suggestion" placeholder="加签原因"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: center">
|
||||
<el-button class="filter-item" type="" @click="addCancel">取消</el-button>
|
||||
<el-button class="filter-item" type="primary" @click="addNodeHandler('1')">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="limitedDeliver" title="转交工单">
|
||||
<el-form ref="Form" :model="deliverForm" label-width="100px" label-position="right">
|
||||
<el-form-item label="转交人">
|
||||
<el-input style="width: 50%;" v-model="userName" disabled placeholder="选择转交人"></el-input>
|
||||
<scUserSelect :closable="true" :multiple="false" @handlerSubmit="deliverHandlerSubmit"></scUserSelect>
|
||||
</el-form-item>
|
||||
<el-form-item label="转交原因">
|
||||
<el-input type="textarea" :rows="3" v-model="deliverForm.suggestion" placeholder="转交原因"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: center">
|
||||
<el-button class="filter-item" type="" @click="deliverCancel">取消</el-button>
|
||||
<el-button class="filter-item" type="primary" @click="deliverNodeHandler('1')">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-card style="margin-left: 10px; margin-bottom: 10px">
|
||||
<el-descriptions title="来访信息" :column="3">
|
||||
|
||||
<el-descriptions-item label="工单流水号:">{{
|
||||
ticketDetail.sn
|
||||
}}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="来访概述:">{{
|
||||
visitDetail.name
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="来访单位:">{{
|
||||
visitDetail.company
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="来访人数:">
|
||||
<el-tag size="small">{{ visitDetail.count_people }}人</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来访人员:" >
|
||||
<el-tag v-for="item in visitDetail.visitors_" :key='item.id' size="small">{{ item.visitor_.name }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="状态:">{{
|
||||
state_[visitDetail.state]
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="来访时间:">{{
|
||||
visitDetail.visit_time
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="离开时间:">{{
|
||||
visitDetail.leave_time
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="来访事由:">{{
|
||||
purpose_[visitDetail.purpose]
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="来访详述:">{{
|
||||
visitDetail.description
|
||||
}}</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="接待人:" v-if="visitDetail.receptionist_">
|
||||
{{ visitDetail.receptionist_.name }}
|
||||
</el-descriptions-item>
|
||||
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<work-details ref="workDetails"></work-details>
|
||||
</el-card>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import workDetails from "./details.vue";
|
||||
import workStep from "./steps.vue";
|
||||
export default {
|
||||
components: {
|
||||
workDetails,
|
||||
workStep,
|
||||
},
|
||||
name: "visitdetail",
|
||||
data() {
|
||||
return {
|
||||
workId: "",
|
||||
visitId: "",
|
||||
ticketDetail: [],
|
||||
visitDetail: [],
|
||||
purpose_: {
|
||||
10: "参观",
|
||||
20: "拜访",
|
||||
30: "面试",
|
||||
40: "开会"
|
||||
},
|
||||
state_: {
|
||||
10: "创建中",
|
||||
20: "审批中",
|
||||
30: "待入厂",
|
||||
40: "进行中",
|
||||
50: "已完成",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.workId = this.$route.query.id;
|
||||
this.visitId = this.$route.query.visitID;
|
||||
this.getticketItem();
|
||||
this.getVisit();
|
||||
import workDetails from "./details.vue";
|
||||
import workStep from "./steps.vue";
|
||||
import selectUser from '@/layout/components/userselect'
|
||||
|
||||
},
|
||||
methods: {
|
||||
//工单详情
|
||||
getticketItem() {
|
||||
this.$API.wf.ticket.ticketItem.req(this.workId).then((res) => {
|
||||
this.ticketDetail = res;
|
||||
|
||||
});
|
||||
},
|
||||
//访客详情
|
||||
getVisit() {
|
||||
this.$API.vm.visit.read.req(this.visitId).then((res) => {
|
||||
this.visitDetail = res;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
export default {
|
||||
components: {
|
||||
workDetails,
|
||||
workStep,
|
||||
selectUser
|
||||
},
|
||||
name: "visitdetail",
|
||||
data() {
|
||||
return {
|
||||
ticketId: "",
|
||||
visitId: "",
|
||||
userName: "",
|
||||
ticketDetail: [],
|
||||
visitDetail: [],
|
||||
employeeLists: [],
|
||||
operationBtn: [],
|
||||
form:{
|
||||
suggestion:''
|
||||
},
|
||||
addForm:{
|
||||
suggestion:'',
|
||||
toadd_user:'',
|
||||
},
|
||||
deliverForm:{
|
||||
suggestion:'',
|
||||
target_user:'',
|
||||
},
|
||||
limitedAdd:false,
|
||||
limitedDeliver:false,
|
||||
limitedUserSelect:false,
|
||||
purpose_: {
|
||||
10: "参观",
|
||||
20: "拜访",
|
||||
30: "面试",
|
||||
40: "开会"
|
||||
},
|
||||
state_: {
|
||||
10: "创建中",
|
||||
20: "审批中",
|
||||
30: "待入厂",
|
||||
40: "进行中",
|
||||
50: "已完成",
|
||||
},
|
||||
};
|
||||
},
|
||||
created(){
|
||||
this.ticketId = this.$route.query.id;
|
||||
this.type = this.$route.query.type;
|
||||
},
|
||||
mounted() {
|
||||
this.ticketId = this.$route.query.id;
|
||||
this.type = this.$route.query.type;
|
||||
this.visitId = this.$route.query.visitID;
|
||||
this.getticketItem();
|
||||
this.getVisit();
|
||||
this.getBtns();
|
||||
|
||||
},
|
||||
methods: {
|
||||
//工单详情
|
||||
getticketItem() {
|
||||
this.$API.wf.ticket.ticketItem.req(this.ticketId).then((res) => {
|
||||
this.ticketDetail = res;
|
||||
debugger;
|
||||
console.log(res);
|
||||
});
|
||||
},
|
||||
getBtns(){
|
||||
this.$API.wf.ticket.ticketTransitions.req(this.ticketId).then(res=>{
|
||||
this.operationBtn = res;
|
||||
})
|
||||
},
|
||||
|
||||
//访客详情
|
||||
getVisit() {
|
||||
this.$API.vm.visit.read.req(this.visitId).then((res) => {
|
||||
this.visitDetail = res;
|
||||
});
|
||||
},
|
||||
|
||||
addNodeHandlerSubmit(data) {
|
||||
this.addForm.toadd_user=data.id;
|
||||
this.userName=data.name;
|
||||
},
|
||||
addNode(){
|
||||
this.limitedAdd = true;
|
||||
},
|
||||
addCancel(){
|
||||
this.limitedAdd = false;
|
||||
},
|
||||
addNodeHandler(index){
|
||||
let res = null;
|
||||
if(index==='1'){
|
||||
res = this.$API.wf.ticket.addNode.req(this.ticketId,this.addForm);
|
||||
}else{
|
||||
res = this.$API.wf.ticket.addNodeEnd.req(this.ticketId,this.form);
|
||||
}
|
||||
if(res.err_msg){}else{
|
||||
this.limitedAdd = false;
|
||||
this.$router.push("/dutywork");
|
||||
}
|
||||
},
|
||||
|
||||
deliverNode(){
|
||||
this.limitedDeliver = true;
|
||||
},
|
||||
deliverCancel(){
|
||||
this.limitedDeliver = false;
|
||||
},
|
||||
deliverHandlerSubmit(data) {
|
||||
this.deliverForm.target_user=data.id;
|
||||
this.userName=data.name;
|
||||
},
|
||||
deliverNodeHandler(){
|
||||
this.$API.wf.ticket.ticketDeliver.req(this.ticketId,this.deliverForm).then(res=>{
|
||||
if(res.err_msg){}else{
|
||||
this.limitedDeliver = false;
|
||||
this.$router.push("/dutywork");
|
||||
}
|
||||
})
|
||||
},
|
||||
operationSubmit(id){
|
||||
let params = new Object();
|
||||
params.transition = id;
|
||||
params.ticket_data = {};
|
||||
params.suggestion = this.form.suggestion;
|
||||
this.$API.wf.ticket.ticketHandle.req(this.ticketId,params).then(res=>{
|
||||
if(res.err_msg){}else{
|
||||
this.$router.push("/dutywork");
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -1,80 +1,96 @@
|
|||
<template>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
<el-container>
|
||||
<el-main class="nopadding">
|
||||
<scTable
|
||||
ref="table"
|
||||
:data="list"
|
||||
row-key="id"
|
||||
stripe
|
||||
highlightCurrentRow
|
||||
hidePagination
|
||||
>
|
||||
<el-table-column label="ID" prop="id"></el-table-column>
|
||||
<el-table-column label="工单标题" prop="title"></el-table-column>
|
||||
<el-table-column label="流水号" prop="sn"></el-table-column>
|
||||
<el-table-column label="当前状态">
|
||||
<template #default="scope">
|
||||
{{ scope.row.state_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进行状态" prop="sort">
|
||||
<template #default="scope">
|
||||
{{ actstate_[scope.row.act_state] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联工作流" prop="title">
|
||||
<template #default="scope">
|
||||
{{ scope.row.workflow_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="处理人类型">
|
||||
<template #default="scope">
|
||||
{{ participant_[scope.row.participant_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="right" width="120">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" @click="handleShow(scope.row)">查看详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</scTable>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list:[],
|
||||
export default {
|
||||
name: "state",
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({ category: "worked",page:0 });
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
},
|
||||
};
|
||||
actstate_: {
|
||||
0: "草稿中",
|
||||
1: "进行中",
|
||||
2: "被退回",
|
||||
3: "被撤回",
|
||||
4: "已完成",
|
||||
5: "已关闭",
|
||||
},
|
||||
participant_: {
|
||||
0: "无处理人",
|
||||
1: "个人",
|
||||
2: "多人",
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
let res = await this.$API.wf.ticket.list.req({category: "worked", page: 0});
|
||||
console.log(res);
|
||||
this.list = res;
|
||||
},
|
||||
handleShow(row) {
|
||||
var catetype = row.workflow_.key;
|
||||
switch (catetype) {
|
||||
case 'visit':
|
||||
this.$router.push({
|
||||
name: "visitdetail",
|
||||
query: {
|
||||
id: row.id,
|
||||
type: 'show',
|
||||
visitID: row.ticket_data.visit
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
Loading…
Reference in New Issue