From 952a20f1c005d80e9bf881287c40e6f4e4266a0b Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期三, 12 三月 2025 15:34:52 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev

---
 src/views/CNAS/resourceDemand/device/component/record.vue |  474 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 474 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/device/component/record.vue b/src/views/CNAS/resourceDemand/device/component/record.vue
new file mode 100644
index 0000000..d4eec0c
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/record.vue
@@ -0,0 +1,474 @@
+<!-- 浣跨敤璁板綍 -->
+<template>
+  <div>
+    <div class="search">
+      <div class="search_thing">
+        <div class="search_label">娴佺▼缂栧彿锛�</div>
+        <el-input v-model="search.deviceNumber" clearable placeholder="璇疯緭鍏�" size="small" style="width: 70%;"
+                  @keyup.enter.native="getTableList(clickNodeVal.value)"></el-input>
+      </div>
+      <div class="search_thing" style="padding-left: 30px;">
+        <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">鏌� 璇�</el-button>
+      </div>
+      <div class="btns">
+        <el-button size="small" type="primary" @click="dialogVisible = true, openAdd()">鏂� 寤�</el-button>
+        <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵� 鍑�</el-button>
+      </div>
+    </div>
+    <div class="tables" style="margin-top: 16px;">
+      <el-table ref="Recordtable" :data="formParamList" height="calc(100vh - 20em)">
+        <!-- 琛ㄦ牸鍒� -->
+        <el-table-column label="搴忓彿" type="index" width="120">
+          <template v-slot="scope">
+            <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鏍峰搧缂栧彿" min-width="180" prop="deviceNumber" />
+        <el-table-column label="璁惧鍚嶇О" min-width="150" prop="deviceName" />
+        <el-table-column label="绠$悊缂栧彿" min-width="150" prop="managementNumber" />
+        <el-table-column label="娓╁害(掳C)" min-width="120" prop="temperature" />
+        <el-table-column label="婀垮害(%RH)" min-width="120" prop="humidity" />
+        <el-table-column label="浣跨敤鍓�" min-width="120" prop="useBefore">
+          <template v-slot="scope">
+            {{ scope.row.useBefore === 1 ? '姝e父' : '涓嶆甯�' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="浣跨敤鍚�" min-width="120" prop="useAfter">
+          <template v-slot="scope">
+            {{ scope.row.useAfter === 1 ? '姝e父' : '涓嶆甯�' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="寮傚父鎯呭喌" min-width="120" prop="abnormal" />
+        <el-table-column label="浣跨敤寮�濮嬫棩鏈�" min-width="150" prop="useStartDate" />
+        <el-table-column label="浣跨敤缁撴潫鏃ユ湡" min-width="150" prop="useEndDate" />
+        <el-table-column label="浣跨敤浜�" min-width="120" prop="usePerson" />
+        <el-table-column label="澶囨敞" min-width="120" prop="remark" />
+        <!-- 鎿嶄綔鎸夐挳 -->
+        <el-table-column fixed="right" label="鎿嶄綔" width="130">
+          <template slot-scope="scope">
+            <el-button size="small" type="text" @click="showDetailsDialog(scope.row)">鏌ョ湅璇︽儏</el-button>
+            <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+                     :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
+                     @current-change="handleCurrentChange">
+      </el-pagination>
+    </div>
+    <el-dialog :visible.sync="dialogVisible" title="浠櫒璁惧浣跨敤璁板綍琛�" top="5vh" width="55%">
+      <el-form ref="form" :model="form" label-width="130px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鏍峰搧缂栧彿:">
+              <el-input v-model="form.deviceNumber" disabled size="small" style="width: 100%;"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁惧鍚嶇О:" required>
+              <el-input v-model="form.deviceName" :disabled="true" size="small" style="width: 100%;"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="绠$悊缂栧彿:" required>
+              <el-input v-model="form.managementNumber" :disabled="true" size="small" style="width: 100%;"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ俯搴�(掳C)', trigger: 'blur' }]" label="娓╁害(掳C):"
+                          prop="temperature">
+              <el-input v-model="form.temperature" :disabled="isShow" size="small" style="width: 100%;"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ユ箍搴�(%RH)', trigger: 'blur' }]" label="婀垮害(%RH):"
+                          prop="humidity">
+              <el-input v-model="form.humidity" :disabled="isShow" size="small" style="width: 100%;"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨浣跨敤鍓�', trigger: 'change' }]" label="浣跨敤鍓�:"
+                          prop="useBefore">
+              <el-radio-group v-model="form.useBefore" :disabled="isShow">
+                <el-radio :label="1">姝e父</el-radio>
+                <el-radio :label="0">涓嶆甯�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨浣跨敤鍚�', trigger: 'change' }]" label="浣跨敤鍚�:"
+                          prop="useAfter">
+              <el-radio-group v-model="form.useAfter" :disabled="isShow">
+                <el-radio :label="1">姝e父</el-radio>
+                <el-radio :label="0">涓嶆甯�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col v-if="form.useAfter === 0" :span="24">
+            <el-form-item :rules="[{ required: form.useAfter === 0, message: '璇疯緭鍏ュ紓甯告儏鍐�', trigger: 'blur' }]" label="寮傚父鎯呭喌:"
+                          prop="abnormal">
+              <el-input v-model="form.abnormal" :disabled="isShow" size="small" style="width: 100%;"
+                        type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヤ娇鐢ㄦ棩鏈�', trigger: 'blur' }]" label="浣跨敤鏃ユ湡:"
+                          prop="useDateList">
+
+              <el-date-picker
+                  v-model="form.useDateList"
+                  :disabled="isShow"
+                  value-format="yyyy-MM-dd"
+                  type="daterange"
+                  range-separator="鑷�"
+                  start-placeholder="寮�濮嬫棩鏈�"
+                  end-placeholder="缁撴潫鏃ユ湡">
+              </el-date-picker>
+              <!-- <el-date-picker
+                v-model="form.useDateList" :disabled="isShow" end-placeholder="缁撴潫鏃ユ湡" format="yyyy-MM-dd HH:mm:ss"
+                size="small"
+                start-placeholder="寮�濮嬫棩鏈�"
+                style="width:100%"
+                type="datetimerange"
+                value-format="yyyy-MM-dd HH:mm:ss">
+              </el-date-picker> -->
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ヤ娇鐢ㄤ汉', trigger: 'change' }]" label="浣跨敤浜�:"
+                          prop="usePerson">
+              <el-input v-model="form.usePerson" :disabled="isShow" size="small" style="width:100%"></el-input>
+              <!-- <el-select v-model="form.usePerson" placeholder="璇烽�夋嫨" :disabled="isShow" size="small" style="width:100%">
+                <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
+                </el-option>
+              </el-select> -->
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="澶囨敞:">
+              <el-input v-model="form.remark" :disabled="isShow" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="!isShow" @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button v-if="!isShow" type="primary" @click="saveRecord">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {
+  deviceRecordPage,
+  exportUseRecord,
+  selectDeviceByCode,
+  saveDeviceRecord,
+  updateDeviceRecord,
+  deleteDeviceRecord,
+} from '@/api/cnas/resourceDemand/device.js'
+import { selectUserCondition } from "@/api/system/user";
+export default {
+  props: {
+    clickNodeVal: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    // 鍒ゆ柇鏄惁鏄閮ㄥ垎绂�
+    isMenuList: {
+      type: Number,
+      default: 0
+    }
+  },
+  data() {
+    return {
+      search: {
+        size: 20,
+        current: 1,
+        total: 0,
+        sampleCode: '',
+        managementNumber: ''
+      },
+      responsiblePersonList: {},
+      isShow: false,
+      outLoading: false,
+      ratifyDialog: false,
+      exportDate: '',
+      userList: [],
+      form: {
+        // deviceId:'',
+        processNumber: '',
+        deviceName: '',
+        managementNumber: '',
+        //娓╁害
+        temperature: '',
+        //婀垮害
+        humidity: '',
+        //浣跨敤鍓�
+        useBefore: 1,
+        //浣跨敤鍚�
+        useAfter: 1,
+        //寮傚父鎯呭喌
+        abnormal: '',
+        useDateList: [],
+        //浣跨敤鏃ユ湡
+        useStartDate: null,
+        useEndDate: null,
+        //浣跨敤浜�
+        usePerson: '',
+        usePersonId: '',
+        //澶囨敞
+        remark: '',
+      },
+      dialogVisible: false,
+      operationType: '',
+      formParamList: [],
+    }
+  },
+  mounted() {
+    this.getTableList(this.clickNodeVal.value);
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.search.size = val
+      this.getTableList(this.clickNodeVal.value);
+    },
+    handleCurrentChange(val) {
+      this.search.current = val
+      this.getTableList(this.clickNodeVal.value);
+    },
+    resetSearch() {
+      this.search = {
+        size: 20,
+        current: 1,
+        total: 0,
+        sampleCode: '',
+        managementNumber: ''
+      }
+      this.getTableList(this.clickNodeVal.value);
+    },
+    async getTableList(deviceId) {
+      if (deviceId === undefined) {
+        deviceId = ''
+      }
+      await deviceRecordPage({
+        deviceId: deviceId,
+        ...this.search
+      }).then(res => {
+        if (res.code == 200) {
+          this.formParamList = res.data.records
+          this.search.total = res.data.total
+        }
+      })
+    },
+    // 鎵撳紑瀵煎嚭寮规閫夋嫨缂栧埗浜恒�佹壒鍑嗕汉
+    openHandleOut() {
+      this.ratifyDialog = true
+    },
+    //瀵煎嚭
+    handleDown() {
+      this.outLoading = true
+      exportUseRecord({
+        deviceId: this.clickNodeVal.value,
+        exportDate: this.exportDate
+      }).then(res => {
+        this.outLoading = false
+        const blob = new Blob([res], { type: 'application/octet-stream' });
+        this.$download.saveAs(blob, '璁惧浣跨敤璁板綍.doc')
+      })
+    },
+    //鏂板缓
+    openAdd() {
+      this.operationType = 'add'
+      this.getUserList()
+      selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
+        this.form.deviceName = res.data.deviceName
+        this.form.managementNumber = res.data.managementNumber
+        this.$nextTick(() => {
+          this.$refs['form'].clearValidate()
+        })
+      });
+    },
+    usePersonName(value) {
+      const index = this.userList.findIndex(item => item.id === value)
+      if (index > -1) {
+        this.form.usePerson = this.userList[index].name
+      }
+    },
+    //纭娣诲姞璁板綍
+    saveRecord() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.form.useStartDate = this.form.useDateList[0]
+          this.form.useEndDate = this.form.useDateList[1]
+          this.form.deviceId = this.clickNodeVal.value
+          if (this.operationType === 'add') {
+            saveDeviceRecord(this.form).then(res => {
+              if (res.code == 200) {
+                this.$message.success('鏂板鎴愬姛')
+                this.getTableList(this.clickNodeVal.value)
+                this.dialogVisible = false
+              }
+            })
+            this.dialogVisible = false;
+          } else {
+            updateDeviceRecord(this.form).then(res => {
+              if (res.code == 200) {
+                this.$message.success('淇敼鎴愬姛')
+                this.getTableList(this.clickNodeVal.value)
+                this.dialogVisible = false
+              }
+            })
+            this.dialogVisible = false;
+          }
+        }
+      });
+    },
+    //鏌ョ湅璇︽儏
+    showDetailsDialog(type, row) {
+      this.operationType = type;
+      console.log(row)
+      this.dialogVisible = true;
+      this.getUserList()
+      this.form = row;
+      let list = []
+      if (row.useStartDate === null) {
+        row.useStartDate = ''
+      }
+      if (row.useEndDate === null) {
+        row.useEndDate = ''
+      }
+      list.push(row.useStartDate)
+      list.push(row.useEndDate)
+      this.$set(this.form, 'useDateList', list)
+    },
+    handleDeleteClick(index, row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteDeviceRecord({ id: row.id }).then(res => {
+          this.formParamList.splice(index, 1);
+          this.$message({
+            type: 'success',
+            message: '鍒犻櫎鎴愬姛!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    getUserList() {
+      selectUserCondition().then(res => {
+        this.userList = res.data
+      })
+    },
+  },
+  watch: {
+    // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+    clickNodeVal(newVal) {
+      if (newVal.value) {
+        this.getTableList(newVal.value);
+      }
+    },
+    dialogVisible(newVal) {
+      if (newVal === false) {
+        this.form = {
+          // deviceId:'',
+          sampleCode: '',
+          deviceName: '',
+          managementNumber: '',
+          //娓╁害
+          temperature: '',
+          //婀垮害
+          humidity: '',
+          //浣跨敤鍓�
+          useBefore: 1,
+          //浣跨敤鍚�
+          useAfter: 1,
+          //寮傚父鎯呭喌
+          abnormal: '',
+          //浣跨敤鏃ユ湡
+          useDateList: [],
+          //浣跨敤浜�
+          usePersonId: '',
+          //澶囨敞
+          remark: '',
+        }
+        this.$refs.form.clearValidate()
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.tables {
+  width: 100%;
+  height: calc(100vh - 15em);
+}
+
+.el-from {
+  max-width: 400px;
+  margin: 0 auto;
+}
+
+.form-row {
+  display: flex;
+  justify-content: space-between;
+}
+
+.el-input {
+  width: calc(100% - 120px);
+  /* 纭繚杈撳叆妗嗗搴︿竴鑷� */
+}
+
+.form-row .el-form-item {
+  flex: 1;
+  /* 姣忎釜琛ㄥ崟椤瑰崰鎹浉鍚屾瘮渚嬬殑绌洪棿 */
+  margin-right: 100px;
+  /* 鍙�夛細涓哄彸渚у厓绱犳坊鍔犻棿璺� */
+}
+
+/* 绉婚櫎鏈�鍚庝竴涓厓绱犵殑鍙宠竟璺� */
+.form-row .el-form-item:last-child {
+  margin-right: 0;
+
+}
+
+.search {
+  background-color: #fff;
+  margin-top: 10px;
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.search_thing {
+  display: flex;
+  align-items: center;
+  height: 40px;
+
+}
+
+.search_label {
+  width: 140px;
+  font-size: 14px;
+  text-align: right;
+  margin-right: 10px;
+}
+
+.btns {
+  position: absolute;
+  right: 0px;
+  top: 50%;
+  transform: translate(0, -50%);
+}
+</style>

--
Gitblit v1.9.3