e53971d9779889889ff8153c391361606d640ab4..540b0797ac57daadcd5723a965609a6e1d24c4a2
2025-04-23 zhuo
修改系统名称
540b07 对比 | 目录
2025-04-23 zhuo
缓存存入由cookie修改为localStorage
c12fb3 对比 | 目录
2025-04-22 zhuo
样品出来导出调整
00d9d8 对比 | 目录
已修改8个文件
141 ■■■■■ 文件已修改
src/api/cnas/process/sampleDisposal.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/app.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/auth.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/disposal/sampleDisposal/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/disposal/sampleReceipt/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/process/sampleDisposal.js
@@ -81,6 +81,15 @@
  });
}
//样品处理导出
export function exportProcessTotaldeal(query) {
  return request({
    url: "/processTotaldeal/exportProcessTotaldeal",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// 样品接收-分页查询
export function pageProcessSample(query) {
src/layout/components/Navbar.vue
@@ -6,7 +6,7 @@
      <img src="@/assets/logo/ZTTlogo.png" />
    </div>
    <div class="center-menu">
      <span class="label">LIMS实验室管理系统</span>
      <span class="label">装备LIMS实验室管理系统</span>
    </div>
    <div class="right-menu">
      <div class="avatar-wrapper">
src/main.js
@@ -1,7 +1,5 @@
import Vue from "vue";
import Cookies from "js-cookie";
import Element from "element-ui";
import "./assets/styles/element-variables.scss";
@@ -108,7 +106,7 @@
 */
Vue.use(Element, {
  size: Cookies.get("size") || "medium", // set element-ui default size
  size: localStorage.getItem("size") || "medium", // set element-ui default size
});
Vue.config.productionTip = false;
src/store/modules/app.js
@@ -1,13 +1,11 @@
import Cookies from 'js-cookie'
const state = {
  sidebar: {
    opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
    opened: localStorage.getItem('sidebarStatus') ? !!+localStorage.getItem('sidebarStatus') : true,
    withoutAnimation: false,
    hide: false
  },
  device: 'desktop',
  size: Cookies.get('size') || 'medium'
  size: localStorage.getItem('size') || 'medium'
}
const mutations = {
@@ -18,13 +16,13 @@
    state.sidebar.opened = !state.sidebar.opened
    state.sidebar.withoutAnimation = false
    if (state.sidebar.opened) {
      Cookies.set('sidebarStatus', 1)
      localStorage.setItem('sidebarStatus', 1)
    } else {
      Cookies.set('sidebarStatus', 0)
      localStorage.setItem('sidebarStatus', 0)
    }
  },
  CLOSE_SIDEBAR: (state, withoutAnimation) => {
    Cookies.set('sidebarStatus', 0)
    localStorage.setItem('sidebarStatus', 0)
    state.sidebar.opened = false
    state.sidebar.withoutAnimation = withoutAnimation
  },
@@ -33,7 +31,7 @@
  },
  SET_SIZE: (state, size) => {
    state.size = size
    Cookies.set('size', size)
    localStorage.setItem('size', size)
  },
  SET_SIDEBAR_HIDE: (state, status) => {
    state.sidebar.hide = status
src/utils/auth.js
@@ -1,15 +1,13 @@
import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
export function getToken() {
  return Cookies.get(TokenKey)
  return localStorage.getItem(TokenKey)
}
export function setToken(token) {
  return Cookies.set(TokenKey, token)
  return localStorage.setItem(TokenKey, token)
}
export function removeToken() {
  return Cookies.remove(TokenKey)
  return localStorage.removeItem(TokenKey)
}
src/views/CNAS/process/disposal/sampleDisposal/index.vue
@@ -115,11 +115,11 @@
  doProcessDeal,
  addProcessDeal,
  submitProcessTotaldeal,
  pageProcessDeal,
  checkProcessTotaldeal,
  ratifyProcessTotaldeal,
  delProcessDeal,
  pageProcessTotaldeal, getProcessDeal, addProcessTotaldeal,
  exportProcessTotaldeal
} from "@/api/cnas/process/sampleDisposal";
export default {
  name: 'SampleDisposal',
@@ -273,9 +273,6 @@
              type: "text",
              clickFun: (row) => {
                this.handleDown0(row);
              },
              disabled: (row) => {
                return !row.url
              }
            },
            {
@@ -538,12 +535,11 @@
    },
    // 导出详情
    handleDown0(row) {
      if (!row.url) {
        this.$message.warning('暂无文件')
        return
      }
      // 后端下载
      this.$download.saveAs(row.url, row.month + ' 样品处理申请表');
      exportProcessTotaldeal({ id: row.id }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '样品处理' + '.docx');
      })
    },
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
src/views/CNAS/process/disposal/sampleReceipt/index.vue
@@ -32,6 +32,16 @@
      <el-row>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">收样日期:</div>
            <div class="search_input">
              <el-date-picker v-model="addInfo.receiveDate" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
                              value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">样品名称:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.sampleName"></el-input></div>
@@ -46,7 +56,15 @@
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">供样单位:</div>
            <div class="search_label">数量:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.num"></el-input>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">来样单位:</div>
            <div class="search_input">
              <el-select v-model="addInfo.sampleSupplier" size="small">
                <el-option :label="item.company" :value="item.company" v-for="(item, index) in customPageList"
@@ -57,29 +75,31 @@
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">数量:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.num"></el-input>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">处理方式:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.dealMethod"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">时间:</div>
            <div class="search_label">留样日期:</div>
            <div class="search_input">
              <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
              <el-date-picker v-model="addInfo.leaveDate" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
                              value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">样品状态:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.sampleState"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
        <div class="search_thing">
          <div class="search_label">处理日期:</div>
          <div class="search_input">
            <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
                            value-format="yyyy-MM-dd" style="width: 100%;">
            </el-date-picker>
          </div>
        </div>
      </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDialogVisible = false">取 消</el-button>
@@ -109,7 +129,6 @@
  addProcessSample,
  exportProcessSample
} from "@/api/cnas/process/sampleDisposal";
import {exportInconsistentDistribution} from "@/api/cnas/process/nonconformingWork";
export default {
  name: 'SampleReceipt',
  components: {
src/views/login.vue
@@ -5,7 +5,7 @@
    </div>
    <div class="rightForm">
      <div class="title_big">欢迎您登录!</div>
      <div class="title_small">LIMS实验室管理系统</div>
      <div class="title_small">装备LIMS实验室管理系统</div>
      <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
        <el-form-item prop="username">
          <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
@@ -27,7 +27,7 @@
<!--            <img :src="codeUrl" @click="getCode" class="login-code-img" />-->
<!--          </div>-->
<!--        </el-form-item>-->
        <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
<!--        <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>-->
        <el-form-item style="width:100%;">
          <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
            @click.native.prevent="handleLogin">
@@ -50,7 +50,6 @@
<script>
import { getCodeImg, getSsoAuthUrl } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
export default {
@@ -92,7 +91,7 @@
  },
  created() {
    // this.getCode();
    this.getCookie();
    // this.getCookie();
  },
  methods: {
    async goLogin() {
@@ -110,9 +109,9 @@
      });
    },
    getCookie() {
      const username = Cookies.get("username");
      const password = Cookies.get("password");
      const rememberMe = Cookies.get('rememberMe')
      const username = localStorage.getItem("username");
      const password = localStorage.getItem("password");
      const rememberMe = localStorage.getItem('rememberMe')
      this.loginForm = {
        username: username === undefined ? this.loginForm.username : username,
        password: password === undefined ? this.loginForm.password : decrypt(password),
@@ -123,15 +122,15 @@
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true;
          if (this.loginForm.rememberMe) {
            Cookies.set("username", this.loginForm.username, { expires: 30 });
            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
          } else {
            Cookies.remove("username");
            Cookies.remove("password");
            Cookies.remove('rememberMe');
          }
          // if (this.loginForm.rememberMe) {
          //   localStorage.setItem("username", this.loginForm.username, { expires: 30 });
          //   localStorage.setItem("password", encrypt(this.loginForm.password), { expires: 30 });
          //   localStorage.setItem('rememberMe', this.loginForm.rememberMe, { expires: 30 });
          // } else {
          //   localStorage.removeItem("username");
          //   localStorage.removeItem("password");
          //   localStorage.removeItem('rememberMe');
          // }
          this.$store.dispatch("Login", this.loginForm).then(() => {
            this.$router.push({ path: "/" }).catch(() => { });
          }).catch(() => {