You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2023 lines
65 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="仪器类型" prop="model">
<el-select
v-model="queryParams.type"
@keyup.enter.native="handleQuery"
style="width: 50%"
>
<el-option label="全部" :value="null"></el-option>
<el-option label="非IOT仪器" :value="1"></el-option>
<el-option label="IOT仪器" :value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="仪器名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入仪器名称进行搜索"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="仪器ID" prop="id">
<el-input
v-model="queryParams.id"
placeholder="请输入仪器ID进行搜索"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索
</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置
</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:instrument:add']"
>新增
</el-button>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="instrumentList"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
fixed="left"
width="55"
align="center"
/>
<el-table-column label="升序排序" align="center" prop="sortNo"/>
<el-table-column label="仪器ID" align="center" prop="id"/>
<el-table-column label="仪器类型" align="center" prop="type">
<template slot-scope="scope">
<span v-show="scope.row.type == 1">普通仪器</span>
<span v-show="scope.row.type == 2">iot仪器</span>
</template>
</el-table-column>
<el-table-column
label="仪器封面"
align="center"
prop="banner"
width="150px"
>
<template slot-scope="scope">
<el-avatar
shape="square"
:size="100"
:src="scope.row.banner"
></el-avatar>
</template>
</el-table-column>
<el-table-column
label="仪器LOGO"
align="center"
prop="logo"
width="150px"
>
<template slot-scope="scope">
<el-avatar
shape="square"
:size="100"
:src="scope.row.logo"
></el-avatar>
</template>
</el-table-column>
<el-table-column
label="仪器名称"
align="center"
prop="name"
width="150px"
/>
<el-table-column label="仪器型号" align="center" prop="model"/>
<el-table-column label="保修日期" align="center" prop="guarantee">
<template slot-scope="scope">
<span v-show="scope.row.guarantee != null"
>{{ scope.row.guarantee }}年</span
>
</template>
</el-table-column>
<el-table-column
label="小程序标签"
align="center"
prop="miniTagNames"
width="150px"
>
<template slot-scope="scope">
<el-tag v-for="item in getSplitList(scope.row.miniTagNames)" :key="item">
{{ item }}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="企微标签"
align="center"
prop="wecomTagNames"
width="150px"
>
<template slot-scope="scope">
<el-tag v-for="item in getSplitList(scope.row.wecomTagNames)" :key="item">
{{ item }}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="日常打卡奖励"
align="center"
prop="dailyClockCredit"
/>
<el-table-column
label="额外打卡奖励"
align="center"
prop="extraClockCredit"
/>
<el-table-column
label="操作"
align="center"
width="200px"
fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:instrument:edit']">编辑
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="editMiniProgramTags(scope.row)">
设置小程序可见标签
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="editWecomTags(scope.row)">设置企微可见标签
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="editInstrumentNameVisible(scope.row)">
正品控名称配置
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="editInstrumentInstructionVisible(scope.row)">
配置说明书
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:instrument:remove']" v-if="scope.row.status == 0">隐藏
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:instrument:remove']" v-if="scope.row.status == 1">解除隐藏
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改仪器列对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="180px">
<el-form-item label="排序" prop="sortNo">
<el-input-number
v-model="form.sortNo"
controls-position="right"
:min="0"
:precision="0"
placeholder="请输入排序:值越大,排序越前"
></el-input-number>
</el-form-item>
<el-form-item label="仪器封面" prop="banner" width="150px">
<template>
<!-- 仪器封面 -->
<el-upload
:action="uploadUrl"
:headers="headers"
:file-list="bannerFile.fileList"
list-type="picture-card"
accept=".jpg,.png"
:limit="1"
:class="{ hide: bannerFile.uploadHide }"
:on-change="bannerUploadChange"
:on-remove="bannerUploadRemove"
:on-success="bannerUploadSuccess"
:on-error="uploadError"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
class="el-upload-list__item-thumbnail"
:src="file.url"
alt=""
/>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="bannerPicturePreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!bannerFile.disabled"
class="el-upload-list__item-delete"
@click="bannerUploadRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div>
</el-upload>
<!-- 预览窗口 -->
<el-dialog :visible.sync="bannerFile.dialogVisible" append-to-body>
<img width="100%" :src="bannerFile.dialogImageUrl" alt=""/>
</el-dialog>
</template>
</el-form-item>
<!-- 仪器LOGO -->
<el-form-item label="仪器LOGO" prop="logo">
<template>
<el-upload
:action="uploadUrl"
:headers="headers"
:file-list="logoFile.fileList"
list-type="picture-card"
accept=".jpg,.png"
:limit="1"
:class="{ hide: logoFile.uploadHide }"
:on-change="logoUploadChange"
:on-remove="logoUploadRemove"
:on-success="logoUploadSuccess"
:on-error="uploadError"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
class="el-upload-list__item-thumbnail"
:src="file.url"
alt=""
/>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="logoPicturePreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!logoFile.disabled"
class="el-upload-list__item-delete"
@click="logoUploadRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div>
</el-upload>
<!-- 预览窗口 -->
<el-dialog :visible.sync="logoFile.dialogVisible" append-to-body>
<img width="100%" :src="logoFile.dialogImageUrl" alt=""/>
</el-dialog>
</template>
</el-form-item>
<!-- 仪器序列号 -->
<el-form-item label="仪器序列号图片" prop="serial">
<template>
<el-upload
:action="uploadUrl"
:headers="headers"
:file-list="serialFile.fileList"
list-type="picture-card"
accept=".jpg,.png"
:limit="1"
:class="{ hide: serialFile.uploadHide }"
:on-change="serialUploadChange"
:on-remove="serialUploadRemove"
:on-success="serialUploadSuccess"
:on-error="uploadError"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img
class="el-upload-list__item-thumbnail"
:src="file.url"
alt=""
/>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="serialPicturePreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!serialFile.disabled"
class="el-upload-list__item-delete"
@click="serialUploadRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div>
</el-upload>
<!-- 预览窗口 -->
<el-dialog :visible.sync="serialFile.dialogVisible" append-to-body>
<img width="100%" :src="serialFile.dialogImageUrl" alt=""/>
</el-dialog>
</template>
</el-form-item>
<el-form-item label="手写绑定介绍视频/图片" prop="manualCodeBinding">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="manualUploadExceed"
:on-success="manualUploadSuccess"
:on-error="uploadError"
:file-list="manualFile.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
只能上传一个文件且视频不超过10M图片不超过1M
</div>
</el-upload>
</el-form-item>
<el-form-item label="扫码绑定介绍图片" prop="scanCodeBinding">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="scanUploadExceed"
:on-success="scanUploadSuccess"
:on-error="uploadError"
:file-list="scanFile.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
只能上传一个文件且视频不超过10M图片不超过1M
</div>
</el-upload>
</el-form-item>
<el-form-item label="仪器名称" prop="name">
<el-input v-model="form.name" placeholder="请输入仪器名称"/>
</el-form-item>
<el-form-item label="保修日期" prop="guarantee">
<el-input-number
:min="0"
:precision="0"
v-model="form.guarantee"
></el-input-number>
</el-form-item>
<el-form-item label="日常打卡获得积分" prop="dailyClockCredit">
<el-input-number
:min="0"
:precision="0"
v-model="form.dailyClockCredit"
></el-input-number>
</el-form-item>
<el-form-item label="开启额外打卡奖励" prop="dailyClockCredit">
<el-switch
v-model="form.isExtraClock"
:active-value="1"
:inactive-value="0"
active-color="#13ce66"
inactive-color="#DCDCDC"
@change="isExtraClockChange"
>
</el-switch>
</el-form-item>
<el-form-item
v-if="form.isExtraClock == 1"
label="额外打卡奖励积分"
prop="extraClockCredit"
>
<el-input-number
:min="0"
:precision="0"
v-model="form.extraClockCredit"
></el-input-number>
</el-form-item>
<el-form-item
v-if="form.isExtraClock == 1"
label="额外打卡时间"
prop="extraClockTimeRange"
>
<el-date-picker
v-model="form.extraClockTimeRange"
clearable
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="仪器绑定积分" prop="bindingCredit">
<el-input-number :min="0" :precision="0" v-model="form.bindingCredit"/>
</el-form-item>
<el-form-item label="仪器类型" prop="type">
<el-select
v-model="form.type"
style="width: 50%"
@change="typeChange"
>
<el-option label="非IOT仪器" :value="1"></el-option>
<el-option label="IOT仪器" :value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form.type == 2" label="仪器型号" prop="model">
<el-select v-model="form.model" style="width: 50%">
<el-option label="FR200" value="FR200"></el-option>
<el-option label="WL200" value="WL200"></el-option>
<el-option label="FR380" value="FR380"></el-option>
<el-option label="FR390" value="FR390"></el-option>
<el-option label="M01" value="M01"></el-option>
</el-select>
</el-form-item>
<el-form-item label="模式" prop="modeIdsValue">
<template>
<el-select v-model="form.modeIdsValue" multiple placeholder="请选择模式" @change="modeIdsValueChang">
<el-option
v-for="item in this.mode.modeIdsOptions"
:key="item.id"
:label="item.modeName"
:value="item.id">
</el-option>
</el-select>
<el-button v-if="form.modeIdsValue!=undefined && form.modeIdsValue!=null && form.modeIdsValue.length > 1"
@click="openModeIdDialog()" size="small" type="primary">排序
</el-button>
</template>
</el-form-item>
<el-form-item label="带new标识模式" prop="newModeIdList">
<template>
<el-select v-model="form.newModeIdList" multiple placeholder="请选择带new标识模式">
<el-option
v-for="item in newModeOptionList"
:key="item.id"
:label="item.modeName"
:value="item.id">
</el-option>
</el-select>
</template>
</el-form-item>
<el-form-item label="生成护理记录最短时间" prop="nursingTime">
<el-time-picker
v-model="form.nursingTime"
value-format="HH:mm:ss"
placeholder="请选择护理时长"
>
</el-time-picker>
</el-form-item>
<el-form-item label="iot版本" prop="iotVersion">
<el-input v-model="form.iotVersion" placeholder="请输入iot版本"/>
</el-form-item>
<el-form-item label="iot升级数据文件" prop="iotUpgradeData">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="iotUpgradeUploadExceed"
:on-success="iotUpgradeUploadSuccess"
:on-error="uploadError"
:file-list="iotUpgradeFile.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传一个文件</div>
</el-upload>
</el-form-item>
<el-form-item label="扫机身码" prop="isScanCode">
<el-switch
v-model="form.isScanCode"
:active-value="1"
:inactive-value="0"
active-color="#13ce66"
inactive-color="#DCDCDC"
>
</el-switch>
</el-form-item>
<el-form-item label="是否支持购买" prop="isPurchase">
<el-select
v-model="form.isPurchase"
style="width: 50%"
@change="isPurchaseChang"
>
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="form.isPurchase == 1"
label="商城小程序appid"
prop="shoppingAppid"
>
<el-input
v-model="form.shoppingAppid"
placeholder="请输入商城小程序appid"
/>
</el-form-item>
<el-form-item
v-if="form.isPurchase == 1"
label="商城小程序path"
prop="shoppingPath"
>
<el-input
v-model="form.shoppingPath"
placeholder="请输入商城小程序path"
/>
</el-form-item>
<el-form-item label="初次护理弹窗">
<el-button size="small" type="primary" @click="addNurse()"
>添加规则
</el-button
>
<input
ref="nurseFile"
id="nurseFile"
type="file"
name="file"
accept=".png,.jpg,.jpeg,.gif,.mpeg,.mp4,.avi,.mov,.wmv"
@change="nurseFileChange($event)"
/>
<el-table
v-if="nurseList.length"
:data="nurseList"
border
style="width: 100%"
v-loading="loading"
>
<el-table-column label="弹窗提示图片或视频" width="140">
<template slot-scope="scope">
<template v-if="!scope.row.file">
<el-button
size="small"
type="primary"
@click="addNurseFile(scope.$index)"
>上传文件
</el-button
>
</template>
<template v-else>
<template v-if="scope.row.fileType === 'image'">
<ImagePreview :src="scope.row.file"/>
</template>
<template v-else>
<div style="width: 80px; height: 80px">
<video
style="width: 100%; height: 100%"
:src="scope.row.file"
></video>
</div>
</template>
</template>
</template>
</el-table-column>
<el-table-column prop="message" label="规则提示内容">
<template slot-scope="scope">
<el-input
placeholder="请输入"
v-model="scope.row.message"
clearable
></el-input>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="80">
<template slot-scope="scope">
<el-popconfirm
@confirm="handleNurseDelete(scope)"
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定删除吗?"
>
<el-button slot="reference" type="text" size="small"
>删除
</el-button
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="仪器介绍">
<el-button size="small" type="primary" @click="addIntroduce()"
>添加介绍
</el-button
>
<input
ref="introduceFile"
id="introduceFile"
type="file"
name="file"
accept=".png,.jpg,.jpeg,.gif,.mpeg,.mp4,.avi,.mov,.wmv"
@change="introduceFileChange($event)"
/>
<el-table
v-if="introduceList.length"
:data="introduceList"
border
style="width: 100%"
v-loading="loading"
>
<el-table-column label="弹窗提示图片或视频" width="140">
<template slot-scope="scope">
<template v-if="!scope.row.file">
<el-button
size="small"
type="primary"
@click="addIntroduceFile(scope.$index)"
>上传文件
</el-button
>
</template>
<template v-else>
<template v-if="scope.row.fileType === 'image'">
<ImagePreview :src="scope.row.file"/>
</template>
<template v-else>
<div style="width: 80px; height: 80px">
<video
style="width: 100%; height: 100%"
:src="scope.row.file"
></video>
</div>
</template>
</template>
</template>
</el-table-column>
<el-table-column prop="message" label="规则提示内容">
<template slot-scope="scope">
<el-input
placeholder="请输入"
v-model="scope.row.message"
clearable
></el-input>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="80">
<template slot-scope="scope">
<el-popconfirm
@confirm="handleIntroduceDelete(scope)"
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定删除吗?"
>
<el-button slot="reference" type="text" size="small"
>删除
</el-button
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="蓝牙连接中图片" prop="bluetoothConnecting">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="bluetoothConnectUploadExceed"
:on-success="bluetoothConnectUploadSuccess"
:on-error="uploadError"
:file-list="bluetoothConnectFile.fileList"
accept=".png,.jpg,.jpeg,.gif,.mpeg,.mp4,.avi,.mov,.wmv"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传一个文件</div>
</el-upload>
</el-form-item>
<el-form-item label="蓝牙连接中标题" prop="bluetoothConnectingTitle">
<el-input v-model="form.bluetoothConnectingTitle" placeholder="请输入蓝牙连接中标题"/>
</el-form-item>
<el-form-item label="蓝牙连接中文案" prop="bluetoothConnectingContent">
<el-input v-model="form.bluetoothConnectingContent" placeholder="请输入蓝牙连接中文案"/>
</el-form-item>
<el-form-item label="蓝牙连接失败图片" prop="bluetoothConnectFail">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="bluetoothFailUploadExceed"
:on-success="bluetoothFailUploadSuccess"
:on-error="uploadError"
:file-list="bluetoothConnectFailFile.fileList"
accept=".png,.jpg,.jpeg,.gif,.mpeg,.mp4,.avi,.mov,.wmv"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传一个文件</div>
</el-upload>
</el-form-item>
<el-form-item label="蓝牙连接失败标题" prop="bluetoothConnectFailTitle">
<el-input v-model="form.bluetoothConnectFailTitle" placeholder="请输入蓝牙连接失败标题"/>
</el-form-item>
<el-form-item label="蓝牙连接失败文案" prop="bluetoothConnectFailContent">
<el-input v-model="form.bluetoothConnectFailContent" placeholder="请输入蓝牙连接失败文案"/>
</el-form-item>
<el-form-item label="蓝牙断开连接图片" prop="bluetoothClosed">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="bluetoothClosedUploadExceed"
:on-success="bluetoothClosedUploadSuccess"
:on-error="uploadError"
:file-list="bluetoothClosedFile.fileList"
accept=".png,.jpg,.jpeg,.gif,.mpeg,.mp4,.avi,.mov,.wmv"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传一个文件</div>
</el-upload>
</el-form-item>
<el-form-item label="蓝牙断开连接标题" prop="bluetoothClosedTitle">
<el-input v-model="form.bluetoothClosedTitle" placeholder="请输入蓝牙断开连接标题"/>
</el-form-item>
<el-form-item label="蓝牙断开连接文案" prop="bluetoothClosedContent">
<el-input v-model="form.bluetoothClosedContent" placeholder="请输入蓝牙断开连接文案"/>
</el-form-item>
<el-form-item label="iot版本升级说明" prop="iotVersionUpgrade">
<editor
v-model="form.iotVersionUpgrade"
placeholder="请输入内容"
:min-height="192"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 编辑小程序可见标签 -->
<el-dialog
title="编辑小程序可见标签"
:visible.sync="miniProgramTag.visible"
width="50%"
>
<el-form ref="miniProgramTag" :model="miniProgramTag" label-width="150px">
<el-row>
<el-col :span="100">
<el-form-item
label="小程序标签"
prop="selectTagList"
label-width="100px"
>
<treeselect
v-model="miniProgramTag.selectTagList"
:options="miniProgramTag.optionTree"
:multiple="true"
:show-count="true"
placeholder="请选择小程序标签"
:disable-branch-nodes="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="miniProgramTag.visible = false">取 消</el-button>
<el-button type="primary" @click="submitMiniProgramTagList"
>确 定
</el-button
>
</div>
</el-dialog>
<!-- 编辑企微可见标签 -->
<el-dialog
title="编辑企微可见标签"
:visible.sync="wecomTag.visible"
width="50%"
>
<el-form :model="wecomTag" label-width="150px">
<el-row>
<el-col :span="100">
<el-form-item
label="小程序标签"
prop="tagIdArray"
label-width="100px"
>
<treeselect
v-model="wecomTag.selectTagList"
:options="wecomTag.optionTree"
:multiple="true"
:show-count="true"
placeholder="请选择小程序标签"
:disable-branch-nodes="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="wecomTag.visible = false">重 置</el-button>
<el-button type="primary" @click="submitWecomTagList">确 定</el-button>
</div>
</el-dialog>
<el-dialog title="正品控商品名配置" :visible.sync="instrumentName.visible" width="50%">
<el-button size="mini" type="primary" icon="el-icon-add" @click="addInstrumentNameline()">新增</el-button>
<el-table :show-header="false" v-loading="loading" :data="instrumentName.nameForm">
<el-table-column type="index" width="55" align="center"/>
<el-table-column align="center" prop="productName" width="400">
<template slot-scope="scope">
<el-input placeholder="请输入正品控名称" v-model="scope.row.productName" clearable/>
</template>
</el-table-column>
<el-table-column>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-save" @click="saveInstrumentName(scope.row)">保存
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="delInstrumentName(scope)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
<el-dialog title="产品说明书配置" :visible.sync="instrumentInstructions.visible" width="50%">
<el-button size="mini" type="primary" icon="el-icon-add" @click="addInstrumentInstructionLine()">添加说明书
</el-button>
<el-table v-loading="loading" :data="instrumentInstructions.instructionList">
<el-table-column align="center" prop="name" width="200" label="说明书类型">
<template slot-scope="scope">
<el-input placeholder="请输入说明书类型" v-model="scope.row.name" clearable/>
</template>
</el-table-column>
<el-table-column align="center" prop="link" width="250" label="说明书(每个类型只能上传一个说明书)">
<!-- scope.row.link -->
<template slot-scope="scope">
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:limit="1"
:on-exceed="instructionUploadExceed"
:on-success="(response, file, fileList) => {
return instructionUploadSuccess(response, file, fileList, scope.$index);
}"
:on-error="uploadError"
:file-list="scope.row.fileList"
accept=".pdf,.PDF"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-save" @click="viewInstrumentInstruction(scope.row)">查看
</el-button>
<el-button size="mini" type="text" icon="el-icon-save" @click="saveInstrumentInstruction(scope.row)">保存
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="delInstrumentInstruction(scope)">删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
<el-dialog title="排序" :visible.sync="mode.modeSortVisible" width="50%" :close-on-click-modal="false"
:before-close="handleCloseMode">
<div>
<draggable v-model="mode.modeIdsValueTemp" draggable=".itemTag">
<template v-for="element in this.mode.modeIdsValueTemp">
<el-tag :key="element.id" class="itemTag"> {{ element.modeName }}</el-tag>
</template>
</draggable>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleCloseMode">取 消</el-button>
<el-button type="primary" @click="handleSaveMode"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {
listInstrument,
getInstrument,
delInstrument,
addInstrument,
updateInstrument,
getMiniProgramTagTree,
getWecomTagTree,
listRelate,
delRelate,
updateRelate,
addRelate,
listInstructions,
delInstructions,
addInstructions,
updateInstructions, listAllMode,
} from '@/api/system/instrument'
import {getToken} from '@/utils/auth'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {upload} from "@/api/upload";
import draggable from 'vuedraggable'
export default {
name: 'Instrument',
components: {Treeselect, draggable},
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 仪器列表格数据
instrumentList: [],
// 弹出层标题
title: '',
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
name: null,
type: null,
},
/* 文件上传地址 */
uploadUrl: process.env.VUE_APP_BASE_API + '/file/upload',
headers: {
Authorization: 'Bearer ' + getToken(),
},
/* 仪器封面 */
bannerFile: {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
},
/* 仪器logo */
logoFile: {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
},
/* 序列号图片 */
serialFile: {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
},
/* 手写绑定介绍视频/图片 */
manualFile: {
uploadHide: false,
fileList: [],
},
/* 扫码绑定介绍视频/图片 */
scanFile: {
uploadHide: false,
fileList: [],
},
/* iot升级数据文件 */
iotUpgradeFile: {
uploadHide: false,
fileList: [],
},
/* 蓝牙连接文件 */
bluetoothConnectFile: {
uploadHide: false,
fileList: [],
},
/* 蓝牙断开连接文件 */
bluetoothConnectFailFile: {
uploadHide: false,
fileList: [],
},
/* 蓝牙断开连接文件 */
bluetoothClosedFile: {
uploadHide: false,
fileList: [],
},
/* 小程序可见标签 */
miniProgramTag: {
userId: null,
selectTagList: null,
visible: false,
optionTree: [],
},
/* 企微可见标签 */
wecomTag: {
userId: null,
selectTagList: null,
visible: false,
optionTree: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
sortNo: [{required: true, message: '排序不能为空', trigger: 'blur'}],
banner: [{required: true, message: '仪器封面不能为空'}],
logo: [{required: true, message: '仪器logo不能为空'}],
serial: [{required: true, message: '序列号图片不能为空'}],
name: [
{required: true, message: '仪器名称不能为空', trigger: 'blur'},
],
guarantee: [
{required: true, message: '请选择保修日期', trigger: 'blur'},
],
dailyClockCredit: [
{
required: true,
message: '日常打卡奖励积分不能为空',
trigger: 'blur',
},
],
isExtraClock: [
{required: true, message: '请选择是否开启额外打卡奖励'},
],
bindingCredit: [
{
required: true,
message: '仪器绑定奖励积分',
trigger: 'blur',
},
],
extraClockCredit: [
{
required: true,
message: '额外打卡奖励积分不能为空',
trigger: 'blur',
},
],
extraClockTimeRange: [
{
required: true,
message: '额外打卡时间段不能为空',
trigger: 'blur',
},
],
type: [
{required: true, message: '仪器类型不能为空', trigger: 'change'},
],
model: [
{required: true, message: '仪器型号不能为空', trigger: 'change'},
],
modeIdsValue: [
{required: true, message: '仪器模式不能为空', trigger: 'change'},
],
nursingTime: [
{
required: true,
message: '生成护理记录最短时长不能为空',
trigger: 'change',
},
],
isPurchase: [{required: true, message: '是否支持购买'}],
shoppingAppid: [
{required: true, message: '购买商城APPID不能为空', trigger: 'blur'},
],
shoppingPath: [
{required: true, message: '购买商城PATH不能为空', trigger: 'blur'},
],
},
/** 初次护理规则 */
imageFileType: ['png', 'jpg', 'jpeg', 'gif'],
nurseIndex: 0,
nurseList: [
{
file: '',
fileType: '',
message: '',
},
],
/** 仪器介绍规则 */
introduceIndex: 0,
introduceList: [
{
file: '',
fileType: '',
message: '',
},
],
/* 正品控商品名 */
instrumentName: {
visible: false,
instrumentId: null,
nameForm: []
},
// 预览弹窗
previewSrc: '', // 预览地址
isPreviewVideo: true, // 预览开关
/* 仪器说明书 */
instrumentInstructions: {
visible: false,
instrumentId: null,
instructionList: [{
id: null,
fileList: [],
instrumentId: null,
name: null,
link: null,
}]
},
/* 模式 */
mode: {
modeSortVisible: false,
modeIdsValueTemp: [],
modeIdsOptions: [],
sortMode: [],
},
newModeOptionList: [],
}
},
created() {
this.getList()
},
methods: {
/** 查询仪器列列表 */
getList() {
this.loading = true
listInstrument(this.queryParams).then((response) => {
this.instrumentList = response.rows
this.total = response.total
this.loading = false
})
},
// 取消按钮
cancel() {
this.open = false
this.reset()
},
// 表单重置
reset() {
this.nurseIndex = 0;
this.nurseList = [
{
file: '',
fileType: '',
message: '',
}
];
this.introduceIndex = 0;
this.introduceList = [
{
file: '',
fileType: '',
message: '',
},
];
this.form = {
id: null,
name: null,
type: 1,
model: 'WL200',
banner: null,
logo: null,
serial: null,
guarantee: 1,
dailyClockCredit: 0,
isExtraClock: 0,
extraClockCredit: 0,
/* 额外打卡时间范围 */
extraClockTimeRange: [],
bindingCredit: 0,
miniTagIds: null,
miniTagNames: null,
wecomTagIds: null,
wecomTagNames: null,
sceneIds: null,
sceneNames: null,
nursingTime: null,
iotVersion: null,
iotUpgradeData: null,
isScanCode: 0,
isPurchase: 0,
shoppingAppid: null,
shoppingPath: null,
bluetoothConnectingTitle: null,
bluetoothConnectingContent: null,
bluetoothConnecting: null,
bluetoothClosed: null,
bluetoothClosedTitle: null,
bluetoothClosedContent: null,
bluetoothConnectFail: null,
bluetoothConnectFailTitle: null,
bluetoothConnectFailContent: null,
iotVersionUpgrade: null,
sortNo: 1000,
status: null,
manualCodeBinding: null,
scanCodeBinding: null,
nurseList: null,
introduceList: null,
modeIdsValue: [],
newModeIdList: [],
}
/* 仪器封面 */
this.bannerFile = {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
}
/* 仪器logo */
this.logoFile = {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
}
/* 序列号图片 */
this.serialFile = {
uploadHide: false,
dialogImageUrl: '',
dialogVisible: false,
disabled: false,
fileList: [],
}
/* 手写绑定介绍视频/图片 */
this.manualFile = {
uploadHide: false,
fileList: [],
}
/* 扫码绑定介绍视频/图片 */
this.scanFile = {
uploadHide: false,
fileList: [],
}
/* iot升级数据文件 */
this.iotUpgradeFile = {
uploadHide: false,
fileList: [],
}
/* 蓝牙连接文件 */
this.bluetoothConnectFile = {
uploadHide: false,
fileList: [],
}
/* 蓝牙连接失败文件 */
this.bluetoothConnectFailFile = {
uploadHide: false,
fileList: [],
}
/* 蓝牙断开连接文件 */
this.bluetoothClosedFile = {
uploadHide: false,
fileList: [],
}
/* 模式 */
this.mode = {
modeSortVisible: false,
modeIdsValueTemp: [],
modeIdsOptions: [],
sortMode: [],
};
this.newModeOptionList = [];
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
id: null,
name: null,
type: null,
};
this.resetForm('queryForm')
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = '添加仪器列'
/* 所有模式选项 */
this.mode.modeIdsOptions = [];
listAllMode().then((response) => {
if (response.code != 200) {
this.$message.error('模式获取失败')
}
this.mode.modeIdsOptions = response.data
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const id = row.id || this.ids
getInstrument(id).then((response) => {
this.form = response.data
// 仪器封面回显
this.bannerFile = {
uploadHide: true,
dialogImageUrl: this.form.banner,
dialogVisible: false,
disabled: false,
fileList: [{name: '', url: this.form.banner}],
}
/* 仪器logo */
this.logoFile = {
uploadHide: true,
dialogImageUrl: this.form.logo,
dialogVisible: false,
disabled: false,
fileList: [{name: '', url: this.form.logo}],
}
/* 序列号图片 */
this.serialFile = {
uploadHide: true,
dialogImageUrl: this.form.serial,
dialogVisible: false,
disabled: false,
fileList: [{name: '', url: this.form.serial}],
}
/* 手写绑定介绍视频/图片 */
if (this.form.manualCodeBinding != null) {
this.manualFile = {
uploadHide: true,
fileList: [
{name: '手写绑定介绍视频/图片', url: this.form.manualCodeBinding},
],
}
}
/* 扫码绑定介绍视频/图片 */
if (this.form.scanCodeBinding != null) {
this.scanFile = {
uploadHide: true,
fileList: [
{name: '扫码绑定介绍视频/图片', url: this.form.scanCodeBinding},
],
}
}
/* iot升级数据文件 */
if (this.form.iotUpgradeData != null) {
this.iotUpgradeFile = {
uploadHide: true,
fileList: [
{name: 'iot升级数据文件', url: this.form.iotUpgradeData},
],
}
}
/* 蓝牙连接文件 */
if (this.form.bluetoothConnecting != null) {
this.bluetoothConnectFile = {
uploadHide: true,
fileList: [
{name: '蓝牙连接文件', url: this.form.bluetoothConnecting},
],
}
}
/* 蓝牙连接失败文件 */
if (this.form.bluetoothConnectFail != null) {
this.bluetoothConnectFailFile = {
uploadHide: true,
fileList: [
{name: '蓝牙连接失败文件', url: this.form.bluetoothConnectFail},
],
}
}
/* 蓝牙断开连接文件 */
if (this.form.bluetoothClosed != null) {
this.bluetoothClosedFile = {
uploadHide: false,
fileList: [
{name: '蓝牙断开连接文件', url: this.form.bluetoothClosed},
],
}
}
// 额外打卡时间
if (this.form.isExtraClock == 1) {
this.form.extraClockTimeRange = response.data.extraClockTimeRange;
}
this.open = true
this.title = '修改仪器列'
/* 首次护理管理视频 */
if (response.data.nurseList != null) {
this.nurseIndex = response.data.nurseList.length;
this.nurseList = response.data.nurseList;
}
/* 仪器介绍视频 */
if (response.data.introduceList != null) {
this.introduceIndex = response.data.introduceList.length;
this.introduceList = response.data.introduceList;
}
/* 所有模式选项 */
this.mode.modeIdsOptions = [];
listAllMode().then((response) => {
if (response.code != 200) {
this.$message.error('模式获取失败')
}
this.mode.modeIdsOptions = response.data;
/* 带new标识选项回显 */
if (this.form.modeIdsValue != null && this.form.modeIdsValue.length > 0) {
let temp = [];
for (let i = 0; i < this.form.modeIdsValue.length; i++) {
let filterModeArr = this.mode.modeIdsOptions.filter((item) => item.id == this.form.modeIdsValue[i])
temp.push(filterModeArr[0]);
}
this.newModeOptionList = temp;
}
})
})
},
/** 提交按钮 */
submitForm() {
console.log(this.form.modeIdsValue);
this.form.nurseList = this.nurseList;
this.form.introduceList = this.introduceList;
this.$refs['form'].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateInstrument(this.form).then((response) => {
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addInstrument(this.form).then((response) => {
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id
this.$modal
.confirm('是否确认隐藏仪器列编号为"' + ids + '"的数据项?')
.then(function () {
return delInstrument(ids)
})
.then(() => {
this.getList()
this.$modal.msgSuccess('操作成功');
})
.catch(() => {
})
},
/* 文件上传失败 */
uploadError() {
this.$message.error('文件上传失败')
},
/** 仪器封面操作 */
bannerPicturePreview(file) {
this.bannerFile.dialogImageUrl = file.url
this.bannerFile.dialogVisible = true
},
bannerUploadRemove(file) {
this.bannerFile.fileList = []
this.bannerFile.uploadHide = this.bannerFile.fileList.length >= 1
},
bannerUploadChange(file, fileList) {
this.bannerFile.fileList = fileList
this.bannerFile.uploadHide = this.bannerFile.fileList.length >= 1
},
bannerUploadSuccess(response, file) {
if (response.code == 200) {
this.form.banner = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/** logo 操作 */
logoPicturePreview(file) {
this.logoFile.dialogImageUrl = file.url
this.logoFile.dialogVisible = true
},
logoUploadRemove(file) {
this.logoFile.fileList = []
this.logoFile.uploadHide = this.logoFile.fileList.length >= 1
},
logoUploadChange(file, fileList) {
this.logoFile.fileList = fileList
this.logoFile.uploadHide = this.logoFile.fileList.length >= 1
},
logoUploadSuccess(response, file) {
if (response.code == 200) {
this.form.logo = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/** 序列号图片 操作 */
serialPicturePreview(file) {
this.serialFile.dialogImageUrl = file.url
this.serialFile.dialogVisible = true
},
serialUploadRemove(file) {
this.serialFile.fileList = []
this.serialFile.uploadHide = this.serialFile.fileList.length >= 1
},
serialUploadChange(file, fileList) {
this.serialFile.fileList = fileList
this.serialFile.uploadHide = this.serialFile.fileList.length >= 1
},
serialUploadSuccess(response, file) {
if (response.code == 200) {
this.form.serial = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/** 手写绑定介绍视频/图片 操作 */
manualUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
manualUploadSuccess(response, file) {
if (response.code == 200) {
this.form.manualCodeBinding = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/** 扫码绑定介绍视频/图片 操作 */
scanUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
scanUploadSuccess(response, file) {
if (response.code == 200) {
this.form.scanCodeBinding = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/* iot升级数据文件 */
iotUpgradeUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
iotUpgradeUploadSuccess(response, file) {
if (response.code == 200) {
this.form.iotUpgradeData = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/* 蓝牙连接图片 */
bluetoothConnectUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
bluetoothConnectUploadSuccess(response, file) {
if (response.code == 200) {
this.form.bluetoothConnecting = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/* 蓝牙断开连接图片 */
bluetoothFailUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
bluetoothFailUploadSuccess(response, file) {
if (response.code == 200) {
this.form.bluetoothConnectFail = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/* 蓝牙断开连接图片 */
bluetoothClosedUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
bluetoothClosedUploadSuccess(response, file) {
if (response.code == 200) {
this.form.bluetoothClosed = response.data.url
} else {
this.$message.error('图片插入失败')
}
},
/* 是否开启额外打卡奖励 */
isExtraClockChange() {
if (this.form.isExtraClock == 0) {
this.form.extraClockCredit = 0
this.form.extraClockTimeRange = []
}
},
/* 仪器类型切换 */
typeChange() {
if (this.form.type == 1) {
this.form.model = 'WL200'
}
},
/* 是否购买切换 */
isPurchaseChang() {
if (this.form.isPurchase == 0) {
this.form.shoppingAppid = null
this.form.shoppingPath = null
}
},
/* 设置小程序可见标签 */
editMiniProgramTags(row) {
// 小程序标签树
getMiniProgramTagTree().then((Response) => {
this.miniProgramTag.optionTree = Response.data
this.miniProgramTag.visible = true
if (row.miniTagIds != null && row.miniTagIds.length > 0) {
this.miniProgramTag.selectTagList = row.miniTagIds
.split(',')
.map(Number)
}
this.miniProgramTag.userId = row.id
})
},
/* 设置企微可见标签 */
editWecomTags(row) {
// 企微标签树
getWecomTagTree().then((response) => {
this.wecomTag.optionTree = response.data
this.wecomTag.visible = true
if (row.wecomTagIds != null && row.wecomTagIds.length > 0) {
this.wecomTag.selectTagList = row.wecomTagIds.split(',').map(Number)
}
this.wecomTag.userId = row.id
})
},
/* 保存小程序标签 */
submitMiniProgramTagList() {
this.form.id = this.miniProgramTag.userId
this.form.miniTagIds = this.miniProgramTag.selectTagList.join(',')
updateInstrument(this.form).then((response) => {
this.$modal.msgSuccess('修改成功')
this.miniProgramTag.visible = false
this.getList()
})
},
/* 保存企微标签 */
submitWecomTagList() {
this.form.id = this.wecomTag.userId
this.form.wecomTagIds = this.wecomTag.selectTagList.join(',')
updateInstrument(this.form).then((response) => {
this.$modal.msgSuccess('修改成功')
this.wecomTag.visible = false
this.getList()
})
},
/* 初次护理弹窗 */
addNurse() {
this.nurseList.push({
file: '',
fileType: '',
message: '',
})
},
handleNurseDelete(item) {
this.nurseList.splice(item.$index, 1)
console.log('handleNurseDelete', item)
},
addNurseFile(index) {
this.nurseIndex = index
this.$refs.nurseFile.value = ''
this.$refs.nurseFile.click()
},
async nurseFileChange(e) {
// 图片选中
let files = e.target.files
if (files.length) {
let data = await this.commonFileUpload(files[0])
console.log('data', data)
this.nurseList[this.nurseIndex].file = data.url
let type = files[0].type
let isImage = this.imageFileType.some((item) => type.includes(item))
if (isImage) {
this.nurseList[this.nurseIndex].fileType = 'image'
} else {
this.nurseList[this.nurseIndex].fileType = 'video'
}
this.nurseList = JSON.parse(JSON.stringify(this.nurseList))
}
},
/* 仪器介绍 */
addIntroduce() {
this.introduceList.push({
file: '',
fileType: '',
message: '',
})
},
handleIntroduceDelete(item) {
this.introduceList.splice(item.$index, 1)
console.log('handleIntroduceDelete', item)
},
addIntroduceFile(index) {
this.introduceIndex = index
this.$refs.introduceFile.value = ''
this.$refs.introduceFile.click()
},
async introduceFileChange(e) {
let files = e.target.files
// 图片选中
if (files.length) {
let data = await this.commonFileUpload(files[0])
this.introduceList[this.introduceIndex].file = data.url
let type = files[0].type
let isImage = this.imageFileType.some((item) => type.includes(item))
if (isImage) {
this.introduceList[this.introduceIndex].fileType = 'image'
} else {
this.introduceList[this.introduceIndex].fileType = 'video'
}
this.introduceList = JSON.parse(JSON.stringify(this.introduceList))
}
},
/* 文件上传函数 */
async commonFileUpload(file) {
this.loading = true
let formData = new FormData()
formData.append('file', file)
let res = await upload(formData)
this.loading = false
if (res.code === 200) {
return res.data
}
return false
},
getSplitList(data) {
if (data) {
return data.split(',')
}
return []
},
/* 正品控名称配置 */
addInstrumentNameline() {
this.instrumentName.nameForm.push({
id: null,
instrumentId: this.instrumentName.instrumentId,
productName: ''
})
},
editInstrumentNameVisible(row) {
this.instrumentName.instrumentId = row.id;
// 查询现有的正品控名称
listRelate({
instrumentId: row.id
}).then((response) => {
if (response.data != null && response.data.length > 0) {
this.instrumentName.nameForm = response.data;
} else {
this.instrumentName.nameForm = [{
id: null,
instrumentId: this.instrumentName.instrumentId,
productName: ''
}];
}
this.instrumentName.visible = true;
})
},
delInstrumentName(item) {
// 获取 id删除关联的正品控名称
if (item.row.id != null) {
// 执行删除
delRelate(item.row.id).then((response) => {
this.$modal.msgSuccess('删除成功');
})
}
this.instrumentName.nameForm.splice(item.$index, 1)
if (this.instrumentName.nameForm.length == 0) {
this.addInstrumentNameline()
}
},
saveInstrumentName(item) {
console.log(item)
if (item.id != null) {
updateRelate(item).then((response) => {
this.$modal.msgSuccess('修改成功');
})
} else {
addRelate(item).then((response) => {
this.$modal.msgSuccess('新增成功');
})
}
},
/* 仪器说明书 */
addInstrumentInstructionLine() {
this.instrumentInstructions.instructionList.push({
id: null,
fileList: [],
instrumentId: this.instrumentInstructions.instrumentId,
name: null,
link: null,
})
},
editInstrumentInstructionVisible(row) {
this.instrumentInstructions.instrumentId = row.id;
// 查询现有的仪器说明书
listInstructions({
instrumentId: row.id
}).then((response) => {
if (response.data != null && response.data.length > 0) {
this.instrumentInstructions.instructionList = response.data;
for (let i = 0; i < response.data.length; i++) {
this.instrumentInstructions.instructionList[i].fileList = [{
name: response.data[i].name + ".pdf",
url: response.data[i].url,
}];
}
} else {
this.instrumentInstructions.instructionList = [{
id: null,
fileList: [],
instrumentId: this.instrumentInstructions.instrumentId,
name: null,
link: null,
}];
}
this.instrumentInstructions.visible = true;
})
},
delInstrumentInstruction(item) {
// 获取 id删除关联的仪器说明书
if (item.row.id != null) {
// 执行删除
delInstructions(item.row.id).then((response) => {
this.$modal.msgSuccess('删除成功');
})
}
this.instrumentInstructions.instructionList.splice(item.$index, 1)
if (this.instrumentInstructions.instructionList.length == 0) {
this.addInstrumentInstructionLine();
}
},
saveInstrumentInstruction(item) {
if (item.instrumentId == null) {
this.$modal.msgError('参数异常');
return;
}
if (item.name == null) {
this.$modal.msgError('请输入说明书名称');
return;
}
if (item.link == null) {
this.$modal.msgError('请上传说明书');
return;
}
if (item.id != null) {
updateInstructions(item).then((response) => {
this.$modal.msgSuccess('修改成功');
})
} else {
addInstructions(item).then((response) => {
this.$modal.msgSuccess('新增成功');
})
}
},
instructionUploadExceed(files, fileList) {
this.$message.warning(`您已上传了文件,如需更换,请先删除原上传的文件`)
},
instructionUploadSuccess(response, file, fileList, index) {
if (response.code == 200) {
this.instrumentInstructions.instructionList[index].link = response.data.url;
} else {
this.$message.error('图片插入失败')
}
},
viewInstrumentInstruction(item) {
window.open(item.link, '_blank');
},
/* 模式 */
openModeIdDialog() {
this.mode.modeIdsValueTemp = [];
this.mode.sortMode = [];
if (this.form.modeIdsValue.length > 1) {
for (let i = 0; i < this.form.modeIdsValue.length; i++) {
let filterModeArr = this.mode.modeIdsOptions.filter((item) => item.id == this.form.modeIdsValue[i])
this.mode.modeIdsValueTemp.push(filterModeArr[0]);
}
this.mode.modeSortVisible = true;
}
},
handleCloseMode() {
this.mode.modeIdsValueTemp = [];
this.mode.sortMode = [];
this.mode.modeSortVisible = false;
},
handleSaveMode() {
let newSort = [];
for (let i = 0; i < this.mode.modeIdsValueTemp.length; i++) {
newSort.push(this.mode.modeIdsValueTemp[i].id)
}
this.form.modeIdsValue = newSort;
this.handleCloseMode()
},
modeIdsValueChang() {
let temp = [];
if (this.form.modeIdsValue.length > 0) {
for (let i = 0; i < this.form.modeIdsValue.length; i++) {
let filterModeArr = this.mode.modeIdsOptions.filter((item) => item.id == this.form.modeIdsValue[i])
temp.push(filterModeArr[0]);
}
}
this.newModeOptionList = temp;
},
},
}
</script>
<style lang="scss" scoped>
::v-deep .hide .el-upload--picture-card {
display: none;
}
#nurseFile,
#introduceFile {
position: absolute;
width: 1px;
height: 1px;
left: -100px;
}
video {
object-fit: fill;
}
.itemTag {
margin-top: 20px;
margin-right: 10px;
cursor: pointer;
}
</style>