Преглед изворни кода

试剂每日质控记录子表组件

cyy пре 1 месец
родитељ
комит
c0d3d4d560
1 измењених фајлова са 665 додато и 0 уклоњено
  1. 665 0
      src/views/component/qualityControl/qualityControlChildTab.vue

+ 665 - 0
src/views/component/qualityControl/qualityControlChildTab.vue

@@ -0,0 +1,665 @@
+<!--该组件实际差值和实际偏倚有正负值-->
+<template>
+  <div>
+    <div v-if="show" class="reagentChange">
+      <el-row type="flex">
+        <el-col class="button">
+          <!-- <div class="title">111</div> -->
+          <div v-if="readonly" />
+          <div v-else>
+            <!-- <el-button
+              type="primary"
+              size="mini"
+              icon="ibps-icon-add"
+              @click="handleAdd"
+            >
+              添加</el-button
+            >
+            <el-button
+              type="danger"
+              size="mini"
+              icon="ibps-icon-remove"
+              @click="handleDelete"
+            >
+              删除</el-button
+            > -->
+          </div>
+        </el-col>
+      </el-row>
+      <el-row type="flex">
+        <el-col>
+          <el-table
+            ref="reagent"
+            :data="reagentDataFilter"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column type="selection" width="55" />
+            <el-table-column
+              label="试剂名称"
+              prop="shiJiMingCheng"
+              width="130"
+            />
+            <el-table-column label="品牌" prop="pinPai" width="130" />
+            <el-table-column label="批号" prop="piHao" width="130">
+              <template slot-scope="{ row }">
+                <el-input
+                  v-if="!disabled"
+                  v-model="row.piHao"
+                  size="mini"
+                  placeholder="请输入"
+                />
+                <span v-else>{{ row.piHao || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="失效期" prop="shiXiaoQiYi" width="140">
+              <template slot-scope="{ row }">
+                <el-date-picker
+                  v-if="!disabled"
+                  v-model="row.shiXiaoQiYi"
+                  type="date"
+                  placeholder="选择日期"
+                  format="yyyyMMdd"
+                  value-format="yyyyMMdd"
+                >
+                </el-date-picker>
+                <span v-else>{{ row.shiXiaoQiYi || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Mon${daysArr.length > 0 ? ':' + daysArr[0] : ''}`"
+              prop="zhouYi"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouYi">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouYi || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Tues${daysArr.length > 0 ? ':' + daysArr[1] : ''}`"
+              prop="zhouEr"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouEr">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouEr || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Wed${daysArr.length > 0 ? ':' + daysArr[2] : ''}`"
+              prop="zhouSan"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouSan">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouSan || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Thur${daysArr.length > 0 ? ':' + daysArr[3] : ''}`"
+              prop="zhouSi"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouSi">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouSi || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Fri${daysArr.length > 0 ? ':' + daysArr[4] : ''}`"
+              prop="zhouWu"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouWu">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouWu || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Sat${daysArr.length > 0 ? ':' + daysArr[5] : ''}`"
+              prop="zhouLiu"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouLiu">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouLiu || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              :label="`Sun${daysArr.length > 0 ? ':' + daysArr[6] : ''}`"
+              prop="zhouQi"
+              width="90"
+            >
+              <template slot-scope="{ row }">
+                <el-radio-group v-if="!disabled" v-model="row.zhouQi">
+                  <el-radio label="Y">Y</el-radio>
+                  <el-radio label="N">N</el-radio>
+                </el-radio-group>
+                <span v-else>{{ row.zhouQi || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="更换日期" prop="gengHuanRiQi" width="140">
+              <template slot-scope="{ row }">
+                <el-date-picker
+                  v-if="!disabled"
+                  v-model="row.gengHuanRiQi"
+                  type="date"
+                  placeholder="选择日期"
+                  format="yyyyMMdd"
+                  value-format="yyyyMMdd"
+                >
+                </el-date-picker>
+                <span v-else>{{ row.gengHuanRiQi || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="批号" prop="piHaoEr" width="130">
+              <template slot-scope="{ row }">
+                <el-input
+                  v-if="!disabled"
+                  v-model="row.piHaoEr"
+                  size="mini"
+                  placeholder="请输入"
+                />
+                <span v-else>{{ row.piHaoEr || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="失效期" prop="shiXiaoQiEr" width="140">
+              <template slot-scope="{ row }">
+                <el-date-picker
+                  v-if="!disabled"
+                  v-model="row.shiXiaoQiEr"
+                  type="date"
+                  placeholder="选择日期"
+                  format="yyyyMMdd"
+                  value-format="yyyyMMdd"
+                >
+                </el-date-picker>
+                <span v-else>{{ row.shiXiaoQiEr || '/' }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="备注" prop="beiZhu" width="140">
+              <template slot-scope="{ row }">
+                <el-input
+                  v-if="!disabled"
+                  type="textarea"
+                  :rows="2"
+                  placeholder="请输入内容"
+                  v-model="row.beiZhu"
+                >
+                </el-input>
+                <span v-else>{{ row.beiZhu || '/' }}</span>
+              </template>
+            </el-table-column>
+            <template v-if="lastShow" slot="append">
+              <!-- 自定义内容,例如一个按钮 -->
+              <div class="lastRow">
+                <div class="labelSty">操作人:</div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen1"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen2"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen3"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen4"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen5"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen6"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+                <div class="chooseSty">
+                  <ibps-user-selector
+                    v-model="caoZuoRen7"
+                    type="user"
+                    readonly-text="text"
+                    :disabled="disabled"
+                    :multiple="false"
+                    size="mini"
+                    :filter="filter"
+                    filtrate
+                    style="width: 100%"
+                    @change-link-data="changeGuanLiRen"
+                  />
+                </div>
+              </div>
+            </template>
+          </el-table>
+          <el-pagination
+            layout="total,sizes,prev, pager, next,jumper"
+            :current-page="requestPage.pageNo"
+            :page-size="requestPage.limit"
+            :page-sizes="[10, 15, 20, 30, 50, 100]"
+            :total="reagentData.length"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+          />
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+<script>
+import importTable from '@/business/platform/form/formrender/dynamic-form/components/import-table'
+import IbpsImport from '@/plugins/import'
+import { downloadFile } from '@/business/platform/file/utils'
+import { cloneDeep } from 'lodash'
+export default {
+  components: {
+    importTable,
+    IbpsUserSelector: () => ({
+      component: import('@/business/platform/org/selector'),
+      delay: 200
+    })
+  },
+  props: {
+    formData: {
+      type: Object,
+      default: () => {}
+    },
+    readonly: {
+      type: Boolean,
+      default: false
+    },
+    params: {
+      type: Object,
+      default: () => {}
+    }
+  },
+  data() {
+    return {
+      reagentData: [],
+      disabled: false,
+      show: true,
+      lastShow: false,
+      requestPage: {
+        limit: 20,
+        pageNo: 1
+      },
+      multipleSelection: [],
+      daysArr: [],
+      filter: [
+        {
+          descVal: '1',
+          includeSub: true,
+          old: 'position',
+          partyId: this.$store.getters.userInfo.employee.positions,
+          partyName: '',
+          scriptContent: '',
+          type: 'user',
+          userType: 'position'
+        }
+      ],
+      caoZuoRen1: '',
+      caoZuoRen2: '',
+      caoZuoRen3: '',
+      caoZuoRen4: '',
+      caoZuoRen5: '',
+      caoZuoRen6: '',
+      caoZuoRen7: ''
+    }
+  },
+  computed: {
+    reagentDataFilter() {
+      return this.reagentData.slice(
+        (this.requestPage.pageNo - 1) * this.requestPage.limit,
+        (this.requestPage.pageNo - 1) * this.requestPage.limit +
+          this.requestPage.limit
+      )
+    }
+  },
+  watch: {
+    'formData.mrzkjlzb': {
+      handler(value, old) {
+        if (value && value.length > 0) {
+          this.reagentData = value
+          this.lastShow = true
+        } else {
+          this.reagentData = []
+          this.lastShow = false
+        }
+      },
+      immediate: true
+    },
+    'formData.kaiShiShiJian': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.daysArr = this.getNextSevenDays(value)
+        } else {
+          this.daysArr = []
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheYi': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen1 = value
+        } else {
+          this.caoZuoRen1 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheEr': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen2 = value
+        } else {
+          this.caoZuoRen2 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheSan': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen3 = value
+        } else {
+          this.caoZuoRen3 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheSi': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen4 = value
+        } else {
+          this.caoZuoRen4 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheWu': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen5 = value
+        } else {
+          this.caoZuoRen5 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheLiu': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen6 = value
+        } else {
+          this.caoZuoRen6 = ''
+        }
+      },
+      immediate: true
+    },
+    'formData.caoZuoZheQi': {
+      handler(value, old) {
+        if (value && value !== '') {
+          this.caoZuoRen7 = value
+        } else {
+          this.caoZuoRen7 = ''
+        }
+      },
+      immediate: true
+    },
+    reagentData: {
+      handler(value, old) {
+        if (value.length > 0) {
+          this.$emit('change-data', 'mrzkjlzb', value)
+        }
+      },
+      deep: true
+    },
+    caoZuoRen1: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheYi', value)
+      },
+      deep: true
+    },
+    caoZuoRen2: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheEr', value)
+      },
+      deep: true
+    },
+    caoZuoRen3: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheSan', value)
+      },
+      deep: true
+    },
+    caoZuoRen4: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheSi', value)
+      },
+      deep: true
+    },
+    caoZuoRen5: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheWu', value)
+      },
+      deep: true
+    },
+    caoZuoRen6: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheLiu', value)
+      },
+      deep: true
+    },
+    caoZuoRen7: {
+      handler(value, old) {
+        this.$emit('change-data', 'caoZuoZheQi', value)
+      },
+      deep: true
+    }
+  },
+  mounted() {
+    const { first = '' } = this.$store.getters.level
+    const { deptList = [] } = this.$store.getters || {}
+  },
+  methods: {
+    handleSelectionChange(val) {
+      this.multipleSelection = val
+    },
+    // 当前页码改变
+    handleCurrentChange(val) {
+      this.requestPage.pageNo = val
+    },
+    // 页码选择器改变
+    handleSizeChange(val) {
+      this.requestPage.limit = val
+      this.requestPage.pageNo = 1
+    },
+    changeGuanLiRen(key, data) {
+      // this.form.fuZeRenDianHua = data?.mobile
+    },
+    // 去除小数*100精度方法(支持负数)
+    deleteAccuracy(num) {
+      // 处理负数
+      const isNegative = num < 0
+      const absoluteNum = Math.abs(num)
+
+      // 是否带小数点
+      if (absoluteNum.toString().includes('.')) {
+        // 保留小数点后面3位
+        const numArry = absoluteNum.toFixed(3).toString().split('.')
+        let result
+
+        // 整数位是否大于0
+        if (numArry[0] > 0) {
+          result =
+            Number(
+              numArry[0] +
+                numArry[1].substring(0, 2) +
+                '.' +
+                numArry[1].substring(2, 3)
+            ) + '%'
+        } else {
+          // 小数位第一位是否大于0
+          if (numArry[1][0] > 0) {
+            result =
+              Number(
+                numArry[1].substring(0, 2) + '.' + numArry[1].substring(2, 3)
+              ) + '%'
+          } else {
+            // 小数位第二位是否大于0
+            if (numArry[1][1] > 0) {
+              result =
+                Number(
+                  numArry[1].substring(1, 2) + '.' + numArry[1].substring(2, 3)
+                ) + '%'
+            } else {
+              result = Number(0 + '.' + numArry[1].substring(2, 3)) + '%'
+            }
+          }
+        }
+
+        // 恢复负号
+        return isNegative ? '-' + result : result
+      } else {
+        const result = absoluteNum * 100 + '%'
+        return isNegative ? '-' + result : result
+      }
+    },
+    /**
+     * 获取指定日期之后连续7天的日期数组
+     **/
+    getNextSevenDays(inputDate) {
+      // 转换为Date对象
+      const date = new Date(inputDate)
+      if (isNaN(date)) {
+        throw new Error('Invalid date')
+      }
+      const result = []
+      for (let i = 0; i < 7; i++) {
+        // 基于原始日期增加 i 天,避免修改原对象
+        const nextDate = new Date(date)
+        nextDate.setDate(date.getDate() + i)
+        const day = String(nextDate.getDate()).padStart(2, '0')
+        result.push(day)
+      }
+      return result
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.reagentChange {
+  margin-bottom: 20px;
+  .button {
+    display: flex;
+    justify-content: space-between;
+    padding: 0px 0px 0px 15px;
+    background: #f0ffff;
+    .title {
+      color: #999;
+      font-size: 12px;
+      font-weight: bold;
+      margin-bottom: 0;
+    }
+    .el-button {
+      margin: 0;
+    }
+  }
+  ::v-deep .el-table__append-wrapper {
+    width: 1765px;
+    .lastRow {
+      display: flex;
+      .labelSty {
+        width: 585px;
+        text-align: end;
+      }
+      .chooseSty {
+        width: 90px;
+      }
+    }
+  }
+}
+</style>