408249787 2 سال پیش
والد
کامیت
ed30f38896

+ 129 - 0
src/api/sb/changeRecord.js

@@ -0,0 +1,129 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getSbChangeRecordPage(parameter) {
+  return axios({
+    url: '/sb/sb-changes/page?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addSbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes',
+    method: 'POST',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateSbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes/' + parameter.id,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
+
+/**
+ * fetch single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function fetchSbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes/' + parameter.id,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * query list func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function querySbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * delete batch func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteSbChangeRecords(parameter) {
+  return axios({
+    url: '/sb/sb-changes',
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * delete single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteSbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes/' + parameter.id,
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+  * @returns {*}
+ */
+export function exportSbChangeRecord(parameter) {
+  return axios({
+    url: '/sb/sb-changes/export?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}

+ 15 - 1
src/api/sb/info.js

@@ -351,7 +351,21 @@ export function exportSbInfo (parameter) {
     responseType: 'blob'
   })
 }
-
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+ * @returns {*}
+ */
+export function batchLocationList (parameter) {
+  return axios({
+    url: '/sb/infos/fill/position/list?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
 /**
  * export file
  * parameter: { }

+ 2 - 0
src/router/generator-platform-routers.js

@@ -294,6 +294,8 @@ const constantRouterComponents = {
 
   // 设备变动
   'SbScrapForm': () => import('@/views/sb/scraps/SbScrapForm'), // 报废单
+  // 设备变动记录
+  'SbChangeRecord': () => import('@/views/sb/change-record/SbChangeRecord'), // 设备变动记录
   // 备件盘点
   'StoreCheckPlan': () => import('@/views/store/storecheckplan/StoreCheckPlan'),
   'StoreCheckJob': () => import('@/views/store/storecheckjob/StoreCheckJob'),

+ 307 - 0
src/views/sb/change-record/SbChangeRecord.vue

@@ -0,0 +1,307 @@
+<template>
+  <a-card :bordered="false">
+    <div v-show="visible">
+      <div class="table-page-search-wrapper" @keyup.enter="handleEnter">
+        <a-form layout="inline">
+          <a-row :gutter="48" v-show="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="关键字">
+                <a-input v-model="queryParam.keyword" placeholder="请输入名称/类型名称" />
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row :gutter="48">
+            <a-col :md="24 || 24" :sm="24" style="text-align: right">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'" />
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class="table-operator" style="margin-bottom: 8px;">
+        <a-row>
+          <a-col :md="16">
+            <a-button v-if="$auth('change-changes-add')" type="primary" icon="plus" @click="handleAdd()">新增</a-button>
+            <a-button
+              style="margin-left: 8px"
+              v-if="$auth('change-changes-export')"
+              type="primary"
+              icon="download"
+              @click="doExport">导出
+            </a-button>
+            <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('change-changes-del')">
+              <a-menu slot="overlay">
+                <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
+                  <a-menu-item key="1">
+                    <a-icon type="delete" />
+                    <a>删除</a></a-menu-item>
+                </a-popconfirm>
+              </a-menu>
+              <a-button style="margin-left: 8px">
+                批量操作
+                <a-icon type="down" />
+              </a-button>
+            </a-dropdown>
+          </a-col>
+        </a-row>
+      </div>
+
+      <s-table
+        ref="table"
+        size="default"
+        rowKey="id"
+        :columns="columns"
+        :data="loadData"
+        :alert="options.alert"
+        :rowSelection="options.rowSelection"
+        showPagination="auto"
+      >
+        <span slot="action" slot-scope="record">
+          <template>
+            <a @click="handleView(record)">查看</a>
+            <operation-button
+              v-if="$auth('change-changes-edit')"
+              @click="handleEdit(record)"
+            >修改</operation-button>
+            <operation-button
+              v-if="$auth('change-changes-del')"
+              :type="2"
+              title="是否要删除该条数据?"
+              @confirm="batchDelete(record.id)">删除</operation-button>
+          </template>
+        </span>
+      </s-table>
+    </div>
+    <base-form ref="baseModal" @ok="handleOk" />
+    <detail ref="detailModal" @ok="handleOk" />
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import BaseForm from './modules/BaseForm'
+import Detail from './modules/Detail'
+import {
+  getSbChangeRecordPage,
+  deleteSbChangeRecords,
+  fetchSbChangeRecord,
+  exportSbChangeRecord
+} from '@/api/sb/changeRecord'
+
+export default {
+  name: 'SbChangeRecord',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm,
+    Detail
+  },
+  data () {
+    return {
+      advanced: false,
+      visible: true,
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '记录人',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '设备ID',
+          dataIndex: 'sbId'
+        },
+        {
+          title: '更改内容',
+          dataIndex: 'content'
+        },
+        {
+          title: '原设备位置',
+          dataIndex: 'oldPositionId'
+        },
+        {
+          title: '修改后设备位置',
+          dataIndex: 'positionId'
+        },
+        {
+          title: '位号',
+          dataIndex: 'sbNoId'
+        },
+        {
+          title: '原父设备ID',
+          dataIndex: 'oldParentId'
+        },
+        {
+          title: '修改后父设备ID',
+          dataIndex: 'parentId'
+        },
+        {
+          title: '记录时间',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '开始时间',
+          dataIndex: 'startTime'
+        },
+        {
+          title: '结束时间',
+          dataIndex: 'endTime'
+        },
+        {
+          title: '更改类型 1 位置 2 位号 3 父设备',
+          dataIndex: 'changeType'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getSbChangeRecordPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: {
+          show: true,
+          clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created () {
+    // 下拉框map
+    this.tableOption()
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: {
+            show: true,
+            clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    batchDelete (id) {
+      let ids = []
+      if (this.BaseTool.String.isBlank(id)) {
+        const length = this.selectedRows.length
+        if (length === 0) {
+          this.$message.info('请选择要删除的记录')
+          return
+        }
+        ids = this.selectedRows.map(item => item.id)
+      } else {
+        ids = [id]
+      }
+      deleteSbChangeRecords(ids).then(res => {
+        this.$message.info('删除成功')
+        this.handleOk()
+        this.$refs.table.clearSelected()
+      })
+    },
+    handleAdd () {
+      this.visible = false
+      const modal = this.$refs.baseModal
+      modal.base()
+    },
+    handleEdit (record) {
+      this.visible = false
+      fetchSbChangeRecord({ id: record.id }).then(res => {
+        const modal = this.$refs.baseModal
+        modal.base(res.data)
+      })
+    },
+    handleView (record) {
+      this.visible = false
+      fetchSbChangeRecord({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk (values) {
+      this.visible = true
+      this.$refs.table.refresh()
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm () {
+      this.queryParam = {}
+      this.$refs.table.refresh(true)
+    },
+    doExport () {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportSbChangeRecord(parameter).then(file => {
+        this.BaseTool.Util.downLoadExportExcel(file)
+      })
+    },
+    handleEnter () {
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>

+ 231 - 0
src/views/sb/change-record/modules/BaseForm.vue

@@ -0,0 +1,231 @@
+<template>
+  <a-card :bordered='false' v-show='visible' class='card' :title='modalTitle'>
+    <a-row :gutter='48' slot='extra'>
+      <a-col :md='48' :sm='48'>
+              <span class='table-page-search-submitButtons' style='float: right'>
+                <a-button :loading='confirmLoading' type='primary' @click='save()'>保存</a-button>
+                <a-button style='margin-left: 8px' type='default' @click='handleCancel()'>返回</a-button>
+              </span>
+      </a-col>
+    </a-row>
+    <a-form :form='form'>
+
+      <a-form-item v-show='false'>
+        <a-input v-decorator="['id']" type='hidden' />
+      </a-form-item>
+
+      <row-list :col='2'>
+        <row-item>
+
+          <a-form-item
+            label='设备ID'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['sbId', {rules: [{required: true, message: '设备ID不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='更改内容'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['content', {rules: [{required: true, message: '更改内容不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='原设备位置'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['oldPositionId', {rules: [{required: true, message: '原设备位置不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='修改后设备位置'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['positionId', {rules: [{required: true, message: '修改后设备位置不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='位号'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['sbNoId', {rules: [{required: true, message: '位号不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='原父设备ID'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['oldParentId', {rules: [{required: true, message: '原父设备ID不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='修改后父设备ID'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input
+              v-decorator="['parentId', {rules: [{required: true, message: '修改后父设备ID不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='开始时间'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-date-picker
+              showTime
+              style='width: 100%'
+              :format='BaseTool.Date.PICKER_NORM_DATE_PATTERN'
+              v-decorator="['startTime', {rules: [{required: true, message: '开始时间不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='结束时间'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-date-picker
+              showTime
+              style='width: 100%'
+              :format='BaseTool.Date.PICKER_NORM_DATE_PATTERN'
+              v-decorator="['endTime', {rules: [{required: true, message: '结束时间不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label='更改类型 1 位置 2 位号 3 父设备'
+            :labelCol='BaseTool.Constant.labelCol'
+            :wrapperCol='BaseTool.Constant.wrapperCol'
+          >
+            <a-input-number
+              style='width: 100%'
+              :min='0'
+              :formatter='BaseTool.Amount.formatter'
+              :parser='BaseTool.Amount.parser'
+              v-decorator="['changeType', {rules: [{required: true, message: '更改类型 1 位置 2 位号 3 父设备不能为空'}]}]" />
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+  </a-card>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import { addSbChangeRecord, updateSbChangeRecord } from '@/api/sb/changeRecord'
+
+export default {
+  name: 'BaseSbChangeRecord',
+  data() {
+    return {
+      confirmLoading: false,
+      modalTitle: null,
+      form: this.$form.createForm(this),
+      visible: false
+      // 下拉框map
+    }
+  },
+  props: {},
+  created() {
+    // 下拉框map
+  },
+  methods: {
+    base(record) {
+      this.visible = true
+      // 如果是空标识添加
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.modalTitle = '添加'
+        return
+      }
+      this.modalTitle = '编辑'
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      record.startTime = this.BaseTool.Moment(record.startTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+      record.endTime = this.BaseTool.Moment(record.endTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id',
+          'sbId',
+          'content',
+          'oldPositionId',
+          'positionId',
+          'sbNoId',
+          'oldParentId',
+          'parentId',
+          'startTime',
+          'endTime',
+          'changeType'
+        ])))
+      })
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        // 日期处理
+        values.startTime = this.BaseTool.Date.formatter(values.startTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+        values.endTime = this.BaseTool.Date.formatter(values.endTime, this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+        if (this.BaseTool.String.isBlank(values.id)) {
+          addSbChangeRecord(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+            this.confirmLoading = false
+          })
+        } else {
+          updateSbChangeRecord(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+            this.confirmLoading = false
+          })
+        }
+      })
+    },
+    handleCancel(values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.form.resetFields()
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok', values)
+      } else {
+        this.$emit('ok')
+      }
+    }
+  }
+}
+</script>

+ 82 - 0
src/views/sb/change-record/modules/Detail.vue

@@ -0,0 +1,82 @@
+<template>
+  <a-card :bordered='false' v-show='visible' class='card' :title='modalTitle'>
+    <a-row :gutter='48' slot='extra'>
+      <a-col :md='48' :sm='48'>
+              <span class='table-page-search-submitButtons' style='float: right'>
+                <a-button style='margin-left: 8px' type='default' @click='handleCancel()'>返回</a-button>
+              </span>
+      </a-col>
+    </a-row>
+    <detail-list title='' :col='2'>
+      <detail-list-item term='记录人ID'>{{ model.createdUserId }}</detail-list-item>
+      <detail-list-item term='修改人ID'>{{ model.updateUserId }}</detail-list-item>
+      <detail-list-item term='修改人'>{{ model.updateUserName }}</detail-list-item>
+      <detail-list-item term='设备ID'>{{ model.sbId }}</detail-list-item>
+      <detail-list-item term='更改内容'>{{ model.content }}</detail-list-item>
+      <detail-list-item term='原设备位置'>{{ model.oldPositionId }}</detail-list-item>
+      <detail-list-item term='修改后设备位置'>{{ model.positionId }}</detail-list-item>
+      <detail-list-item term='位号'>{{ model.sbNoId }}</detail-list-item>
+      <detail-list-item term='原父设备ID'>{{ model.oldParentId }}</detail-list-item>
+      <detail-list-item term='修改后父设备ID'>{{ model.parentId }}</detail-list-item>
+      <detail-list-item term='修改时间'>{{ model.updateTime }}</detail-list-item>
+      <detail-list-item term='开始时间'>{{ model.startTime }}</detail-list-item>
+      <detail-list-item term='结束时间'>{{ model.endTime }}</detail-list-item>
+      <detail-list-item term='更改类型 1 位置 2 位号 3 父设备'>{{ model.changeType }}</detail-list-item>
+    </detail-list>
+  </a-card>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+
+const DetailListItem = DetailList.Item
+
+export default {
+  name: 'SbChangeRecordDetail',
+  components: {
+    DetailList,
+    DetailListItem
+  },
+  data() {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 下拉框map
+      model: {
+        'createdUserId': null,
+        'updateUserId': null,
+        'updateUserName': null,
+        'sbId': null,
+        'content': null,
+        'oldPositionId': null,
+        'positionId': null,
+        'sbNoId': null,
+        'oldParentId': null,
+        'parentId': null,
+        'updateTime': null,
+        'startTime': null,
+        'endTime': null,
+        'changeType': null
+      }
+    }
+  },
+  created() {
+    // 下拉框map
+
+  },
+  methods: {
+    base(record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+    },
+    handleCancel() {
+      this.visible = false
+      this.confirmLoading = false
+      this.$emit('ok')
+    }
+  }
+}
+</script>

+ 318 - 0
src/views/sb/change-record/modules/SbChangeRecordSelectModal.vue

@@ -0,0 +1,318 @@
+<template>
+  <a-modal
+    :title='modalTitle'
+    :width='1000'
+    :visible='visible'
+    :confirmLoading='confirmLoading'
+    class='ant-modal2'
+    @cancel='handleCancel'
+  >
+    <a-card :bordered='false'>
+      <div class='table-page-search-wrapper'>
+        <a-form layout='inline'>
+          <a-row :gutter='48'>
+            <a-col :md='6' :sm='24'>
+              <a-form-item label='关键字'>
+                <a-input v-model='queryParam.keyword' placeholder='请输入名称/类型名称' />
+              </a-form-item>
+            </a-col>
+            <a-col :md='6 || 24' :sm='24'>
+                            <span class='table-page-search-submitButtons'>
+                                <a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
+                                <a-button style='margin-left: 8px' @click='resetSearchForm'>重置</a-button>
+                                <a @click='()=>{ this.advanced = !this.advanced}' style='margin-left: 8px'>
+                                  {{ advanced ? '收起' : '展开' }}
+                                  <a-icon :type="advanced ? 'up' : 'down'" />
+                                </a>
+                            </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class='table-operator'>
+      </div>
+
+      <s-table
+        ref='table'
+        size='default'
+        rowKey='id'
+        :columns='columns'
+        :data='loadData'
+        :alert='options.alert'
+        :customRow='options.customRow'
+        :rowSelection='options.rowSelection'
+        showPagination='auto'
+      >
+                <span slot='action' slot-scope='record1'>
+                  <template>
+                    <a @click='handleView(record1)'>查看</a>
+                  </template>
+                </span>
+      </s-table>
+      <detail ref='detailModal' />
+    </a-card>
+    <template slot='footer'>
+      <a-button :loading='confirmLoading' type='primary' @click='handleCancel()'>取消</a-button>
+      <a-button :loading='confirmLoading' type='primary' @click='handleSelect()'>确定</a-button>
+    </template>
+  </a-modal>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import Detail from './Detail'
+import { getSbChangeRecordPage, fetchSbChangeRecord } from '@/api/sb/changeRecord'
+
+export default {
+  name: 'SbChangeRecordSelectModal',
+  components: {
+    STable,
+    Ellipsis,
+    Detail
+  },
+  props: {
+    type: {
+      type: String,
+      default: 'radio'
+    },
+    selectedRowKey: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    selectedRow: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    }
+  },
+  data() {
+    return {
+      advanced: false,
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      record: null,
+      // 查询参数
+      queryParam: {},
+      extraQueryParam: {},
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '记录人',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '设备ID',
+          dataIndex: 'sbId'
+        },
+        {
+          title: '更改内容',
+          dataIndex: 'content'
+        },
+        {
+          title: '原设备位置',
+          dataIndex: 'oldPositionId'
+        },
+        {
+          title: '修改后设备位置',
+          dataIndex: 'positionId'
+        },
+        {
+          title: '位号',
+          dataIndex: 'sbNoId'
+        },
+        {
+          title: '原父设备ID',
+          dataIndex: 'oldParentId'
+        },
+        {
+          title: '修改后父设备ID',
+          dataIndex: 'parentId'
+        },
+        {
+          title: '记录时间',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '开始时间',
+          dataIndex: 'startTime'
+        },
+        {
+          title: '结束时间',
+          dataIndex: 'endTime'
+        },
+        {
+          title: '更改类型 1 位置 2 位号 3 父设备',
+          dataIndex: 'changeType',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          ...this.extraQueryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getSbChangeRecordPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: {
+          show: true, clear: () => {
+            this.selectedRowKeys = []
+          }
+        },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false,
+      isCreated: false
+    }
+  },
+  created() {
+    // 下拉框map
+  },
+  methods: {
+    tableOption() {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: {
+            show: true, clear: () => {
+              this.selectedRowKeys = []
+            }
+          },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            type: this.type,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          },
+          customRow: (record) => {
+            return {
+              on: { // 事件
+                click: (event) => { // 点击行
+                  // 选择对象
+                  this.mySelect([record.id], [record])
+                },
+                dblclick: (event) => {
+                  this.mySelect([record.id], [record])
+                  this.handleSelect()
+                }
+              }
+            }
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    handleView(record) {
+      fetchSbChangeRecord({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk() {
+      this.$refs.table.refresh()
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm() {
+      this.queryParam = {}
+      this.$refs.table.refresh(true)
+    },
+    base(record, queryParam = {}) {
+      this.visible = true
+      this.modalTitle = '选择信息'
+      this.extraQueryParam = queryParam
+      this.record = record
+      if (this.isCreated) {
+        this.$refs.table.clearSelected()
+        this.options.rowSelection.type = this.type
+        this.handleOk()
+      } else {
+        this.tableOption()
+        this.isCreated = true
+      }
+    },
+    handleCancel() {
+      this.visible = false
+      this.confirmLoading = false
+    },
+    handleSelect() {
+      if (this.selectedRowKeys.length === 0) {
+        this.$message.warn('请至少选择一项信息')
+      } else {
+        this.confirmLoading = true
+        this.$emit('selected', this.record, this.selectedRowKeys, this.selectedRows)
+        this.confirmLoading = false
+        this.visible = false
+      }
+    },
+    mySelect(selectedRowKeys, selectedRows) {
+      if (this.type === 'radio') {
+        this.$refs.table.updateSelect(selectedRowKeys, selectedRows)
+        this.$refs.table.rowSelection.onChange(selectedRowKeys, selectedRows)
+      } else {
+        let mySelectedRowKeys
+        let mySelectedRows = this.selectedRows.filter(item => item.id !== selectedRowKeys[0])
+        if (this.selectedRowKeys.includes(selectedRowKeys[0])) {
+          mySelectedRowKeys = this.selectedRowKeys.filter(item => item !== selectedRowKeys[0])
+        } else {
+          mySelectedRowKeys = [...selectedRowKeys, ...this.selectedRowKeys]
+          mySelectedRows = [...mySelectedRows, ...selectedRows]
+        }
+        this.$refs.table.updateSelect(mySelectedRowKeys, mySelectedRows)
+        this.$refs.table.rowSelection.onChange(mySelectedRowKeys, mySelectedRows)
+      }
+
+    }
+  }
+}
+</script>

+ 32 - 9
src/views/sb/info/SbInfo.vue

@@ -160,7 +160,10 @@
                     <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
                   </a-popconfirm>
                   <a-popconfirm v-if="measureStatus===1" :visible="false" @visibleChange="batchIncorrect()">
-                    <a-menu-item key="1"><my-icon type="icon-pandian" /><a>检定</a></a-menu-item>
+                    <a-menu-item key="2"><my-icon type="icon-pandian" /><a>检定</a></a-menu-item>
+                  </a-popconfirm>
+                  <a-popconfirm :visible="false" @visibleChange="batchLocation()">
+                    <a-menu-item key="3"><my-icon type="icon-pandian" /><a>设备位号</a></a-menu-item>
                   </a-popconfirm>
                 </a-menu>
                 <a-button style="margin-left: 8px">
@@ -245,7 +248,7 @@
     <print-in-sb-info-batch ref="printInSbInfoBatch" @ok="handleOk"/>
     <detail-sb-measure ref="detailSbMeasureModal" @ok="handleOk"/>
     <base-form-measure ref="baseModalMeasure" @ok="handleOk"/>
-
+    <base-form-location ref="baseFormLocation" @ok="handleOk" />
   </div>
 </template>
 
@@ -256,10 +259,10 @@ import DetailSbMeasure from '@/views/sb/measurelog/modules/DetailSbCheckBatch'
 import BaseFormStatusLog from '@/views/sb/status-log/modules/BaseForm'
 import Detail from './modules/Detail'
 import BaseFormMeasure from './modules/BaseFormMeasure'
-
+import BaseFormLocation from './modules/BaseFormLocation'
 import DownloadModal from '@/views/download/DownloadModal'
 import PreviewModal from '@/views/preview/PreviewModal'
-import { getSbInfoPage, deleteSbInfos, fetchSbInfo, fetchSbInfos, exportSbInfo } from '@/api/sb/info'
+import { getSbInfoPage, deleteSbInfos, fetchSbInfo, fetchSbInfos, exportSbInfo, batchLocationList } from '@/api/sb/info'
 import { queryDept } from '@/api/upms/dept'
 import { generateSbCodeAll } from '@/api/upms/code'
 import { fetchSbTypeTree } from '@/api/sb/type'
@@ -286,7 +289,7 @@ export default {
     ImportFormUpdate,
     PrintInSbInfoBatch,
     BaseFormMeasure,
-
+    BaseFormLocation,
     BaseFormStatusLog
   },
   props: {
@@ -419,12 +422,12 @@ export default {
           width: 120,
           checked: true
         },
-        /*{
+        /* {
           title: '大小尺寸',
           dataIndex: 'zz',
           width: 120,
           checked: true
-        },*/
+        }, */
 
         {
           title: '出厂编号',
@@ -443,7 +446,7 @@ export default {
           }
         }, */
 
-      /*  {
+        /*  {
           title: '是否子设备',
           dataIndex: 'isChild',
           width: 120,
@@ -451,7 +454,7 @@ export default {
           customRender: (text, record, index) => {
             return this.BaseTool.Object.getField(this.isChildMap, text)
           }
-        },*/
+        }, */
         {
           title: '资产编号',
           dataIndex: 'financingNo',
@@ -649,6 +652,26 @@ export default {
         modal.base([res.data])
       })
     },
+    batchLocation (id) {
+      let ids = []
+      if (this.BaseTool.String.isBlank(id)) {
+        const length = this.selectedRows.length
+        if (length === 0) {
+          this.$message.info('请选择设备')
+          return
+        }
+        ids = this.selectedRows.map(item => item.id)
+      } else {
+        ids = [id]
+      }
+      console.log(ids)
+      batchLocationList({ ids }).then(res => {
+        console.log(res)
+      })
+      // this.visible = false
+      // const modal = this.$refs.baseFormLocation
+      // modal.base(ids)
+    },
     batchIncorrect (id) {
       let ids = []
       if (this.BaseTool.String.isBlank(id)) {

+ 59 - 0
src/views/sb/info/modules/BaseFormLocation.vue

@@ -0,0 +1,59 @@
+<template>
+  <a-card :bordered="false" v-show="visible" class="card">
+    <a-row :gutter="48" style="position:fixed;bottom:150px;z-index:999;display:flex; justify-content: center;width: 90%;">
+      <a-col :md="48" :sm="48">
+        <span>
+          <a-button type="primary" @click="save()">保存</a-button>
+          <a-button style="margin-left: 8px" type="default" @click="handleCancel()">返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <div>
+
+    </div>
+    <!-- <sb-position-no-modal ref="sbPositionNoModal" @selected="handleSbNoSelectd"/> -->
+
+  </a-card>
+</template>
+
+<script>
+import { getSbPositionTree } from '@/api/sb/position'
+import SbPositionNoModal from '@/views/sb/info/modules/SbPositionNoModal'
+import { importMeasure } from '@/api/sb/info'
+
+export default {
+  name: 'BaseFillGatherTask',
+  components: {
+    SbPositionNoModal
+  },
+  data () {
+    return {
+      visible: false,
+      modal: []
+    }
+  },
+  props: {
+  },
+  created () {
+    // 下拉框map
+
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+
+      this.model = record
+    },
+    save () {
+
+    },
+    handleCancel () {
+      this.visible = false
+      this.$emit('ok')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+
+</style>

+ 4 - 4
src/views/sb/info/modules/BaseFormMeasure.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div>
       <div class="tables">
-        <div style="text-align:center;padding-bottom:10px;font-size:32px;">时代思康检定记录表</div>
+        <div style="text-align:center;padding-bottom:10px;font-size:32px;">时代思康检定表</div>
         <div style="display:flex; justify-content: space-between;">
           <div> 检定人:{{ username }}</div>
         </div>
@@ -40,8 +40,8 @@
               <td>{{ i+1 }}</td>
               <td>{{ item.sbName }}</td>
               <td>{{ item.sbModel }}</td>
-              <td>{{ item.isChild === 0?'否':'是' }}</td>
-              <td> <div v-if="item.isChild" style="width:300px">
+              <td>{{ item.isChild === 1?'是':'否' }}</td>
+              <td> <div v-if="item.isChild === 1" style="width:300px">
                      <a-input
                        disabled
                        style="width: 50%"
@@ -60,7 +60,7 @@
               >
               </a-tree-select></td>
               <td>
-                <a-input v-if="item.isChild === 0" style="width: 150px" v-model="item.sbNoId" />
+                <a-input v-if="item.isChild !== 1" style="width: 150px" v-model="item.sbNoId" />
                 <div v-else style="width:300px">
                   <a-input
                     disabled