zouyu
2025-03-11 0bb447f57ab45b86db18b0cfd7c2fda36da817d3
Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev
已修改6个文件
348 ■■■■■ 文件已修改
src/api/cnas/resourceDemand/device.js 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelTraining/Edit.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/device-overview.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/operationInstruction.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/resource-reservation.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/device.js
@@ -1198,11 +1198,18 @@
    data: data,
  });
}
//作业指导书查询
export function pageByPageQueryOfHomeworkInstructions(query) {
  return request({
    url: "/instruction/pageByPageQueryOfHomeworkInstructions",
    method: "get",
    params: query,
  });
}
//作业指导书 审批
export function approvalOfHomeworkInstructionManual(data) {
  return request({
    url: "/deviceInstruction/approvalOfHomeworkInstructionManual",
    url: "/instruction/approvalOfHomeworkInstructionManual",
    method: "post",
    data: data,
  });
@@ -1211,7 +1218,7 @@
//作业指导书 删除
export function homeworkGuidebook(query) {
  return request({
    url: "/deviceInstruction/homeworkGuidebook",
    url: "/instruction/homeworkGuidebook",
    method: "delete",
    params: query,
  });
@@ -1220,7 +1227,7 @@
//作业指导书 编辑查询
export function homeworkGuidebookEditor(query) {
  return request({
    url: "/deviceInstruction/homeworkGuidebookEditor",
    url: "/instruction/homeworkGuidebookEditor",
    method: "get",
    params: query,
  });
@@ -1229,7 +1236,7 @@
//作业指导书新增
export function newHomeworkGuidebookAdded(data) {
  return request({
    url: "/deviceInstruction/newHomeworkGuidebookAdded",
    url: "/instruction/newHomeworkGuidebookAdded",
    method: "post",
    data: data,
  });
@@ -1238,20 +1245,12 @@
//作业指导书受控文件删除
export function deleteHomeworkGuidebook(query) {
  return request({
    url: "/deviceInstruction/deleteHomeworkGuidebook",
    url: "/instruction/deleteHomeworkGuidebook",
    method: "delete",
    params: query,
  });
}
//作业指导书 查询
export function pageByPageQueryOfHomeworkInstructions(query) {
  return request({
    url: "/deviceInstruction/pageByPageQueryOfHomeworkInstructions",
    method: "get",
    params: query,
  });
}
//设备预约接口
export function reservationSelectDevice(query) {
  return request({
@@ -1260,7 +1259,7 @@
    params: query,
  });
}
//设备预约接口
//设备预约接口 删除
export function reservationDelete(query) {
  return request({
    url: "/reservation/delete",
@@ -1268,7 +1267,7 @@
    params: query,
  });
}
//设备预约接口
//设备预约接口 保存
export function reservationSave(query) {
  return request({
    url: "/reservation/save",
src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelList/index.vue
@@ -15,7 +15,8 @@
        <el-button :loading="synchronousLoading" size="small" type="primary" @click="synchronous"
          :v-show="departId">同步第三方人员信息</el-button>
        <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导出</el-button>
        <el-button size="small" type="primary" @click="selectUserDia = true">新建</el-button>
        <el-button size="small" type="primary"
          @click="selectUserDia = true, getList(), queryParams.name = '', multipleSelection = []">新建</el-button>
      </span>
    </div>
    <div class="search-table">
@@ -60,13 +61,15 @@
        <div class="search_thing">
          <div class="search_label">用户名:</div>
          <div class="search_input">
            <el-input v-model="addUserTableInfo.entity.name" clearable placeholder="请输入" size="small"
              @keyup.enter.native="$refs.ValueTable.selectList()"></el-input>
            <el-input v-model="queryParams.name" clearable placeholder="请输入" size="small"
              @keyup.enter.native="getList()" style="width: 200px;"></el-input>
          </div>
        </div>
      </div>
      <div v-if="selectUserDia" class="body" style="height: 60vh;">
        <ValueTable ref="ValueTable" :componentData="addUserTableInfo" :url="$api.user.selectUserList" />
        <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
          :page="personPage" @pagination="pagination" :isSelection="true"
          :handleSelectionChange="handleSelectionChange"></lims-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="selectUserDia = false">取 消</el-button>
@@ -77,7 +80,7 @@
</template>
<script>
import ValueTable from '@/components/Table/value-table.vue';
import limsTable from "@/components/Table/lims-table.vue";
import {
  getEmployees,
  basicInformationOfPersonnelSelectPage,
@@ -85,11 +88,12 @@
  upUserDepardLimsId,
  exportPersonBasicInfo,
  exportPersonBasicInfoById,
  selectUserList,
} from '@/api/cnas/personnel/personnelInfo.js'
export default {
  name: 'PersonnelList',
  // import 引入的组件需要注入到对象中才能使用
  components: { ValueTable },
  components: { limsTable },
  props: {
    departId: {
      type: Number,
@@ -109,6 +113,8 @@
  data() {
    // 这里存放数据
    return {
      entity: {},
      multipleSelection: [],
      synchronousLoading: false,
      page: {
        size: 20,
@@ -117,46 +123,61 @@
      outLoading: false,
      tableLoading: false,
      tableData: [], // 人员总列表数据
      selectUserDia: false, // 添加人员弹框
      entity: {
        name: '',
        orderBy: {
          field: 'id',
          order: 'asc'
      selectUserDia: false, // 添加人员弹框,
      stateList: [
        {
          value: 1,
          type: 'success',
          label: '启用'
        },
        {
          value: 0,
          type: 'danger',
          label: '停用'
        }
      ],
      queryParams: {
        name: ''
      },
      addUserTableInfo: {
        name: null,
        entity: {
          isCustom: 0,
          orderBy: {
            field: 'id',
            order: 'asc'
          }
      tableData: [],
      column: [
        { label: "姓名", prop: "name" },
        { label: "账号", prop: "account" },
        {
          label: "角色",
          prop: "roleName",
        },
        isIndex: true,
        showSelect: true,
        select: true,
        do: [],
        tagField: {
          state: {
            select: [
              {
                value: 1,
                type: 'success',
                label: '启用'
              },
              {
                value: 0,
                type: 'danger',
                label: '停用'
              }
            ]
          }
        {
          label: "状态", prop: "state", dataType: "tag",
          formatData: (params) => {
            let index = this.stateList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.stateList[index].label;
            } else {
              return null;
            }
          },
          formatType: (params) => {
            let index = this.stateList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.stateList[index].type;
            } else {
              return null;
            }
          },
        },
        selectField: {},
        upUserDepardLimsIdPower: true
        { label: "电话号码", prop: "phone" },
      ],
      personPage: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
    };
  },
  mounted() {
@@ -232,12 +253,15 @@
      this.page.current = val;
      this.refreshTable();
    },
    handleSelectionChange(val) {
      this.multipleSelection = val
    },
    selectUser() {
      if (!this.currentCompaniesList.length > 0) {
        this.$message.warning("请选择部门!")
        return;
      }
      let selects = this.$refs.ValueTable.multipleSelection;
      let selects = this.multipleSelection;
      if (selects.length == 0) {
        this.$message.error('未选择数据');
        return;
@@ -265,6 +289,27 @@
      });
      this.$emit('refreshTree')
    },
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...this.personPage };
      delete param.total;
      selectUserList({ ...param })
        .then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData = res.data.records;
            this.personPage.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    pagination({ page, limit }) {
      this.personPage.current = page;
      this.personPage.size = limit;
      this.getList();
    },
    handleDown() {
      this.outLoading = true;
      let entity = this.HaveJson(this.entity)
src/views/CNAS/personnel/personnelInfo/Department/components/PersonnelTraining/Edit.vue
@@ -167,14 +167,17 @@
        <div class="search_thing">
          <div class="search_label">用户名:</div>
          <div class="search_input">
            <el-input v-model="addUserTableInfo.entity.name" clearable placeholder="请输入" size="small"
            <el-input v-model="queryParams.name" clearable placeholder="请输入" size="small"
              @keyup.enter.native="$refs.ValueTable.selectList()"></el-input>
          </div>
        </div>
      </div>
      <div v-if="selectUserDia" class="body" style="height: 60vh;">
        <ValueTable ref="ValueTable" :componentData="addUserTableInfo" :isSelectedList="isSelectedList"
          :url="$api.user.selectUserList" />
        <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
          :page="page" @pagination="pagination" :isSelection="true"
          :handleSelectionChange="handleSelectionChange"></lims-table>
        <!-- <ValueTable ref="ValueTable" :componentData="addUserTableInfo" :isSelectedList="isSelectedList"
          :url="$api.user.selectUserList" /> -->
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="selectUserDia = false">取 消</el-button>
@@ -187,7 +190,7 @@
<script>
import TableCard from '@/components/TableCard/index.vue';
import limsTable from "@/components/Table/lims-table.vue";
import ValueTable from '@/components/Table/value-table.vue';
// import ValueTable from '@/components/Table/value-table.vue';
import filePreview from "@/components/Preview/filePreview.vue";
import {
  fileDownLoad,
@@ -198,13 +201,14 @@
  newPersonnelAddedToTrainingRecords,
  deleteTrainingAndAssessmentRecords,
  trainingAndAssessmentRecordsAdded,
  selectUserList,
} from '@/api/cnas/personnel/personnelInfo.js'
import { selectUserCondition } from "@/api/system/user";
import { mapGetters } from "vuex";
export default {
  name: 'Edit',
  // import 引入的组件需要注入到对象中才能使用
  components: { ValueTable, limsTable, TableCard, filePreview },
  components: { limsTable, TableCard, filePreview },
  props: {
    currentRow: {
      type: Object,
@@ -286,7 +290,60 @@
        upUserDepardLimsIdPower: true
      },
      multipleSelection: [],
      multipleSelections: [],
      userList: [],
      stateList: [
        {
          value: 1,
          type: 'success',
          label: '启用'
        },
        {
          value: 0,
          type: 'danger',
          label: '停用'
        }
      ],
      queryParams: {},
      tableData: [],
      column: [
        { label: "姓名", prop: "name" },
        { label: "账号", prop: "account" },
        {
          label: "角色",
          prop: "roleName",
        },
        {
          label: "状态", prop: "state", dataType: "tag",
          formatData: (params) => {
            let index = this.stateList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.stateList[index].label;
            } else {
              return null;
            }
          },
          formatType: (params) => {
            let index = this.stateList.findIndex(
              (item) => item.value == params
            );
            if (index > -1) {
              return this.stateList[index].type;
            } else {
              return null;
            }
          },
        },
        { label: "电话号码", prop: "phone" },
      ],
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
    };
  },
  computed: {
@@ -394,12 +451,37 @@
        this.$message.success("操作成功!")
      }
    },
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...this.page };
      delete param.total;
      selectUserList({ ...param })
        .then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData = res.data.records;
            this.page.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.getList();
    },
    handleSelectionChange(val) {
      this.multipleSelections = val
    },
    addPerson() {
      this.isSelectedList = this.trainingTableData.map(item => item.userId)
      this.getList()
      this.selectUserDia = true;
    },
    selectUser() {
      let selects = this.$refs.ValueTable.multipleSelection;
      let selects = this.multipleSelections;
      if (selects.length == 0) {
        this.$message.error('未选择数据');
        return;
src/views/CNAS/resourceDemand/device/component/device-overview.vue
@@ -145,8 +145,8 @@
<template>
  <div class="role_manage">
    <div>
      <el-form :model="entity" inline label-position="right" label-width="80px">
    <div style="margin-top: 10px">
      <el-form :model="entity" inline label-position="right">
        <el-form-item label="状态:">
          <el-select v-model="entity.deviceStatus" placeholder="全部" size="small" clearable>
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
@@ -164,24 +164,6 @@
          @click="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()">查 询</el-button>
        </el-form-item>
      </el-form>
      <!-- <div class="search_thing">
        <div class="search_label">状态:</div>
        <el-select v-model="entity.deviceStatus" placeholder="全部" size="small" clearable>
          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
      </div>
      <div class="search_thing">
        <div class="search_label">设备名称:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable
            v-model="entity.deviceName"></el-input>
            </div>
      </div> -->
      <!-- <div class="search_thing" style="padding-left: 30px;">
      </div> -->
    </div>
    <div class="table" v-loading="loading">
      <scroll-pagination @load="refreshTable()" :finishLoding="finishLoding" :list="list"
@@ -255,7 +237,6 @@
      entity: {
        deviceStatus: null,
        deviceName: null,
        orderBy: { field: "id", order: "asc" }
      },
      options: [],
      list: [],
@@ -298,8 +279,8 @@
        ...this.entity
      }).then(res => {
        if (res.code == 200) {
          this.total = res.data.body.total
          let list = res.data.body.records.map(m => {
          this.total = res.data.total
          let list = res.data.records.map(m => {
            switch (m.deviceStatus) {
              case 0:
                // 正常
src/views/CNAS/resourceDemand/device/component/operationInstruction.vue
@@ -31,9 +31,9 @@
        <template v-slot="scope">
          <el-button type="text" size="small" @click="downloadFile(scope.row.fileSystemName)">下载</el-button>
          <el-button type="text" size="small" style="color: red;"
            @click="deleteHomeworkGuidebook(scope.row)">删除</el-button>
          <el-button type="text" size="small" @click="instructionEditFun(scope.row)">编辑</el-button>
          <el-button type="text" size="small" @click="approval(scope.row)">审批</el-button>
            @click="deleteHomeworkGuidebook(scope.row)" :disabled="scope.row.status === true">删除</el-button>
          <el-button type="text" size="small" @click="instructionEditFun(scope.row)" :disabled="scope.row.status === true">编辑</el-button>
          <el-button type="text" size="small" @click="approval(scope.row)" :disabled="scope.row.status === true">审批</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -309,18 +309,7 @@
      });
    },
    downloadFile(fileName) {
      let state = /\.(jpg|jpeg|png|gif)$/i.test(fileName)
      if (state) {
        let url = this.javaApi + '/img/' + fileName;
        fileDownload.downloadIamge(url, fileName)
      } else {
        const url = this.javaApi + '/word/' + fileName
        const link = document.createElement('a');
        link.href = url;
        link.download = fileName;
        link.click();
        this.$message.success('下载成功')
      }
      this.$download.saveAs(fileName, fileName)
    },
    instructionEditFun(row) {
      this.dialogVisible = true
src/views/CNAS/resourceDemand/device/component/resource-reservation.vue
@@ -2,8 +2,7 @@
<template>
  <div class="role_manage">
    <el-row class="title">
      <el-col :span="8" style="text-align: left;">预定总览</el-col>
      <el-col :span="16" style="text-align: right;padding-bottom:10px">
      <el-col :span="24" style="text-align: right;padding:10px 0">
        <el-date-picker
          v-model="startTime"
          format="yyyy-MM-dd"
@@ -19,7 +18,7 @@
          size="mini"
          type="date"
          value-format="yyyy-MM-dd"/>
        <el-button size="mini" type="primary" @click="ValidateAndQuery">查 询</el-button>
        <el-button size="mini" type="primary" @click="ValidateAndQuery" style="margin-left: 10px">查 询</el-button>
      </el-col>
    </el-row>
    <div class="table-container">
@@ -134,7 +133,6 @@
    }
  },
  data() {
    return {
      timeSlots: ['09:00-12:00', '13:00-18:00', '18:00-22:00'],
      dates: [],
@@ -154,7 +152,6 @@
      startTime: '',
      endTime: '',
      entity: {
        deviceName: null,
        laboratoryName: '',
        storagePoint: '',
      },
@@ -169,15 +166,6 @@
        reservationSpecification: ''
      },
      total: '',
      componentData: {
        entity: {
          largeCategory: null,
          orderBy: {
            field: 'id',
            order: 'asc'
          }
        },
      },
      yuyue: null,
      yuyuetime: '',
      rules: {
@@ -202,14 +190,12 @@
      this.clickSidebar(newVal)
    }
  },
  created() {
    this.clickSidebar(this.clickNodeVal)
    this.initDate();
  },
  mounted() {
    this.getStartTimeAndEndTime();
    // this.getStartTimeAndEndTime();
  },
  methods: {
    isBeforeDate() {
@@ -218,7 +204,7 @@
      const appointment = this.appointment && this.appointment.split('-')
      let appointment0 = ''
      let appointment1 = ''
      if (appointment !== '') {
      if (appointment) {
        appointment0 = appointment[0].slice(0, 2)
        appointment1 = appointment[1].slice(0, 2)
      }
@@ -238,7 +224,7 @@
      if (!row || row.dateList === null || row.dateList === undefined || row.dateList === "") {
        return '预约';
      }
      var dateLst = row.dateList
      const dateLst = row.dateList
      for (const dateLstElement of dateLst) {
        if (dateLstElement.date === date) {
          if (dateLstElement.value === 0) {
@@ -312,12 +298,16 @@
    getStartTimeAndEndTime() {
      //查询逻辑
      this.tableLoading = true;
      reservationSelectDevice({
          current: this.currentPage,
          size: this.pageSize,
        ...this.entity,
        laboratoryNameIsNull: this.laboratoryNameIsNull
      }).then(res => {
      const params = {
        current: this.currentPage,
        size: this.pageSize,
        starttime: this.startTime,
        endtime: this.endTime,
        laboratoryNameIsNull: this.laboratoryNameIsNull,
        laboratoryName: this.entity.laboratoryName,
        storagePoint: this.entity.storagePoint,
      }
      reservationSelectDevice(params).then(res => {
        this.tableLoading = false;
        if (res.code === 200) {
          this.tableData = res.data;
@@ -326,17 +316,20 @@
        this.tableLoading = false;
      })
    },
    // 打开预约弹框
    openModal(date, row) {
      console.log('date', date);
      console.log('row', row);
      this.yuyue = row;
      this.yuyuetime = date;
      this.appointment = row.time
      this.showModal = true;
      this.getList();
    },
    // 打开新建预定弹框
    openAdd() {
      this.addVisiable = true;
      this.addReservation.deviceId = this.yuyue.id;
      // this.addReservation.deviceNumber = this.yuyue.deviceNumber;
      this.addReservation.deviceName = this.yuyue.deviceName;
      this.addReservation.reservationTime = this.yuyuetime + " " + this.yuyue.time;
      this.addReservation.specificTime = this.yuyue.time;
@@ -393,9 +386,10 @@
        }
      });
    },
    // 预定信息查询
    getList() {
      const params = {
        selectReservationParameterPage: this.yuyue.id,
        deviceId: this.yuyue.id,
        reservationTime: this.yuyuetime,
        specificTime: this.yuyue.time,
      }