设备相关

zyy_db
wj 2 years ago
parent 486e2c7176
commit 1e7a037a41

@ -51,6 +51,7 @@
"js-cookie": "3.0.1",
"js-sha256": "^0.10.1",
"jsencrypt": "3.0.0-rc.1",
"lodash": "^4.17.21",
"nprogress": "0.2.0",
"pinyin": "^2.10.2",
"qrcodejs2": "^0.0.2",

@ -1,27 +1,76 @@
<template>
<div id="app">
<router-view />
<router-view/>
</div>
</template>
<script>
export default {
name: 'App',
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
titleTemplate: title => {
return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
}
}
export default {
name: 'App',
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
titleTemplate: title => {
return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
}
}
}
}
</script>
<style>
.width-full{
/* 滚动条样式 */
::-webkit-scrollbar {
width: 10px; /* 滚动条宽度 */
height: 10px; /* 滚动条高度 */
}
/* 滚动条轨道 */
::-webkit-scrollbar-track {
background-color: #f5f5f5; /* 滚动条轨道颜色 */
border-radius: 25px; /* 滚动条轨道圆角 */
}
/* 滚动条滑块 */
::-webkit-scrollbar-thumb {
background-color: #888; /* 滚动条滑块颜色 */
border-radius: 25px; /* 滚动条轨道圆角 */
}
/* 鼠标悬停时滚动条滑块颜色 */
::-webkit-scrollbar-thumb:hover {
background-color: #555; /* 鼠标悬停时滚动条滑块颜色 */
}
.color-red {
color: red;
}
.p10 {
padding: 10px;
}
.width-full {
width: 100%;
}
.w90-percent{
width:90%;
.height-full {
height: 100%;
}
.w90-percent {
width: 90%;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
</style>

@ -0,0 +1,61 @@
import axios from "@/utils/request";
export function changeOrderPage(query) {
return axios(
{
url: "/udi/device/changeOrder/page",
method: "POST",
data: query
}
)
}
export function saveChangeOrder(query) {
return axios(
{
url: "/udi/device/changeOrder/save",
method: "POST",
data: query
}
)
}
export function changeOrderDetailByUser(query) {
return axios(
{
url: "/udi/device/changeOrder/detailByUser",
method: "POST",
data: query
}
)
}
export function cancelChangeOrder(orderId, query) {
return axios(
{
url: `/udi/device/changeOrder/cancel/${orderId}`,
method: "GET",
params: query
}
)
}
export function confirmChangeOrder(orderId, query) {
return axios(
{
url: `/udi/device/changeOrder/confirm/${orderId}`,
method: "GET",
params: query
}
)
}
export function rejectChangeOrder(orderId, query) {
return axios(
{
url: `/udi/device/changeOrder/reject/${orderId}`,
method: "GET",
params: query
}
)
}

@ -0,0 +1,49 @@
import axios from "@/utils/request";
export function deviceCheckGenByPlanId(planId) {
return axios(
{
url: `/udi/device/check/gen/${planId}`,
method: "GET"
}
)
}
export function deviceCheckPage(query) {
return axios(
{
url: `/udi/device/check/page`,
method: "POST",
data: query
}
)
}
export function deviceCheckPageByDept(query) {
return axios(
{
url: `/udi/device/check/pageByDept`,
method: "POST",
data: query
}
)
}
export function deviceCheckPrint(taskId) {
return axios(
{
url: `/udi/device/check/info/print/${taskId}`,
method: "GET"
}
)
}
export function deviceCheckPrintByDeviceCode(taskId, deviceCode) {
return axios(
{
url: `/udi/device/check/info/print/${taskId}/${deviceCode}`,
method: "GET"
}
)
}

@ -0,0 +1,21 @@
import axios from "@/utils/request";
export function deviceCheckDetailPage(query) {
return axios(
{
url: `/udi/device/check/detail/page`,
method: "POST",
data: query
}
)
}
export function deviceCheckDetailRepair(query) {
return axios(
{
url: `/udi/device/check/detail/repair`,
method: "POST",
data: query
}
)
}

@ -0,0 +1,20 @@
import axios from "@/utils/request";
export function deviceCheckDetailItemPage(query) {
return axios(
{
url: `/udi/device/check/detail/item/page`,
method: "POST",
data: query
}
)
}
export function deviceCheckDetailItemFinish(query) {
return axios(
{
url: `/udi/device/check/detail/item/finish`,
method: "POST",
data: query
}
)
}

@ -0,0 +1,40 @@
import axios from "@/utils/request";
export function genCheckItemCode() {
return axios(
{
url: "/udi/device/checkItemDict/code/gen",
method: "GET"
}
)
}
export function deviceCheckItemDictPage(query) {
return axios(
{
url: "/udi/device/checkItemDict/page",
method: "POST",
data: query
}
)
}
export function saveDeviceCheckItemDict(query) {
return axios(
{
url: "/udi/device/checkItemDict/save",
method: "POST",
data: query
}
)
}
export function delDeviceCheckItemDict(query) {
return axios(
{
url: `/udi/device/checkItemDict/del/${query}`,
method: "DELETE"
}
)
}

@ -0,0 +1,79 @@
import axios from "@/utils/request";
export function devicePage(query) {
return axios(
{
url: "/udi/device/info/page",
method: "POST",
data: query
}
)
}
export function detailByUserPage(query) {
return axios(
{
url: "/udi/device/info/detailByUser/page",
method: "POST",
data: query
}
)
}
export function deviceAllPage(query) {
return axios(
{
url: "/udi/device/info/all/page",
method: "POST",
data: query
}
)
}
export function detailPage(query) {
return axios(
{
url: "/udi/device/info/detail/page",
method: "POST",
data: query
}
)
}
export function deviceDetailInfo(query) {
return axios(
{
url: "/udi/device/detailInfo/page",
method: "POST",
data: query
}
)
}
export function deviceLogs(deviceCode) {
return axios(
{
url: `/udi/device/log/${deviceCode}`,
method: "GET"
}
)
}
export function genDeviceCode(deviceCode) {
return axios(
{
url: `/udi/device/code/gen`,
method: "GET"
}
)
}
export function genDeviceQR(deviceCode) {
return axios(
{
url: `/udi/device/genQR/${deviceCode}`,
method: "GET"
}
)
}

@ -0,0 +1,40 @@
import axios from "@/utils/request";
export function devicePlanPage(query) {
return axios(
{
url: "/udi/device/plan/page",
method: "POST",
data: query
}
)
}
export function devicePlanSave(query) {
return axios(
{
url: "/udi/device/plan/save",
method: "POST",
data: query
}
)
}
export function devicePlanInfo(planId) {
return axios(
{
url: `/udi/device/plan/info/${planId}`,
method: "GET"
}
)
}
export function devicePlanDel(planId) {
return axios(
{
url: `/udi/device/plan/del/${planId}`,
method: "DELETE"
}
)
}

@ -0,0 +1,49 @@
import axios from "@/utils/request";
export function devicePlanDetailGroupPage(query) {
return axios(
{
url: "/udi/device/plan/detailGroup/page",
method: "POST",
data: query
}
)
}
export function devicePlanDetailPage(query) {
return axios(
{
url: "/udi/device/plan/detail/page",
method: "POST",
data: query
}
)
}
export function devicePlanDetailAdd(query) {
return axios(
{
url: "/udi/device/plan/detail/add",
method: "POST",
data: query
}
)
}
export function devicePlanDetailDel(planId,productId) {
return axios(
{
url: `/udi/device/plan/detail/delByProductId/${planId}/${productId}`,
method: "DELETE"
}
)
}
export function devicePlanDetailDelByDeviceCode(planId,deviceCode) {
return axios(
{
url: `/udi/device/plan/detail/delByDeviceCode/${planId}/${deviceCode}`,
method: "DELETE"
}
)
}

@ -0,0 +1,40 @@
import axios from "@/utils/request";
export function devicePlanDetailItemPage(query) {
return axios(
{
url: "/udi/device/plan/detail/item/page",
method: "POST",
data: query
}
)
}
export function devicePlanDetailItemAdd(query) {
return axios(
{
url: "/udi/device/plan/detail/item/add",
method: "POST",
data: query
}
)
}
export function devicePlanDetailItemDel(planId,productId,itemCode) {
return axios(
{
url: `/udi/device/plan/detail/item/delByProductId/${planId}/${productId}/${itemCode}`,
method: "DELETE"
}
)
}
export function devicePlanDetailItemByDeviceCodeDel(planId,deviceCode,itemCode) {
return axios(
{
url: `/udi/device/plan/detail/item/delByDeviceCode/${planId}/${deviceCode}/${itemCode}`,
method: "DELETE"
}
)
}

@ -0,0 +1,29 @@
import axios from "@/utils/request";
export function deviceRepairByUserPage(query) {
return axios(
{
url: "/udi/device/repair/byUser/page",
method: "POST",
data: query
}
)
}
export function deviceRepairInfo(repairId) {
return axios(
{
url: `/udi/device/repair/info/${repairId}`,
method: "GET"
}
)
}
export function finishRepairByUser(repairId) {
return axios(
{
url: `/udi/device/repair/finishByUser/${repairId}`,
method: "GET"
}
)
}

@ -0,0 +1,51 @@
import axios from "@/utils/request";
export function deviceRepairApplyPage(query) {
return axios(
{
url: "/udi/device/repair/apply/page",
method: "POST",
data: query
}
)
}
export function deviceRepairApplyHallPage(query) {
return axios(
{
url: "/udi/device/repair/apply/hall/page",
method: "POST",
data: query
}
)
}
export function deviceRepairApplyConfirmByUserPage(query) {
return axios(
{
url: "/udi/device/repair/apply/confirmByUser/page",
method: "POST",
data: query
}
)
}
export function deviceRepairApplyAdd(query) {
return axios(
{
url: "/udi/device/repair/apply/add",
method: "POST",
data: query
}
)
}
export function confirmDeviceRepairApply(query) {
return axios(
{
url: "/udi/device/repair/apply/confirm",
method: "POST",
data: query
}
)
}

@ -0,0 +1,20 @@
import axios from "@/utils/request";
export function deviceRepairApplyDetailPage(query) {
return axios(
{
url: "/udi/device/repair/apply/detail/page",
method: "POST",
data: query
}
)
}
export function deviceRepairApplyDetailDiagnosis(query) {
return axios(
{
url: "/udi/device/repair/apply/detail/diagnosis",
method: "POST",
data: query
}
)
}

@ -90,6 +90,9 @@
.el-dialog {
.el-dialog__header {
}
.el-dialog__body{
//padding: 0;
}
.el-dialog__title {
line-height: 24px;
@ -349,6 +352,7 @@
margin-right: 15px;
margin-left: 15px;
margin-top: 15px;
//margin-bottom: 15px;
/*transition: all .5s;*/
}

@ -57,10 +57,16 @@ Vue.config.silent = true;
//自定义消息框
import ShowMsgBox from '@/utils/MsgBox'
//自定义组件
import invSelect from "@/views/components/invSelect/invSelect.vue";
import mainActionSelect from "@/views/components/mainActionSelect/index.vue";
import thirdSysSelect from "@/views/components/thirdSysSelect/index.vue";
import actionSelect from "@/views/components/actionSelect/index.vue";
import deptSelect from "@/views/components/deptSelect/index.vue";
import planChooseDevice from "@/views/components/planChooseDevice/index.vue";
import _ from "loadsh"
// 全局方法挂载
Vue.prototype.getDicts = getDicts;
@ -73,6 +79,13 @@ Vue.prototype.selectDictLabel = selectDictLabel;
Vue.prototype.selectDictLabels = selectDictLabels;
Vue.prototype.download = download;
Vue.prototype.handleTree = handleTree;
Vue.prototype.openNewWindow = (url)=>{
return window.open(url,'_blank',`width=1000,height=800,resizable=yes,scrollbars=yes,status=yes,menubar=no,toolbar=no,location=no,left=500,top=200`)
}
import deviceInfo from "@/views/dev/deviceInfo.vue";
import deviceRepairDialog from "@/views/components/deviceRepairDialog/index.vue";
// 全局组件挂载
Vue.component("DictTag", DictTag);
@ -88,6 +101,10 @@ Vue.component("invSelect", invSelect)
Vue.component("mainActionSelect", mainActionSelect)
Vue.component("thirdSysSelect", thirdSysSelect)
Vue.component("actionSelect", actionSelect)
Vue.component("deptSelect", deptSelect)
Vue.component("planChooseDevice", planChooseDevice)
Vue.component("deviceInfo", deviceInfo)
Vue.component("deviceRepairDialog", deviceRepairDialog)
Vue.use(directive);
Vue.use(plugins);
@ -112,9 +129,23 @@ Element.Dialog.props.appendToBody = {type: Boolean, default: true}
Element.Table.props.border = {type: Boolean, default: true}
Element.Table.props.minHeight = {type: String | Number, default: "250"}
Element.Table.props.fit = {type: Boolean, default: true}
Element.Table.props.stripe = {type: Boolean, default: true}
Element.TableColumn.props.highlightCurrentRow = {type: Boolean, default: true}
Element.TableColumn.props.showOverflowTooltip = {type: Boolean, default: true}
Element.DatePicker.props.firstDayOfWeek = {type: Number, default: 1}
Element.Tag.props.effect = {type: String, default: 'dark'}
Element.Select.methods.deleteSelected =
function deleteSelected(event) {
event.stopPropagation()
// 改动在这,原始的是这样 var value = this.multiple ? [] : ''
var value = this.multiple ? [] : null
this.$emit("input", value)
this.emitChange(value)
this.visible = false
this.$emit("clear")
}
Vue.use(Element, {
size: Cookies.get("size") || "mini", // set element-ui default size

@ -22,5 +22,6 @@ const getters = {
locDeptName: state => state.user.locDeptName,
locInvName: state => state.user.locInvName,
adminId: state => state.user.adminId,
user: state => state.user.user,
}
export default getters

@ -4,6 +4,7 @@ import {sha256} from "js-sha256";
const user = {
state: {
user: null,
adminId: "",
token: getToken(),
name: '',
@ -21,6 +22,10 @@ const user = {
mutations: {
SET_USER: (state, user) => {
state.user = user
},
SET_ADMINID: (state, adminId) => {
state.adminId = adminId
},
@ -77,6 +82,7 @@ const user = {
setAdminId(res.data.id)
commit('SET_TOKEN', res.data.token)
commit('SET_ADMINID', res.data.id)
commit('SET_USER', res.data)
resolve(res)
} else {
reject(res.message);
@ -99,6 +105,7 @@ const user = {
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_USER', user)
commit('SET_AVATAR', avatar)
commit('SET_NAME', user.userName)
commit('SET_EMPLOYEENAME', user.employeeName)
@ -108,6 +115,7 @@ const user = {
commit('SET_LOCIVNCODE', user.locInvCode)
commit('SET_LOCDEPTNAME', user.locDeptName)
commit('SET_LOCIVNNAME', user.locInvName)
commit('SET_ADMINID', user.id)
resolve(res)
console.log("获取用户数据成功-=----");
}).catch(error => {
@ -131,6 +139,7 @@ const user = {
commit('SET_LOCIVNCODE', "")
commit('SET_LOCDEPTNAME', "")
commit('SET_LOCIVNNAME', "")
commit('SET_USER', null)
removeToken()
removeAdminId()
resolve()

@ -0,0 +1,35 @@
export const deviceChangeType = {
ADD: {key: "ADD", tagType: "primary", desc: "新增入库"},
CHANGE: {key: "CHANGE", tagType: "warning", desc: "变更归属"},
DESTROY: {key: "DESTROY", tagType: "danger", desc: "销毁/报废"},
}
export const deviceChangeStatus = {
WAIT_CONFIRM: {key: "WAIT_CONFIRM", tagType: "warning", desc: "待目标部门确认"},
REJECT_CONFIRM: {key: "REJECT_CONFIRM", tagType: "danger", desc: "目标部门拒绝"},
FINISH: {key: "FINISH", tagType: "success", desc: "已完成"},
CANCEL: {key: "CANCEL", tagType: "info", desc: "已取消"},
}
export const deviceStatus = {
NORMAL: {key: "NORMAL", tagType: "success", desc: "正常"},
CHANGE: {key: "CHANGE", tagType: "warning", desc: "变更归属中"},
REPAIR_APPLY: {key: "REPAIR_APPLY", tagType: "warning", desc: "维修申请中"},
REPAIR: {key: "REPAIR", tagType: "danger", desc: "维修中"},
// CHECK: {key: "CHECK", tagType: "warning", desc: "等待巡检"},
DESTROY: {key: "DESTROY", tagType: "danger", desc: "销毁/报废"},
}
export const deviceRepairApplyStatus = {
WAIT_PROCESS: {key: "WAIT_PROCESS", tagType: "warning", desc: "待受理"},
PROCESSING: {key: "PROCESSING", tagType: "primary", desc: "受理中"},
// REPAIRING: {key: "REPAIRING", tagType: "primary", desc: "维修中"},
FINISH: {key: "FINISH", tagType: "success", desc: "完成"},
}
export const deviceRepairApplyDetailStatus = {
WAIT_DIAGNOSIS: {key: "WAIT_DIAGNOSIS", tagType: "warning", desc: "待诊断"},
// WAIT_REPAIR: {key: "WAIT_REPAIR", tagType: "warning", desc: "待维修"},
REPAIRING: {key: "REPAIRING", tagType: "primary", desc: "维修中"},
FINISH: {key: "FINISH", tagType: "success", desc: "完成"},
}

@ -1,18 +1,45 @@
import { parseTime } from './ruoyi'
import {parseTime} from './ruoyi'
export function copyProperties(source, target) {
const keys = Object.keys(target);
return Object.assign({}, ...keys.map(key => ({[key]: source[key]||target[key]})));
}
export function downloadBase64Image(base64, fileName) {
const a = document.createElement('a');
a.href = base64;
a.download = fileName;
a.click();
a.remove()
}
export function getLoading(that) {
let loading = that.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
setTimeout(()=>{
loading.close()
},30000)
return loading
}
/**
* 表格时间格式化
*/
export function formatDate(cellValue) {
if (cellValue == null || cellValue == "") return "";
var date = new Date(cellValue)
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
if (cellValue == null || cellValue == "") return "";
var date = new Date(cellValue)
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
}
/**
@ -21,41 +48,41 @@ export function formatDate(cellValue) {
* @returns {string}
*/
export function formatTime(time, option) {
if (('' + time).length === 10) {
time = parseInt(time) * 1000
} else {
time = +time
}
const d = new Date(time)
const now = Date.now()
const diff = (now - d) / 1000
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) {
// less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return (
d.getMonth() +
1 +
'月' +
d.getDate() +
'日' +
d.getHours() +
'时' +
d.getMinutes() +
'分'
)
}
if (('' + time).length === 10) {
time = parseInt(time) * 1000
} else {
time = +time
}
const d = new Date(time)
const now = Date.now()
const diff = (now - d) / 1000
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) {
// less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return (
d.getMonth() +
1 +
'月' +
d.getDate() +
'日' +
d.getHours() +
'时' +
d.getMinutes() +
'分'
)
}
}
/**
@ -63,18 +90,18 @@ export function formatTime(time, option) {
* @returns {Object}
*/
export function getQueryObject(url) {
url = url == null ? window.location.href : url
const search = url.substring(url.lastIndexOf('?') + 1)
const obj = {}
const reg = /([^?&=]+)=([^?&=]*)/g
search.replace(reg, (rs, $1, $2) => {
const name = decodeURIComponent($1)
let val = decodeURIComponent($2)
val = String(val)
obj[name] = val
return rs
})
return obj
url = url == null ? window.location.href : url
const search = url.substring(url.lastIndexOf('?') + 1)
const obj = {}
const reg = /([^?&=]+)=([^?&=]*)/g
search.replace(reg, (rs, $1, $2) => {
const name = decodeURIComponent($1)
let val = decodeURIComponent($2)
val = String(val)
obj[name] = val
return rs
})
return obj
}
/**
@ -82,15 +109,15 @@ export function getQueryObject(url) {
* @returns {number} output value
*/
export function byteLength(str) {
// returns the byte length of an utf8 string
let s = str.length
for (var i = str.length - 1; i >= 0; i--) {
const code = str.charCodeAt(i)
if (code > 0x7f && code <= 0x7ff) s++
else if (code > 0x7ff && code <= 0xffff) s += 2
if (code >= 0xDC00 && code <= 0xDFFF) i--
}
return s
// returns the byte length of an utf8 string
let s = str.length
for (var i = str.length - 1; i >= 0; i--) {
const code = str.charCodeAt(i)
if (code > 0x7f && code <= 0x7ff) s++
else if (code > 0x7ff && code <= 0xffff) s += 2
if (code >= 0xDC00 && code <= 0xDFFF) i--
}
return s
}
/**
@ -98,13 +125,13 @@ export function byteLength(str) {
* @returns {Array}
*/
export function cleanArray(actual) {
const newArray = []
for (let i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i])
const newArray = []
for (let i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i])
}
}
}
return newArray
return newArray
}
/**
@ -112,13 +139,13 @@ export function cleanArray(actual) {
* @returns {Array}
*/
export function param(json) {
if (!json) return ''
return cleanArray(
Object.keys(json).map(key => {
if (json[key] === undefined) return ''
return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
})
).join('&')
if (!json) return ''
return cleanArray(
Object.keys(json).map(key => {
if (json[key] === undefined) return ''
return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
})
).join('&')
}
/**
@ -126,21 +153,21 @@ export function param(json) {
* @returns {Object}
*/
export function param2Obj(url) {
const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
if (!search) {
return {}
}
const obj = {}
const searchArr = search.split('&')
searchArr.forEach(v => {
const index = v.indexOf('=')
if (index !== -1) {
const name = v.substring(0, index)
const val = v.substring(index + 1, v.length)
obj[name] = val
const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
if (!search) {
return {}
}
})
return obj
const obj = {}
const searchArr = search.split('&')
searchArr.forEach(v => {
const index = v.indexOf('=')
if (index !== -1) {
const name = v.substring(0, index)
const val = v.substring(index + 1, v.length)
obj[name] = val
}
})
return obj
}
/**
@ -148,9 +175,9 @@ export function param2Obj(url) {
* @returns {string}
*/
export function html2Text(val) {
const div = document.createElement('div')
div.innerHTML = val
return div.textContent || div.innerText
const div = document.createElement('div')
div.innerHTML = val
return div.textContent || div.innerText
}
/**
@ -160,21 +187,21 @@ export function html2Text(val) {
* @returns {Object}
*/
export function objectMerge(target, source) {
if (typeof target !== 'object') {
target = {}
}
if (Array.isArray(source)) {
return source.slice()
}
Object.keys(source).forEach(property => {
const sourceProperty = source[property]
if (typeof sourceProperty === 'object') {
target[property] = objectMerge(target[property], sourceProperty)
} else {
target[property] = sourceProperty
if (typeof target !== 'object') {
target = {}
}
if (Array.isArray(source)) {
return source.slice()
}
})
return target
Object.keys(source).forEach(property => {
const sourceProperty = source[property]
if (typeof sourceProperty === 'object') {
target[property] = objectMerge(target[property], sourceProperty)
} else {
target[property] = sourceProperty
}
})
return target
}
/**
@ -182,19 +209,19 @@ export function objectMerge(target, source) {
* @param {string} className
*/
export function toggleClass(element, className) {
if (!element || !className) {
return
}
let classString = element.className
const nameIndex = classString.indexOf(className)
if (nameIndex === -1) {
classString += '' + className
} else {
classString =
classString.substr(0, nameIndex) +
classString.substr(nameIndex + className.length)
}
element.className = classString
if (!element || !className) {
return
}
let classString = element.className
const nameIndex = classString.indexOf(className)
if (nameIndex === -1) {
classString += '' + className
} else {
classString =
classString.substr(0, nameIndex) +
classString.substr(nameIndex + className.length)
}
element.className = classString
}
/**
@ -202,11 +229,11 @@ export function toggleClass(element, className) {
* @returns {Date}
*/
export function getTime(type) {
if (type === 'start') {
return new Date().getTime() - 3600 * 1000 * 24 * 90
} else {
return new Date(new Date().toDateString())
}
if (type === 'start') {
return new Date().getTime() - 3600 * 1000 * 24 * 90
} else {
return new Date(new Date().toDateString())
}
}
/**
@ -216,38 +243,38 @@ export function getTime(type) {
* @return {*}
*/
export function debounce(func, wait, immediate) {
let timeout, args, context, timestamp, result
let timeout, args, context, timestamp, result
const later = function() {
// 据上一次触发时间间隔
const last = +new Date() - timestamp
const later = function () {
// 据上一次触发时间间隔
const last = +new Date() - timestamp
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last)
} else {
timeout = null
// 如果设定为immediate===true因为开始边界已经调用过了此处无需调用
if (!immediate) {
result = func.apply(context, args)
if (!timeout) context = args = null
}
}
}
return function(...args) {
context = this
timestamp = +new Date()
const callNow = immediate && !timeout
// 如果延时不存在,重新设定延时
if (!timeout) timeout = setTimeout(later, wait)
if (callNow) {
result = func.apply(context, args)
context = args = null
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last)
} else {
timeout = null
// 如果设定为immediate===true因为开始边界已经调用过了此处无需调用
if (!immediate) {
result = func.apply(context, args)
if (!timeout) context = args = null
}
}
}
return result
}
return function (...args) {
context = this
timestamp = +new Date()
const callNow = immediate && !timeout
// 如果延时不存在,重新设定延时
if (!timeout) timeout = setTimeout(later, wait)
if (callNow) {
result = func.apply(context, args)
context = args = null
}
return result
}
}
/**
@ -258,18 +285,18 @@ export function debounce(func, wait, immediate) {
* @returns {Object}
*/
export function deepClone(source) {
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'deepClone')
}
const targetObj = source.constructor === Array ? [] : {}
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = deepClone(source[keys])
} else {
targetObj[keys] = source[keys]
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'deepClone')
}
})
return targetObj
const targetObj = source.constructor === Array ? [] : {}
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = deepClone(source[keys])
} else {
targetObj[keys] = source[keys]
}
})
return targetObj
}
/**
@ -277,16 +304,16 @@ export function deepClone(source) {
* @returns {Array}
*/
export function uniqueArr(arr) {
return Array.from(new Set(arr))
return Array.from(new Set(arr))
}
/**
* @returns {string}
*/
export function createUniqueString() {
const timestamp = +new Date() + ''
const randomNum = parseInt((1 + Math.random()) * 65536) + ''
return (+(randomNum + timestamp)).toString(32)
const timestamp = +new Date() + ''
const randomNum = parseInt((1 + Math.random()) * 65536) + ''
return (+(randomNum + timestamp)).toString(32)
}
/**
@ -296,7 +323,7 @@ export function createUniqueString() {
* @returns {boolean}
*/
export function hasClass(ele, cls) {
return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
}
/**
@ -305,7 +332,7 @@ export function hasClass(ele, cls) {
* @param {string} cls
*/
export function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += ' ' + cls
if (!hasClass(ele, cls)) ele.className += ' ' + cls
}
/**
@ -314,77 +341,77 @@ export function addClass(ele, cls) {
* @param {string} cls
*/
export function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
ele.className = ele.className.replace(reg, ' ')
}
if (hasClass(ele, cls)) {
const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
ele.className = ele.className.replace(reg, ' ')
}
}
export function makeMap(str, expectsLowerCase) {
const map = Object.create(null)
const list = str.split(',')
for (let i = 0; i < list.length; i++) {
map[list[i]] = true
}
return expectsLowerCase
? val => map[val.toLowerCase()]
: val => map[val]
const map = Object.create(null)
const list = str.split(',')
for (let i = 0; i < list.length; i++) {
map[list[i]] = true
}
return expectsLowerCase
? val => map[val.toLowerCase()]
: val => map[val]
}
export const exportDefault = 'export default '
export const beautifierConf = {
html: {
indent_size: '2',
indent_char: ' ',
max_preserve_newlines: '-1',
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
indent_scripts: 'separate',
brace_style: 'end-expand',
space_before_conditional: true,
unescape_strings: false,
jslint_happy: false,
end_with_newline: true,
wrap_line_length: '110',
indent_inner_html: true,
comma_first: false,
e4x: true,
indent_empty_lines: true
},
js: {
indent_size: '2',
indent_char: ' ',
max_preserve_newlines: '-1',
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
indent_scripts: 'normal',
brace_style: 'end-expand',
space_before_conditional: true,
unescape_strings: false,
jslint_happy: true,
end_with_newline: true,
wrap_line_length: '110',
indent_inner_html: true,
comma_first: false,
e4x: true,
indent_empty_lines: true
}
html: {
indent_size: '2',
indent_char: ' ',
max_preserve_newlines: '-1',
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
indent_scripts: 'separate',
brace_style: 'end-expand',
space_before_conditional: true,
unescape_strings: false,
jslint_happy: false,
end_with_newline: true,
wrap_line_length: '110',
indent_inner_html: true,
comma_first: false,
e4x: true,
indent_empty_lines: true
},
js: {
indent_size: '2',
indent_char: ' ',
max_preserve_newlines: '-1',
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
indent_scripts: 'normal',
brace_style: 'end-expand',
space_before_conditional: true,
unescape_strings: false,
jslint_happy: true,
end_with_newline: true,
wrap_line_length: '110',
indent_inner_html: true,
comma_first: false,
e4x: true,
indent_empty_lines: true
}
}
// 首字母大小
export function titleCase(str) {
return str.replace(/( |^)[a-z]/g, L => L.toUpperCase())
return str.replace(/( |^)[a-z]/g, L => L.toUpperCase())
}
// 下划转驼峰
export function camelCase(str) {
return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())
return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())
}
export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
}

@ -50,11 +50,11 @@ service.interceptors.request.use(config => {
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
const requestObj = {
url: config.url,
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
data: typeof config.data === 'Object' ? JSON.stringify(config.data) : config.data,
time: new Date().getTime()
}
const sessionObj = cache.session.getJSON('sessionObj')
if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
if (!sessionObj) {
cache.session.setJSON('sessionObj', requestObj)
} else {
const s_url = sessionObj.url; // 请求地址

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item class="query-form-item" label="单据类型:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch">
<el-form :model="query" label-width="100px" v-if="showSearch">
<el-row style="width: 100%">
<el-col :span="8">
<el-form-item label="单号:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch">
<el-form :model="query" label-width="100px" v-if="showSearch">
<el-row style="width: 100%">
<el-col :span="8">
<el-form-item label="单号:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch" size="mini">
<el-form :model="query" label-width="100px" v-if="showSearch" size="mini">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch" size="mini">
<el-form :model="query" label-width="100px" v-if="showSearch" size="mini">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="往来单位编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" class="query-form" size="mini" v-show="showSearch">
<el-form :model="query" label-width="100px" class="query-form" size="mini" v-if="showSearch">
<el-row>
<el-col span="6">
<el-form-item label="搜索:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch" size="mini">
<el-form :model="query" label-width="100px" v-if="showSearch" size="mini">
<el-row>
<el-col :span="6">
<el-form-item label="搜索:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card" v-if="checked">
<el-form size="mini" :model="erpQuery" label-width="100px" v-show="showSearch">
<el-form size="mini" :model="erpQuery" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="往来单位ID:">
@ -40,7 +40,7 @@
</el-card>
<el-card class="el-card">
<el-form :model="unitQuery" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="unitQuery" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="往来单位编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="query" label-width="100px" v-show="showSearch" size="mini">
<el-form :model="query" label-width="100px" v-if="showSearch" size="mini">
<el-row>
<el-col :span="6">
<el-form-item label="搜索:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card" v-if="checked">
<el-form :inline="true" :model="erpQuery" size="mini" label-width="100px" v-show="showSearch">
<el-form :inline="true" :model="erpQuery" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="单位编码:">
@ -35,7 +35,7 @@
</el-card>
<el-card class="el-card">
<el-form :model="unitQuery" label-width="100px" v-show="showSearch" size="mini">
<el-form :model="unitQuery" label-width="100px" v-if="showSearch" size="mini">
<el-row>
<el-col span="6">
<el-form-item label="往来单位编码:">

@ -6,7 +6,7 @@
:loading="loading">提交
</el-button>
</el-button-group>
<el-form :model="filterQuery" class="query-form" size="mini" label-width="120px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="120px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item label="唯一编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="listQuery" label-width="120px" v-show="showSearch">
<el-form :model="listQuery" label-width="120px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item label="UDI码:" >

@ -2,7 +2,7 @@
<div>
<el-card class="el-card">
<div>
<el-form :model="unionQuery" size="mini" label-width="125px" v-show="showSearch">
<el-form :model="unionQuery" size="mini" label-width="125px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

@ -2,7 +2,7 @@
<div>
<el-card class="el-card">
<div>
<el-form :model="unionQuery" size="mini" label-width="125px" v-show="showSearch">
<el-form :model="unionQuery" size="mini" label-width="125px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

@ -2,7 +2,7 @@
<div>
<el-card class="el-card">
<div>
<el-form :model="unionQuery" size="mini" label-width="125px" v-show="showSearch">
<el-form :model="unionQuery" size="mini" label-width="125px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" label-width="120px" v-show="showSearch">
<el-form :model="filterQuery" label-width="120px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="物资编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

File diff suppressed because it is too large Load Diff

@ -3,7 +3,7 @@
<el-card>
<el-row type="flex">
<el-col style="flex: 1" v-show="Dictionary">
<el-col v-show="showSearch" style="min-width: 300px; max-width: 100%">
<el-col v-if="showSearch" style="min-width: 300px; max-width: 100%">
<el-tree
:data="treeList"
class="tree"
@ -64,7 +64,7 @@
:model="filterQuery"
size="mini"
label-width="100px"
v-show="showSearch"
v-if="showSearch"
>
<el-row>
<el-col :span="18">

@ -24,7 +24,7 @@
:model="filterQuery"
size="mini"
label-width="100px"
v-show="showSearch"
v-if="showSearch"
>
<el-row>
<el-col :span="18">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6" >
<el-form-item label="UDI码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="query" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="UDI编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" label-width="120px" v-show="showSearch">
<el-form :model="filterQuery" label-width="120px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="供应商:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="erpQuery" label-width="120px" v-show="showSearch">
<el-form :model="erpQuery" label-width="120px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="物品编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="query" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="query" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="6">
<el-form-item label="记录ID:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card>
<el-form :model="filterQuery" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="UDI码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card header="患者信息">
<el-form :model="filterQuery" v-show="showSearch" label-width="auto" size="mini">
<el-form :model="filterQuery" v-if="showSearch" label-width="auto" size="mini">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="患者编号:" class="query-form-item">

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-if="showSearch" label-width="68px">
<el-form-item prop="deviceKey">
<el-input
v-model="queryParams.deviceKey"

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-if="showSearch" label-width="68px">
<el-form-item prop="udiCode">

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-if="showSearch" label-width="68px">
<el-form-item prop="udiCode">
<el-input
v-model="queryParams.udiCode"

@ -0,0 +1,40 @@
import {filterList} from "@/api/system/invWarehouse";
export default {
name: "deptSelect",
props: {value: {required: true},notCode:null},
data() {
return {
val: '',
list: [],
}
},
watch: {
val(newVal) {
this.$emit('update:value', newVal);
},
value(newVal) {
this.val = newVal
},
},
created() {
this.val = this.value
this.getList()
},
methods: {
getList() {
filterList({enable: true}).then(res => {
if (res.code == 20000) {
this.list = res.data.list || []
if(this.notCode!=null) {
let index = this.list.findIndex(i => i.code == this.notCode);
if(index!=-1){
this.list.splice(index,1)
}
}
}
})
}
}
}

@ -0,0 +1,9 @@
<template>
<el-select v-model="val" class="width-full" placeholder="请选择" filterable clearable>
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.code"/>
</el-select>
</template>
<script src="./index.js">
</script>

@ -0,0 +1,41 @@
import {getBasicThirdSys} from "@/api/basic/basicThirdSys";
import {getLoading} from "@/utils";
import {deviceRepairInfo} from "@/api/dev/deviceRepairApi";
export default {
name: "deviceRepairDialog",
props: {repairId: {require: true}},
data() {
return {
info: null
}
},
watch: {
val(newVal) {
this.$emit('update:value', newVal);
},
value(newVal) {
this.val = newVal
},
},
created() {
this.val = this.value
this.getInfo()
},
methods: {
getInfo() {
let load = getLoading(this)
deviceRepairInfo(this.repairId).then(res => {
load.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.info = res.data
}).catch(() => {
load.close()
})
}
}
}

@ -0,0 +1,47 @@
<template>
<el-card v-if="info">
<div slot="header" class="clearfix">
<div class="fl">
{{ `设备号:${info.deviceCode}` }}
</div>
<div class="fr">
<el-button @click="getInfo"></el-button>
</div>
</div>
<el-descriptions border label-style="width:90px" :column="4">
<el-descriptions-item label="维修号">{{ info.id }}</el-descriptions-item>
<el-descriptions-item label="状态"><el-tag :type="info.finishFlag?'success':'warning'">{{
info.finishFlag ? '已完成' : '未完成'
}}</el-tag></el-descriptions-item>
<el-descriptions-item label="名称">{{ info.productName }}</el-descriptions-item>
<el-descriptions-item label="规格">{{ info.ggxh }}</el-descriptions-item>
<el-descriptions-item label="销售标识">{{ info.nameCode }}</el-descriptions-item>
<el-descriptions-item label="注册/备案号">{{ info.zczbhhzbapzbh }}</el-descriptions-item>
<el-descriptions-item label="生产企业">{{ info.manufactory }}</el-descriptions-item>
<el-descriptions-item label="供应商">{{ info.supName }}</el-descriptions-item>
<el-descriptions-item label="批次号">{{ info.batchNo }}</el-descriptions-item>
<el-descriptions-item label="序列号">{{ info.serialNo }}</el-descriptions-item>
<el-descriptions-item label="udi码">{{ info.udi }}</el-descriptions-item>
<el-descriptions-item label="生产日期">{{ info.productionDate }}</el-descriptions-item>
<el-descriptions-item label="过期时间">{{ info.expireDate }}</el-descriptions-item>
<el-descriptions-item label="维修方式" :span="1">
{{ info.innerFlag ? '内部维修' : '外部维修' }}
</el-descriptions-item>
<el-descriptions-item label="维修人姓名" :span="1">
{{ info.repairUserName }}
</el-descriptions-item>
<el-descriptions-item label="维修人电话" :span="1">
{{ info.repairUserPhone }}
</el-descriptions-item>
<el-descriptions-item label="问题描述" :label-style="{'height': '100px'}" :span="4">
{{ info.description }}
</el-descriptions-item>
<el-descriptions-item label="诊断信息" :label-style="{'height': '100px'}" :span="4">
{{ info.diagnosisInfo }}
</el-descriptions-item>
</el-descriptions>
</el-card>
</template>
<script src="./index.js">
</script>

@ -0,0 +1,50 @@
import {deviceDetailInfo} from "@/api/dev/deviceInfoApi";
let query = {
page: 1,
limit: 10,
productName: null,
deviceCode: null,
planId: null,
}
export default {
name: "planChooseDevice",
props: {planId: {required: true}, selectChangeFunc: {required: true, type: Function}},
data() {
return {
showSearch:true,
loading: false,
query:{...query},
list: [],
total:0,
}
},
created(){
this.query = {...query,planId:this.planId}
this.getList()
},
methods: {
onReset(){
this.query = {...query,planId:this.planId}
this.getList()
},
getList() {
this.loading = true
deviceDetailInfo(this.query)
.then((res) => {
this.loading = false
if(res.code!=20000){
this.$message.error(res.message)
return
}
this.list = res.data.list || [];
this.total = res.data.total || 0;
})
.catch(() => {
this.loading = false
this.list = [];
this.total = 0;
});
},
},
}

@ -0,0 +1,90 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="设备编码">
<el-input v-model="query.deviceCode" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称">
<el-input v-model="query.productName" clearable/>
</el-form-item>
</el-col>
<!-- <el-col :span="6">-->
<!-- <el-form-item label="设备状态">-->
<!-- <el-select v-model="query.status"-->
<!-- style="width: 100%"-->
<!-- clearable>-->
<!-- <el-option-->
<!-- v-for="item in deviceStatus"-->
<!-- :key="item.key"-->
<!-- :label="item.desc"-->
<!-- :value="item.key">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="query.page=1;getList()"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" v-loading="loading" @selection-change="(val)=>{selectChangeFunc(val)}"
@row-click="(row)=>{$refs.table.toggleRowSelection(row)}" ref="table" row-key="deviceCode">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<!-- <el-table-column label="状态" width="120" prop="statusName">-->
<!-- <template scope="scope">-->
<!-- <el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="变更次数" width="100" prop="changeCount"/>
<el-table-column label="维修次数" width="100" prop="repairCount"/>
<el-table-column label="巡检次数" width="100" prop="checkCount"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script src="./index.js"/>
<style scoped>
</style>

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-if="showSearch" label-width="68px">
<el-form-item label="key键" prop="testKey">
<el-input
v-model="queryParams.testKey"

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-if="showSearch" label-width="68px">
<el-form-item label="树节点名" prop="treeName">
<el-input
v-model="queryParams.treeName"

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="18">
<el-form-item class="query-form-item" label="扫码查询:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="140px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="部门:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
1<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="登记记录号:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item class="query-form-item" label="登记记录号:">

@ -179,7 +179,7 @@
v-if="selectInvProductVisible"
:append-to-body='true'
>
<el-form label-width="100px" :model="filterQuery" size="mini" v-show="showSearch">
<el-form label-width="100px" :model="filterQuery" size="mini" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item label="DI/物资编码:">
@ -284,7 +284,7 @@
v-if="selectProductVisible"
:append-to-body='true'
>
<el-form label-width="100px" :model="filterProductQuery" size="mini" v-show="showSearch">
<el-form label-width="100px" :model="filterProductQuery" size="mini" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item label="DI/物资编码:">
@ -368,7 +368,7 @@
v-if="selectDeviceVisible"
:append-to-body='true'
>
<el-form label-width="100px" :model="filterDeviceQuery" size="mini" v-show="showSearch">
<el-form label-width="100px" :model="filterDeviceQuery" size="mini" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item label="DI/物资编码:">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="el-form" size="mini" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="el-form" size="mini" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">
<el-form-item label="登记记录号:" class="el-form-item">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-show="showSearch">
<el-form :model="filterQuery" class="query-form" label-width="100px" v-if="showSearch">
<el-row>
<el-col :span="8">

@ -0,0 +1,335 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<!-- <el-col :span="6">-->
<!-- <el-form-item label="负责部门">-->
<!-- <deptSelect :value.sync="query.chargeDeptCode"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="任务id" width="150" prop="taskId"/>
<el-table-column label="任务名称" width="150" prop="name"/>
<el-table-column label="计划名称" width="150" prop="planName"/>
<el-table-column label="系统生成" width="80" prop="sysFlag">
<template scope="scope">
{{ scope.row.sysFlag ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="负责部门" width="160" prop="chargeDeptName"/>
<!-- <el-table-column label="负责人" width="160" prop="checkUserName"/>-->
<!-- <el-table-column label="负责人联系方式" width="160" prop="checkUserPhone"/>-->
<el-table-column label="设备数量" width="50" prop="deviceCount"/>
<el-table-column label="完成数量" width="50" prop="finishCount"/>
<el-table-column label="异常数量" class-name="color-red" width="50" prop="exceptionCount"/>
<el-table-column label="创建时间" width="160" prop="createTime"/>
<el-table-column label="创建人" width="160" prop="createUserName"/>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">{{
`任务详情 ${clickRow ? '——' + clickRow.name : ''}`
}}
</div>
<div v-if="clickRow" class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-form v-if="clickRow" :model="detailQuery" inline label-width="auto">
<el-row :gutter="20">
<el-col>
<el-form-item label="设备编码">
<el-input v-model.trim="detailQuery.deviceCode" clearable/>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getDetailList"
>查询
</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="完成时间" width="160" prop="finishTime"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="项目数量" width="50" prop="itemCount"/>
<el-table-column label="完成数量" width="50" prop="finishCount"/>
<el-table-column label="异常数量" class-name="color-red" width="50" prop="exceptionCount"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<!-- <el-table-column label="状态" width="120" prop="statusName">-->
<!-- <template scope="scope">-->
<!-- <el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="170" fixed="right">
<template scope="scope">
<el-button type="text" @click="openItem(scope.row)"
>查看巡检项目
</el-button>
<el-button v-if="scope.row.finishFlag&&scope.row.exceptionCount>0&&!scope.row.repairId" type="text"
@click="createRepair(scope.row)"
>创建维修
</el-button>
<el-button v-if="scope.row.repairId" type="text"
@click="repairId = scope.row.repairId"
>查看维修单
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:visible="true"
v-if="itemDialogFlag"
width="80%"
:title="`巡检项目${itemQuery.title?'--'+itemQuery.title:''}`"
@close="itemDialogFlag = false"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fr">
<el-button type="" @click="getDetailItemList"></el-button>
</div>
</div>
<el-table :data="itemList" v-loading="itemLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="项目编码" width="150" prop="itemCode"/>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="完成时间" width="160" prop="finishTime"/>
<el-table-column label="巡检部门" width="100" prop="checkDeptName"/>
<el-table-column label="巡检人" width="100" prop="checkUserName"/>
<el-table-column label="异常情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.normalFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.normalFlag==false" type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="项目名称" width="150" prop="itemName"/>
<el-table-column label="项目内容" width="450" prop="itemContent"/>
<el-table-column label="巡检意见" width="450" prop="suggestion"/>
<el-table-column label="操作" width="100" fixed="right">
<template scope="scope">
<el-button v-if="scope.row.finishFlag==false" type="text"
@click="itemRow = {...scope.row,normalFlag:true}">完成
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="itemTotal>0"
:total="itemTotal"
:page.sync="itemQuery.page"
:limit.sync="itemQuery.limit"
@pagination="getDetailItemList"
/>
</el-card>
</el-dialog>
<el-dialog
:visible="true"
v-if="itemRow"
width="80%"
@close="itemRow = null"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `巡检项目--${itemRow.itemName}[${itemRow.itemCode}]` }}
</div>
<div class="fr">
<el-button @click="itemRow = null">取消</el-button>
<el-button type="primary" @click="commitItemCheck"></el-button>
</div>
</div>
<el-form :model="itemRow" :rules="itemRules" ref="itemForm" label-width="auto">
<el-descriptions border :column="2" label-style="width:100px">
<el-descriptions-item label="设备信息" :span="2">
{{ itemQuery.title }}
</el-descriptions-item>
<el-descriptions-item label="项目编码">
{{ itemRow.itemCode }}
</el-descriptions-item>
<el-descriptions-item label="项目名称">
{{ itemRow.itemName }}
</el-descriptions-item>
<el-descriptions-item label="项目内容" label-style="height:150px;" :span="2">
{{ itemRow.itemContent }}
</el-descriptions-item>
<el-descriptions-item label="异常情况" :span="2">
<el-form-item label=" " prop="normalFlag" style="margin-bottom: 0px">
<el-radio-group v-model="itemRow.normalFlag">
<el-radio :label="true">正常</el-radio>
<el-radio :label="false">异常</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="巡检意见" :span="2">
<el-form-item label=" " prop="suggestion" style="margin-bottom: 10px">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable
show-word-limit
maxlength="300" v-model.trim="itemRow.suggestion"/>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
</el-dialog>
<el-dialog
:visible="true"
title="创建维修单"
v-if="repairRow"
width="80%"
@close="repairRow = null"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `巡检设备--${repairRow.deviceCode}--${repairRow.productName}(${repairRow.ggxh})` }}
</div>
<div class="fr">
<el-button @click="repairRow = null">取消</el-button>
<el-button type="primary" @click="commitRepair"></el-button>
</div>
</div>
<el-form :model="repairRow" :rules="repairRules" ref="repairForm" label-width="auto">
<el-descriptions border label-style="width:90px" :column="3">
<el-descriptions-item label="名称">{{ repairRow.productName }}</el-descriptions-item>
<el-descriptions-item label="规格">{{ repairRow.ggxh }}</el-descriptions-item>
<el-descriptions-item label="销售标识">{{ repairRow.nameCode }}</el-descriptions-item>
<el-descriptions-item label="注册/备案号">{{ repairRow.zczbhhzbapzbh }}</el-descriptions-item>
<el-descriptions-item label="生产企业">{{ repairRow.manufactory }}</el-descriptions-item>
<el-descriptions-item label="供应商">{{ repairRow.supName }}</el-descriptions-item>
<el-descriptions-item label="批次号">{{ repairRow.batchNo }}</el-descriptions-item>
<el-descriptions-item label="序列号">{{ repairRow.serialNo }}</el-descriptions-item>
<el-descriptions-item label="udi码">{{ repairRow.udi }}</el-descriptions-item>
<el-descriptions-item label="生产日期">{{ repairRow.productionDate }}</el-descriptions-item>
<el-descriptions-item label="过期时间">{{ repairRow.expireDate }}</el-descriptions-item>
<el-descriptions-item label=""></el-descriptions-item>
<el-descriptions-item label="问题描述" :label-style="{'height': '100px'}" :span="3">
<el-form-item label=" " prop="description" style="margin-bottom: 10px">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable
show-word-limit
maxlength="300" v-model.trim="repairRow.description"/>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="维修方式" :span="3">
<el-form-item label=" " prop="innerFlag" style="margin-bottom: 0">
<el-radio-group v-model="repairRow.innerFlag">
<el-radio :label="true">内部维修</el-radio>
<el-radio :label="false">外部维修</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="维修人姓名" :span="3">
<el-form-item label=" " prop="repairUserName" style="margin-bottom: 10px">
<el-input v-model.trim="repairRow.repairUserName" placeholder="请输入维修人姓名"/>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="维修人电话" :span="3">
<el-form-item label=" " prop="repairUserPhone" style="margin-bottom: 10px">
<el-input v-model.trim="repairRow.repairUserPhone" placeholder="请输入维修人电话"/>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="诊断信息" :label-style="{'height': '100px'}" :span="3">
<el-form-item label=" " prop="diagnosisInfo" style="margin-bottom: 10px">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable
show-word-limit
maxlength="300" v-model.trim="repairRow.diagnosisInfo"/>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
</el-dialog>
<el-dialog
visible
v-if="repairId"
@close="repairId=null"
title="维修单信息"
width="80%"
>
<deviceRepairDialog :repairId="repairId"/>
</el-dialog>
</div>
</template>
<script src="./js/deptDeviceCheck.js"/>
<style scoped>
/deep/ .el-dialog__body {
padding: 0 0 20px 0;
}
</style>

@ -0,0 +1,324 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="变更单号">
<el-input v-model="query.changeOrderId" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="备注">
<el-input v-model="query.remark" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="操作部门">
<deptSelect :value.sync="query.deptCode"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="目标部门">
<deptSelect :value.sync="query.toDeptCode"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openCreate"
>创建
</el-button>
<el-button v-if="hasOrderCache" type="primary" icon="el-icon-plus" @click="openCacheOrder"
>打开挂单
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="单号" width="150" prop="orderId"/>
<el-table-column label="类型" width="90" prop="typeName">
<template scope="scope" >
<el-tag :type="`${deviceChangeType[scope.row.type].tagType}`">{{scope.row.typeName}}</el-tag>
</template>
</el-table-column>
<el-table-column label="状态" width="120" prop="statusName">
<template scope="scope" >
<el-tag :type="`${deviceChangeStatus[scope.row.status].tagType}`">{{scope.row.statusName}}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作部门" width="100" prop="deptName"/>
<el-table-column label="目标部门" width="100" prop="toDeptName"/>
<el-table-column label="创建人" width="100" prop="createUserName"/>
<el-table-column label="创建时间" width="140" prop="createTime"/>
<el-table-column label="确认人" width="100" prop="confirmUserName"/>
<el-table-column label="确认时间" width="140" prop="confirmTime"/>
<el-table-column label="确认备注" width="180" prop="confirmRemark"/>
<el-table-column label="备注" width="180" prop="remark"/>
<el-table-column label="操作" width="120" fixed="right">
<template scope="scope">
<el-button type="text"
v-if="scope.row.status==deviceChangeStatus.WAIT_CONFIRM.key
&&scope.row.toDeptCode==locDeptCode"
@click="confirm(scope.row)"
>接收
</el-button>
<el-button type="text"
v-if="scope.row.status==deviceChangeStatus.WAIT_CONFIRM.key
&&scope.row.toDeptCode==locDeptCode"
@click="reject(scope.row)"
>拒绝
</el-button>
<el-button type="text"
v-if="scope.row.status==deviceChangeStatus.WAIT_CONFIRM.key
&&scope.row.deptCode==locDeptCode"
@click="cancel(scope.row)"
>取消
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `变更详情 ${clickRow ? '——' + clickRow.name + '(' + clickRow.orderId + ')' : ''}` }}
</div>
<div v-if="clickRow" class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<div v-if="clickRow">
<div class="mt20 mb20">
<el-steps align-center :active="stepActive" finish-status="success" :process-status="processStatus">
<el-step :title="deviceChangeStatus.WAIT_CONFIRM.desc" :description="`备注说明:${clickRow.remark||''}`"/>
<el-step v-if="!stepActive"
:title="`${deviceChangeStatus.FINISH.desc}/${deviceChangeStatus.CANCEL.desc}/${deviceChangeStatus.REJECT_CONFIRM.desc}`"/>
<el-step v-else :title="clickRow.statusName" :description="`确认备注:${clickRow.confirmRemark||''}`"/>
</el-steps>
</div>
</div>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<!-- <el-table-column label="操作" width="90" fixed="right">-->
<!-- <template scope="scope">-->
<!-- <el-button type="text">详情</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog width="80%" title="创建变更单" custom-class="" :visible="true" v-if="showCreateDialog"
@close="showCreateDialog = false">
<el-card class="dialogCard" style="margin-top: -30px;">
<div slot="header" class="clearfix">
<div class="fl">
<span>
类型<el-tag :type="this.type.tagType" >{{this.type.desc}}</el-tag>
</span>
<span class="ml10">当前部门{{locDeptName}}</span>
</div>
<div class="fr">
<el-button @click="showCreateDialog = false">关闭</el-button>
<el-button v-if="createActive==0" @click="changeActive(true)" type="primary"></el-button>
<el-button v-else @click="changeActive(false)" type="primary">上一步</el-button>
<el-button v-if="createActive==1&&itemList.length>0" type="primary" @click="saveForm"></el-button>
<el-button v-if="createActive==1&&itemList.length>0" type="primary" @click="saveCache"></el-button>
</div>
</div>
<div>
<el-steps align-center :active="createActive" finish-status="success" process-status="finish">
<el-step title="基础信息"/>
<el-step title="选择设备"/>
</el-steps>
</div>
<el-form :disabled="createActive==1" :model="createData" :rules="createRule" ref="createForm"
label-width="auto">
<el-row>
<el-col>
<el-form-item label="目标部门" prop="toDeptCode" v-if="createData.type==deviceChangeType.CHANGE.key">
<deptSelect class="width-full" :notCode="locDeptCode" :value.sync="createData.toDeptCode"></deptSelect>
</el-form-item>
</el-col>
<!-- <el-col>-->
<!-- <el-form-item label="描述/名称" prop="name">-->
<!-- <el-input clearable show-word-limit maxlength="200" v-model="createData.name"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col>
<el-form-item label="备注">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable show-word-limit
maxlength="300"
v-model="createData.remark"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="dialogCard" :class="{'fullScreen':fullScreenFlag}" v-if="createActive==1"
style="margin-top: 10px;">
<div slot="header" class="clearfix">
<div class="fr">
<el-button type="primary" @click="openChoose"></el-button>
<el-switch
class="ml10"
v-model="fullScreenFlag"
active-text="全屏">
</el-switch>
</div>
</div>
<div class="mb10">
<el-tag class="ml5 mb5" type="info" color="#00a1ff" v-for="(v,i) in itemMap">{{v[0]}} * {{v[1]}}</el-tag>
</div>
<el-table :data="itemList" width="100%" :height="fullScreenFlag?'93vh':'40vh'">
<el-table-column label="序号" type="index" width="50"/>
<el-table-column v-if="createData.type==deviceChangeType.ADD.key" label="设备号" prop="deviceCode"
width="200">
<template scope="scope">
<el-row v-if="scope.row.editFlag">
<el-col :span="20"><el-input v-model="scope.row.deviceCode" show-word-limit maxlength="11"/></el-col>
<el-col :span="4"><el-button class="ml5" type="text" @click="genCode(scope.row)"></el-button></el-col>
</el-row>
<span v-else>{{scope.row.deviceCode}}</span>
</template>
</el-table-column>
<el-table-column v-else label="设备号" prop="deviceCode" width="140"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="160" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" v-if="createData.type==deviceChangeType.ADD.key" width="160" prop="batchNo">
<template scope="scope">
<el-input v-if="scope.row.editFlag" v-model="scope.row.batchNo"/>
<span v-else>{{scope.row.batchNo}}</span>
</template>
</el-table-column>
<el-table-column v-else label="批次号" prop="batchNo" width="160"/>
<el-table-column label="序列号" v-if="createData.type==deviceChangeType.ADD.key" width="160" prop="serialNo">
<template scope="scope">
<el-input v-if="scope.row.editFlag" v-model="scope.row.serialNo"/>
<span v-else>{{scope.row.serialNo}}</span>
</template>
</el-table-column>
<el-table-column v-else label="序列号" prop="serialNo" width="160"/>
<el-table-column label="生产日期" v-if="createData.type==deviceChangeType.ADD.key"width="160"
prop="productionDate">
<template scope="scope">
<el-date-picker v-if="scope.row.editFlag" type="date" v-model="scope.row.productionDate" placeholder="格式yyyy-MM-dd" />
<span v-else>{{scope.row.productionDate}}</span>
</template>
</el-table-column>
<el-table-column v-else label="生产日期" prop="productionDate" width="160"/>
<el-table-column label="过期时间" v-if="createData.type==deviceChangeType.ADD.key" width="160"
prop="expireDate">
<template scope="scope">
<<el-date-picker v-if="scope.row.editFlag" type="date" v-model="scope.row.expireDate" placeholder="格式yyyy-MM-dd" />
<span v-else>{{scope.row.expireDate}}</span>
</template>
</el-table-column>
<el-table-column v-else label="过期时间" prop="expireDate" width="160"/>
<el-table-column label="udi码" v-if="createData.type==deviceChangeType.ADD.key" min-width="180" prop="udi">
<template scope="scope">
<el-input v-if="scope.row.editFlag" v-model="scope.row.udi"/>
<span v-else>{{scope.row.udi}}</span>
</template>
</el-table-column>
<el-table-column v-else label="udi码" prop="udi" min-width="180"/>
<el-table-column label="供应商" width="160" prop="supName"/>
<el-table-column label="注册/备案号" width="180" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" fixed="right" :width="createData.type==deviceChangeType.ADD.key?170:50">
<template scope="scope">
<el-button type="text" @click="scope.row.editFlag=false" v-if="createData.type==deviceChangeType.ADD.key&&scope.row.editFlag==true" >保存</el-button>
<el-button type="text" @click="scope.row.editFlag=true" v-if="createData.type==deviceChangeType.ADD.key&&scope.row.editFlag==false" >编辑</el-button>
<el-button type="text" @click="delDeviceRow(scope.$index)"></el-button>
<el-button type="text" v-if="createData.type==deviceChangeType.ADD.key" @click="copyRow(scope.$index)"></el-button>
<el-button type="text" v-if="createData.type==deviceChangeType.ADD.key" @click="batchCopyRow(scope.$index)"></el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-dialog>
<el-dialog width="80%" title="选择设备(只能选择状态为'正常'且巡检锁定为否的设备)"
:visible="true"
v-if="chooseDeviceFlag"
@close="chooseDeviceFlag = false"
>
<deviceInfo :is-choose="true" :chooseFunc="chooseDevice" />
</el-dialog>
<el-dialog width="80%" title="选择产品"
:visible="true"
v-if="chooseProductFlag"
@close="chooseProductFlag = false"
>
<product style="margin: -30px -10px -10px -10px" :is-choose="true" :chooseFunc="chooseProduct" />
</el-dialog>
</div>
</template>
<script src="./js/deviceChangeOrder.js"/>
<style lang="scss" scoped>
.fullScreen {
z-index: 9999;
margin: 0 !important;
width: 100%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
}
.dialogCard {
margin: 0;
}
</style>

@ -0,0 +1,26 @@
<template>
<div>
<deviceChangeOrder :type="deviceChangeType.ADD"/>
</div>
</template>
<script>
import deviceChangeOrder from "@/views/dev/deviceChangeOrder.vue";
import {deviceChangeType} from "@/utils/enum";
export default {
computed: {
deviceChangeType() {
return deviceChangeType
}
},
components: {deviceChangeOrder},
data(){
return{
}
}
}
</script>
<style></style>

@ -0,0 +1,26 @@
<template>
<div>
<deviceChangeOrder :type="deviceChangeType.CHANGE"/>
</div>
</template>
<script>
import deviceChangeOrder from "@/views/dev/deviceChangeOrder.vue";
import {deviceChangeType} from "@/utils/enum";
export default {
computed: {
deviceChangeType() {
return deviceChangeType
}
},
components: {deviceChangeOrder},
data(){
return{
}
}
}
</script>
<style></style>

@ -0,0 +1,26 @@
<template>
<div>
<deviceChangeOrder :type="deviceChangeType.DESTROY"/>
</div>
</template>
<script>
import deviceChangeOrder from "@/views/dev/deviceChangeOrder.vue";
import {deviceChangeType} from "@/utils/enum";
export default {
computed: {
deviceChangeType() {
return deviceChangeType
}
},
components: {deviceChangeOrder},
data(){
return{
}
}
}
</script>
<style></style>

@ -0,0 +1,322 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="负责部门">
<deptSelect :value.sync="query.chargeDeptCode"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="任务id" width="150" prop="taskId"/>
<el-table-column label="任务名称" width="150" prop="name"/>
<el-table-column label="计划名称" width="150" prop="planName"/>
<el-table-column label="系统生成" width="80" prop="sysFlag">
<template scope="scope">
{{ scope.row.sysFlag ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="负责部门" width="160" prop="chargeDeptName"/>
<!-- <el-table-column label="负责人" width="160" prop="checkUserName"/>-->
<!-- <el-table-column label="负责人联系方式" width="160" prop="checkUserPhone"/>-->
<el-table-column label="设备数量" width="50" prop="deviceCount"/>
<el-table-column label="完成数量" width="50" prop="finishCount"/>
<el-table-column label="创建时间" width="160" prop="createTime"/>
<el-table-column label="创建人" width="160" prop="createUserName"/>
<!-- <el-table-column label="状态" width="120" prop="statusName">-->
<!-- <template scope="scope">-->
<!-- <el-tag :type="deviceStatus[scope.row.status].tagType">{{scope.row.statusName}}</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="数量" width="120" prop="count"/>-->
<!-- <el-table-column label="计量单位" width="100" prop="measname"/>-->
<!-- <el-table-column label="生产企业" width="180" prop="manufactory"/>-->
<!-- <el-table-column label="批次号" width="100" prop="batchNo"/>-->
<!-- <el-table-column label="序列号" width="100" prop="serialNo"/>-->
<!-- <el-table-column label="生产日期" width="140" prop="productionDate"/>-->
<!-- <el-table-column label="过期时间" width="140" prop="expireDate"/>-->
<!-- <el-table-column label="供应商" width="100" prop="supName"/>-->
<!-- <el-table-column label="udi码" width="150" prop="udi"/>-->
<!-- <el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>-->
<!-- <el-table-column label="操作" width="120" fixed="right">-->
<!-- <template scope="scope">-->
<!-- <el-button type="text" @click="print(scope.row.taskId)"-->
<!-- >打印-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">{{
`任务详情 ${clickRow ? '——' + clickRow.name : ''}`
}}
</div>
<div v-if="clickRow" class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-form v-if="clickRow" :model="detailQuery" inline label-width="auto">
<el-row :gutter="20">
<el-col>
<el-form-item label="设备编码">
<el-input v-model.trim="detailQuery.deviceCode" clearable/>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getDetailList"
>查询
</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="项目数量" width="50" prop="itemCount"/>
<el-table-column label="完成数量" width="50" prop="finishCount"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<!-- <el-table-column label="状态" width="120" prop="statusName">-->
<!-- <template scope="scope">-->
<!-- <el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="170" fixed="right">
<template scope="scope">
<el-button type="text" @click="openItem(scope.row)"
>查看巡检项目
</el-button>
<el-button v-if="scope.row.repairId" type="text" @click="repairId = scope.row.repairId"
>查看维修单
</el-button>
<!-- <el-button type="text" @click="print(scope.row.taskId,scope.row.deviceCode)"-->
<!-- >打印-->
<!-- </el-button>-->
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:visible="true"
v-if="itemDialogFlag"
width="80%"
:title="`巡检项目${itemQuery.title?'--'+itemQuery.title:''}`"
@close="itemDialogFlag = false"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fr">
<el-button type="" @click="getDetailItemList"></el-button>
</div>
</div>
<el-table :data="itemList" v-loading="itemLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="项目编码" width="150" prop="itemCode"/>
<el-table-column label="完成情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.finishFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.finishFlag==false" type="warning"></el-tag>
</template>
</el-table-column>
<el-table-column label="完成时间" width="160" prop="finishTime"/>
<el-table-column label="巡检部门" width="100" prop="checkDeptName"/>
<el-table-column label="巡检人" width="100" prop="checkUserName"/>
<el-table-column label="异常情况" width="80" prop="finishFlag">
<template scope="scope">
<el-tag v-if="scope.row.normalFlag==true" type="success"></el-tag>
<el-tag v-if="scope.row.normalFlag==false" type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="项目名称" width="150" prop="itemName"/>
<el-table-column label="项目内容" width="450" prop="itemContent"/>
<el-table-column label="巡检意见" width="450" prop="suggestion"/>
</el-table>
<pagination
v-show="itemTotal>0"
:total="itemTotal"
:page.sync="itemQuery.page"
:limit.sync="itemQuery.limit"
@pagination="getDetailItemList"
/>
</el-card>
</el-dialog>
<el-dialog
visible
v-if="repairId"
@close="repairId=null"
title="维修单信息"
width="80%"
>
<deviceRepairDialog :repairId="repairId"/>
</el-dialog>
<!-- <div id="printDiv" v-if="checkPrintData" v-show="false">-->
<!-- <div class="width-full p10" style="height:100vh;overflow-y: auto" v-for="item in checkPrintData.details">-->
<!-- <h1 align="center" style="font-size: 26px;font-weight: bolder;">巡检任务单</h1>-->
<!-- <el-descriptions colon column="2" label-style="width:100px;">-->
<!-- <el-descriptions-item label="任务标识">-->
<!-- {{ checkPrintData.info.taskId }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="任务时间">-->
<!-- {{ checkPrintData.info.createTime }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="打印时间">-->
<!-- {{ checkPrintData.printTime }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="任务名称">-->
<!-- {{ checkPrintData.info.name }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="计划名称">-->
<!-- {{ checkPrintData.info.planName }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="负责部门">-->
<!-- {{ checkPrintData.info.chargeDeptName }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="设备名称">-->
<!-- {{ item.deviceCode }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="设备编号">-->
<!-- {{ item.productName }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="设备规格">-->
<!-- {{ item.ggxh }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="销售标识">-->
<!-- {{ item.nameCode }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="注册/备案号">-->
<!-- {{ item.zczbhhzbapzbh }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="计量单位">-->
<!-- {{ item.measname }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="生产企业">-->
<!-- {{ item.manufactory }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="使用部门">-->
<!-- {{ item.deptName }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="UDI码">-->
<!-- {{ item.udi }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="有效期">-->
<!-- {{ item.productionDate }} ~ {{ item.expireDate }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="供应商">-->
<!-- {{ item.supName }}-->
<!-- </el-descriptions-item>-->
<!-- </el-descriptions>-->
<!-- <table border=1 cellspacing=0 cellpadding=1 width="100%" style="border-collapse:collapse" bordercolor="#333333">-->
<!-- <thead>-->
<!-- <th width="50px">-->
<!-- <b>序号</b>-->
<!-- </th>-->
<!-- <th style="width: calc((100vh - 50px) / 4)">-->
<!-- <b>项目名称</b>-->
<!-- </th>-->
<!-- <th style="width:calc((100vh - 50px) / 4)">-->
<!-- <b>项目编码</b>-->
<!-- </th>-->
<!-- <th style="width:calc((100vh - 50px) / 4)">-->
<!-- <b>项目内容</b>-->
<!-- </th>-->
<!-- <th style="width:calc((100vh - 50px) / 4)">-->
<!-- <b>巡检意见</b>-->
<!-- </th>-->
<!-- </thead>-->
<!-- <tbody>-->
<!-- <tr align="center" v-for="(v,i) in item.detailItems" style="height: 200px;">-->
<!-- <td>{{ i + 1 }}</td>-->
<!-- <td>{{ v.itemName }}</td>-->
<!-- <td>{{ v.itemCode }}</td>-->
<!-- <td>{{ v.itemContent }}</td>-->
<!-- <td>{{ v.suggestion }}</td>-->
<!-- </tr>-->
<!-- </tbody>-->
<!-- &lt;!&ndash; <el-table-column :show-overflow-tooltip="false" label="序号" type="index" width="50px"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column :show-overflow-tooltip="false" label="项目名称" prop="itemName"&ndash;&gt;-->
<!-- &lt;!&ndash; width="calc((100vh - 50px) / 4)"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column :show-overflow-tooltip="false" label="项目编码" prop="itemCode"&ndash;&gt;-->
<!-- &lt;!&ndash; width="calc((100vh - 50px) / 4)"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column :show-overflow-tooltip="false" label="项目内容" prop="itemContent"&ndash;&gt;-->
<!-- &lt;!&ndash; width="calc((100vh - 50px) / 4)"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column :show-overflow-tooltip="false" label="巡检意见" prop="suggestion"&ndash;&gt;-->
<!-- &lt;!&ndash; width="calc((100vh - 50px) / 4)"/>&ndash;&gt;-->
<!-- </table>-->
<!-- </div>-->
<!-- </div>-->
</div>
</template>
<script src="./js/deviceCheck.js"/>
<style scoped>
/deep/ .el-dialog__body {
padding: 0 0 20px 0;
}
</style>

@ -0,0 +1,115 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="项目编码">
<el-input v-model="query.code" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目名称">
<el-input v-model="query.name" clearable/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openCreate"
>新增
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @selection-change="(val)=>{if(isChoose){selectChangFunc(val)}}"
@row-click="(row)=>{if(isChoose){$refs.table.toggleRowSelection(row)}}" ref="table"
v-loading="loading"
click-row-light>
<el-table-column type="selection" width="55" v-if="isChoose"></el-table-column>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="项目编码" width="150" prop="code"/>
<el-table-column label="项目名称" width="200" prop="name"/>
<el-table-column label="项目内容" width="500" prop="content"/>
<el-table-column label="创建人" width="120" prop="createUserName"/>
<el-table-column label="创建时间" width="140" prop="createTime"/>
<el-table-column label="操作" v-if="!isChoose" fixed="right" width="80">
<template slot-scope="scope">
<el-button type="text"@click="delFunc(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-dialog
:visible="createFlag"
v-if="createFlag"
width="50%"
title="创建巡检项目"
@close="createFlag = false"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fr">
<el-button @click="createFlag = false">取消</el-button>
<el-button type="primary" @click="saveFunc"></el-button>
</div>
</div>
<el-form :model="saveData" ref="saveForm" :rules="formRule" label-width="auto">
<el-row>
<el-col>
<el-form-item label="项目编码" prop="code">
<el-input v-model="saveData.code" clearable show-word-limit maxlength="20">
<el-button slot="append" @click="genCode"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="项目名称" prop="name">
<el-input v-model="saveData.name" clearable show-word-limit maxlength="100"/>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="项目内容" prop="content">
<el-input v-model="saveData.content" type="textarea" resize="none"
:autosize="{ minRows: 8, maxRows: 8 }" clearable show-word-limit maxlength="500"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-dialog>
</div>
</template>
<script src="./js/deviceCheckItemDict.js"/>
<style scoped>
/deep/ .el-dialog__body {
padding: 0 0 20px 0;
}
</style>

@ -0,0 +1,217 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="设备编码">
<el-input v-model="query.deviceCode" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称">
<el-input v-model="query.productName" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备状态">
<el-select v-model="query.status"
style="width: 100%"
clearable>
<el-option
v-for="item in deviceStatus"
:key="item.key"
:label="item.desc"
:value="item.key">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="设备名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="120" prop="statusName">
<template scope="scope">
<el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="巡检锁定" width="120">
<template scope="scope">
<el-tag :type="scope.row.checkLock?'primark':'info'">{{ scope.row.checkLock ? '是' : '否'}}</el-tag>
</template>
</el-table-column>
<el-table-column label="数量" width="120" prop="count"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<!-- <el-table-column label="批次号" width="100" prop="batchNo"/>-->
<!-- <el-table-column label="序列号" width="100" prop="serialNo"/>-->
<!-- <el-table-column label="生产日期" width="140" prop="productionDate"/>-->
<!-- <el-table-column label="过期时间" width="140" prop="expireDate"/>-->
<!-- <el-table-column label="供应商" width="100" prop="supName"/>-->
<!-- <el-table-column label="udi码" width="150" prop="udi"/>-->
<!-- <el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>-->
<!-- <el-table-column label="操作" width="120" fixed="right">-->
<!-- <template scope="scope">-->
<!-- <el-button type="text"-->
<!-- >详情-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{
`设备详情 ${clickRow ? '——' + clickRow.productName + '(' + clickRow.ggxh + ')' : ''}`
}}
</div>
<div class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-form v-if="clickRow" :model="detailQuery" inline label-width="auto">
<el-row :gutter="20">
<el-col>
<el-form-item label="设备编码">
<el-input v-model.trim="detailQuery.deviceCode" clearable/>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getDetailList"
>查询
</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="120" prop="statusName">
<template scope="scope">
<el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="巡检锁定" width="120">
<template scope="scope">
<el-tag :type="scope.row.checkLock?'primark':'info'">{{ scope.row.checkLock ? '是' : '否'}}</el-tag>
</template>
</el-table-column>
<el-table-column label="变更次数" width="100" prop="changeCount"/>
<el-table-column label="维修次数" width="100" prop="repairCount"/>
<el-table-column label="巡检次数" width="100" prop="checkCount"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" :width="150" fixed="right">
<template scope="scope">
<el-button type="text" class="mr5" @click="getDeviceLogs(scope.row)"
>变更日志
</el-button>
<el-popover class="mr5"
placement="left"
trigger="click">
<div v-if="scope.row.QR" align="center">
<el-image :src="scope.row.QR" style="display: block"/>
<el-button style="display: block"
@click="downloadBase64Image(scope.row.QR,`${scope.row.deviceCode}——${scope.row.productName}——${scope.row.ggxh}`)">
下载
</el-button>
</div>
<el-button slot="reference" type="text" @click="genQR(scope.row)"
>设备码
</el-button>
</el-popover>
<el-button v-if="isChoose&&scope.row.status==deviceStatus.NORMAL.key&&scope.row.checkLock==false" type="text"
@click="chooseFunc(scope.row)"
>选择
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:title="`设备变更日志——${productRow.productName}(${productRow.deviceCode})`"
:visible="true"
v-if="showLog"
@close="showLog = false"
>
<el-timeline>
<el-timeline-item placement="top"
v-for="(item, index) in logList"
:key="index"
size="large"
icon="el-icon-s-promotion"
:type="deviceChangeType[item.type].tagType"
:timestamp="item.createTime">
<el-card style="margin-left: 0px">
<div slot="header">
<div style="font-size: 24px">
{{ item.typeName }}
</div>
</div>
<el-descriptions>
<el-descriptions-item label="操作部门">{{ item.deptName }}</el-descriptions-item>
<el-descriptions-item label="操作人">{{ item.createUserName }}</el-descriptions-item>
<el-descriptions-item label="变更单号">{{ item.changeOrderId }}</el-descriptions-item>
<el-descriptions-item label="目标部门">{{ item.toDeptName }}</el-descriptions-item>
<el-descriptions-item label="确认人">{{ item.confirmUserName }}</el-descriptions-item>
<el-descriptions-item label="确认时间">{{ item.confirmTime }}</el-descriptions-item>
</el-descriptions>
</el-card>
</el-timeline-item>
</el-timeline>
</el-dialog>
</div>
</template>
<script src="./js/deviceInfo.js"/>

@ -0,0 +1,223 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="所属科室">
<deptSelect :value.sync="query.deptCode"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备编码">
<el-input v-model="query.deviceCode" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称">
<el-input v-model="query.productName" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备状态">
<el-select v-model="query.status"
style="width: 100%"
clearable>
<el-option
v-for="item in deviceStatus"
:key="item.key"
:label="item.desc"
:value="item.key">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="设备名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="120" prop="statusName">
<template scope="scope">
<el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="巡检锁定" width="120">
<template scope="scope">
<el-tag :type="scope.row.checkLock?'primark':'info'">{{ scope.row.checkLock ? '是' : '否' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="数量" width="120" prop="count"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<!-- <el-table-column label="批次号" width="100" prop="batchNo"/>-->
<!-- <el-table-column label="序列号" width="100" prop="serialNo"/>-->
<!-- <el-table-column label="生产日期" width="140" prop="productionDate"/>-->
<!-- <el-table-column label="过期时间" width="140" prop="expireDate"/>-->
<!-- <el-table-column label="供应商" width="100" prop="supName"/>-->
<!-- <el-table-column label="udi码" width="150" prop="udi"/>-->
<!-- <el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>-->
<!-- <el-table-column label="操作" width="120" fixed="right">-->
<!-- <template scope="scope">-->
<!-- <el-button type="text"-->
<!-- >详情-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{
`设备详情 ${clickRow ? '——' + clickRow.productName + '(' + clickRow.ggxh + ')' : ''}`
}}
</div>
<div class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-form v-if="clickRow" :model="detailQuery" inline label-width="auto">
<el-row :gutter="20">
<el-col>
<el-form-item label="设备编码">
<el-input v-model.trim="detailQuery.deviceCode" clearable/>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getDetailList"
>查询
</el-button>
</el-col>
</el-row>
</el-form>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室" width="150" prop="deptName"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="120" prop="statusName">
<template scope="scope">
<el-tag :type="deviceStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="巡检锁定" width="120">
<template scope="scope">
<el-tag :type="scope.row.checkLock?'primark':'info'">{{ scope.row.checkLock ? '是' : '否' }}</el-tag>
</template>
</el-table-column>
<el-table-column label="变更次数" width="100" prop="changeCount"/>
<el-table-column label="维修次数" width="100" prop="repairCount"/>
<el-table-column label="巡检次数" width="100" prop="checkCount"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" :width="150" fixed="right">
<template scope="scope">
<el-button class="mr10" type="text" @click="getDeviceLogs(scope.row)"
>变更日志
</el-button>
<el-popover class="mr10"
placement="left"
width="300"
trigger="click">
<div v-if="scope.row.QR" align="center">
<el-image :src="scope.row.QR" style="display: block"/>
<el-button style="display: block"
@click="downloadBase64Image(scope.row.QR,`${scope.row.deviceCode}——${scope.row.productName}——${scope.row.ggxh}`)">
下载
</el-button>
</div>
<el-button slot="reference" type="text" @click="genQR(scope.row)"
>设备码
</el-button>
</el-popover>
<el-button v-if="isChoose&&scope.row.status==deviceStatus.NORMAL.key" type="text"
@click="chooseFunc(scope.row)"
>选择
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:title="`设备变更日志——${productRow.productName}(${productRow.deviceCode})`"
:visible="true"
v-if="showLog"
@close="showLog = false"
>
<el-timeline>
<el-timeline-item placement="top"
v-for="(item, index) in logList"
:key="index"
size="large"
icon="el-icon-s-promotion"
:type="deviceChangeType[item.type].tagType"
:timestamp="item.createTime">
<el-card style="margin-left: 0px">
<div slot="header">
<div style="font-size: 24px">
{{ item.typeName }}
</div>
</div>
<el-descriptions>
<el-descriptions-item label="操作部门">{{ item.deptName }}</el-descriptions-item>
<el-descriptions-item label="操作人">{{ item.createUserName }}</el-descriptions-item>
<el-descriptions-item label="变更单号">{{ item.changeOrderId }}</el-descriptions-item>
<el-descriptions-item label="目标部门">{{ item.toDeptName }}</el-descriptions-item>
<el-descriptions-item label="确认人">{{ item.confirmUserName }}</el-descriptions-item>
<el-descriptions-item label="确认时间">{{ item.confirmTime }}</el-descriptions-item>
</el-descriptions>
</el-card>
</el-timeline-item>
</el-timeline>
</el-dialog>
</div>
</template>
<script src="./js/deviceInfoFull.js"/>

@ -0,0 +1,433 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="计划名称">
<el-input v-model.trim="query.name" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="负责部门">
<deptSelect :value.sync="query.chargeDeptCode"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openCreate(null)"
>新增
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light
highlight-current-row>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="计划名称" width="150" prop="name"/>
<el-table-column label="负责部门" width="150" prop="chargeDeptName"/>
<el-table-column label="设备数量" width="150" prop="deviceCount"/>
<el-table-column label="执行情况" width="150" prop="chargeDeptName">
<template scope="scope">
<el-tag v-if="scope.row.isActive==true" type="success"></el-tag>
<el-tag v-if="scope.row.isActive==false" type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="开始日期" width="150" prop="startDate"/>
<el-table-column label="结束日期" width="150" prop="endDate"/>
<el-table-column label="执行周期(次)" width="160" prop="frequency">
<template scope="scope">
{{ `${scope.row.frequency}` }}
</template>
</el-table-column>
<el-table-column label="已执行次数" width="200" prop="execCount"/>
<el-table-column label="备注" width="200" prop="remark"/>
<el-table-column label="操作" width="240" fixed="right">
<template scope="scope">
<el-button type="text" @click.stop="openCreate(scope.row.planId)">
编辑
</el-button>
<el-button type="text" @click.stop="openCreate(scope.row.planId,null,1)">
添加巡检设备
</el-button>
<el-button type="text" @click.stop="delplan(scope.row)">
删除
</el-button>
<el-button type="text" @click="deviceCheckGenFunc(scope.row)"
>生成任务单
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `计划详情 ${clickRow ? '——' + clickRow.name : ''}` }}
</div>
<div class="fr" v-if="clickRow">
<el-button type="primary" @click="openCreate(clickRow.planId,null,1)"></el-button>
<el-button type="" @click="getDetailList"></el-button>
</div>
</div>
<el-table :data="detailList" v-loading="detailLoading" ref="table" row-key="productId"
@row-click="(row)=>{$refs.table.toggleRowExpansion(row)}" @expand-change="handleExpendRow"
:expandRowKeys="expandRowKeys">
<el-table-column type="expand">
<template slot-scope="scope">
<el-card class="mb10" v-if="scope.row.detailData!=null">
<el-form :model="scope.row.detailData.query" inline>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="设备编号">
<el-input v-model="scope.row.detailData.query.deviceCode" clearable/>
</el-form-item>
<el-button-group>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search"
@click="scope.row.detailData.query.page=1;getRowDetailList(scope.row.detailData)"
>查询
</el-button>
</el-button-group>
</el-col>
</el-row>
</el-form>
<el-table :data="scope.row.detailData.list"
v-loading="scope.row.detailData.loading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室名称" prop="deptName"/>
<el-table-column label="设备编号" prop="deviceCode"/>
<el-table-column label="最小销售标识" prop="nameCode"/>
<el-table-column label="名称" prop="productName"/>
<el-table-column label="规格型号" prop="ggxh"/>
<el-table-column label="计量单位" prop="measname"/>
<el-table-column label="生产企业" prop="manufactory"/>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="120">
<template scope="prop">
<el-button type="text" @click="openCreate(prop.row.planId,prop.row,2,true)"
>巡检项目
</el-button>
<el-button type="text" @click="delDetail(prop.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="scope.row.detailData.total>0"
:total="scope.row.detailData.total"
:page.sync="scope.row.detailData.query.page"
:limit.sync="scope.row.detailData.query.limit"
@pagination="getRowDetailList(scope.row.detailData)"
/>
</el-card>
</template>
</el-table-column>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="最小销售标识" prop="nameCode"/>
<el-table-column label="名称" prop="productName"/>
<el-table-column label="规格型号" prop="ggxh"/>
<el-table-column label="计量单位" prop="measname"/>
<el-table-column label="数量" prop="count"/>
<el-table-column label="生产企业" prop="manufactory"/>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="120">
<template scope="scope">
<el-button type="text" @click.stop="openCreate(scope.row.planId,scope.row,2)"
>巡检项目
</el-button>
<el-button type="text" @click.stop="delDetail(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:title="`编辑巡检计划信息${planData.planId?'--('+planData.name+')':''}`"
:visible="true"
v-if="createFlag"
@close="createFlag = false"
width="80%"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fl"><span style="color: red;">* 巡检任务单将于执行周期的00:05分生成</span></div>
<div class="fr">
<el-button v-if="createActive==0" @click="changeActive(true)" type="primary"></el-button>
<el-button v-else @click="changeActive(false)" type="primary">上一步</el-button>
<el-button @click="createFlag = false;query.page=1;getList()">关闭</el-button>
<el-button type="success" v-if="createActive==2" @click="changeActive(false)"></el-button>
</div>
</div>
<div>
<el-steps align-center :active="createActive" finish-status="success" process-status="finish">
<el-step title="基础信息"/>
<el-step title="选择设备"/>
<el-step title="选择巡检项目" :description="createActive==2?itemQuery.title:''"/>
</el-steps>
</div>
<el-form v-if="createActive==0" :model="planData" :rules="formRule" ref="saveForm" label-width="auto">
<el-row :gutter="20">
<el-col>
<el-form-item label="计划名称" prop="name">
<el-input v-model.trim="planData.name" show-word-limit maxlength="100" clearable/>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="负责部门" prop="chargeDeptCode">
<deptSelect :value.sync="planData.chargeDeptCode"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="执行区间" prop="dateInterval">
<el-date-picker
style="width: 100%"
v-model.trim="planData.dateInterval"
type="daterange"
align="right"
editable
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions">
</el-date-picker>
</el-form-item>
</el-col>
<el-col>
<el-form-item prop="frequency">
<template slot="label">
执行周期
<el-tooltip class="item" effect="dark" content="执行周期每30天执行一次"
placement="top">
<el-icon class="el-icon-question"/>
</el-tooltip>
</template>
<el-input-number :min="1" :max="999999" v-model.trim="planData.frequency"/>
<span class="ml10"></span>
<span class="ml10">快捷选项</span>
<el-button type="" @click="planData.frequency=30"></el-button>
<el-button type="" @click="planData.frequency=30*3"></el-button>
<el-button type="" @click="planData.frequency=30*6"></el-button>
<el-button type="" @click="planData.frequency=365"></el-button>
<el-button type="" @click="planData.frequency=365*2"></el-button>
<el-button type="" @click="planData.frequency=365*3"></el-button>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="备注">
<el-input type="textarea" v-model.trim="planData.remark" resize="none" :autosize="{minRows:8,maxRows:8}"
show-word-limit maxlength="500" clearable/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-card v-show="createActive==1">
<div slot="header" class="clearfix">
<div class="fr">
<el-button type="primary" @click="chooseDeviceFlag=true"></el-button>
<el-button type="" @click="getDetailList"></el-button>
</div>
</div>
<el-table :data="detailList" v-loading="detailLoading" ref="dialogTable"
:row-key="row=>{return row.productId+'_'+row.planId}"
@row-click="(row)=>{$refs.dialogTable.toggleRowExpansion(row)}" @expand-change="handleExpendRow"
:expandRowKeys="dialogExpandRowKeys">
<el-table-column type="expand">
<template slot-scope="scope">
<el-card class="mb10" v-if="scope.row.detailData">
<el-form :model="scope.row.detailData.query" inline>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="设备编号">
<el-input v-model="scope.row.detailData.query.deviceCode" clearable/>
</el-form-item>
<el-button-group>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search"
@click="scope.row.detailData.query.page=1;getRowDetailList(scope.row.detailData)"
>查询
</el-button>
</el-button-group>
</el-col>
</el-row>
</el-form>
<el-table :data="scope.row.detailData.list"
v-loading="scope.row.detailData.loading" row-key="deviceCode">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="科室名称" prop="deptName"/>
<el-table-column label="设备编号" prop="deviceCode"/>
<el-table-column label="最小销售标识" prop="nameCode"/>
<el-table-column label="名称" prop="productName"/>
<el-table-column label="规格型号" prop="ggxh"/>
<el-table-column label="计量单位" prop="measname"/>
<el-table-column label="生产企业" prop="manufactory"/>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="120">
<template scope="prop">
<el-button type="text" @click="openCreate(prop.row.planId,prop.row,2,true)"
>巡检项目
</el-button>
<el-button type="text" @click="delDetail(prop.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="scope.row.detailData.total>0"
:total="scope.row.detailData.total"
:page.sync="scope.row.detailData.query.page"
:limit.sync="scope.row.detailData.query.limit"
@pagination="getRowDetailList(scope.row.detailData)"
/>
</el-card>
</template>
</el-table-column>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="最小销售标识" prop="nameCode"/>
<el-table-column label="名称" prop="productName"/>
<el-table-column label="规格型号" prop="ggxh"/>
<el-table-column label="计量单位" prop="measname"/>
<el-table-column label="数量" prop="count"/>
<el-table-column label="生产企业" prop="manufactory"/>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh"/>
<el-table-column label="操作" width="120">
<template scope="scope">
<el-button type="text" @click.stop="changeActive(true,scope.row)"
>巡检项目
</el-button>
<el-button type="text" @click.stop="delDetail(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-card v-show="createActive == 2">
<div slot="header" class="clearfix">
<div class="fr">
<el-button type="primary" @click="chooseItemList=[];chooseDetailItemFlag=true"></el-button>
<el-button type="" @click="getDetailItemList"></el-button>
</div>
</div>
<el-table :data="itemList" ref="itemTable" v-loading="itemLoading" row-key="itemCode">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="项目编码" width="150" prop="itemCode"/>
<el-table-column label="项目名称" width="150" prop="name"/>
<el-table-column label="项目内容" width="500" prop="content"/>
<el-table-column label="操作" width="50">
<template scope="scope">
<el-button type="text"
v-if="!itemQuery.deviceCode&&!scope.row.deviceCode || itemQuery.deviceCode&&scope.row.deviceCode"
@click="delDetailItem(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="itemTotal>0"
:total="itemTotal"
:page.sync="itemQuery.page"
:limit.sync="itemQuery.limit"
@pagination="getDetailItemList"
/>
</el-card>
</el-card>
</el-dialog>
<el-dialog width="80%" title="选择设备"
:visible="true"
v-if="chooseDeviceFlag"
@close="chooseDeviceFlag = false"
>
<el-card>
<div class="align-right" v-if="chooseDeviceList&&chooseDeviceList.length>0">
<el-button class="mr20" style="font-size: 20px" type="primary" @click="chooseDevice"></el-button>
</div>
<planChooseDevice style="margin: 0" :planId="detailQuery.planId" :selectChangeFunc="deviceSelectChangFunc"/>
</el-card>
</el-dialog>
<el-dialog width="80%" title="选择巡检项目"
:visible="true"
v-if="chooseDetailItemFlag"
@close="chooseDetailItemFlag = false"
>
<el-card>
<div class="align-right" v-if="chooseItemList&&chooseItemList.length>0">
<el-button class="mr20" style="font-size: 20px" type="primary" @click="chooseDetailItem"></el-button>
</div>
<DeviceCheckItemDict style="margin: 0" :is-choose="true" :selectChangFunc="itemSelectChangFunc"/>
</el-card>
</el-dialog>
</div>
</template>
<script src="./js/devicePlan.js"/>
<style scoped>
/deep/ .el-dialog__body {
padding: 0 0 20px 0;
}
</style>

@ -0,0 +1,134 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="设备编码">
<el-input v-model.trim="query.deviceCode" @keyup.enter.native="search" clearable/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="完成状态">
<el-select v-model="query.isFinish" clearable>
<el-option label="未完成" value="false">未完成</el-option>
<el-option label="已完成" value="true">已完成</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
<!-- <el-button type="primary" icon="el-icon-plus" @click="openCreate"-->
<!-- >新增-->
<!-- </el-button>-->
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" ref="table"
v-loading="loading" highlight-current-row
click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="维修号" width="150" prop="id"/>
<el-table-column label="状态" width="150" prop="statusName">
<template scope="scope">
<el-tag :type="scope.row.finishFlag?'success':'warning'">{{
scope.row.finishFlag ? '已完成' : '未完成'
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="维修方式" width="150" prop="statusName">
<template scope="scope">
{{ scope.row.innerFlag ? '内部维修' : '外部维修' }}
</template>
</el-table-column>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="维修人姓名" width="150" prop="repairUserName"/>
<el-table-column label="维修人电话" width="150" prop="repairUserPhone"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="问题描述" width="160" prop="description"/>
<el-table-column label="诊断信息" width="160" prop="diagnosisInfo"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="操作" fixed="right" width="80">
<template slot-scope="scope">
<el-button type="text" v-if="!scope.row.finishFlag" @click="finishFunc(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
</div>
</template>
<script src="./js/deviceRepair.js"/>
<style lang="scss" scoped>
.grid-container {
height: inherit;
grid-template-columns: repeat(1, 1fr);
display: grid;
grid-gap: 10px;
.el-card {
margin: 0;
padding-top: 0;
}
}
.grid-item {
height: 100%;
padding: 15px;
.el-row, .el-col {
height: 100%;
}
.header {
color: #676a6c;
font-size: 20px;
font-weight: bolder;
}
.el-table {
margin-top: 10px;
width: 100%;
}
}
::v-deep .el-dialog__body {
padding: 0 0 20px 0;
}
</style>

@ -0,0 +1,282 @@
<template>
<div>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="受理状态">
<el-select v-model="query.status" clearable>
<el-option v-for="item in deviceRepairApplyStatus" :label="item.desc" :value="item.key"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="报修号">
<el-input v-model.trim="query.applyId" clearable/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openCreate"
>新增
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" ref="table"
v-loading="loading" @row-click="rowClick" highlight-current-row
click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="报修号" width="150" prop="id"/>
<el-table-column label="状态" width="150" prop="statusName">
<template scope="scope">
<el-tag :type="deviceRepairApplyStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="报修部门" width="120" prop="applyDeptName"/>
<el-table-column label="报修人" width="120" prop="applyUserName"/>
<el-table-column label="报修人电话" width="120" prop="applyUserPhone"/>
<el-table-column label="报修时间" width="140" prop="applyTime"/>
<el-table-column label="受理部门" width="140" prop="confirmDeptName"/>
<el-table-column label="受理人" width="140" prop="confirmUserName"/>
<el-table-column label="受理人电话" width="140" prop="confirmPhone"/>
<el-table-column label="受理时间" width="140" prop="confirmTime"/>
<el-table-column label="设备数量" width="100" prop="deviceCount"/>
<el-table-column label="已完成数量" width="100" prop="finishCount"/>
<!-- <el-table-column label="操作" fixed="right" width="80">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button type="text" @click="delFunc(scope.row)"></el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `报修单详情 ${clickRow ? '——' + clickRow.id : ''}` }}
</div>
<div v-if="clickRow" class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="160" prop="statusName">
<template scope="scope">
<el-tag :type="deviceRepairApplyDetailStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="是否维修" width="160" prop="repairFlag">
<template scope="scope">
<span>{{
scope.row.repairFlag == null ? "" : scope.row.repairFlag ? "维修" : "不维修(报废/销毁)"
}}
</span>
</template>
</el-table-column>
<el-table-column label="问题描述" width="160" prop="description"/>
<el-table-column label="诊断信息" width="160" prop="diagnosisInfo"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column label="操作" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" v-if="scope.row.repairId" @click="repairId = scope.row.repairId">
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
<el-dialog
:visible="createFlag"
v-if="createFlag"
width="80%"
title="创建报修单"
@close="createFlag = false"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
</div>
<div class="fr">
<el-button @click="createFlag = false">取消</el-button>
<el-button type="primary" @click="saveFunc"></el-button>
</div>
</div>
<el-form :model="saveData" ref="saveForm" :rules="formRule" label-width="auto">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="报修部门">
{{ user.locDeptName }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报修人">
{{ user.employeeName }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报修人电话" prop="applyUserPhone">
<el-input v-model="saveData.applyUserPhone" clearable show-word-limit maxlength="20"/>
</el-form-item>
</el-col>
<el-col>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
<el-form-item style="margin-bottom: 0px;" label-width="auto" label="报修设备" prop="details">
<div slot="error" slot-scope="scope" style="color: #ff4949;white-space:nowrap;">
{{ scope.error }}
</div>
</el-form-item>
</div>
<div class="fr">
<el-button type="primary" @click="chooseDeviceFlag=true"></el-button>
</div>
</div>
<div class="grid-container" v-if="saveData.details&&saveData.details.length>0">
<el-card :body-style="{padding:0,paddingTop:'10px'}" class="grid-item"
v-for="(item,i) in saveData.details">
<div slot="header" class="clearfix">
<div class="fl">
设备号{{ item.deviceCode }}
</div>
<div class="fr">
<el-button type="text" @click="removeDetail(i)"></el-button>
</div>
</div>
<el-form :model="item" :rules="detailRules" :ref="item.deviceCode" label-width="auto">
<el-descriptions border label-style="width:70px" :column="2">
<el-descriptions-item label="名称">{{ item.productName }}</el-descriptions-item>
<el-descriptions-item label="规格">{{ item.ggxh }}</el-descriptions-item>
<el-descriptions-item label="问题描述">
<el-row>
<el-col>
<el-form-item label=" " prop="description">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable
show-word-limit
maxlength="300" v-model.trim="item.description"/>
</el-form-item>
</el-col>
</el-row>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
</div>
</el-card>
</el-col>
</el-row>
</el-form>
</el-card>
</el-dialog>
<el-dialog width="80%" title="选择设备(只能选择状态为'正常'的设备)"
:visible="true"
v-if="chooseDeviceFlag"
@close="chooseDeviceFlag = false"
>
<deviceInfo :is-choose="true" :chooseFunc="chooseDevice"/>
</el-dialog>
<el-dialog
visible
v-if="repairId"
@close="repairId=null"
title="维修单信息"
width="80%"
>
<deviceRepairDialog :repairId="repairId"/>
</el-dialog>
</div>
</template>
<script src="./js/deviceRepairApply.js"/>
<style lang="scss" scoped>
.grid-container {
height: inherit;
grid-template-columns: repeat(1, 1fr);
display: grid;
grid-gap: 10px;
.el-card {
margin: 0;
padding-top: 0;
}
}
.grid-item {
height: 100%;
padding: 15px;
.el-row, .el-col {
height: 100%;
}
.header {
color: #676a6c;
font-size: 20px;
font-weight: bolder;
}
.el-table {
margin-top: 10px;
width: 100%;
}
}
::v-deep .el-dialog__body {
padding: 0 0 20px 0;
}
::v-deep .el-select {
width: 100%;
}
</style>

@ -0,0 +1,248 @@
<template>
<div>
<el-card :body-style="{padding:0}">
<el-tabs type="border-card" v-model="tabActive" :before-leave="tabClick">
<el-tab-pane label="我的受理" :name="2"></el-tab-pane>
<el-tab-pane label="报修大厅" :name="1"></el-tab-pane>
<el-card>
<el-form :model="query" v-if="showSearch" label-width="auto">
<el-row :gutter="20">
<el-col :span="6" v-if="tabActive==2">
<el-form-item label="受理状态">
<el-select v-model="query.status" clearable>
<el-option v-for="item in deviceRepairApplyStatus" :label="item.desc" :value="item.key"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="报修部门">
<deptSelect :value.sync="query.applyDeptCode"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="报修号">
<el-input v-model.trim="query.applyId" clearable/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="top-right-btn">
<el-button-group>
<el-button icon="el-icon-view" type="primary" @click="showSearch = !showSearch">显示/隐藏搜索栏
</el-button>
<el-button
type="primary"
icon="el-icon-refresh"
@click="onReset"
>重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="search"
>查询
</el-button>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" ref="table"
v-loading="loading" @row-click="rowClick" highlight-current-row
click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="报修号" width="150" prop="id"/>
<el-table-column label="状态" width="150" prop="statusName">
<template scope="scope">
<el-tag :type="deviceRepairApplyStatus[scope.row.status].tagType">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="报修部门" width="120" prop="applyDeptName"/>
<el-table-column label="报修人" width="120" prop="applyUserName"/>
<el-table-column label="报修人电话" width="120" prop="applyUserPhone"/>
<el-table-column label="报修时间" width="140" prop="applyTime"/>
<el-table-column label="受理部门" width="140" prop="confirmDeptName"/>
<el-table-column label="受理人" width="140" prop="confirmUserName"/>
<el-table-column label="受理人电话" width="140" prop="confirmPhone"/>
<el-table-column label="受理时间" width="140" prop="confirmTime"/>
<el-table-column label="设备数量" width="100" prop="deviceCount"/>
<el-table-column label="已完成数量" width="100" prop="finishCount"/>
<el-table-column v-if="tabActive==1" label="操作" fixed="right" width="80">
<template slot-scope="scope">
<el-button type="text" @click="confirm(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="query.page"
:limit.sync="query.limit"
@pagination="getList"
/>
</el-card>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
{{ `报修单详情 ${clickRow ? '——' + clickRow.id : ''}` }}
</div>
<div v-if="clickRow" class="fr">
<el-button @click="getDetailList"></el-button>
</div>
</div>
<el-table :data="detailList" v-loading="detailLoading">
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="设备编码" width="150" prop="deviceCode"/>
<el-table-column label="最小销售标识" width="150" prop="nameCode"/>
<el-table-column label="名称" width="150" prop="productName"/>
<el-table-column label="规格型号" width="160" prop="ggxh"/>
<el-table-column label="状态" width="160" prop="statusName">
<template scope="scope">
<el-tag :type="deviceRepairApplyDetailStatus[scope.row.status].tagType">{{
scope.row.statusName
}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="是否维修" width="160" prop="repairFlag">
<template scope="scope">
<span>{{
scope.row.repairFlag==null?"":scope.row.repairFlag ? "维修" : "不维修(报废/销毁)"
}}
</span>
</template>
</el-table-column>
<el-table-column label="问题描述" width="160" prop="description"/>
<el-table-column label="诊断信息" width="160" prop="diagnosisInfo"/>
<el-table-column label="计量单位" width="100" prop="measname"/>
<el-table-column label="批次号" width="100" prop="batchNo"/>
<el-table-column label="序列号" width="100" prop="serialNo"/>
<el-table-column label="生产日期" width="140" prop="productionDate"/>
<el-table-column label="过期时间" width="140" prop="expireDate"/>
<el-table-column label="供应商" width="100" prop="supName"/>
<el-table-column label="udi码" width="150" prop="udi"/>
<el-table-column label="注册/备案号" width="150" prop="zczbhhzbapzbh"/>
<el-table-column label="生产企业" width="180" prop="manufactory"/>
<el-table-column v-if="tabActive==2" label="操作" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" v-if="scope.row.status==deviceRepairApplyDetailStatus.WAIT_DIAGNOSIS.key"
@click="openDiagnosisDialog(scope.row)">诊断
</el-button>
<el-button type="text" v-if="scope.row.repairId" @click="repairId = scope.row.repairId"></el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQuery.page"
:limit.sync="detailQuery.limit"
@pagination="getDetailList"
/>
</el-card>
</el-tabs>
</el-card>
<el-dialog
:visible="detailFlag"
v-if="detailFlag"
width="80%"
title="诊断设备"
@close="detailFlag = false"
>
<el-card>
<div slot="header" class="clearfix">
<div class="fl">
设备号{{ detailData.deviceCode }}
</div>
<div class="fr">
<el-button @click="detailFlag = false">取消</el-button>
<el-button type="primary" @click="commitFunc"></el-button>
</div>
</div>
<el-form :model="diagnosisData" ref="saveForm" :rules="detailRules" label-width="auto">
<el-descriptions border label-style="width:90px" :column="3">
<el-descriptions-item label="名称">{{ detailData.productName }}</el-descriptions-item>
<el-descriptions-item label="规格">{{ detailData.ggxh }}</el-descriptions-item>
<el-descriptions-item label="销售标识">{{ detailData.nameCode }}</el-descriptions-item>
<el-descriptions-item label="注册/备案号">{{ detailData.zczbhhzbapzbh }}</el-descriptions-item>
<el-descriptions-item label="生产企业">{{ detailData.manufactory }}</el-descriptions-item>
<el-descriptions-item label="供应商">{{ detailData.supName }}</el-descriptions-item>
<el-descriptions-item label="批次号">{{ detailData.batchNo }}</el-descriptions-item>
<el-descriptions-item label="序列号">{{ detailData.serialNo }}</el-descriptions-item>
<el-descriptions-item label="udi码">{{ detailData.udi }}</el-descriptions-item>
<el-descriptions-item label="生产日期">{{ detailData.productionDate }}</el-descriptions-item>
<el-descriptions-item label="过期时间">{{ detailData.expireDate }}</el-descriptions-item>
<el-descriptions-item label=""></el-descriptions-item>
<el-descriptions-item label="问题描述" :label-style="{'height': '100px'}" :span="3">
{{ detailData.description }}
</el-descriptions-item>
<el-descriptions-item label="是否维修" :span="3">
<el-form-item label=" " prop="repairFlag" style="margin-bottom: 0">
<el-radio-group v-model="diagnosisData.repairFlag">
<el-radio :label="true">维修</el-radio>
<el-radio :label="false">不维修(报废/销毁)</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item v-if="diagnosisData.repairFlag" label="维修方式" :span="3">
<el-form-item label=" " prop="innerFlag" style="margin-bottom: 0">
<el-radio-group v-model="diagnosisData.innerFlag">
<el-radio :label="true">内部维修</el-radio>
<el-radio :label="false">外部维修</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item v-if="diagnosisData.repairFlag" label="维修人姓名" :span="3">
<el-form-item label=" " prop="repairUserName" style="margin-bottom: 10px">
<el-input v-model.trim="diagnosisData.repairUserName" placeholder="请输入维修人姓名"/>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item v-if="diagnosisData.repairFlag" label="维修人电话" :span="3">
<el-form-item label=" " prop="repairUserPhone" style="margin-bottom: 10px">
<el-input v-model.trim="diagnosisData.repairUserPhone" placeholder="请输入维修人电话"/>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="诊断信息" :label-style="{'height': '100px'}" :span="3">
<el-form-item label=" " prop="diagnosisInfo" style="margin-bottom: 10px">
<el-input type="textarea" resize="none" :autosize="{ minRows: 4, maxRows: 4 }" clearable
show-word-limit
maxlength="300" v-model.trim="diagnosisData.diagnosisInfo"/>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
</el-dialog>
<el-dialog
visible
v-if="repairId"
@close="repairId=null"
title="维修单信息"
width="80%"
>
<deviceRepairDialog :repairId="repairId"/>
</el-dialog>
</div>
</template>
<script src="./js/deviceRepairApplyHall.js"/>
<style lang="scss" scoped>
::v-deep .el-dialog__body {
padding: 0 0 20px 0;
}
::v-deep .el-tabs__content {
padding: 0 0 20px 0;
}
::v-deep .el-select {
width: 100%;
}
</style>

@ -0,0 +1,220 @@
import {detailByUserPage, deviceLogs, devicePage} from "@/api/dev/deviceInfoApi";
import {deviceChangeStatus, deviceChangeType, deviceStatus} from "@/utils/enum";
import {
deviceCheckPage,
deviceCheckPageByDept,
deviceCheckPrint,
deviceCheckPrintByDeviceCode
} from "@/api/dev/deviceCheckApi";
import {deviceCheckDetailPage, deviceCheckDetailRepair} from "@/api/dev/deviceCheckDetailApi";
import {deviceCheckDetailItemFinish, deviceCheckDetailItemPage} from "@/api/dev/deviceCheckDetailItemApi";
import {copyProperties, getLoading} from "@/utils";
let query = {
page: 1,
limit: 10,
chargeDeptCode: null,
finishFlag: null,
}
let detailQuery = {
page: 1,
limit: 10,
taskId: null,
deviceCode:null,
}
let itemQuery = {
page: 1,
limit: 10,
taskId: null,
deviceCode: null,
}
let repairData = {
taskId: null,
deviceCode: null,
description: null,
diagnosisInfo: null,
innerFlag: true,
repairUserName: null,
repairUserPhone: null,
}
export default {
name: "deptDeviceCheck",
computed: {},
data() {
return {
clickRow: null,
showSearch: true,
loading: false,
total: .0,
list: [],
query: {...query},
//设备详情=============================================
detailLoading: false,
detailQuery: {...detailQuery},
detailList: [],
detailTotal: 0,
showLog: false,
//===================================================
itemDialogFlag: false,
itemQuery: {...itemQuery},
itemList: [],
itemTotal: 0,
itemLoading: false,
checkPrintData: null,
itemRow: null,
itemRules: {
normalFlag: [{required: true, message: "请选择异常情况", trigger: ["change", "blur"]}],
suggestion: [{required: true, message: "巡检意见不能为空", trigger: ["change", "blur"]}],
},
repairRow: null,
repairRules: {
innerFlag: [{
required: true,
message: "请选择维修方式",
trigger: ["change", "blur"]
}],
repairUserName: [{
required: true,
message: "维修人姓名不能为空",
trigger: ["change", "blur"]
}],
repairUserPhone: [{
required: true,
message: "维修人电话不能为空",
trigger: ["change", "blur"]
}],
description: [{required: true, message: "问题描述不能为空", trigger: ["change", "blur"]}],
diagnosisInfo: [{required: true, message: "诊断信息不能为空", trigger: ["change", "blur"]}],
},
repairId:null,
}
},
created() {
this.getList()
},
methods: {
commitRepair(){
this.$refs.repairForm.validate(b => {
if (!b) {
return
}
let load = getLoading(this)
deviceCheckDetailRepair(this.repairRow).then(res => {
load.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.getDetailList()
this.getList()
this.repairRow = null
}).catch(() => {
load.close()
})
})
},
createRepair(row) {
let data = copyProperties(row, {...repairData});
this.repairRow = _.extend({}, row, data)
},
commitItemCheck() {
this.$refs.itemForm.validate(b => {
if (!b) {
return
}
let load = getLoading(this)
deviceCheckDetailItemFinish(this.itemRow).then(res => {
load.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.getDetailItemList()
this.getDetailList()
this.getList()
this.itemRow = null
}).catch(() => {
load.close()
})
})
},
openItem(row) {
this.itemQuery = {
...itemQuery,
taskId: row.taskId,
deviceCode: row.deviceCode,
title: `[${row.deviceCode}]--${row.productName}(${row.nameCode})`
}
this.itemDialogFlag = true
this.getDetailItemList()
},
getDetailItemList() {
this.itemLoading = true
deviceCheckDetailItemPage(this.itemQuery).then(res => {
this.itemLoading = false
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.itemList = res.data.list || []
this.itemTotal = res.data.total || 0
}).catch(e => {
this.itemLoading = false
this.itemList = []
this.itemTotal = 0
})
},
rowClick(row) {
if (this.clickRow && row.taskId == this.clickRow.taskId) {
return false
}
this.clickRow = row
this.detailQuery = {...detailQuery, taskId: row.taskId}
this.getDetailList()
},
getDetailList() {
this.detailLoading = true
deviceCheckDetailPage(this.detailQuery).then(res => {
this.detailLoading = false
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.detailList = res.data.list || []
this.detailTotal = res.data.total || 0
}).catch(e => {
this.detailLoading = false
})
},
search() {
this.query.page = 1
this.getList()
},
onReset() {
this.query = {...query}
this.getList()
},
getList() {
this.loading = true
deviceCheckPageByDept(this.query).then(res => {
this.loading = false
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.list = res.data.list || []
this.total = res.data.total || 0
}).catch(e => {
this.list = []
this.total = 0
this.loading = false
})
}
}
}

@ -0,0 +1,530 @@
import {
cancelChangeOrder,
changeOrderDetailByUser,
changeOrderPage,
confirmChangeOrder, rejectChangeOrder, saveChangeOrder
} from "@/api/dev/deviceChangeOrderApi";
import {deviceChangeStatus, deviceChangeType} from "@/utils/enum";
import "@/store/getters";
import {genDeviceCode} from "@/api/dev/deviceInfoApi";
import deviceInfo from "@/views/dev/deviceInfo.vue";
import product from "@/views/basic/product/product.vue";
import {copyProperties} from "@/utils";
let query = {
page: 1,
limit: 10,
changeOrderId: null,
remark: null,
deptCode: null,
toDeptCode: null,
}
let detailQuery = {
page: 1,
limit: 10,
orderId: null,
type: null,
}
let createData = {
type: deviceChangeType.CHANGE.key,
toDeptCode: null,
name: null,
remark: null,
items: []
}
let item = {
deviceCode: null,
productId: null,
udi: null,
batchNo: null,
serialNo: null,
productionDate: null,
expireDate: null,
nameCode: null,
productName: null,
zczbhhzbapzbh: null,
measname: null,
ggxh: null,
supName: null,
manufactory: null,
editFlag: true,
}
export default {
name: "deviceChangeOrder",
props: {
type: {
required: true,
}
},
components: {deviceInfo, product},
computed: {
deviceChangeStatus() {
return deviceChangeStatus
},
deviceChangeType() {
return deviceChangeType
}
},
data() {
return {
cacheKey: null,
hasOrderCache: false,
locDeptCode: null,
locDeptName: null,
clickRow: null,
showSearch: true,
loading: false,
query: {...query},
list: [],
total: 0,
// =======详情========================================
stepActive: null,
processStatus: "success",
detailLoading: false,
detailQuery: {...detailQuery},
detailList: [],
detailTotal: 0,
//========================================
//创建变更单============================================
fullScreenFlag: false,
createActive: 0,
showCreateDialog: false,
oldType: null,
createData: {...createData},
itemMap: new Map(),
itemList: [],
createRule: {
toDeptCode: [{
required: true,
validator: this.validToDeptCode,
tigger: 'change',
message: "目标部门不能为空"
}],
},
chooseDeviceFlag: false,
chooseProductFlag: false,
//==================================================
}
},
created() {
let adminId = this.$store.getters.adminId
this.cacheKey = "deviceChangeOrder" + this.type.key + adminId
this.locDeptCode = this.$store.getters.locDeptCode
this.locDeptName = this.$store.getters.locDeptName
this.getList()
},
watch: {
"createData.type": {
handler(v, o) {
if (o) {
this.oldType = o
}
}
},
itemList(v, o) {
this.parseItemMap()
}
},
updated() {
let data = window.localStorage.getItem(this.cacheKey)
if (data == null) {
this.hasOrderCache = false
} else {
this.hasOrderCache = true
}
},
methods: {
saveCache() {
let data = window.localStorage.getItem(this.cacheKey)
if (data == null) {
data = {
createActive: this.createActive,
createData: this.createData,
itemList: this.itemList
}
window.localStorage.setItem(this.cacheKey, JSON.stringify(data))
this.showCreateDialog = false
} else {
this.$confirm("检测到已经挂起了一单,如继续挂起将会覆盖之前的单,是否继续", "提示", {
confirmButtonText: "继续",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
data = {
createActive: this.createActive,
createData: this.createData,
itemList: this.itemList
}
window.localStorage.setItem(this.cacheKey, JSON.stringify(data))
this.showCreateDialog = false
})
}
},
saveForm() {
if (this.itemList.length == 0) {
this.$confirm(`请添加数据`, "提示", {
confirmButtonText: "确定",
type: "error",
})
return
}
if (this.createData.type == deviceChangeType.ADD.key) {
let index = this.itemList.findIndex(i => !i.deviceCode || !i.productId);
if (index != -1) {
this.$confirm(`请检查第${index + 1}行的数据(是否有选择产品/是否有生成设备号)`, "提示", {
confirmButtonText: "确定",
type: "error",
})
return
}
} else {
let index = this.itemList.findIndex(i => !i.deviceCode && !i.productId);
if (index != -1) {
this.$confirm(`请先移除空行,第${index + 1}`, "提示", {
confirmButtonText: "确定",
type: "error",
})
return
}
}
this.createData.items = this.itemList
let loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
saveChangeOrder(this.createData).then(res => {
loading.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.showCreateDialog = false
this.query = {...query}
this.getList()
}).catch(() => {
loading.close()
})
},
delDeviceRow(index) {
this.itemList.splice(index, 1)
},
copyRow(index) {
let data = {
...this.itemList[index],
editFlag: true,
batchNo: null,
serialNo: null,
productionDate: null,
expireDate: null,
udi: null
}
this.genCode(data)
this.itemList.splice(index, 0, data)
},
batchCopyRow(index) {
this.$prompt('请输入复制数量', '提示', {
closeOnClickModal: false,
confirmButtonText: '确定',
cancelButtonText: '取消',
inputType: Number,
inputPlaceholder: '请输入复制数量',
inputValidator: this.validNum,
}).then(({value}) => {
let loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
for (let i = 0; i < value; i++) {
let data = {
...this.itemList[index],
editFlag: true,
batchNo: null,
serialNo: null,
productionDate: null,
expireDate: null,
udi: null
}
this.genCode(data)
this.itemList.splice(index + i, 0, data)
}
loading.close()
}).catch(() => {
});
},
addDeviceRow() {
if (this.createData.type == deviceChangeType.ADD.key) {
let loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
genDeviceCode().then(res => {
loading.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
let row = {...item, deviceCode: res.data}
this.itemList.push(row);
}).catch(e => {
loading.close()
})
} else {
let row = {...item}
this.itemList.push(row);
}
},
genCode(row) {
let loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
genDeviceCode().then(res => {
loading.close()
if (res.code != 20000) {
this.$message.error(res.message)
return
}
row.deviceCode = res.data
}).catch(e => {
loading.close()
})
},
openChoose(index) {
if (this.createData.type == deviceChangeType.ADD.key) {
this.chooseProductFlag = true
} else {
this.chooseDeviceFlag = true
}
},
chooseDevice(row) {
let data = copyProperties(row, item)
let i = this.itemList.findIndex(i => i.deviceCode == data.deviceCode)
if (i != -1) {
this.$message.error("该设备已被选入,无法再次选择")
return
}
this.itemList.push(data)
this.chooseDeviceFlag = false
},
validNum(v) {
let number = Number.parseInt(v);
if (Number.isNaN(number)) {
return "请输入大于0的数字最大为100"
}
if (number <= 0 || number > 100) {
return "请输入大于0的数字最大为100"
}
return true
},
chooseProduct(row) {
let loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
let data = copyProperties(row, item)
data.editFlag = true
this.genCode(data)
data.productName = row.cpmctymc
data.productId = row.id
this.itemList.push(data)
loading.close()
this.chooseProductFlag = false
},
parseItemMap() {
this.$nextTick(() => {
if (this.itemList) {
this.itemMap = this.itemList.reduce((accumulator, v) => {
let key = `${v.productName}(${v.nameCode})`
let count = accumulator.get(key)
if (count == null) {
accumulator.set(key, 1);
} else {
accumulator.set(key, count + 1);
}
return accumulator;
}, new Map());
} else {
this.itemMap = new Map()
}
})
},
changeType(v) {
if (this.itemList && this.itemList.length > 0) {
this.$confirm("切换类型后已经选入的设备将会被清空,是否继续?", "提示", {
confirmButtonText: "继续",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.itemList = []
}).catch(() => {
this.createData.type = this.oldType
});
}
},
changeActive(isNext) {
if (isNext) {
this.$refs.createForm.validate(flag => {
if (flag) {
this.createActive = 1
}
})
} else {
this.createActive = 0
}
},
validToDeptCode(rule, value, callback) {
if (this.createData.type == deviceChangeType.CHANGE.key && !value) {
callback(new Error("目标部门不能为空"))
}
callback()
},
openCacheOrder() {
let data = window.localStorage.getItem(this.cacheKey)
if (data != null) {
data = JSON.parse(data)
this.fullScreenFlag = false
this.createData = {...data.createData}
this.createActive = data.createActive
this.itemList = data.itemList
this.oldType = null
this.showCreateDialog = true
window.localStorage.removeItem(this.cacheKey)
}
},
openCreate() {
this.fullScreenFlag = false
this.createData = {...createData, type: this.type.key}
this.createActive = 0
this.oldType = null
this.itemList = []
this.showCreateDialog = true
},
confirm(row) {
this.$prompt('请输入备注信息', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({value}) => {
confirmChangeOrder(row.orderId, {remark: value}).then(res => {
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.query.page = 1
this.getList()
this.clickRow = null
})
})
},
reject(row) {
this.$prompt('请输入备注信息', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({value}) => {
rejectChangeOrder(row.orderId, {remark: value}).then(res => {
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.query.page = 1
this.getList()
this.clickRow = null
})
})
},
cancel(row) {
this.$prompt('请输入备注信息', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({value}) => {
cancelChangeOrder(row.orderId, {remark: value}).then(res => {
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.$message.success(res.message)
this.query.page = 1
this.getList()
this.clickRow = null
})
})
},
rowClick(row) {
if (this.clickRow && row.orderId == this.clickRow.orderId) {
return false
}
this.processStatus = "finish"
if (row.status == deviceChangeStatus.WAIT_CONFIRM.key) {
this.stepActive = 0
} else {
this.stepActive = 1
if (row.status == deviceChangeStatus.FINISH.key) {
this.processStatus = "success"
}
if (row.status == deviceChangeStatus.REJECT_CONFIRM.key) {
this.processStatus = "error"
}
if (row.status == deviceChangeStatus.CANCEL.key) {
this.processStatus = "error"
}
}
this.clickRow = row
this.detailQuery = {...detailQuery, orderId: row.orderId, type: row.type}
this.getDetailList()
},
getDetailList() {
this.detailLoading = true
changeOrderDetailByUser(this.detailQuery).then(res => {
this.detailLoading = false
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.detailList = res.data.list || []
this.detailTotal = res.data.total || 0
}).catch(e => {
this.detailLoading = false
})
},
search() {
this.query.page = 1
this.getList()
},
onReset() {
this.query = {...query}
this.getList()
},
getList() {
this.query.type = this.type.key
this.loading = true
changeOrderPage(this.query).then(res => {
this.loading = false
if (res.code != 20000) {
this.$message.error(res.message)
return
}
this.list = res.data.list || []
this.total = res.data.total || 0
}).catch(e => {
this.loading = false
})
}
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save