xiongchao 3 年之前
父節點
當前提交
c0b64aa0f5

+ 36 - 0
src/api/check/checkjob.js

@@ -169,3 +169,39 @@ export function finishJob (parameter) {
     data: parameter
   })
 }
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function executeJobBatch (parameter) {
+  return axios({
+    url: '/check/jobs/batch/execute',
+    method: 'PUT',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function finishJobBatch (parameter) {
+  return axios({
+    url: '/check/jobs/batch/finish',
+    method: 'PUT',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}

+ 49 - 3
src/views/check/checkjob/modules/BaseForm.vue

@@ -206,6 +206,25 @@
               v-decorator="['remark']"/>
           </a-form-item>
         </row-item>-->
+        <row-item>
+          <a-form-item
+            label="完成图片"
+            :labelCol="BaseTool.Constant.labelCol2"
+            :wrapperCol="BaseTool.Constant.wrapperCol2"
+          >
+            <a-upload
+              :action="uploadUrl"
+              :multiple="true"
+              list-type="picture"
+              accept="image/*"
+              :file-list="this.defaultCheckImgList"
+              @change="handleCheckImgChange"
+              :headers="headers"
+            >
+              <a-button> <a-icon type="upload" /> 选择上传图片 </a-button>
+            </a-upload>
+          </a-form-item>
+        </row-item>
         <row-item>
           <a-form-item
             label="检查结果"
@@ -227,7 +246,10 @@
 
 <script>
 import pick from 'lodash.pick'
-import { addCheckJob, updateCheckJob, finishJob } from '@/api/check/checkjob'
+import { addCheckJob, finishJob } from '@/api/check/checkjob'
+import { uploadUrl } from '@/api/upms/file'
+import Vue from 'vue'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
 
 export default {
   name: 'BaseCheckJob',
@@ -239,8 +261,13 @@ export default {
       visible: false,
       // 下拉框map
       statusMap: {},
-      sbStatusMap: {}
-
+      sbStatusMap: {},
+      checkImgList: [],
+      defaultCheckImgList: [],
+      uploadUrl: uploadUrl,
+      headers: {
+        Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
+      }
     }
   },
   props: {
@@ -267,6 +294,7 @@ export default {
         return
       }
       this.modalTitle = '编辑'
+      this.defaultCheckImgList = this.BaseTool.UPLOAD.transImg(this.imgList)
       const { form: { setFieldsValue } } = this
       // 日期处理
       record.startTime = this.BaseTool.Moment(record.startTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
@@ -320,6 +348,8 @@ export default {
         values.endTime = this.BaseTool.Date.formatter(values.endTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
         values.actualStartTime = this.BaseTool.Date.formatter(values.actualStartTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
         values.actualEndTime = this.BaseTool.Date.formatter(values.actualEndTime, this.BaseTool.Date.PICKER_NORM_DATETIME_PATTERN)
+        // 上传文件
+        values.imgList = this.checkImgList
         if (this.BaseTool.String.isBlank(values.id)) {
           addCheckJob(values)
             .then(() => {
@@ -344,6 +374,22 @@ export default {
       if (this.BaseTool.Object.isNotBlank(values)) {
         this.$emit('ok', values)
       }
+    },
+    handleCheckImgChange (info) {
+      this.defaultCheckImgList = info.fileList
+      this.checkImgList = this.setFileList(info, 23)
+    },
+    setFileList (info, type) {
+      const file = info.file
+      const fileList = info.fileList
+      if (file.status === 'done') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'removed') {
+        return this.BaseTool.UPLOAD.getUploadFileDTO(fileList, type)
+      } else if (file.status === 'error') {
+        this.$message.error('上传失败')
+        return null
+      }
     }
 
   }

+ 35 - 16
src/views/check/checkjob/modules/Detail.vue

@@ -1,6 +1,14 @@
 <template>
-  <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
-    <a-row :gutter="48" slot="extra">
+  <a-modal
+    :title="modalTitle"
+    :width="1000"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    class="ant-modal2"
+    :footer="null"
+    @cancel="handleCancel"
+  >
+    <a-row :gutter="48">
       <a-col :md="48" :sm="48">
           <span class="table-page-search-submitButtons" style="float: right">
             <a-button style="margin-left: 16px"  v-if="model.status === DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE" type="default" @click="handleExecute()">接收</a-button>
@@ -26,19 +34,6 @@
       <detail-list-item term="要求">{{ modelStandard.requirement }}</detail-list-item>
       <detail-list-item term="备注">{{ modelStandard.remark }}</detail-list-item>
     </detail-list>
-    <title-divider title="任务信息" width="90px"></title-divider>
-    <detail-list title="" :col="3">
-      <detail-list-item term="实际工时">{{ model.realHours }}</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="实际开始时间">{{ model.actualStartTime }}</detail-list-item>
-      <detail-list-item term="实际结束时间">{{ model.actualEndTime }}</detail-list-item>
-      <!--<detail-list-item term="是否停机"><badge :status="DictCache.COLOR.YES_NO[model.sbStatus]" :text="sbStatusMap[model.sbStatus]" /></detail-list-item>-->
-      <detail-list-item term="任务状态"><badge :status="DictCache.COLOR.CHECK_JOB_STATUS[model.status]" :text="statusMap[model.status]" /></detail-list-item>
-    </detail-list>
-    <detail-list title="" :col="1">
-      <detail-list-item term="检查结果">{{ model.feedback }}</detail-list-item>
-    </detail-list>
     <title-divider title="标准图片" width="90px"></title-divider>
     <detail-list title="" :col="1">
       <detail-list-item term="" v-if="modelStandard.checkImgList != null && modelStandard.checkImgList.length > 0">
@@ -60,8 +55,32 @@
         </a-upload>
       </detail-list-item>
     </detail-list>
+    <title-divider title="任务信息" width="90px"></title-divider>
+    <detail-list title="" :col="3">
+      <detail-list-item term="实际工时">{{ model.realHours }}</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="实际开始时间">{{ model.actualStartTime }}</detail-list-item>
+      <detail-list-item term="实际结束时间">{{ model.actualEndTime }}</detail-list-item>
+      <!--<detail-list-item term="是否停机"><badge :status="DictCache.COLOR.YES_NO[model.sbStatus]" :text="sbStatusMap[model.sbStatus]" /></detail-list-item>-->
+      <detail-list-item term="任务状态"><badge :status="DictCache.COLOR.CHECK_JOB_STATUS[model.status]" :text="statusMap[model.status]" /></detail-list-item>
+    </detail-list>
+    <detail-list title="" :col="1">
+      <detail-list-item term="检查结果">{{ model.feedback }}</detail-list-item>
+    </detail-list>
+    <title-divider title="完成图片" width="90px"></title-divider>
+    <detail-list title="" :col="1">
+      <detail-list-item term="" v-if="model.imgList != null && model.imgList.length > 0">
+        <viewer :images="model.imgList" @inited="inited" ref="viewer" :index="1" >
+          <img v-for="item in model.imgList" :src="item.url" :key="item.id" class="image">
+        </viewer>
+      </detail-list-item>
+      <detail-list-item term="" v-if="model.imgList == null || model.imgList.length === 0">
+        暂无
+      </detail-list-item>
+    </detail-list>
     <base-form :check-type="checkType" ref="baseModal" @ok="handleOk"/>
-  </a-card>
+  </a-modal>
 </template>
 
 <script>

+ 71 - 7
src/views/check/checkjob/modules/DetailSbCheckJob.vue

@@ -14,19 +14,39 @@
       <detail-list-item term="型号">{{ model.model }}</detail-list-item>
       <detail-list-item term="设备名称">{{ model.name }}</detail-list-item>
     </detail-list>
-    <title-divider title="保养信息" width="90px"></title-divider>
+    <title-divider title="保养任务" width="90px"></title-divider>
     <div class="table-operator" style="margin-bottom:8px;">
-      <a-button type="primary" @click="handleAdd">
+      <!--      <a-button type="primary" @click="handleAdd">
         <a-icon type="plus"/>
         添加
+      </a-button>-->
+      <a-button type="primary" @click="handleExecuteBatch" v-if="selectedRowKeys.length > 0">
+        <a-icon style="margin-left: 8px" type="plus"/>
+        批量接收
       </a-button>
-      <!--      <a-button style="margin-left: 8px" type="primary" icon="download" @click="doExport">导出</a-button>-->
+      <a-button style="margin-left: 8px" type="primary" v-if="selectedRowKeys.length > 0" @click="handleFinishBatch">
+        <a-icon type="plus"/>
+        批量完成
+      </a-button>
+      <a-button style="margin-left: 8px" type="primary" icon="download" @click="doExport">导出</a-button>
+      <a-select
+        style="margin-left: 8px;width:100px;"
+        @change="statusChange"
+        placeholder="请选择">
+        <a-select-option
+          v-for="(label,value) in statusMap"
+          :key="value"
+          :label="label"
+          :value="parseInt(value)">{{ label }}
+        </a-select-option>
+      </a-select>
     </div>
     <a-table
       :data-source="data"
       :columns="columns"
       tableLayout="auto"
-      :scroll="{x: 1000 }"
+      :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+      :scroll="{x: 1500 }"
       rowKey="id">
       <span slot="action" slot-scope="record">
         <template>
@@ -48,14 +68,14 @@
       </span>
     </a-table>
     <base-form ref="baseModal" :check-type="checkType" @ok="handleOk"/>
-    <detail ref="detailModal"/>
+    <detail ref="detailModal" @ok="handleOk"/>
 
   </div>
 </template>
 
 <script>
 import DetailList from '@/components/tools/DetailList'
-import { queryCheckJob, deleteCheckJobs, fetchCheckJob, exportCheckJob, executeJob } from '@/api/check/checkjob'
+import { queryCheckJob, deleteCheckJobs, fetchCheckJob, exportCheckJob, executeJobBatch, finishJobBatch } from '@/api/check/checkjob'
 import BaseForm from './BaseForm'
 import Detail from './Detail'
 import SbInfoSelectModal from '@/views/sb/info/modules/SbInfoSelectModal'
@@ -81,6 +101,9 @@ export default {
   },
   data () {
     return {
+      status: null,
+      selectedRowKeys: [], // Check here to configure the default column
+      optionAlertShow: false,
       confirmLoading: false,
       mdl: {},
       model: {
@@ -104,6 +127,8 @@ export default {
         {
           title: '序号',
           dataIndex: 'index',
+          checked: true,
+          width: '100px',
           customRender: (text, record, index) => {
             return index + 1
           }
@@ -158,13 +183,16 @@ export default {
           title: '任务状态',
           dataIndex: 'status',
           checked: true,
+          width: '100px',
+          fixed: 'right',
           scopedSlots: { customRender: 'status' }
         },
         {
           title: '操作',
           key: 'action',
-          width: '200px',
+          width: '250px',
           align: 'center',
+          fixed: 'right',
           scopedSlots: { customRender: 'action' },
           checked: true
         }
@@ -216,6 +244,7 @@ export default {
     },
     handleCancel () {
       this.visible = false
+      this.selectedRowKeys = []
       this.confirmLoading = false
       this.$emit('ok')
     },
@@ -246,6 +275,41 @@ export default {
     },
     handleSbSelect () {
       this.$refs.sbInfoSelectModal.base()
+    },
+    onSelectChange (selectedRowKeys) {
+      this.selectedRowKeys = selectedRowKeys
+    },
+    handleExecuteBatch () {
+      let ids = []
+      const length = this.selectedRowKeys.length
+      if (length === 0) {
+        this.$message.info('请选择记录')
+        return
+      }
+      console.log(this.selectedRowKeys)
+      ids = this.selectedRowKeys
+      executeJobBatch(ids).then(res => {
+        this.$message.info('接收成功')
+        this.handleOk()
+      })
+    },
+    handleFinishBatch () {
+      let ids = []
+      const length = this.selectedRowKeys.length
+      if (length === 0) {
+        this.$message.info('请选择记录')
+        return
+      }
+      ids = this.selectedRowKeys
+      finishJobBatch(ids).then(res => {
+        this.$message.info('完成成功')
+        this.handleOk()
+      })
+    },
+    statusChange (value) {
+      queryCheckJob({ sbId: this.model.id, type: this.checkType, status: value }).then(res => {
+        this.data = res.data
+      })
     }
   }
 }

+ 1 - 1
src/views/check/checkstandard/modules/BaseForm.vue

@@ -441,9 +441,9 @@ export default {
       checkFileList: [], // 文档
       defaultCheckImgList: [],
       defaultCheckFileList: [],
-      uploadUrl: uploadUrl,
       userList: {},
       editingKey: '',
+      uploadUrl: uploadUrl,
       headers: {
         Authorization: 'Bearer ' + Vue.ls.get(ACCESS_TOKEN)
       },

+ 25 - 7
src/views/check/checkstandard/modules/Detail.vue

@@ -22,16 +22,23 @@
            <detail-list-item term="更新时间">{{ model.updateTime }}</detail-list-item>-->
     </detail-list>
     <detail-list title="" :col="1">
-      <detail-list-item term="要求">{{ model.requirement }}</detail-list-item>
-      <detail-list-item term="备注">{{ model.remark }}</detail-list-item>
+      <detail-list-item term="检查项目">{{ model.requirement }}</detail-list-item>
+      <detail-list-item term="执行标准">{{ model.remark }}</detail-list-item>
     </detail-list>
-    <detail-list title="标准图片" :col="8">
-      <detail-list-item v-for="item in model.checkImgList" term="">
-        <img :src="BaseTool.Constant.FILE_URL + item.url" width="200px" height="200px"/>
+    <title-divider title="标准图片" width="90px"></title-divider>
+    <detail-list title="" :col="1">
+      <detail-list-item term="" v-if="model.checkImgList != null && model.checkImgList.length > 0">
+        <viewer :images="model.checkImgList" @inited="inited" ref="viewer" :index="1" >
+          <img v-for="item in model.checkImgList" :src="item.url" :key="item.id" class="image">
+        </viewer>
+      </detail-list-item>
+      <detail-list-item term="" v-if="model.checkImgList == null || model.checkImgList.length === 0">
+        暂无
       </detail-list-item>
     </detail-list>
+    <title-divider title="标准文件" width="90px"></title-divider>
     <detail-list title="" :col="8">
-      <detail-list-item term="文件">
+      <detail-list-item term="">
         <a-upload
           :multiple="true"
           :fileList="BaseTool.UPLOAD.transImg(model.checkFileList)"
@@ -154,9 +161,20 @@ export default {
     this.enableMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
     this.periodTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_PERIOD_TYPE)
     this.actionTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_ACTION_TYPE)
-
   },
   methods: {
+    inited (viewer) {
+      this.$viewer = viewer
+      // this.$viewer.index = 0
+      // // 不要他的按钮
+      // this.$viewer.options.button = false
+      // // 不要他的底部缩略图
+      // this.$viewer.options.navbar = false
+      // // 不要他的底部标题
+      // this.$viewer.options.title = false
+      // // 不要他的底部工具栏
+      // this.$viewer.options.toolbar = false
+    },
     base (record) {
       this.visible = true
       this.modalTitle = '详情'

+ 7 - 5
src/views/sb/info/modules/Detail.vue

@@ -16,10 +16,12 @@
             <a-badge :count="numCheckStandard" title="保养项目总数" :number-style="{ backgroundColor: '#52c41a' }">
               <a-button style="margin-left: 16px" type="default" @ok="handleOk" @click="handleViewCheck()">保养项目</a-button>
             </a-badge>
-            <!--            <a-badge :count="numNumCheckjob" title="待保养任务总数" :number-style="{ backgroundColor: '#52c41a' }">
+            <!--            <a-badge :count="numCheckjob" title="待保养任务总数" :number-style="{ backgroundColor: '#52c41a' }">
               <a-button style="margin-left: 16px" type="default" @ok="handleOk" @click="checkJobTableWaitDoListView()">待保养任务</a-button>
             </a-badge>-->
-            <a-button style="margin-left: 8px" type="default" @click="handleViewCheckJob()">保养记录</a-button>
+            <a-badge :count="numCheckjob" title="待保养项目总数" :number-style="{ backgroundColor: '#52c41a' }">
+              <a-button style="margin-left: 8px" type="default" @click="handleViewCheckJob()">保养任务</a-button>
+            </a-badge>
             <a-button v-show="model.useType==4" style="margin-left: 8px" type="default" @click="handleMeasure()">检定记录</a-button>
             <a-button style="margin-left: 8px" type="primary" @click="handleCancel()">返回</a-button>
           </span>
@@ -274,7 +276,7 @@ export default {
         'registerDate': null
       },
       numCheckStandard: 0,
-      numNumCheckjob: 0,
+      numCheckjob: 0,
       numModelbom: 0,
       numPartInfo: 0,
       numChildSbInfo: 0,
@@ -354,12 +356,12 @@ export default {
       })
     },
     fetchNum () {
-      Promise.all([queryNumPartInfo({ sbId: this.model.id }), queryNumModelbom({ sbId: this.model.id }), queryNumCheckStandard({ sbId: this.model.id }), queryNumCheckjob({ sbId: this.model.id })])
+      Promise.all([queryNumPartInfo({ sbId: this.model.id }), queryNumModelbom({ sbId: this.model.id }), queryNumCheckStandard({ sbId: this.model.id }), queryNumCheckjob({ sbId: this.model.id, status: this.DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE })])
         .then((values) => {
           this.numPartInfo = values[0].data
           this.numModelbom = values[1].data
           this.numCheckStandard = values[2].data
-          this.numNumCheckjob = values[3].data
+          this.numCheckjob = values[3].data
         })
 
       // 如果是父设备,则要获取子设备的数量,并点击后可以看到子设备的情况