factory_web/src/views/rpm/rpjadd.vue

603 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-container>
<el-header>
<el-steps
:active="active"
style="width: 100%"
:align-center="true"
finish-status="success"
>
<el-step
v-for="(item, index) of stepTitle"
:key="index"
:title="item"
style="50%"
@click="handleStep(index)"
>
</el-step>
</el-steps>
</el-header>
<!--基本信息!-->
<el-main class="nopadding" v-show="active === 0">
<el-form
ref="dialogForm"
:model="rpjform"
label-width="110px"
style="margin: 40px 40px 40px 40px"
>
<el-row>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="名称">
<el-input v-model="rpjform.name" type="text" clearable></el-input>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="项目类型">
<el-select v-model="rpjform.type" style="width: 100%">
<el-option
v-for="item in typeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="合同编号">
<el-input
v-model="rpjform.contract_number"
type="text"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="进场时间">
<el-date-picker
v-model="rpjform.come_time"
type="datetime"
placeholder="选择结束时间"
/>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="离场时间">
<el-date-picker
v-model="rpjform.leave_time"
type="datetime"
placeholder="选择结束时间"
/>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="所属部门">
<el-cascader
v-model="rpjform.belong_dept"
:options="deptoptions"
:props="{
expandTrigger: 'hover', // 次级菜单的展开方式
label: 'label', //
value: 'value', //
emitPath: false, // 在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false则只返回该节点的值
}"
clearable
style="width: 100%"
>
</el-cascader>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="相关方">
<el-select v-model="rpjform.rparty" style="width: 100%">
<el-option
v-for="item in rpartyOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</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-col>
</el-row>
</el-form>
</el-main>
<!--安全审核项目!-->
<el-main class="nopadding" v-show="active === 1">
<scTable
ref="fileTable"
:data="rpjfileList"
row-key="id"
hidePagination
stripe
>
<el-table-column
label="#"
fixed="left"
type="index"
width="50"
></el-table-column>
<el-table-column label="资质内容" prop="name">
<template #default="scope">
{{ scope.row.file_cate_.name }}
</template>
</el-table-column>
<el-table-column label="文件资料" prop="name">
<template #default="scope">
<div v-for="(item, index) in scope.row.files_" :key="index">
<el-link :href="item.file">
{{ item.name }}
</el-link>
</div>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope">
<el-button
text
type="primary"
size="small"
@click="upload(scope.row, scope.$index)"
>上传
</el-button
>
<el-popconfirm
title="确定删除吗?"
@confirm="del_rpjfile(scope.row)"
>
<template #reference>
<el-button text type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
<el-button style="margin-top: 12px" @click="handleLastStep"
>上一步
</el-button
>
<el-button style="margin-top: 12px" @click="handleNextStep"
>下一步
</el-button
>
<sc-dialog v-model="dialogupload" draggable title="上传文件">
<el-form ref="dialogfileForm" :model="fileform" label-width="120px">
<el-row>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="上传文件">
<sc-upload-file
v-model="fileform.files"
:on-success="success"
:multiple="true"
:limit="10"
tip="最多上传10个文件,单个文件不要超过10M,请上传xlsx/docx格式文件"
>
<el-button type="primary" icon="el-icon-upload"
>上传附件
</el-button
>
</sc-upload-file>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="dialogupload = false">取 消</el-button>
<el-button type="primary" @click="submitFile">确 定</el-button>
</template>
</sc-dialog>
</el-main>
<!--选择人员!-->
<el-main class="nopadding" v-show="active === 2">
<div class="left-panel" style="margin: 10px">
<el-button
type="primary"
icon="el-icon-plus"
@click="addworker"
></el-button>
</div>
<scTable
ref="workerTable"
:data="apiworkerObj"
row-key="id"
hidePagination
stripe
>
<el-table-column
label="#"
fixed="left"
type="index"
width="50"
></el-table-column>
<el-table-column label="姓名" prop="name" width="150">
<template #default="scope">
{{ scope.row.remployee_.name }}
</template>
</el-table-column>
<el-table-column label="工作职责" prop="duty" width="150">
</el-table-column>
<el-table-column label="证书" prop="rcertificates" width="150">
<template #default="scope">
<el-tag
v-for="item in scope.row.rcertificates_"
:key="item.number"
:label="item.name"
:value="item.number"
>{{ item.name }}
</el-tag
>
</template>
</el-table-column>
<el-table-column label="是否项目负责人" prop="is_manager" width="150">
</el-table-column>
<el-table-column
label="创建时间"
prop="create_time"
width="150"
></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope">
<el-popconfirm
title="确定删除该人员吗?"
@confirm="delWorker(scope.row)"
>
<template #reference>
<el-button text type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
<sc-dialog v-model="workerdialog" draggable title="选择项目人员">
<el-form
ref="workerForm"
:model="formworker"
label-width="80px"
width="70%"
style="margin: 40px 40px 40px 40px"
>
<el-row>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="项目人员">
<el-select
v-model="formworker.remployee"
@change="selectWorker"
placeholder="选择项目人员"
>
<el-option
v-for="item in remployeeoptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="是否项目负责人">
<el-radio-group v-model="formworker.is_manager">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="工作职责">
<el-input
v-model="formworker.duty"
type="text"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="24" :sm="12" :xs="24">
<el-form-item label="证书">
<el-select
v-model="formworker.rcertificates"
multiple
placeholder="选择证书"
>
<el-option
v-for="item in certificatesOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="workerdialog = false">取 消</el-button>
<el-button type="primary" @click="submitWorker">确 定</el-button>
</template>
</sc-dialog>
<el-button @click="handleLastStep">上一步</el-button>
<el-button
v-for=" item in initForm.transitions"
:key="item.id"
type="primary"
@click="submitTicketCreate(item.id)"
>{{item.name}}</el-button>
<el-button @click="submitOut">退出</el-button>
</el-main>
</el-container>
</template>
<style scoped>
.clearfix {
font-size: 20px;
}
.box-card p {
line-height: 20px;
}
.content {
margin-top: 10px;
}
.stepSuc:hover {
cursor: pointer;
}
.stepErr:hover {
cursor: not-allowed;
}
</style>
<script>
import {genTree} from "@/utils/verificate";
const defaultformworker = {
duty: "",
rcertificates: [],
rpj: "",
};
export default {
name: "rpjadd",
components: {},
data() {
return {
active: 0,
stepSuc: [0],
stepTitle: ["基本信息", "安全审核项目", "选择人员"],
query: {},
selection: [],
issave: false, //控制基本信息提交
search: {
keyword: null,
},
rpjId: "",
rpjform: {},
rpartyOptions: [],
deptoptions: [],
typeOptions: [
{id: 10, name: "建筑施工"},
{id: 20, name: "设备设施检维修"},
{id: 30, name: "保安保洁服务"},
{id: 40, name: "其他"},
],
rpjfileList: [],
dialogupload: false,
fileform: {
id: "",
files: [],
},
filelist: [],
remployeeoptions: [],
certificatesOptions: [],
formworker: defaultformworker,
apiworkerObj: [],
workerdialog: false,
initForm: {},
};
},
mounted() {
this.rpjId = this.$route.query.rpjid; //作业ID
this.getRpj();
this.getRpartyOptions();
this.getDept();
this.getInit();
},
methods: {
//入场项目基本信息
getRpj() {
console.log(this.$route.query.rpjid);
this.$API.rpm.rpj.read.req(this.rpjId).then((res) => {
this.rpjform = res;
});
},
//所属部门
getDept() {
this.$API.system.dept.list.req({page: 0}).then((res) => {
this.deptoptions = genTree(res);
});
},
//文件列表加载
getRpjfileList(id) {
this.$API.rpm.rpjfile.list.req({page: 0, rpj: id}).then((res) => {
this.rpjfileList = res;
});
},
//相关方
getRpartyOptions() {
this.$API.rpm.rparty.list.req({page: 0}).then((res) => {
this.rpartyOptions = res;
});
},
handleStep(val) {
//点击步骤条
if (this.stepSuc.includes(val) === true) {
this.active = val;
}
},
//组件点击上一步
handleLastStep() {
if (--this.active === 0) {
this.active = 0;
}
},
//组件点击下一步
handleNextStep() {
if (this.active == 0) {
this.$API.rpm.rpj.update
.req(this.rpjId, this.rpjform)
.then((res) => {
this.$message.success("基本信息更新成功!");
return res;
})
.catch((err) => {
return err;
});
this.getRpjfileList(this.rpjId);
this.getmemberList(this.rpjId);
this.getremployee();
this.active = 1;
} else if (this.active == 1) {
this.active = 2;
} else {
this.active = 2;
}
// this.stepSuc.push(++this.active)
},
//退出界面
submitOut() {
this.$router.push("rpj");
},
//删除文件项
del_rpjfile(row) {
this.$API.rpm.rpjfile.delete
.req(row.id)
.then((res) => {
this.$message.success("删除成功!");
return res;
})
.catch((err) => {
return err;
});
},
//上传文件
upload(row) {
this.dialogupload = true;
this.fileform.id = row.id;
},
success(res) {
this.filelist.push(res.id);
},
//提交上传
submitFile() {
this.fileform.files = this.filelist;
this.$API.rpm.rpjfile.update
.req(this.fileform.id, this.fileform)
.then((res) => {
this.$message.success("提交成功!");
this.dialogupload = false;
return res;
})
.catch((err) => {
return err;
});
},
//调出项目人员列表
getremployee() {
this.$API.rpm.remployee.list.req({page: 0}).then((res) => {
this.remployeeoptions = res;
});
},
//选择人员后,调出该人员的所有证书
selectWorker() {
this.$API.rpm.rcertificate.list
.req({remployee: this.formworker.remployee, page: 0})
.then((res) => {
this.certificatesOptions = res;
});
},
//作业人员列表
getmemberList(id) {
this.$API.rpm.member.list.req({rpj: id, page: 0}).then((res) => {
this.apiworkerObj = res;
console.log(res);
});
},
//创建作业人员显示Form
addworker() {
this.workerdialog = true;
this.formworker = Object.assign({}, defaultformworker);
},
//删除作业人员
delWorker(row) {
this.$API.opm.worker.delete
.req(row.id)
.then((res) => {
this.$message.success("作业人员删除成功");
return res;
})
.catch((err) => {
return err;
});
},
//提交作业人员信息
submitWorker() {
this.formworker.rpj = this.rpjId;
this.$refs.workerForm.validate(async (valid) => {
this.$API.rpm.member.create.req(this.formworker).then((res) => {
this.$message.success("创建项目人员成功");
this.workerdialog = false;
})
.catch((err) => {
return err;
});
});
},
//渲染工单提交按钮
getInit(){
this.$API.wf.workflow.initkey.req('rparty').then((res) => {
this.initForm = res;
});
},
//提交,创建工单
submitTicketCreate(id){
let ticket={};
ticket.workflow=this.initForm.workflow;
ticket.ticket_data={rpj:this.rpjId};
ticket.transition=id;
this.$API.wf.ticket.create.req(ticket).then((res) => {
this.$message.success("提交成功");
this.$router.push({
name: "rpj",
query: {},
});
});
}
},
};
</script>