修改首页工作台样式

master
jinna 1 year ago
parent a474c2eba7
commit 2246cbe40e
  1. 6
      src/views/businessManagement/ordinary.vue
  2. 64
      src/views/goodsManagement/goodsList.vue
  3. 1
      src/views/labManagement/components/addDialog.vue
  4. 300
      src/views/operation/hand.vue
  5. 198
      src/views/workbench/index.vue

@ -3,7 +3,7 @@
<avue-crud :search.sync="searchForm" :option="option" :table-loading="loading" :data="data" :page.sync="page"
ref="crud" v-model="form" :permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose"
@search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
@size-change="sizeChange" @refresh-change="refreshChange" @selection-change="selectSection">
@size-change="sizeChange" @refresh-change="refreshChange" @selection-change="selectSection" @sort-change="sortChange">
<template slot-scope="{row}" slot="timeRangeSearch">
<el-date-picker v-model="searchForm.timeRange" type="daterange" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
@ -765,6 +765,7 @@ export default {
label: "完成时间",
labelWidth: 120,
prop: "finishTime",
sortable:true,
},
{
label: "审批时间",
@ -873,6 +874,9 @@ export default {
}
},
methods: {
sortChange(val){
console.log('val============>',val)
},
handleInput(value) {
// 使
const regex = /^(\d+)?(\.\d{1,2})?$/;

@ -21,11 +21,11 @@
</template>
<template slot-scope="scope" slot="menuLeft">
<el-button type="primary" size="small" @click="handleAdd" v-show="permission.goodsAdd"> </el-button>
<el-button type="primary" size="small" @click="handleReceive" v-show="permission.goodsReceive"> </el-button>
<!-- <el-button type="primary" size="small" @click="handleReceive" v-show="permission.goodsReceive"> </el-button> -->
<el-button type="primary" size="small" @click="handleReceive" v-show="permission.goodsReceive"> </el-button>
<el-button size="small" @click="handleImport" type="success"> </el-button>
<el-button type="warning" size="small" @click="handleExport"> </el-button>
<!-- <el-button type="primary" size="small" @click="handlePurchase" v-show="permission.goodsBuy"> </el-button> -->
<el-button type="primary" size="small" @click="handleAddGoods" v-show="permission.goodsBuy"> </el-button>
</template>
<template slot-scope="{ row }" slot="menu">
<el-button @click="handleVide(row)" v-show="permission.goodsView">查看</el-button>
@ -163,7 +163,7 @@
<el-input placeholder="请输入存放位置" v-model="addForm.location" style="width: 97%;" :disabled="viewType == 'view' || isSelected"></el-input>
</el-form-item>
<el-form-item label="描述" prop="describes">
<el-input :disabled="viewType == 'view'" v-model="addForm.describes" type="textarea" placeholder="请输入描述" style="width: 97%;"></el-input>
<el-input :disabled="viewType == 'view' || isSelected" v-model="addForm.describes" type="textarea" placeholder="请输入描述" style="width: 97%;"></el-input>
</el-form-item>
<el-form-item label="物品大类" prop="bigClassId">
<SelectTree
@ -202,11 +202,16 @@
<el-form-item label="统一报价" prop="unifiedQuotation">
<el-input :disabled="viewType == 'view' || isSelected" placeholder="请输入统一报价" v-model="addForm.unifiedQuotation" style="width: 97%;"></el-input>
</el-form-item>
<el-form-item label="关联仓库" prop="warehouseId">
<el-select v-model="addForm.warehouseId" placeholder="请选择关联仓库" :disabled="viewType == 'view' || isSelected" style="width: 97%;" @change="changeWare" v-loadmore="loadmoreWare">
<el-option v-for="item in warehouseList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="续订时间(天)" prop="renewNum">
<el-input :disabled="viewType == 'view' || isSelected" placeholder="请输入续订时间" v-model="addForm.renewNum" style="width: 97%;"></el-input>
</el-form-item>
<el-form-item label="是否已停产" prop="deactivate">
<el-select placeholder="请选择是否已停产" v-model="addForm.deactivate" style="width: 97%;" :disabled="viewType == 'view'">
<el-select placeholder="请选择是否已停产" v-model="addForm.deactivate" style="width: 97%;" :disabled="viewType == 'view' || isSelected">
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
</el-select>
@ -263,14 +268,20 @@ import { nextTick } from 'vue';
import { downloadXls } from "@/util/util";
import {exportBlob} from "@/api/common";
import {dateNow} from "@/util/date";
import {getList} from '@/api/goodsManagement/warehouse'
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
export default {
components:{
SelectTree
},
data(){
return {
warehouseList:[], //
warehouseCurrent:1,
warehouseSize:10,
warehouseTotal:0,
importVisible:false,
purchaseForm:{},
purchaseRules:{},
@ -284,13 +295,7 @@ export default {
dialogWarning:false,
addRules:{
name:{required:true,message:'请输入物品名称',trigger:'blur'},
// bigClassId:{required:true,message:'',trigger:'blur'},
// type:{required:true,message:'',trigger:'blur'},
// brand:{required:true,message:'',trigger:'blur'},
// xh:{required:true,message:'',trigger:'blur'},
// rule:{required:true,message:'',trigger:'blur'},
num:{required:true,message:'请输入库存数量',trigger:'blur'},
// unit:{required:true,message:'',trigger:'blur'},
},
dialogAdd:false,
dialogTitle:'物品采购',
@ -530,6 +535,7 @@ export default {
this.treeData = res.data.data
this.treeOptions = res.data.data
})
this.getWareList()
getChildList(1,100,'1848278876525527042').then(res =>{
this.majorTypeList = res.data.data
})
@ -539,6 +545,26 @@ export default {
},
methods:{
changeWare(val){
console.log('val---------->',val)
this.addForm.warehouseName = this.warehouseList.find(item => item.id == val).name
},
loadmoreWare(){
console.log('11111111111111111111')
if (this.warehouseCurrent * this.warehouseSize >= this.warehouseTotal) return
this.warehouseCurrent++
this.getWareList()
},
getWareList(){
getList({current:this.warehouseCurrent,size:this.warehouseSize}).then(res =>{
if(this.warehouseCurrent == 1){
this.warehouseList = res.data.data.records
}else{
this.warehouseList = this.warehouseList.concat(res.data.data.records)
}
this.warehouseTotal = res.data.data.total
})
},
loadmore(){
console.log('this.goodsCurrent', this.goodsCurrent, this.goodsSize, this.goodsTotal)
if (this.goodsCurrent * this.goodsSize >= this.goodsTotal) return
@ -553,10 +579,12 @@ export default {
getGoodsList({current:1,size:100,name:this.goodsName}).then(res =>{
if(res.data.data.records.length != 0){
let tmp = res.data.data.records.find(item => item.name == val)
console.log('tmp===========>',tmp)
if(tmp){
this.isSelected = true
this.addForm = tmp
this.addForm.warehouseId = this.addForm.warehouseId == -1 ? '' : this.addForm.warehouseId
this.addForm.unifiedQuotation = this.addForm.unifiedQuotation == -1 ? '' : this.addForm.unifiedQuotation
this.addForm.purchasePrice = this.addForm.purchasePrice == -1 ? '' : this.addForm.purchasePrice
this.addForm.num = 0
this.addForm.bigClassId = {node:tmp.bigClassId,data:[]}
}
@ -702,6 +730,9 @@ export default {
getDetail({id:row.id}).then(res =>{
this.dialogTitle = '物品查看'
this.addForm = res.data.data
this.addForm.warehouseId = this.addForm.warehouseId == -1 ? '' : this.addForm.warehouseId
this.addForm.unifiedQuotation = this.addForm.unifiedQuotation == -1 ? '' : this.addForm.unifiedQuotation
this.addForm.purchasePrice = this.addForm.purchasePrice == -1 ? '' : this.addForm.purchasePrice
this.dialogAdd = true
this.viewType = 'view'
})
@ -712,7 +743,11 @@ export default {
this.dialogTitle = '物品编辑'
this.addForm = res.data.data
this.addForm.bigClassId = {node:this.addForm.bigClassId,data:[]}
this.addForm.warehouseId = this.addForm.warehouseId == -1 ? '' : this.addForm.warehouseId
this.addForm.unifiedQuotation = this.addForm.unifiedQuotation == -1 ? '' : this.addForm.unifiedQuotation
this.addForm.purchasePrice = this.addForm.purchasePrice == -1 ? '' : this.addForm.purchasePrice
this.dialogAdd = true
this.isSelected = false
this.viewType = 'edit'
})
},
@ -730,6 +765,8 @@ export default {
rule:this.addForm.rule, //
unit:this.addForm.unit, //
name:this.addForm.name, //
warehouseId: this.addForm.warehouseId,
warehouseName: this.addForm.warehouseName
}
]
}
@ -750,6 +787,7 @@ export default {
...this.addForm,
bigClassId:this.addForm.bigClassId.node
}
console.log('addForm------------>',this.addForm)
saveGoods(query).then(res =>{
if(res.data.code == 200){
this.$message.success('提交成功')
@ -769,7 +807,9 @@ export default {
rule:this.addForm.rule,
num:this.addForm.num,
unit:this.addForm.unit,
remark:this.addForm.remark
remark:this.addForm.remark,
warehouseId: this.addForm.warehouseId,
warehouseName: this.addForm.warehouseName
}
editGoods(query).then(res =>{
if(res.data.code == 200){

@ -363,7 +363,6 @@ export default {
getDetail({ id: val }).then(res => {
if (this.title == '新建') {
console.log('tmp------------------->', this.tableData.find(item => item.deviceId == val))
let arr = []
res.data.data.maintenances.map(item => {
arr.push({

@ -32,7 +32,8 @@
: ""
}}
</el-tag> -->
<el-tag :type="getStatus('maintain',role_id,row.status).type">{{ getStatus('maintain',role_id,row.status).name }}</el-tag>
<el-tag :type="getStatus('maintain', role_id, row.status).type">{{ getStatus('maintain', role_id, row.status).name
}}</el-tag>
</template>
<template slot-scope="{ type, disabled }" slot="statusForm">
<div v-if="type == 'view'">
@ -79,7 +80,7 @@
<el-button v-show="row.status == -1" @click="handleSubmit(row)">提交</el-button>
<el-button v-show="row.status == 4" @click="confirmOrder(row)">确认</el-button>
<el-button v-show="row.status == 6 || row.status == 20" @click="handleEvaluate(row)">评价</el-button>
<el-button @click="handleExport(row)">导出</el-button>
<el-button @click="handleExport(row)">导出</el-button>
<!-- <el-button v-show="row.status == 9" @click="clickPrint(row)">发票打印</el-button> -->
</template>
</avue-crud>
@ -89,7 +90,7 @@
</div>
</el-dialog>
<el-dialog :title="detailTitle" :visible.sync="detailVisible" :append-to-body="true" width="50%">
<div style="height:500px;overflow:auto;" >
<div style="height:500px;overflow:auto;">
<el-form ref="form" :model="detailForm" label-width="150px" label-position="left">
<div>
<div style="
@ -104,13 +105,16 @@
<el-input placeholder="请输入填报人" disabled v-model="detailForm.informantName" style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="填报人电话" prop="informantPhone" v-show="viewType == 'view'">
<el-input placeholder="请输入填报人电话" disabled v-model="detailForm.informantPhone" style="width: 98%;"></el-input>
<el-input placeholder="请输入填报人电话" disabled v-model="detailForm.informantPhone"
style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="故障现象描述" prop="faultDescribe">
<el-input placeholder="请输入故障现象描述" disabled type="textarea" v-model="detailForm.faultDescribe" style="width: 98%;"></el-input>
<el-input placeholder="请输入故障现象描述" disabled type="textarea" v-model="detailForm.faultDescribe"
style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="故障位置" prop="faultLocation" v-show="viewType == 'view'">
<el-input placeholder="请输入故障位置" disabled v-model="detailForm.faultLocation" style="width: 98%;"></el-input>
<el-input placeholder="请输入故障位置" disabled v-model="detailForm.faultLocation"
style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName" v-show="viewType == 'view'">
<!-- <el-select
@ -136,7 +140,8 @@
<video v-show="detailForm.errorVideo != ''" :src="detailForm.errorVideo"
style="width: 148px; height: 148px" controls></video>
</el-form-item>
<el-form-item label="故障图片" v-show="viewType == 'view' && detailForm.errorImg && detailForm.errorImg.length != 0">
<el-form-item label="故障图片"
v-show="viewType == 'view' && detailForm.errorImg && detailForm.errorImg.length != 0">
<img v-for="item in detailForm.errorImg" :key="item" :src="item.url" alt=""
style="width: 148px; height: 148px;margin-right:10px;">
</el-form-item>
@ -146,7 +151,7 @@
</el-date-picker>
</el-form-item>
</div>
<div v-show="rowStatus == 20">
<div v-show="rowStatus == 20 && detailForm.closeReason != ''">
<div style="
color: #101010;
font-size: 20px;
@ -159,7 +164,7 @@
<el-input type="textarea" v-model="detailForm.closeReason" disabled></el-input>
</el-form-item>
</div>
<div v-show="rowStatus != 0 && rowStatus != 20">
<div v-show="rowStatus != 0 && rowStatus != 20 && detailForm.closeReason == ''">
<div style="
color: #101010;
font-size: 20px;
@ -177,7 +182,8 @@
<el-input type="textarea" v-model="detailForm.customerOpinion" disabled style="width: 98%;"></el-input>
</el-form-item>
</div>
<div v-show="rowStatus != 0 && rowStatus != 20 && rowStatus != 1 && rowStatus != 2 && rowStatus != 3">
<div
v-show="rowStatus != 0 && rowStatus != 20 && rowStatus != 1 && rowStatus != 2 && rowStatus != 3 && detailForm.closeReason == ''">
<div style="
color: #101010;
font-size: 20px;
@ -187,7 +193,8 @@
维修详情
</div>
<el-form-item label="填报人" prop="repairPersonName">
<el-input placeholder="请输入填报人" disabled v-model="detailForm.repairPersonName" style="width: 98%;"></el-input>
<el-input placeholder="请输入填报人" disabled v-model="detailForm.repairPersonName"
style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="设备名称" prop="deviceId">
<!-- <el-select placeholder="请选择设备名称" disabled v-model="detailForm.deviceId" style="width: 100%">
@ -196,10 +203,12 @@
<el-input placeholder="请输入设备名称" v-model="detailForm.deviceName" disabled style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="故障原因" prop="faultCause">
<el-input placeholder="请输入故障原因" disabled type="textarea" v-model="detailForm.faultCause" style="width: 98%;"></el-input>
<el-input placeholder="请输入故障原因" disabled type="textarea" v-model="detailForm.faultCause"
style="width: 98%;"></el-input>
</el-form-item>
<el-form-item label="处理方法" prop="processMethod">
<el-input placeholder="请输入处理方法" disabled type="textarea" v-model="detailForm.processMethod" style="width: 98%;"></el-input>
<el-input placeholder="请输入处理方法" disabled type="textarea" v-model="detailForm.processMethod"
style="width: 98%;"></el-input>
</el-form-item>
<!-- <el-form-item label="是否需要申领物料" prop="isNeedMaterial">
<el-select v-model="detailForm.isNeedMaterial" placeholder="请选择是否申领物料" disabled style="width:98%;">
@ -246,14 +255,14 @@
<el-option label="驳回" :value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审批意见" prop="approveRemark" >
<el-form-item label="审批意见" prop="approveRemark">
<el-input type="textarea" v-model="detailForm.approveRemark" style="width: 98%;" disabled></el-input>
</el-form-item>
<el-form-item v-show="rowStatus == 5" label="审批人" prop="approvePersonName">
<el-input v-model="detailForm.approvePersonName" style="width: 98%;" disabled></el-input>
<el-input v-model="detailForm.approvePersonName" style="width: 98%;" disabled></el-input>
</el-form-item>
<el-form-item v-show="rowStatus == 5" label="审批时间" prop="approveTime">
<el-input v-model="detailForm.approveTime" style="width: 98%;" disabled></el-input>
<el-input v-model="detailForm.approveTime" style="width: 98%;" disabled></el-input>
</el-form-item>
</div>
<div v-show="(rowStatus == 4 || rowStatus == 5) && viewType != 'view'">
@ -266,19 +275,21 @@
客户审批
</div>
<el-form-item label="审批结果" prop="approveResult">
<el-select style="width: 98%;" placeholder="请选择审批结果" v-model="detailForm.approveResult" :disabled="rowStatus == 5">
<el-select style="width: 98%;" placeholder="请选择审批结果" v-model="detailForm.approveResult"
:disabled="rowStatus == 5">
<el-option label="通过" :value="1"></el-option>
<el-option label="驳回" :value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审批意见" prop="approveRemark" >
<el-input type="textarea" v-model="detailForm.approveRemark" style="width: 98%;" :disabled="rowStatus == 5"></el-input>
<el-form-item label="审批意见" prop="approveRemark">
<el-input type="textarea" v-model="detailForm.approveRemark" style="width: 98%;"
:disabled="rowStatus == 5"></el-input>
</el-form-item>
<el-form-item v-show="rowStatus == 5" label="审批人" prop="approvePersonName">
<el-input v-model="detailForm.approvePersonName" style="width: 98%;" disabled></el-input>
<el-input v-model="detailForm.approvePersonName" style="width: 98%;" disabled></el-input>
</el-form-item>
<el-form-item v-show="rowStatus == 5" label="审批时间" prop="approveTime">
<el-input v-model="detailForm.approveTime" style="width: 98%;" disabled></el-input>
<el-input v-model="detailForm.approveTime" style="width: 98%;" disabled></el-input>
</el-form-item>
</div>
<div v-show="rowStatus == 6">
@ -291,17 +302,20 @@
维修效果确认
</div>
<el-form-item label="是否维修完成">
<el-select placeholder="请确认是否维修完成" style="width: 98%;" v-model="detailForm.approveResult1" @change="changeResult" :disabled="viewType == 'view'">
<el-select placeholder="请确认是否维修完成" style="width: 98%;" v-model="detailForm.approveResult1"
@change="changeResult" :disabled="viewType == 'view'">
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="维修未完成原因" v-show="rowStatus == 6 && detailForm.approveResult1 == 0">
<el-input type="textarea" v-model="detailForm.approveRemark" placeholder="请输入维修未完成原因" style="width: 98%;" :disabled="viewType == 'view'"></el-input>
<el-input type="textarea" v-model="detailForm.approveRemark" placeholder="请输入维修未完成原因" style="width: 98%;"
:disabled="viewType == 'view'"></el-input>
</el-form-item>
</div>
<div v-show="(rowStatus == 6 && detailForm.approveResult1 == 0)"></div>
<div v-show="((rowStatus == 6 || isEvalute) && detailForm.approveResult1 == 1) || (rowStatus == 20 || isEvalute) || rowStatus == 7 || rowStatus == 8 || rowStatus == 9">
<div
v-show="((rowStatus == 6 || isEvalute) && detailForm.approveResult1 == 1) || (rowStatus == 20 || isEvalute) || rowStatus == 7 || rowStatus == 8 || rowStatus == 9">
<div style="
color: #101010;
font-size: 20px;
@ -380,7 +394,8 @@
</div>
</div>
</div>
<div v-show="((rowStatus == 6 || isEvalute) && detailForm.approveResult1 == 1) || (rowStatus == 20 || isEvalute) || rowStatus == 7 || rowStatus == 8 || rowStatus == 9">
<div
v-show="((rowStatus == 6 || isEvalute) && detailForm.approveResult1 == 1) || (rowStatus == 20 || isEvalute) || rowStatus == 7 || rowStatus == 8 || rowStatus == 9">
<div style="
color: #101010;
font-size: 20px;
@ -389,13 +404,15 @@
">
签名
</div>
<div style="margin-bottom: 10px;cursor: pointer;" @click="clickAssign" v-show="nameImg == '' && rowStatus != 7 && rowStatus != 8 && rowStatus != 9">
<div style="margin-bottom: 10px;cursor: pointer;" @click="clickAssign"
v-show="nameImg == '' && rowStatus != 7 && rowStatus != 8 && rowStatus != 9">
<img src="@/assets/images/assign.png" alt="">
</div>
<div v-show="nameImg != ''" @click="clickAssign">
<div v-show="nameImg != ''" @click="clickAssign">
<img :src="nameImg" alt="">
</div>
<div v-show="detailForm.signatureUrl != '' && (rowStatus == 7 || rowStatus == 8 || rowStatus == 9)" @click="clickAssign">
<div v-show="detailForm.signatureUrl != '' && (rowStatus == 7 || rowStatus == 8 || rowStatus == 9)"
@click="clickAssign">
<img :src="detailForm.signatureUrl" alt="">
</div>
<!-- <div v-show="isEvalute">
@ -409,18 +426,13 @@
<el-form-item label="签名人" prop="signaturePerson">
<el-input :disabled="!isEvalute" placeholder="请输入签名人" v-model="detailForm.signaturePerson"></el-input>
</el-form-item>
<!-- <el-form-item label="签名时间" prop="signatureTime">
<el-date-picker :disabled="viewType == 'view'" v-model="detailForm.signatureTime" type="datetime"
style="width:98%;" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择签名时间">
</el-date-picker>
</el-form-item> -->
</div>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose">关闭</el-button>
<el-button v-show="isEvalute" type="primary" @click="handleConfirm">{{ detailForm.approveResult1 == 0 ? '提交' : '评价并签字' }}</el-button>
<el-button v-show="isEvalute" type="primary" @click="handleConfirm">{{ detailForm.approveResult1 == 0 ? '提交' :
'评价并签字' }}</el-button>
<el-button v-show="viewType == 'confirm'" type="primary" @click="confirmWork">提交</el-button>
</span>
</el-dialog>
@ -444,6 +456,93 @@
<el-button @click="confirmName" type="primary">确定</el-button>
</span>
</el-dialog>
<el-dialog title="流程信息查看" :visible.sync="infoDialog" :append-to-body="true" width="70%">
<div>
<div class="el-card is-hover-shadow">
<!-- <div class="el-card__header">
<div><span>流程信息</span></div>
</div> -->
<div class="el-card__body">
<div class="row-bg el-row el-row--flex">
<ul class="el-timeline">
<li class="el-timeline-item" >
<div class="el-timeline-item__tail" style="color: #0bbd87;"></div>
<div class="el-timeline-item__node el-timeline-item__node--normal el-timeline-item__node--" style="background: #0bbd87;"><!---->
</div>
<!---->
<div class="el-timeline-item__wrapper">
<div class="el-timeline-item__timestamp is-top">
2024-12-13 16:40:46
</div>
<div class="el-timeline-item__content">
<div class="el-card is-hover-shadow"><!---->
<div class="el-card__body">
<p>维修人员提交需求工单维修方案</p>
</div>
</div>
</div><!---->
</div>
</li>
<li class="el-timeline-item">
<div class="el-timeline-item__tail"></div>
<div class="el-timeline-item__node el-timeline-item__node--normal el-timeline-item__node--"><!---->
</div>
<!---->
<div class="el-timeline-item__wrapper">
<div class="el-timeline-item__timestamp is-top">
2024-12-13 16:38:46
</div>
<div class="el-timeline-item__content">
<div class="el-card is-hover-shadow"><!---->
<div class="el-card__body">
<p>维修人员接单</p>
</div>
</div>
</div><!---->
</div>
</li>
<li class="el-timeline-item">
<div class="el-timeline-item__tail"></div>
<div class="el-timeline-item__node el-timeline-item__node--normal el-timeline-item__node--"><!---->
</div>
<!---->
<div class="el-timeline-item__wrapper">
<div class="el-timeline-item__timestamp is-top">
2024-12-13 16:38:46
</div>
<div class="el-timeline-item__content">
<div class="el-card is-hover-shadow"><!---->
<div class="el-card__body">
<p>客服接单</p>
</div>
</div>
</div><!---->
</div>
</li>
<li class="el-timeline-item">
<div class="el-timeline-item__tail"></div>
<div class="el-timeline-item__node el-timeline-item__node--normal el-timeline-item__node--"><!---->
</div>
<!---->
<div class="el-timeline-item__wrapper">
<div class="el-timeline-item__timestamp is-top">
2024-12-13 16:39:43
</div>
<div class="el-timeline-item__content">
<div class="el-card is-hover-shadow"><!---->
<div class="el-card__body">
<p>山东烁今实验室提报需求工单</p>
</div>
</div>
</div><!---->
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</el-dialog>
<div id="pdfDom" style="padding: 20px;">
<requirement :detailForm="requireForm"></requirement>
</div>
@ -458,10 +557,11 @@ import moment from "moment";
import { dateFormat } from "../../util/date";
import requestSub from '../components/requestSub.vue'
import requirement from '../components/requirement.vue'
import { getList, getDetail, evaluateSign, addFile, saveData,customerConfirm,customerReject,customerRepairConfirm,customerRepairReject,serviceInvoice } from '@/api/operation/hand'
import { getList, getDetail, evaluateSign, addFile, saveData, customerConfirm, customerReject, customerRepairConfirm, customerRepairReject, serviceInvoice } from '@/api/operation/hand'
import { getDeviceList } from '@/api/device/device'
import { getChildList } from '@/api/system/dictbiz'
import statusData from "@/assets/json/status.json"; //
import { color } from "echarts";
let action = "https://api.avuejs.com/imgupload";
export default {
@ -473,10 +573,11 @@ export default {
// directives: { print },
data() {
return {
infoDialog: false,
searchForm: {
timeRange: []
},
requireForm:{},
requireForm: {},
showPrint: false,
dialogTitle: "需求填报",
dialogVisible: false,
@ -533,6 +634,7 @@ export default {
labelWidth: 120,
prop: "requirementCode",
overHidden: true,
search:true
},
{
label: "设备名称",
@ -547,7 +649,7 @@ export default {
// type: "select",
overHidden: true,
// hide: true,
search: true,
// search: true,
// viewDisplay: false,
// dicUrl: '/lab/blade-system/dict-biz/get-hc-project',
// props: {
@ -563,7 +665,7 @@ export default {
type: "input",
searchLabelWidth: 100,
// hide: true,
search: true,
// search: true,
viewDisplay: false,
// dicUrl: '/lab/blade-system/dict-biz/get-hc-project',
props: {
@ -719,13 +821,13 @@ export default {
requestForm: {},
viewType: '',
selectionList: [],
printVisible:false,
assignVisible:false,
tableData:[],
isFinish:'',
role_id:'',
isClear:false,
htmlTitle:'需求单报告'
printVisible: false,
assignVisible: false,
tableData: [],
isFinish: '',
role_id: '',
isClear: false,
htmlTitle: '需求单报告'
};
},
@ -739,22 +841,24 @@ export default {
editBtn: this.vaildData(this.permission.notice_edit, false),
};
},
getStatus(){
return (type,id,status) =>{
for(let i in statusData[type]){
let val
statusData[type][id].map(item =>{
if(item.status == status){
val = item
}
})
return val
getStatus() {
return (type, id, status) => {
for (let i in statusData[type]) {
let val
statusData[type][id].map(item => {
if (item.status == status) {
val = item
}
})
return val
}
}
},
},
created() {
console.log('userInfo--------->', this.userInfo)
console.log('route---------->',this.$route)
this.searchForm.requirementCode = this.$route.query.requirementCode
this.role_id = this.userInfo.role_id
//
// getDeviceList({ current: 1, size: 100 }).then(res => {
@ -770,7 +874,7 @@ export default {
mounted() { },
methods: {
//
clickAssign(){
clickAssign() {
this.assignVisible = true
},
//
@ -778,19 +882,19 @@ export default {
this.selectionList = val
},
//
changeResult(val){
changeResult(val) {
this.isFinish = val
console.log(this.isFinish)
},
//
clickInvoice() {
if(this.selectionList.length == 0){
if (this.selectionList.length == 0) {
this.$message.warning('请至少选择一条数据')
}else{
} else {
let tmp = this.selectionList.find(item => item.status != 8)
if(tmp){
if (tmp) {
this.$message.warning('请选择状态为待开发票的数据')
}else{
} else {
this.$confirm('请确认是否为已选择数据开具发票?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@ -802,11 +906,11 @@ export default {
id: item.id
})
})
serviceInvoice(queryData).then(res=>{
serviceInvoice(queryData).then(res => {
this.$message.success('发票开具成功')
this.onLoad()
})
}).catch(() =>{
}).catch(() => {
})
}
@ -854,7 +958,7 @@ export default {
picAttaches: form.picAttaches,
faultDescribe: form.faultDescribe,
submitType: 1,
id:form.id
id: form.id
})
console.log('data---------->', data)
saveData(data).then(res => {
@ -900,16 +1004,16 @@ export default {
}
},
confirmName() {
console.log('name===========>',this.nameImg)
if(this.isClear){
console.log('name===========>', this.nameImg)
if (this.isClear) {
this.nameImg = ''
}else{
} else {
this.nameImg = this.$refs.sign.submit(80, 50);
}
this.assignVisible = false
},
closeName(){
if(this.nameImg == ''){
closeName() {
if (this.nameImg == '') {
this.$refs.sign.clear()
}
this.assignVisible = false
@ -938,8 +1042,8 @@ export default {
return file
},
//
confirmOrder(row){
getDetail({id:row.id}).then(res =>{
confirmOrder(row) {
getDetail({ id: row.id }).then(res => {
this.rowStatus = res.data.data.status
this.viewType = 'confirm'
this.detailVisible = true
@ -982,33 +1086,33 @@ export default {
this.discountPrice = res.data.data.discountPrice
})
},
handleExport(row){
getDetail({id:row.id}).then(res =>{
handleExport(row) {
getDetail({ id: row.id }).then(res => {
this.requireForm = res.data.data
setTimeout(() =>{
setTimeout(() => {
this.getPdf()
},100)
}, 100)
})
},
//
handleConfirm() {
console.log('this.detailForm.approveResult1',this.detailForm.approveResult1)
if(this.detailForm.approveResult1 == 0){
console.log('this.detailForm.approveResult1', this.detailForm.approveResult1)
if (this.detailForm.approveResult1 == 0) {
let query = {
id:this.detailForm.id,
approveResult:this.detailForm.approveResult1,
approvePerson:this.userInfo.user_id,
approveTime:moment().format('YYYY-MM-DD HH:mm:ss'),
approveRemark:this.detailForm.approveRemark
id: this.detailForm.id,
approveResult: this.detailForm.approveResult1,
approvePerson: this.userInfo.user_id,
approveTime: moment().format('YYYY-MM-DD HH:mm:ss'),
approveRemark: this.detailForm.approveRemark
}
customerRepairReject(query).then(res =>{
if(res.data.code == 200){
customerRepairReject(query).then(res => {
if (res.data.code == 200) {
this.$message.success('提交成功')
this.detailVisible = false
this.onLoad()
}
})
}else{
} else {
if (this.nameImg != '') {
const formData = new FormData();
formData.append('file', this.base64toFile(this.nameImg));
@ -1043,24 +1147,24 @@ export default {
},
//
confirmWork(){
confirmWork() {
let query = {
id:this.detailForm.id,
approvePerson:this.userInfo.user_id,
approveResult:this.detailForm.approveResult,
approveTime:moment().format('YYYY-MM-DD HH:mm:ss'),
approveRemark:this.detailForm.approveRemark
id: this.detailForm.id,
approvePerson: this.userInfo.user_id,
approveResult: this.detailForm.approveResult,
approveTime: moment().format('YYYY-MM-DD HH:mm:ss'),
approveRemark: this.detailForm.approveRemark
}
if(query.approveResult == 0){
customerReject(query).then(res =>{
if (query.approveResult == 0) {
customerReject(query).then(res => {
if (res.data.code == 200) {
this.$message.success('审批成功')
this.detailVisible = false
this.onLoad()
}
})
}else{
customerConfirm(query).then(res =>{
} else {
customerConfirm(query).then(res => {
if (res.data.code == 200) {
this.$message.success('审批成功')
this.detailVisible = false
@ -1089,6 +1193,7 @@ export default {
url: item.link
})
})
this.nameImg = ''
if (this.rowStatus == 3) {
this.isOkValidity = 1
this.isOkQuality = 1
@ -1137,7 +1242,8 @@ export default {
endTime: this.searchForm.timeRange && this.searchForm.timeRange.length != 0 ? this.searchForm.timeRange[1].toString() + ' 23:59:59' : '', //
faultLocation: this.searchForm.faultLocation ? this.searchForm.faultLocation : '', //
faultType: this.searchForm.faultType ? this.searchForm.faultType : '', //
dataType: 1
dataType: 1,
requirementCode:this.searchForm.requirementCode
}
console.log('query--------->', query)
getList(query).then(res => {

@ -23,17 +23,23 @@
index == 2 ? require('@/assets/images/alarm.png') : index == 3 ? require('@/assets/images/full.png') : ''"
alt="">
</div>
<div class="item_num" >{{ item.num }}</div>
<div class="right_item">
<div class="item_name">{{ item.name }}</div>
<div class="item_num" >{{ item.num }}</div>
</div>
</div>
<div class="item_name">{{ item.name }}</div>
</div>
<div class="work_item" v-show="isShowOther">
<div class="item_top">
<div class="item_img">
<img :src="require('@/assets/images/other.png')" alt="">
</div>
<div class="right_item">
<div class="item_name">其他</div>
</div>
</div>
<div class="item_name">其他</div>
</div>
</div>
</div>
@ -80,6 +86,28 @@
<el-empty class="xj_con_box" v-show="inspectionList.length == 0" description="暂无报警"></el-empty>
</div>
</div>
<div class="xj_box">
<div class="xj_tit">实验室维修</div>
<div class="xj_con">
<vueSeamless v-if="requirementList.length >= 1" :data="requirementList" :class-option="alarmOption" class="xj_con_box">
<div class="xj_item" v-for="item in requirementList" :key="item.name" @click="clickReqiure(item)">
<div class="xj_top">
<div class="tit_box">
<div class="xj_title">{{ item.requirementCode }}</div>
</div>
<div class="xj_task">{{ status }}</div>
</div>
<div class="xj_center">
<div class="xj_status">{{ item.faultDescribe }}</div>
</div>
<!-- <div class="xj_bottom">
</div> -->
</div>
</vueSeamless>
<el-empty class="xj_con_box" v-show="requirementList.length == 0" description="暂无报警"></el-empty>
</div>
</div>
</div>
</div>
<div class="bottom_box">
@ -157,7 +185,6 @@
</div>
<div class="bench_box">
<div class="bench_tit"><span style="font-weight: 550;">工作台</span>
<div class="bench_num">9</div>
</div>
<div class="bench_con">
<div class="bench_item" v-for="(item, index) in benchList" :key="item.title">
@ -250,6 +277,7 @@ import { mapGetters } from "vuex";
import Map from './map.vue'
import vueSeamless from 'vue-seamless-scroll'
import { getUserInfo } from "@/api/system/user";
import { getList } from '@/api/operation/hand'
import { overview, workList, deviceList, upkeepStat, pieStat, mapAddress, limsInspecList, overviewList, limsInspecChart, faultRatio } from '@/api/workbench/workbench'
import { color } from 'echarts';
@ -260,6 +288,7 @@ export default {
},
data() {
return {
requirementList:[],
role_id: '',
isShowOther: false,
isShowMask:false,
@ -393,6 +422,7 @@ export default {
this.getbackGroundPic()
this.getUpkeepStat()
this.getPieStat()
this.getRequirement()
this.alarmOption = {
"step": 0.2, //
"limitMoveNum": 3, // this.dataList.length
@ -433,6 +463,23 @@ export default {
}
},
methods: {
clickReqiure(item){
console.log('item----------->',item)
this.$router.push({
path:'/operation/hand',
query:item
})
},
getRequirement(){
getList({
current:1,
size:10,
dataType: 1,//
statusSearch: '1,2,3,4,6,20,7',//5
}).then(res =>{
this.requirementList = res.data.data.records
})
},
//
getbackGroundPic() {
getUserInfo().then(res => {
@ -582,7 +629,7 @@ export default {
top: '15%',
left: '5%',
right: '5%',
bottom: '15%'
bottom: '10%'
},
yAxis: {},
series: [
@ -592,7 +639,7 @@ export default {
data: this.totalBardata,
itemStyle: {
// color: '#2478f2'
color:'#035cdd'
color:'#2148D1'
}
},
{
@ -601,7 +648,7 @@ export default {
data: this.completedBardata,
itemStyle: {
// color: '#84b7f9'
color:'#98c2f7'
color:'#5E8CFF'
}
},
{
@ -610,7 +657,7 @@ export default {
data: this.unCompletedBardata,
itemStyle: {
// color: '#5f9cf8'
color:'#5470c6'
color:'#B0CCFF'
}
},
]
@ -798,7 +845,7 @@ export default {
.container {
width: 99%;
height: 95%;
background: #fff;
//background: #fff;
margin: 0 auto;
.mask{
@ -817,10 +864,11 @@ export default {
}
.top_box {
width: calc(100% - 40px);
height: 47%;
width: 100%;
height: 51%;
margin: 0 auto;
padding: 20px;
margin-top: 5px;
// padding: 20px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@ -833,13 +881,13 @@ export default {
}
.top_right {
width: 48%;
width: 49%;
height: 100%;
.work_box {
width: 95%;
height: 45%;
margin-left: 5%;
width: 98%;
height: 30%;
// margin-left: 5%;
.work_tit {
font-weight: 550;
@ -848,33 +896,45 @@ export default {
.work_con {
width: 100%;
height: 80%;
margin-top: 2.4%;
margin-top: 10px;
display: flex;
align-items: center;
justify-content: space-between;
.work_item {
width: 148px;
height: 100%;
width: 23%;
height:78px;
border-radius: 10px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
// flex-direction: column;
.item_top {
width: 100%;
height: 104px;
height: 100%;
background: #3a62d791;
border-radius: 10px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
// flex-direction: column;
color: white;
font-size: 22px;
background: linear-gradient( 90deg, #375DF9 0%, #6DB5FF 100%);
box-shadow: 0px 5px 5px 0px #B6D8FF;
.right_item{
display: flex;
flex-direction: column;
margin-left: 20px;
}
// .item_num {
// // position: absolute;
@ -896,26 +956,41 @@ export default {
height: 100%;
}
}
.item_name {
// width: 148px;
// margin-top: 10px;
// display: flex;
// align-items: center;
// -ms-flex-pack: center;
// justify-content: center;
font-size: 14px;
margin-bottom: 5px;
}
}
.item_name {
width: 148px;
height: 18%;
margin-top: 10px;
display: flex;
align-items: center;
-ms-flex-pack: center;
justify-content: center;
&:nth-child(2) .item_top{
background: linear-gradient( 270deg, #41D9A5 0%, #0BC478 100%);
box-shadow: 0px 10px 10px 0px #BDE7E2;
}
&:nth-child(3) .item_top{
background: linear-gradient( 90deg, #F36656 0%, #FF8043 100%);
box-shadow: 0px 10px 10px 0px #FED1D0;
}
&:nth-child(4) .item_top{
background: linear-gradient( 90deg, #F3AC56 0%, #FFCA68 100%);
box-shadow: 0px 10px 10px 0px #FEEED0;
}
}
}
}
.xj_box {
width: 95%;
height: 52%;
width: 98%;
height:30%;
margin-top: 20px;
margin-left: 5%;
.xj_tit {
font-weight: 550;
@ -932,12 +1007,16 @@ export default {
.xj_con_box {
width: 100%;
height: 100%;
background: #efefef;
background: #fff;
border-radius: 10px;
overflow: hidden;
::v-deep .el-empty__image{
width: 75px !important;
width: 55px !important;
}
::v-deep .el-empty__description{
margin-top: none !important;
}
::v-deep.el-carousel__container {
@ -1004,10 +1083,9 @@ export default {
}
.bottom_box {
width: calc(100% - 40px);
height: 42%;
// margin-top: 1%;
padding: 20px;
width: 100%;
height: 46%;
margin-top: 1%;
display: flex;
align-items: center;
justify-content: space-between;
@ -1015,19 +1093,28 @@ export default {
.bottom_left {
width: 25%;
height: 100%;
background: #FFFFFF;
border-radius: 4px;
border: 1px solid #EBEEF5;
.left_tit {
font-weight: 550;
margin-top: 15px;
margin-left: 15px;
}
.left_con {
width: 100%;
height: 88%;
background: #efefef;
// background: #efefef;
margin-top: 20px;
border-radius: 10px;
display: flex;
flex-direction: column;
// background: #FFFFFF;
// border-radius: 4px;
// border: 1px solid #EBEEF5;
.nodata{
// width: 100%;
@ -1137,28 +1224,39 @@ export default {
.bottom_right {
width: 74%;
height: 100%;
background: #FFFFFF;
border-radius: 4px;
border: 1px solid #EBEEF5;
.right_tit {
font-weight: 550;
margin-top: 15px;
margin-left: 15px;
}
.right_con {
width: 100%;
height: 88%;
background: #efefef;
margin-top: 20px;
// background: #efefef;
margin-top: 10px;
border-radius: 10px;
display: flex;
align-items: center;
// background: #FFFFFF;
// border-radius: 4px;
// border: 1px solid #EBEEF5;
.bar_box {
width: 47%;
height: 86%;
background: #fff;
margin-left: 2%;
width: 49%;
height: 100%;
// background: #fff;
border-radius: 10px;
margin-left: 15px;
display: flex;
flex-direction: column;
// background: #FFFFFF;
// border-radius: 4px;
// border: 1px solid #EBEEF5;
.bar_top {
margin: 10px;
@ -1172,11 +1270,13 @@ export default {
}
.pie_box {
width: 47%;
height: 86%;
background: #fff;
width: 49%;
height: 100%;
margin-left: 2%;
border-radius: 10px;
// background: #FFFFFF;
// border-radius: 4px;
// border: 1px solid #EBEEF5;
.pie_top {
margin: 10px;

Loading…
Cancel
Save