Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import Vue from 'vue'; |
| | | export default { |
| | | props: { |
| | | tableData: { |
| | |
| | | pageNum: 1 |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | height() { |
| | | return this.$baseTableHeight() |
| | | }, |
| | | height: { |
| | | type: Number, |
| | | default: () => Vue.prototype.$baseTableHeight() |
| | | } |
| | | }, |
| | | methods: { |
| | | handleCurrentChange(page) { |
| | |
| | | </div> |
| | | </template> |
| | | <template v-if="$slots.table"> |
| | | <Table :data="tableData" :total="total" :queryForm="queryForm" @currentChange="handleCurrentChange" |
| | | <Table :data="tableData" :total="total" :height="height" :queryForm="queryForm" @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange"> |
| | | <slot name="table"></slot> |
| | | </Table> |
| | |
| | | |
| | | <script> |
| | | import Table from '../Table/index.vue' |
| | | import Vue from 'vue' |
| | | export default { |
| | | components: { |
| | | Table, |
| | | }, |
| | | props: { |
| | | height: { |
| | | type: Number, |
| | | default: () => Vue.prototype.$baseTableHeight() |
| | | }, |
| | | tableData: { |
| | | type: Array, |
| | | default: () => [] |
| | |
| | | <template> |
| | | <div class="approval-process"> |
| | | <el-timeline> |
| | | <el-timeline-item |
| | | v-for="(activity, index) in processData" |
| | | :key="index" |
| | | :type="activity.type" |
| | | :timestamp="activity.time" |
| | | > |
| | | {{ activity.content }} |
| | | <el-timeline-item v-for="(activity, index) in processData" :key="index" :type="activity.type" |
| | | :timestamp="activity.time"> |
| | | <div class="approval-process-item" :class="activity.type == 'primary' ? '' : 'approval-process-item1'"> |
| | | <div class="approval-process-item-name"> |
| | | 提交人:李雷雷 |
| | | </div> |
| | | |
| | | <div class="approval-process-item-time"> |
| | | 提交时间:2020-12-01 12:30 |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | </el-timeline-item> |
| | | </el-timeline> |
| | | </div> |
| | |
| | | height: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
| | | |
| | | .approval-process-item { |
| | | padding: 12px 17px 20px 12px; |
| | | border-radius: 10px; |
| | | background: rgba(236, 252, 254, 1); |
| | | } |
| | | |
| | | .approval-process-item1 { |
| | | padding: 12px 17px 20px 12px; |
| | | border-radius: 10px; |
| | | background: rgba(241, 243, 245, 1); |
| | | } |
| | | |
| | | .approval-process-item-name { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 500; |
| | | font-size: 16px; |
| | | color: #333333; |
| | | line-height: 22px; |
| | | } |
| | | |
| | | .approval-process-item-time { |
| | | margin-top: 10px; |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 14px; |
| | | color: #999999; |
| | | line-height: 20px; |
| | | } |
| | | |
| | | ::v-deep .el-timeline { |
| | | padding: unset; |
| | | |
| | | .el-timeline-item__node { |
| | | width: 20px !important; |
| | | height: 20px !important; |
| | | background: #FFFFFF; |
| | | box-shadow: 0px 2px 6px 0px rgba(4, 156, 154, 0.36) !important; |
| | | border: 4px solid rgba(144, 147, 153, 0.40) !important; |
| | | left: -10px; |
| | | top: -8px; |
| | | } |
| | | |
| | | .el-timeline-item__node--primary { |
| | | width: 20px !important; |
| | | height: 20px !important; |
| | | background: #FFFFFF; |
| | | box-shadow: 0px 2px 6px 0px rgba(4, 156, 154, 0.36) !important; |
| | | border: 4px solid rgba(10, 203, 202, 1) !important; |
| | | left: -10px !important; |
| | | top: -8px !important; |
| | | // border-image: linear-gradient(180deg, rgba(10, 203, 202, 1), rgba(4, 156, 154, 1)) 4 4 !important; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | }, |
| | | component: () => import("../views/dataManagement/confirmation-sheet"), |
| | | }, |
| | | { |
| | | path: "confirmation-sheet/add", |
| | | name: "AddConfirmationSheet", |
| | | meta: { |
| | | title: "检验方法确认单", |
| | | }, |
| | | component: () => import("../views/dataManagement/confirmation-sheet/components/add.vue"), |
| | | }, |
| | | ], |
| | | }, |
| | | { |
New file |
| | |
| | | <template> |
| | | <Card> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>所属实验调度</div> |
| | | <el-button @click="showScheduling = true" class="el-icon-plus" type="primary"> |
| | | 选择实验调度</el-button> |
| | | </div> |
| | | <Table :tableData="tableData" :total="total" :height="null"> |
| | | <template> |
| | | <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="planName" label="实验编号"></el-table-column> |
| | | <el-table-column prop="planName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="stage" label=" 通知时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 实验开始时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 实验结束时间"></el-table-column> |
| | | <el-table-column prop="stage" label=" 参加人员"></el-table-column> |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="header-title-left" style="margin-top: 60px;"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>检测明细</div> |
| | | <el-button @click="handleAddPlan" type="primary" class="el-icon-plus"> |
| | | 新增检测项</el-button> |
| | | <span>【注意:这里有多少个检测项 系统就会自动创建对应数量的《检测项的检验方法及数据记录》】</span> |
| | | </div> |
| | | <Table :tableData="tableData" :total="total" :height="null"> |
| | | <template> |
| | | <el-table-column prop="planCode" label="序号"></el-table-column> |
| | | <el-table-column prop="planName" label="检测项名称"></el-table-column> |
| | | <el-table-column prop="planName" label="检测项编号"></el-table-column> |
| | | <el-table-column prop="stage" label=" 定性/定量"></el-table-column> |
| | | <el-table-column prop="stage" label=" 检测方法编号"></el-table-column> |
| | | <el-table-column prop="stage" label=" 检测方法"></el-table-column> |
| | | <el-table-column prop="stage" label=" 收样要求"></el-table-column> |
| | | <el-table-column prop="creator" label="操作"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="btn_box flex"> |
| | | <el-button @click="$router.go(-1)">返回</el-button> |
| | | <el-button type="primary" @click="onSubmit">保存</el-button> |
| | | |
| | | </div> |
| | | <experimentalScheduling :show="showScheduling"/> |
| | | </Card> |
| | | </template> |
| | | |
| | | <script> |
| | | import experimentalScheduling from './experimental-scheduling.vue'; |
| | | export default { |
| | | name: 'AddConfirmationSheet', |
| | | components: { |
| | | experimentalScheduling |
| | | }, |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | showScheduling: false, |
| | | tableData: [], |
| | | total: 0, |
| | | form: { |
| | | roleName: "", |
| | | remark: "", |
| | | }, |
| | | rules: { |
| | | roleName: [ |
| | | { required: true, message: "请输入角色名称", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | menu: [], |
| | | }; |
| | | }, |
| | | computed: { |
| | | height() { |
| | | return this.$baseTableHeight() |
| | | }, |
| | | }, |
| | | watch: {}, |
| | | created() { |
| | | roleInfoFromUserId({ userId: 1 }).then(res => { |
| | | if (this.$route.query.roleId) { |
| | | getRoleInfo({ roleId: this.$route.query.roleId }).then(resp => { |
| | | this.menu = this.setSelectedIds(res.data.data, resp.data.data.menus || []); |
| | | this.form = { |
| | | roleName: resp.data.data.roleName, |
| | | remark: resp.data.data.remark, |
| | | roleId: resp.data.data.roleId |
| | | } |
| | | }) |
| | | } else { |
| | | this.menu = res.data.data |
| | | } |
| | | }) |
| | | }, |
| | | mounted() { }, |
| | | methods: { |
| | | setSelectedIds(arr, selectKeyList) { |
| | | function traverse(item) { |
| | | item.selected = selectKeyList.includes(item.menuId); |
| | | if (item.children && item.children.length > 0) { |
| | | item.children.forEach(traverse); |
| | | } |
| | | } |
| | | arr.forEach(traverse); |
| | | return arr; |
| | | }, |
| | | onSubmit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | if (this.getSelectedIds(this.menu).length == 0) { |
| | | this.msgwarning('请勾选操作权限') |
| | | return |
| | | } |
| | | let obj = { |
| | | ...this.form, |
| | | menuIds: this.getSelectedIds(this.menu) |
| | | } |
| | | if (this.$route.query && this.$route.query.roleId) { |
| | | obj.roleId = this.$route.query.roleId |
| | | edit(obj).then(() => { |
| | | this.msgsuccess('保存成功') |
| | | this.$router.go(-1) |
| | | }) |
| | | } else { |
| | | add(obj).then(() => { |
| | | this.msgsuccess('保存成功') |
| | | this.form = { |
| | | roleName: "", |
| | | remark: "", |
| | | } |
| | | this.menu = [] |
| | | this.$router.go(-1) |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | getSelectedIds(arr) { |
| | | let result = []; |
| | | function traverse(item) { |
| | | if (item.selected) { |
| | | result.push(item.menuId); |
| | | } |
| | | if (item.children && item.children.length > 0) { |
| | | for (let children of item.children) { |
| | | traverse(children); |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (let item of arr) { |
| | | traverse(item); |
| | | } |
| | | return result; |
| | | }, |
| | | setCheckStatus1(id, status) { //点击第1级 |
| | | if (!status) { |
| | | this.menu = this.menu.map(item => { |
| | | if (item.menuId == id) { |
| | | item.selected = status |
| | | if (item.children.length > 0) { |
| | | item.children = item.children.map(item1 => { |
| | | item1.selected = status |
| | | if (item1.children.length > 0) { |
| | | item1.children = item1.children.map(item2 => { |
| | | item2.selected = status |
| | | return { ...item2 } |
| | | }) |
| | | } |
| | | return { ...item1 } |
| | | }) |
| | | } |
| | | } |
| | | return { ...item } |
| | | }) |
| | | } else { |
| | | this.menu = this.menu.map(item => { |
| | | if (item.menuId == id) { |
| | | item.selected = true |
| | | } |
| | | return { ...item } |
| | | }) |
| | | } |
| | | }, |
| | | setCheckStatus2(id, status, aId) { //点击第2级 |
| | | this.menu = this.menu.map(item => { |
| | | if (item.menuId == aId) { |
| | | item.selected = true |
| | | if (item.children.length > 0) { |
| | | item.children = item.children.map(item1 => { |
| | | if (item1.menuId == id) { |
| | | item1.selected = status |
| | | } |
| | | return { ...item1 } |
| | | }) |
| | | } |
| | | } |
| | | return { ...item } |
| | | }) |
| | | }, |
| | | setCheckStatus3(id, status, bId, aId) {//点击第3级 |
| | | this.menu = this.menu.map(item => { |
| | | if (item.menuId == aId) { |
| | | item.selected = true |
| | | if (item.children.length > 0) { |
| | | item.children = item.children.map(item1 => { |
| | | if (item1.menuId == bId) { |
| | | item1.selected = true |
| | | if (item1.children.length > 0) { |
| | | item1.children = item1.children.map(item2 => { |
| | | if (item2.menuId == id) { |
| | | item2.selected = status |
| | | } |
| | | return { ...item2 } |
| | | }) |
| | | } |
| | | } |
| | | return { ...item1 } |
| | | }) |
| | | } |
| | | } |
| | | return { ...item } |
| | | }) |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="less" scoped> |
| | | .title_box { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | font-weight: bold; |
| | | |
| | | div:first-child { |
| | | width: 4px; |
| | | height: 16px; |
| | | background: #598DEC; |
| | | margin-right: 8px; |
| | | } |
| | | } |
| | | |
| | | .no-data { |
| | | height: 100%; |
| | | background-color: #fff; |
| | | border-radius: 0 0 6px 6px; |
| | | border-left: 1px solid #e8e8e8; |
| | | border-right: 1px solid #e8e8e8; |
| | | border-bottom: 1px solid #e8e8e8; |
| | | box-sizing: border-box; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | color: #909399; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .btn_box { |
| | | margin-top: 40px; |
| | | text-align: center; |
| | | |
| | | button { |
| | | width: 220px; |
| | | } |
| | | } |
| | | |
| | | .el-checkbox { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .row, |
| | | .header { |
| | | display: flex; |
| | | align-items: center; |
| | | border: 1px solid #e8e8e8; |
| | | |
| | | .w20 { |
| | | width: 15%; |
| | | padding: 8px 20px; |
| | | } |
| | | |
| | | .sconed { |
| | | flex: 1; |
| | | |
| | | .subpage { |
| | | .title { |
| | | border: 1px solid #e8e8e8; |
| | | border-top: none; |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .two { |
| | | display: flex; |
| | | align-items: center; |
| | | border: 1px solid #e8e8e8; |
| | | border-top: none; |
| | | border-right: none; |
| | | |
| | | .left { |
| | | width: 200px; |
| | | padding: 13px 20px; |
| | | border-right: 1px solid #e8e8e8; |
| | | } |
| | | |
| | | .right { |
| | | display: flex; |
| | | flex: 1; |
| | | |
| | | div { |
| | | padding: 13px 0 13px 20px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .two:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .btns { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .header { |
| | | border-radius: 16px 16px 0 0; |
| | | background-color: #FAFAFA; |
| | | color: #909399; |
| | | |
| | | .subpage { |
| | | display: flex; |
| | | } |
| | | |
| | | .title { |
| | | width: 200px; |
| | | padding: 8px 20px; |
| | | } |
| | | } |
| | | |
| | | .header-title-left { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 13px; |
| | | margin-bottom: 20px; |
| | | |
| | | img { |
| | | width: 12px; |
| | | height: 19px; |
| | | } |
| | | |
| | | div { |
| | | flex-shrink: 0; |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | color: #222222; |
| | | line-height: 27px; |
| | | font-family: 'Source Han Sans CN Bold Bold'; |
| | | } |
| | | |
| | | span { |
| | | color: rgb(254, 115, 115); |
| | | font-size: 15px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog title="选择项目组" :visible.sync="show" width="80%"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="140px" inline> |
| | | <el-form-item label="所属项目课题方案:"> |
| | | <el-input v-model="form.planName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="实验编号:"> |
| | | <el-input v-model="form.planCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="实验名称:"> |
| | | <el-input v-model="form.creator" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="通知时间:"> |
| | | <el-date-picker v-model="form.createTime" type="daterange" range-separator="至" |
| | | start-placeholder="开始日期" end-placeholder="结束日期" |
| | | value-format="yyyy-MM-dd"></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="状态:"> |
| | | <el-select v-model="form.status" placeholder="请选择"> |
| | | <el-option label="待确认" value="待确认"></el-option> |
| | | <el-option label="已确认" value="已确认"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label=""> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | | <el-button type="primary" @click="handleSearch">查询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <template #table> |
| | | <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="planName" label="实验编号"></el-table-column> |
| | | <el-table-column prop="planName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="stage" label="提交时间"></el-table-column> |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | <el-table-column label="操作" width="150"> |
| | | <!-- 撤销、详情、编辑、删除 --> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">撤销</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)">编辑</el-button> |
| | | <el-button type="text" @click="handleDetail(scope.row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="show = false">取 消</el-button> |
| | | <el-button type="primary" @click="show = false">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: ['show'], |
| | | data() { |
| | | return { |
| | | form: {}, |
| | | tableData: [], |
| | | totol: 0 |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style></style> |
| | |
| | | }, |
| | | handleAddPlan() { |
| | | this.$router.push({ |
| | | path: "/dataManagement/addPlan", |
| | | path: "/dataManagement/confirmation-sheet/add", |
| | | }); |
| | | }, |
| | | handleApprove(row) { |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog top="40vh" :visible.sync="show" :show-close="false" :append-to-body="true" |
| | | :close-on-click-modal="false" width="60%"> |
| | | <div class="top-con a-center" slot="title"> |
| | | 审批验证与发布报告 |
| | | </div> |
| | | <div class="content"> |
| | | <div class="left"> |
| | | <div class="label-tit"> </div> |
| | | <el-dialog :title="dialogTitle" :visible.sync="visible" width="80%" po :close-on-click-modal="false" |
| | | @close="handleClose"> |
| | | <div class="approval-dialog"> |
| | | <!-- 左侧审批内容 --> |
| | | <div class="approval-content"> |
| | | <Card class="approval-content-card"> |
| | | <template style="position: relative"> |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>所属项目组</div> |
| | | </div> |
| | | </div> |
| | | <Table :queryForm="queryForm" :total="0" @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange"> |
| | | <template> |
| | | <el-table-column prop="name" label="项目组名称" /> |
| | | <el-table-column prop="age" label="项目负责人" /> |
| | | <el-table-column prop="age" label="项目组成员" /> |
| | | <el-table-column prop="age" label="创建时间" /> |
| | | </template> |
| | | </Table> |
| | | |
| | | <el-form ref="form" :model="form" label-width="100px"></el-form> |
| | | <el-form-item label="报告编号" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入报告编号" /> |
| | | </el-form-item> |
| | | <el-form-item label="报告名称" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入报告名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="报告状态" prop="name"> |
| | | <el-select v-model="form.name" placeholder="请选择报告状态"> |
| | | <el-option label="全部" value="1" /> |
| | | <el-option label="待审核" value="2" /> |
| | | <el-option label="已通过" value="3" /> |
| | | <el-option label="已驳回" value="4" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="right"></div> |
| | | |
| | | <el-form ref="form" :model="form" :rules="rules" inline label-position="top" |
| | | style="margin-top: 38px"> |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>报告编号</div> |
| | | </div> |
| | | </div> |
| | | <form-item prop="name" style="margin-top: 38px"> |
| | | <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | </form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>报告名称</div> |
| | | </div> |
| | | </div> |
| | | <form-item prop="name" style="margin-top: 38px"> |
| | | <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | </form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>报告正文</div> |
| | | </div> |
| | | </div> |
| | | <form-item prop="name" style="margin-top: 38px"> |
| | | <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | </form-item> |
| | | |
| | | </el-form> |
| | | </template> |
| | | <!-- <SelectMember ref="selectMember" /> --> |
| | | </Card> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="$emit('close')">取消</el-button> |
| | | <el-button type="primary" @click="$emit('confirm')">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | <!-- 右侧审批流程 --> |
| | | <div class="approval-flow"> |
| | | <div class="flow-content"> |
| | | <approval-process :status="form.status" :submit-time="form.createTime" :approver="form.approver" |
| | | :approve-time="form.approveTime" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="approval-dialog-approve"> |
| | | <el-row :span="24"> |
| | | <el-col :span="12"> |
| | | <div class="status"> |
| | | <div class="status-title">审批结果</div> |
| | | <div class="status-content"> |
| | | <div class="resolve" :class="status == '1' && 'activeStatus'" @click.stop="status = 1"> |
| | | 通过 |
| | | </div> |
| | | <div class="reject" :class="status == '2' && 'activeStatus'" @click.stop="status = 2"> |
| | | 驳回 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="remark"> |
| | | <div class="remark-title">审批意见</div> |
| | | <el-input type="textarea" v-model="remark" placeholder="请输入审批意见" /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleClose">取 消</el-button> |
| | | <el-button type="primary" @click="handleApprove" v-if="type === 'approve'">通过</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | import ApprovalProcess from '@/components/approvalProcess' |
| | | import AiEditor from '@/components/AiEditor' |
| | | |
| | | export default { |
| | | components: {}, |
| | | name: "ApprovalDialog", |
| | | components: { |
| | | ApprovalProcess, |
| | | AiEditor |
| | | }, |
| | | props: { |
| | | show: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: { |
| | | type: String, |
| | | default: '确认要删除这条信息吗?', |
| | | default: "approve", // approve-审批,view-查看 |
| | | }, |
| | | data: { |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | }, |
| | | data() { |
| | | return {}; |
| | | return { |
| | | form: { |
| | | planName: "", |
| | | planCode: "", |
| | | stage: "", |
| | | creator: "", |
| | | createTime: "", |
| | | approvalComment: "", |
| | | status: "pending", |
| | | approver: "", |
| | | approveTime: "" |
| | | }, |
| | | radio1: 1, |
| | | rules: {}, |
| | | status: "1", |
| | | remark: "", |
| | | }; |
| | | }, |
| | | computed: {}, |
| | | watch: {}, |
| | | created() { }, |
| | | mounted() { }, |
| | | methods: {}, |
| | | computed: { |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "审批" : "审批详情"; |
| | | }, |
| | | }, |
| | | watch: { |
| | | data: { |
| | | handler(val) { |
| | | if (val) { |
| | | this.form = { ...val }; |
| | | } |
| | | }, |
| | | immediate: true, |
| | | }, |
| | | }, |
| | | methods: { |
| | | handleClose() { |
| | | this.$emit("update:visible", false); |
| | | this.form.approvalComment = ""; |
| | | }, |
| | | handleApprove() { |
| | | if (!this.form.approvalComment) { |
| | | this.$message.warning("请输入审批意见"); |
| | | return; |
| | | } |
| | | this.$emit("approve", { |
| | | ...this.form, |
| | | status: "approved", |
| | | }); |
| | | }, |
| | | handleReject() { |
| | | if (!this.form.approvalComment) { |
| | | this.$message.warning("请输入审批意见"); |
| | | return; |
| | | } |
| | | this.$emit("reject", { |
| | | ...this.form, |
| | | status: "rejected", |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .left { |
| | | ::v-deep .el-dialog__header { |
| | | border-bottom: 1px solid #e4e7ed; |
| | | } |
| | | |
| | | .approval-dialog { |
| | | display: flex; |
| | | } |
| | | height: 40vh; |
| | | |
| | | ::v-deep .el-dialog { |
| | | border-radius: 12px; |
| | | |
| | | .el-dialog__header { |
| | | padding-top: 28px; |
| | | padding-right: 27px; |
| | | padding-left: 34px; |
| | | padding-bottom: 11px; |
| | | .approval-content { |
| | | flex: 3; |
| | | margin-right: 20px; |
| | | background: #ffffff; |
| | | box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08); |
| | | border-radius: 10px; |
| | | } |
| | | |
| | | .el-dialog__body { |
| | | padding: unset; |
| | | padding-left: 73px; |
| | | padding-right: 20px; |
| | | } |
| | | .approval-flow { |
| | | padding: 40px 20px; |
| | | // width: 405px; |
| | | flex: 2; |
| | | background: #ffffff; |
| | | box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08); |
| | | border-radius: 10px; |
| | | |
| | | .flow-title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | margin-bottom: 20px; |
| | | color: #303133; |
| | | } |
| | | |
| | | .el-dialog__footer { |
| | | padding-top: 18px; |
| | | padding-right: 27px; |
| | | padding-bottom: 29px; |
| | | .flow-content { |
| | | height: calc(100% - 40px); |
| | | overflow-y: auto; |
| | | |
| | | .el-form--inline .el-form-item { |
| | | margin-right: 83px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .bgcolor1 { |
| | | background: rgba(22, 119, 255, 1); |
| | | .approval-content-card { |
| | | height: calc(100% - 100px) !important; |
| | | box-shadow: none !important; |
| | | } |
| | | |
| | | .top-con { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .header-title { |
| | | // display: flex; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | margin-bottom: 20px; |
| | | gap: 13px; |
| | | |
| | | .title { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: rgba(0, 0, 0, 1); |
| | | margin-bottom: 13px; |
| | | .header-title-left { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 13px; |
| | | margin-top: 38px; |
| | | |
| | | img { |
| | | width: 12px; |
| | | height: 19px; |
| | | } |
| | | |
| | | div { |
| | | flex-shrink: 0; |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | color: #222222; |
| | | line-height: 27px; |
| | | font-family: "Source Han Sans CN Bold Bold"; |
| | | |
| | | &:before { |
| | | content: "*"; |
| | | color: #f56c6c; |
| | | margin-right: 4px; |
| | | } |
| | | } |
| | | |
| | | span { |
| | | flex-shrink: 0; |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | color: #222222; |
| | | line-height: 27px; |
| | | font-family: "Source Han Sans CN Bold Bold"; |
| | | } |
| | | } |
| | | |
| | | .header-title-left :first-child { |
| | | margin-top: 0; |
| | | } |
| | | } |
| | | |
| | | .header-title:first-child { |
| | | .header-title-left { |
| | | margin-top: 0; |
| | | } |
| | | } |
| | | |
| | | .item-title { |
| | | padding-left: 25px; |
| | | |
| | | span { |
| | | flex-shrink: 0; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | color: #222222; |
| | | line-height: 27px; |
| | | font-family: "Source Han Sans CN Bold Bold"; |
| | | margin: 18px 0; |
| | | |
| | | &:before { |
| | | content: "*"; |
| | | color: #f56c6c; |
| | | margin-right: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .approval-dialog-approve { |
| | | padding: 38px 20px; |
| | | // display: flex; |
| | | align-content: center; |
| | | |
| | | .status { |
| | | margin-right: 40px; |
| | | max-width: 60%; |
| | | } |
| | | |
| | | // align-items: center; |
| | | .status-title { |
| | | color: #222222; |
| | | font-family: "SourceHanSansCN-Medium"; |
| | | line-height: 14px; |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .status-content { |
| | | display: flex; |
| | | align-items: center; |
| | | width: 100%; |
| | | gap: 16px; |
| | | background: #ffffff; |
| | | border-radius: 10px; |
| | | border: 1px solid rgba(4, 156, 154, 0.5); |
| | | |
| | | .resolve { |
| | | border-radius: 10px; |
| | | flex: 1; |
| | | font-size: 16px; |
| | | // padding: 5px 55px; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | cursor: pointer; |
| | | line-height: 32px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center |
| | | } |
| | | |
| | | .reject { |
| | | flex: 1; |
| | | border-radius: 10px; |
| | | font-size: 16px; |
| | | line-height: 32px; |
| | | // padding: 5px 55px; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | cursor: pointer; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center |
| | | } |
| | | |
| | | .activeStatus { |
| | | background: #ebfefd; |
| | | color: #049c9a; |
| | | box-shadow: 0px 0px 6px 0px rgba(10, 109, 108, 0.25); |
| | | border-radius: 10px; |
| | | } |
| | | } |
| | | |
| | | .remark-title { |
| | | color: #222222; |
| | | font-family: "SourceHanSansCN-Medium"; |
| | | line-height: 14px; |
| | | margin-bottom: 16px; |
| | | } |
| | | } |
| | | |
| | | .dialog-footer { |
| | | align-items: center; |
| | | display: flex; |
| | | justify-content: center; |
| | | |
| | | button { |
| | | width: 150px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <TableCustom :queryForm="queryForm" :total="total" @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" :label-width="auto" inline> |
| | | <el-form :model="form" label-width="auto" inline> |
| | | <el-form-item label="所属项目组:"> |
| | | <el-input v-model="form.name" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | |
| | | </template> |
| | | </TableCustom> |
| | | |
| | | <Approval :show="showApproval" @close="showApproval = false" /> |
| | | <Approval :visible="showApproval" @close="showApproval = false" /> |
| | | |
| | | |
| | | <ShowDelConfirm :show="showDelConfirm" @close="showDelConfirm = false" @confirm="handleDelConfirm" /> |