|
@@ -0,0 +1,590 @@
|
|
|
|
+<template>
|
|
|
|
+ <div>
|
|
|
|
+ <ag-grid-layout
|
|
|
|
+ toolbar
|
|
|
|
+ :table-height="tableHeight"
|
|
|
|
+ theme="ag-theme-alpine"
|
|
|
|
+ :column-defs="columnDefs"
|
|
|
|
+ :row-data="rowData"
|
|
|
|
+ :locale-text="localeText"
|
|
|
|
+ :grid-options="gridOptions"
|
|
|
|
+ :default-col-def="defaultColDef"
|
|
|
|
+ :animate-rows="true"
|
|
|
|
+ :row-selection="rowSelection"
|
|
|
|
+ :framework-components="frameworkComponents"
|
|
|
|
+ @filterChanged="filterModifed"
|
|
|
|
+ @sortChanged="gridSortChange"
|
|
|
|
+ >
|
|
|
|
+ <div slot="toolbar" class="inner-toolbar">
|
|
|
|
+ <div class="toolbar-search">
|
|
|
|
+ <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="hasAdd" class="toolbar-btns">
|
|
|
|
+ <el-button type="primary" size="mini" @click="handleAdd">新增设备</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <el-pagination
|
|
|
|
+ v-if="pageData"
|
|
|
|
+ slot="pagination"
|
|
|
|
+ :current-page="pageData.page_no"
|
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
|
+ :page-size="pageData.page_size"
|
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
+ :total="pageData.data_total"
|
|
|
|
+ @size-change="handlePageSizeChange"
|
|
|
|
+ @current-change="handlePageCurrentChange"
|
|
|
|
+ />
|
|
|
|
+ </ag-grid-layout>
|
|
|
|
+
|
|
|
|
+ <!-- 设备编辑弹窗 -->
|
|
|
|
+ <el-dialog :title="deviceEditTitle" :visible.sync="deviceDialogVisible" width="60%">
|
|
|
|
+ <el-form ref="deviceEditForm" :rules="deviceRules" label-width="120px" :model="deviceModel">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="设备类型" prop="device_type">
|
|
|
|
+ <el-select v-model="deviceModel.device_type" placeholder="请选择设备类型" :disabled="deviceTypeDisabled" clearable @change="deviceTypeChange">
|
|
|
|
+ <el-option v-for="(item,index) in deviceTypeTransfer" :key="index" :label="item.key" :value="item.value" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="设备别名" prop="name">
|
|
|
|
+ <el-input v-model="deviceModel.name" clearable :maxlength="20" placeholder="请输入设备别名" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="出厂编号" prop="code">
|
|
|
|
+ <el-input v-model="deviceModel.code" clearable placeholder="请输入出厂编号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="设备型号" prop="model">
|
|
|
|
+ <el-input v-model="deviceModel.model" clearable placeholder="请输入设备型号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="有线物理地址" prop="eth_mac">
|
|
|
|
+ <el-input v-model="deviceModel.eth_mac" clearable placeholder="请输入物理MAC地址" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="有线IP地址" prop="eth_ip">
|
|
|
|
+ <el-input v-model="deviceModel.eth_ip" clearable placeholder="请输入IP地址" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="WIFI物理地址" prop="wifi_mac">
|
|
|
|
+ <el-input v-model="deviceModel.wifi_mac" clearable placeholder="请输入WIFI MAC地址" readonly />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="WIFIIP地址" prop="wifi_ip">
|
|
|
|
+ <el-input v-model="deviceModel.wifi_ip" clearable placeholder="请输入WIFI IP地址" readonly />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="软件版本" prop="soft_ver">
|
|
|
|
+ <el-input v-model="deviceModel.soft_ver" clearable placeholder="请输入软件版本号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="硬件版本" prop="hard_ver">
|
|
|
|
+ <el-input v-model="deviceModel.hard_ver" clearable placeholder="请输入硬件版本号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="WIFI热点">
|
|
|
|
+ <el-input v-model="deviceModel.wifi_hostname" :readonly="true" clearable placeholder="请输入WIFI热点名称" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="WIFI密码">
|
|
|
|
+ <el-input v-model="deviceModel.wifi_password" :readonly="true" clearable placeholder="请输入WIFI热点密码" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="设备位置">
|
|
|
|
+ <span>{{ deviceModel.full_name }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="后备设备ID">
|
|
|
|
+ <el-input v-model="deviceModel.backup_id" clearable placeholder="" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="设备优先级">
|
|
|
|
+ <el-input-number v-model="deviceModel.priority" controls-position="right" :min="1" :max="99" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="是否启用">
|
|
|
|
+ <el-checkbox v-model="deviceModel.status" :true-label="1" :false-label="0">启用设备</el-checkbox>
|
|
|
|
+ <!-- <el-radio v-model="formmodel.status" :label="1">启用</el-radio>-->
|
|
|
|
+ <!-- <el-radio v-model="formmodel.status" :label="0">不启用</el-radio>-->
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row v-if="hasRoleId">
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="适用角色" prop="role_id">
|
|
|
|
+ <el-select v-model="deviceModel.role_id" placeholder="适用角色" clearable>
|
|
|
|
+ <el-option v-for="item in rolesOptions" :key="item.role_id" :label="item.role_name" :value="item.role_id" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </el-form>
|
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
|
+ <el-button type="primary" @click="handlerFormSubmit('deviceEditForm')">确 定</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </el-dialog>
|
|
|
|
+ <!-- 设备编辑弹窗 -->
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
|
|
|
|
+import { unix2Date } from '@/utils/Foundation'
|
|
|
|
+import ButtonCellRender from '@/components/AgGridCellRender/ButtonCellRender'
|
|
|
|
+import ListFilter from '@/components/AgGridCustomFilter/ListFilter'
|
|
|
|
+import RadioFilter from '@/components/AgGridCustomFilter/RadioFilter'
|
|
|
|
+import * as API_Device from '@/api/ncs_device'
|
|
|
|
+import * as clerk_API from '@/api/ncs_clerk'
|
|
|
|
+export default {
|
|
|
|
+ name: 'DeviceManager',
|
|
|
|
+ components: { ButtonCellRender, ListFilter, RadioFilter },
|
|
|
|
+ props: {
|
|
|
|
+ frame: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => {}
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ /** ag-grid参数 **/
|
|
|
|
+ pageData: {}, // 翻页数据
|
|
|
|
+ errorId: null,
|
|
|
|
+ shopVisible: false,
|
|
|
|
+ columnDefs: null,
|
|
|
|
+ rowData: null,
|
|
|
|
+ defaultColDef: null,
|
|
|
|
+ gridOptions: null,
|
|
|
|
+ gridApi: null,
|
|
|
|
+ columnApi: null,
|
|
|
|
+ localeText: AG_GRID_LOCALE_CN,
|
|
|
|
+ filterState: null,
|
|
|
|
+ rowSelection: null,
|
|
|
|
+ frameworkComponents: null,
|
|
|
|
+ /** 列表参数 */
|
|
|
|
+ params: {
|
|
|
|
+ page_size: 20,
|
|
|
|
+ page_no: 1,
|
|
|
|
+ hospital_id: this.$store.getters.partId,
|
|
|
|
+ fixedCondition: '1=1'
|
|
|
|
+ },
|
|
|
|
+ /** device 弹窗 **/
|
|
|
|
+ deviceDialogVisible: false,
|
|
|
|
+ deviceEditTitle: '添加设备',
|
|
|
|
+ deviceModel: {},
|
|
|
|
+ deviceTypeDisabled: false,
|
|
|
|
+ deviceRules: {
|
|
|
|
+ name: [
|
|
|
|
+ this.MixinRequired('请输入设备别名!')
|
|
|
|
+ ],
|
|
|
|
+ device_type: [
|
|
|
|
+ { required: true, message: '请选择设备类型', trigger: 'blur' }
|
|
|
|
+ ],
|
|
|
|
+ code: [
|
|
|
|
+ { required: true, message: '请输入设备编码', trigger: 'blur' }
|
|
|
|
+ ],
|
|
|
|
+ model: [
|
|
|
|
+ { required: true, message: '请输入设备型号', trigger: 'blur' }
|
|
|
|
+ ],
|
|
|
|
+ eth_mac: [
|
|
|
|
+ { required: true, message: '请输入设备MAC地址', trigger: 'blur' },
|
|
|
|
+ { pattern: /^([0-9A-Fa-f]{2}:?){6}/gi, message: '请输入正确的MAC地址', trigger: 'blur' }
|
|
|
|
+ ],
|
|
|
|
+ frame_id: [
|
|
|
|
+ { required: Object.keys(this.frame).length === 0, message: '请选安装位置!', trigger: 'blur' } // 没有传入frame 属性,必须选择安装位置
|
|
|
|
+ ],
|
|
|
|
+ role_id: [
|
|
|
|
+ { required: true, message: '请选择适用人', trigger: 'blur' }
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ /** 设备类型转换数组 **/
|
|
|
|
+ deviceTypeTransfer: [
|
|
|
|
+ { key: '护士主机', value: 1 },
|
|
|
|
+ { key: '医生主机', value: 2 },
|
|
|
|
+ { key: '门口机', value: 3 },
|
|
|
|
+ { key: '病床分机', value: 4 },
|
|
|
|
+ { key: 'LCD走廊屏', value: 5 },
|
|
|
|
+ { key: 'LED点阵屏', value: 6 },
|
|
|
|
+ { key: '移动设备', value: 7 },
|
|
|
|
+ // { key: '护工腕表', value: 8 },
|
|
|
|
+ { key: '病人腕表', value: 9 },
|
|
|
|
+ { key: '手机App', value: 10 },
|
|
|
|
+ { key: '总线转换盒', value: 11 },
|
|
|
|
+ { key: '模拟分机', value: 12 },
|
|
|
|
+ { key: '模拟紧急按钮', value: 13 },
|
|
|
|
+ { key: '模拟门灯', value: 14 },
|
|
|
|
+ { key: '遥控器', value: 15 },
|
|
|
|
+ { key: '信标', value: 16 },
|
|
|
|
+ { key: '看板', value: 17 }
|
|
|
|
+ ],
|
|
|
|
+ deviceStatusTransfer: [
|
|
|
|
+ { key: '启用', value: 1, color: 'green' },
|
|
|
|
+ { key: '未启用', value: 0, color: 'red' }
|
|
|
|
+ ],
|
|
|
|
+ rolesOptions: [],
|
|
|
|
+ hasRoleId: false,
|
|
|
|
+ hasAdd: true
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ tableHeight() {
|
|
|
|
+ return Object.keys(this.frame).length === 0 ? this.mainAreaHeight - 130 : this.mainAreaHeight - 174
|
|
|
|
+ },
|
|
|
|
+ frameSelectabled() { return Object.keys(this.frame).length > 0 }
|
|
|
|
+ },
|
|
|
|
+ watch: {
|
|
|
|
+ frame(val, oldvalue) {
|
|
|
|
+ console.log('watch22', val)
|
|
|
|
+ if (val.type === 1) {
|
|
|
|
+ this.params.fixedCondition = '1=1'
|
|
|
|
+ this.hasAdd = false
|
|
|
|
+ } else {
|
|
|
|
+ this.params.fixedCondition = Object.keys(this.frame).length === 0 ? '1=1' : ' frame_id =' + this.frame.id
|
|
|
|
+ this.hasAdd = true
|
|
|
|
+ }
|
|
|
|
+ this.getList()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ beforeMount() {
|
|
|
|
+ this.gridOptions = {
|
|
|
|
+ }
|
|
|
|
+ this.columnDefs = [
|
|
|
|
+ {
|
|
|
|
+ headerName: '#',
|
|
|
|
+ headerCheckboxSelection: true,
|
|
|
|
+ headerCheckboxSelectionFilteredOnly: true,
|
|
|
|
+ checkboxSelection: true,
|
|
|
|
+ sortable: false, filter: false,
|
|
|
|
+ width: 80,
|
|
|
|
+ resizable: false,
|
|
|
|
+ valueGetter: this.hashValueGetter
|
|
|
|
+ },
|
|
|
|
+ // { headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter', width: 100 },
|
|
|
|
+ { headerName: '设备类型', field: 'device_type', sortable: true, filterFramework: 'ListFilter', width: 160,
|
|
|
|
+ filterParams: {
|
|
|
|
+ listData: this.deviceTypeTransfer
|
|
|
|
+ },
|
|
|
|
+ valueGetter: this.deviceTypeGetter
|
|
|
|
+ },
|
|
|
|
+ // lockPosition 锁定位置,会在第一列
|
|
|
|
+ // lockPinned = true 不能拖动然后固定
|
|
|
|
+ // resizeable 单元个大小是否可以调整
|
|
|
|
+ { headerName: '设备别名', field: 'name', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '设备状态', field: 'status', sortable: true, filterFramework: 'RadioFilter',
|
|
|
|
+ filterParams: {
|
|
|
|
+ listData: this.deviceStatusTransfer
|
|
|
|
+ },
|
|
|
|
+ cellRenderer: this.deviceStatusFormatter
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { headerName: '部署位置', field: 'full_name', sortable: true, filter: 'agTextColumnFilter', valueFormatter: this.fullNameFormatter },
|
|
|
|
+ { headerName: '以太网MAC地址', field: 'eth_mac', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '以太网IP地址', field: 'eth_ip', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '通讯端口', field: 'eth_ip_port', sortable: true, filter: 'agNumberColumnFilter' },
|
|
|
|
+ { headerName: '设备型号', field: 'model', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '出厂编号', field: 'code', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '软件版本', field: 'soft_ver', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '硬件版本', field: 'hard_ver', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '无线MAC地址', field: 'wifi_mac', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '无线IP地址', field: 'wifi_ip', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: 'SIP账号', field: 'sip_id', sortable: true, filter: 'agTextColumnFilter' },
|
|
|
|
+ { headerName: '更新时间', field: 'update_time', sortable: true, filter: 'agDateColumnFilter', valueFormatter: this.unixDateFormatter, filterParams: {
|
|
|
|
+ comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ }},
|
|
|
|
+ { headerName: '编辑', field: 'shop_id',
|
|
|
|
+ cellRendererFramework: 'ButtonCellRender',
|
|
|
|
+ cellRendererParams: {
|
|
|
|
+ onClick: this.handleEdit,
|
|
|
|
+ label: '编辑',
|
|
|
|
+ buttonType: 'primary',
|
|
|
|
+ buttonSize: 'mini'
|
|
|
|
+ },
|
|
|
|
+ filter: false,
|
|
|
|
+ pinned: 'right',
|
|
|
|
+ lockPinned: true,
|
|
|
|
+ width: 90,
|
|
|
|
+ resizable: false,
|
|
|
|
+ sortable: false },
|
|
|
|
+ { headerName: '删除', field: 'shop_id',
|
|
|
|
+ cellRendererFramework: 'ButtonCellRender',
|
|
|
|
+ cellRendererParams: param => {
|
|
|
|
+ return {
|
|
|
|
+ onClick: this.deleteSingle,
|
|
|
|
+ label: '删除',
|
|
|
|
+ buttonType: 'danger',
|
|
|
|
+ buttonSize: 'mini',
|
|
|
|
+ disabled: param.data['member_name'] === 'superadmin'
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ pinned: 'right',
|
|
|
|
+ lockPinned: true,
|
|
|
|
+ width: 90,
|
|
|
|
+ resizable: false,
|
|
|
|
+ filter: false,
|
|
|
|
+ sortable: false }
|
|
|
|
+ ]
|
|
|
|
+ this.defaultColDef = {
|
|
|
|
+ // filter: 'agTextColumnFilter',
|
|
|
|
+ sortable: true,
|
|
|
|
+ resizable: true,
|
|
|
|
+ // comparator: this.dateCustomComparator,
|
|
|
|
+ filterParams: {
|
|
|
|
+ debounceMs: 500,
|
|
|
|
+ newRowsAction: 'keep',
|
|
|
|
+ textCustomComparator: this.textCustomComparator
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ this.rowSelection = 'multiple'
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ this.gridApi = this.gridOptions.api
|
|
|
|
+ this.gridColumnApi = this.gridOptions.columnApi
|
|
|
|
+ this.gridColumnApi.applyColumnState({
|
|
|
|
+ state: [
|
|
|
|
+ {
|
|
|
|
+ colId: 'status',
|
|
|
|
+ sort: 'asc'
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ /** 加载列表数据 */
|
|
|
|
+ getList() {
|
|
|
|
+ const param = this.MixinClone(this.params)
|
|
|
|
+ this.gridApi.showLoadingOverlay()
|
|
|
|
+ API_Device.listByHospital(param).then(response => {
|
|
|
|
+ this.rowData = [...response.data]
|
|
|
|
+ this.pageData = {
|
|
|
|
+ page_no: response.page_no,
|
|
|
|
+ page_size: response.page_size,
|
|
|
|
+ data_total: response.data_total
|
|
|
|
+ }
|
|
|
|
+ }).catch(err => {
|
|
|
|
+ this.$message.error(err)
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 过滤状态发生变化,发送到服务器检索数据
|
|
|
|
+ */
|
|
|
|
+ filterModifed(param) {
|
|
|
|
+ var model = param.api.getFilterModel()
|
|
|
|
+ this.params.filter = JSON.stringify(model)
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ gridSortChange(param) {
|
|
|
|
+ console.log('sortparam', param)
|
|
|
|
+ const columnState = param.columnApi.getColumnState()
|
|
|
|
+ // 排序状态
|
|
|
|
+ const sortState = columnState.filter(function(s) {
|
|
|
|
+ return s.sort != null
|
|
|
|
+ }).map(function(s) {
|
|
|
|
+ return {
|
|
|
|
+ colId: s.colId,
|
|
|
|
+ sort: s.sort,
|
|
|
|
+ sortIndex: s.sortIndex
|
|
|
|
+ }
|
|
|
|
+ }).sort(function(a, b) {
|
|
|
|
+ return a.sortIndex - b.sortIndex
|
|
|
|
+ })
|
|
|
|
+ if (sortState.length > 0) {
|
|
|
|
+ if (sortState.length === 1) {
|
|
|
|
+ this.params.sort = sortState[0].colId
|
|
|
|
+ this.params.dir = sortState[0].sort
|
|
|
|
+ } else {
|
|
|
|
+ let sortstring = ''
|
|
|
|
+ sortState.forEach(function(item) {
|
|
|
|
+ sortstring += item.colId + ' ' + item.sort + ','
|
|
|
|
+ })
|
|
|
|
+ this.params.sort = sortstring.substring(0, sortstring.length - 1)
|
|
|
|
+ this.params.dir = ' '
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ delete this.params.sort
|
|
|
|
+ delete this.params.dir
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ /** 处理搜索 */
|
|
|
|
+ handlerSearch(keywords) {
|
|
|
|
+ this.params.query = keywords
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ /** 获取设备类型文字显示,从deviceTypeTransfer 中找出value值对应的key显示出来 */
|
|
|
|
+ deviceTypeGetter(params) {
|
|
|
|
+ const gridVal = params.data.device_type
|
|
|
|
+ return this.deviceTypeTransfer.filter(p => p.value === gridVal).map(p => p.key)
|
|
|
|
+ },
|
|
|
|
+ /** 格式化时间函数 */
|
|
|
|
+ unixDateFormatter(param) {
|
|
|
|
+ if (!param.value) return ''
|
|
|
|
+ return unix2Date(param.value * 1000)
|
|
|
|
+ },
|
|
|
|
+ /** 设备状态格式化 **/
|
|
|
|
+ deviceStatusFormatter(params) {
|
|
|
|
+ if (params.value === null || params.value === undefined) return ''
|
|
|
|
+ const item = this.deviceStatusTransfer.filter(p => p.value === params.value)[0]
|
|
|
|
+ if (item) {
|
|
|
|
+ return '<span style="color:' + item.color + ';">' + item.key + '</span>'
|
|
|
|
+ } else {
|
|
|
|
+ return ''
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ fullNameFormatter(params) {
|
|
|
|
+ if (params.data.type === 3) {
|
|
|
|
+ return params.value
|
|
|
|
+ } else {
|
|
|
|
+ return params.data.shop_name + '-' + params.value
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ /** 删除设备 **/
|
|
|
|
+ deleteSingle(row) {
|
|
|
|
+ this.handlerDelete(row.id)
|
|
|
|
+ },
|
|
|
|
+ /** 删除设备 **/
|
|
|
|
+ handlerDelete(id) {
|
|
|
|
+ this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
|
|
|
|
+ confirmButtonText: '确定',
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
+ type: 'warning'
|
|
|
|
+ }).then(() => {
|
|
|
|
+ API_Device.remove(id).then(
|
|
|
|
+ response => {
|
|
|
|
+ this.getList()
|
|
|
|
+ }
|
|
|
|
+ ).catch(response => {
|
|
|
|
+ this.$message({
|
|
|
|
+ type: 'info',
|
|
|
|
+ message: response.message
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ }).catch(() => {
|
|
|
|
+ this.$message({
|
|
|
|
+ type: 'info',
|
|
|
|
+ message: '已取消删除'
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ /** 设备类型选中变化 **/
|
|
|
|
+ deviceTypeChange(val) {
|
|
|
|
+ this.deviceRules.eth_mac[0].required = !(val === 12 || val === 13 || val === 14)
|
|
|
|
+ this.hasRoleId = val === 7
|
|
|
|
+ },
|
|
|
|
+ /** 添加设备事件 **/
|
|
|
|
+ handleAdd() {
|
|
|
|
+ this.deviceModel = {
|
|
|
|
+ soft_ver: 'SV1.0',
|
|
|
|
+ hard_ver: 'HV1.0',
|
|
|
|
+ code: 'C' + parseInt(Math.random() * 100000),
|
|
|
|
+ model: 'M' + parseInt(Math.random() * 100000)
|
|
|
|
+ }
|
|
|
|
+ if (Object.keys(this.frame).length > 0) {
|
|
|
|
+ this.$set(this.deviceModel, 'frame_id', this.frame.id)
|
|
|
|
+ }
|
|
|
|
+ delete this.deviceModel.id
|
|
|
|
+ this.hasRoleId = false
|
|
|
|
+ this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
|
|
|
|
+ this.deviceEditTitle = '添加设备'
|
|
|
|
+ this.deviceDialogVisible = true
|
|
|
|
+ this.deviceTypeDisabled = false // 新增设备可以选择设备类型
|
|
|
|
+ this.deviceModel.full_name = this.frame.full_name
|
|
|
|
+ },
|
|
|
|
+ /** 修改设备 **/
|
|
|
|
+ handleEdit(params) {
|
|
|
|
+ this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
|
|
|
|
+ console.log('param', params)
|
|
|
|
+ this.hasRoleId = params.device_type === 7
|
|
|
|
+ this.deviceModel = {
|
|
|
|
+ ...params
|
|
|
|
+ }
|
|
|
|
+ this.deviceEditTitle = '修改设备'
|
|
|
|
+ this.deviceDialogVisible = true
|
|
|
|
+ this.deviceTypeDisabled = true // 修改设备时,不能改变设备类型
|
|
|
|
+ },
|
|
|
|
+ /** 新增 提交表单 */
|
|
|
|
+ handlerFormSubmit(formName) {
|
|
|
|
+ this.$refs[formName].validate((valid) => {
|
|
|
|
+ if (valid) {
|
|
|
|
+ /** 新增 */
|
|
|
|
+ if (!this.deviceModel.id) {
|
|
|
|
+ this.deviceModel.part_id = this.frame.part_id
|
|
|
|
+ this.deviceModel.frame_id = this.frame.id
|
|
|
|
+ API_Device.add(this.deviceModel).then(() => {
|
|
|
|
+ this.$message.success('保存成功!')
|
|
|
|
+ this.deviceDialogVisible = false
|
|
|
|
+ this.getList()
|
|
|
|
+ }).catch(err => {
|
|
|
|
+ this.$message.error(err)
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ /** 修改 */
|
|
|
|
+ API_Device.update(this.deviceModel.id, this.deviceModel).then(() => {
|
|
|
|
+ this.$message.success('修改成功!')
|
|
|
|
+ this.deviceDialogVisible = false
|
|
|
|
+ this.getList()
|
|
|
|
+ }).catch(error => {
|
|
|
|
+ this.$message.error(error)
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ /** 分页大小发生改变 */
|
|
|
|
+ handlePageSizeChange(size) {
|
|
|
|
+ this.params.page_size = size
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ /** 分页页数发生改变 */
|
|
|
|
+ handlePageCurrentChange(page) {
|
|
|
|
+ this.params.page_no = page
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ getRoles(param) {
|
|
|
|
+ // 获取角色
|
|
|
|
+ clerk_API.getRoles(param).then(response => {
|
|
|
|
+ this.rolesOptions = response.data
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style scoped>
|
|
|
|
+
|
|
|
|
+</style>
|