From 5b0b688ff9f1bdf08ef651718708aa42d1b2477b Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 18 二月 2025 17:31:12 +0800
Subject: [PATCH] 完成实验室能力档案搬迁

---
 src/components/Table/lims-table.vue                    |  309 ++++++++--------
 src/api/cnas/process/method/standardMethod.js          |   55 +++
 src/api/performance/class.js                           |    6 
 src/views/CNAS/process/method/standardMethod/index.vue |  489 +++++++++++++++++++++++++++
 src/views/performance/class/index.vue                  |  211 +++++------
 5 files changed, 796 insertions(+), 274 deletions(-)

diff --git a/src/api/cnas/process/method/standardMethod.js b/src/api/cnas/process/method/standardMethod.js
new file mode 100644
index 0000000..737e740
--- /dev/null
+++ b/src/api/cnas/process/method/standardMethod.js
@@ -0,0 +1,55 @@
+import request from "@/utils/request";
+
+//鑾峰彇鏍囧噯鏂规硶鍒楄〃
+export function selectStandardMethodList(query) {
+  return request({
+    url: "/standardMethod/selectStandardMethodList",
+    method: "get",
+    params: query,
+  });
+}
+
+//鍒犻櫎鏍囧噯鏂规硶
+export function delStandardMethod(query) {
+  return request({
+    url: "/standardMethod/delStandardMethod",
+    method: "delete",
+    params: query,
+  });
+}
+
+// 娣诲姞鏍囧噯鏂规硶
+export function addStandardMethod(data) {
+  return request({
+    url: "/standardMethod/addStandardMethod",
+    method: "post",
+    data: data,
+  });
+}
+
+// 淇敼鏍囧噯鏂规硶
+export function upStandardMethod(data) {
+  return request({
+    url: "/standardMethod/upStandardMethod",
+    method: "post",
+    data: data,
+  });
+}
+
+//鑾峰彇浜у搧鏋舵瀯
+export function getStandardTree2(query) {
+  return request({
+    url: "/standardTree/getStandardTree2",
+    method: "get",
+    params: query,
+  });
+}
+
+// 瀵煎叆鏍囧噯鏄庣粏
+export function importStandardDetails(data) {
+  return request({
+    url: "/standardMethod/importStandardDetails",
+    method: "post",
+    data: data,
+  });
+}
diff --git a/src/api/performance/class.js b/src/api/performance/class.js
index 38c2c3a..b61e395 100644
--- a/src/api/performance/class.js
+++ b/src/api/performance/class.js
@@ -90,10 +90,10 @@
   });
 }
 
-// 鑾峰彇鐢ㄦ埛鍒楄〃 (鐢ㄤ簬鐝,宸ユ椂)
-export function selectUserList(query) {
+// 鑾峰彇鐢ㄦ埛鍒楄〃
+export function selectUserCondition(query) {
   return request({
-    url: "/user/selectUserList",
+    url: "/system/newUser/selectUserCondition",
     method: "get",
     params: query,
   });
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index bf7a97b..d6a75c2 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -19,169 +19,166 @@
       @current-change="currentChange"
       @selection-change="handleSelectionChange"
     >
-      <template v-if="isSelection">
-        <el-table-column type="selection" width="55" />
-      </template>
-      <template>
-        <el-table-column
-          align="center"
-          label="搴忓彿"
-          type="index"
-          width="60"
-          :index="indexMethod"
-        />
-      </template>
+      <el-table-column type="selection" width="55" v-if="isSelection" />
+      <el-table-column
+        align="center"
+        label="搴忓彿"
+        type="index"
+        width="60"
+        :index="indexMethod"
+      />
 
-      <template v-for="(item, index) in column">
-        <el-table-column
-          :column-key="item.columnKey"
-          :filter-method="item.filterHandler"
-          :filter-multiple="item.filterMultiple"
-          :filtered-value="item.filteredValue"
-          :filters="item.filters"
-          :fixed="item.fixed"
-          :label="item.label"
-          :min-width="item.minWidth"
-          :prop="item.prop"
-          show-overflow-tooltip
-          :sortable="item.sortable ? true : false"
-          :type="item.type"
-          :width="item.width"
-          align="center"
+      <el-table-column
+        v-for="(item, index) in column"
+        :key="index"
+        :column-key="item.columnKey"
+        :filter-method="item.filterHandler"
+        :filter-multiple="item.filterMultiple"
+        :filtered-value="item.filteredValue"
+        :filters="item.filters"
+        :fixed="item.fixed"
+        :label="item.label"
+        :min-width="item.minWidth"
+        :prop="item.prop"
+        show-overflow-tooltip
+        :sortable="item.sortable ? true : false"
+        :type="item.type"
+        :width="item.width"
+        align="center"
+      >
+        <!-- <div class="123" v-if="item.type == ''"> -->
+        <template
+          v-if="item.hasOwnProperty('colunmTemplate')"
+          :slot="item.colunmTemplate"
+          slot-scope="scope"
         >
-          <!-- <div class="123" v-if="item.type == ''"> -->
-          <template
-            v-if="item.hasOwnProperty('colunmTemplate')"
-            :slot="item.colunmTemplate"
-            slot-scope="scope"
-          >
+          <slot
+            v-if="item.theadSlot"
+            :index="index"
+            :name="item.theadSlot"
+            :row="scope.row"
+          />
+        </template>
+
+        <template slot-scope="scope">
+          <!-- 鎻掓Ы -->
+          <div v-if="item.dataType == 'slot'">
             <slot
-              v-if="item.theadSlot"
-              :index="index"
-              :name="item.theadSlot"
+              v-if="item.slot"
+              :index="scope.$index"
+              :name="item.slot"
               :row="scope.row"
             />
-          </template>
+          </div>
+          <!-- 杩涘害鏉� -->
+          <div v-else-if="item.dataType == 'progress'">
+            <el-progress :percentage="Number(scope.row[item.prop])" />
+          </div>
+          <!-- 鍥剧墖 -->
+          <div v-else-if="item.dataType == 'image'">
+            <img
+              :src="javaApi + '/img/' + item.prop"
+              alt=""
+              style="width: 40px; height: 40px; margin-top: 10px"
+            />
+          </div>
 
-          <template slot-scope="scope">
-            <!-- 鎻掓Ы -->
-            <div v-if="item.dataType == 'slot'">
-              <slot
-                v-if="item.slot"
-                :index="scope.$index"
-                :name="item.slot"
-                :row="scope.row"
-              />
-            </div>
-            <!-- 杩涘害鏉� -->
-            <div v-else-if="item.dataType == 'progress'">
-              <el-progress :percentage="Number(scope.row[item.prop])" />
-            </div>
-            <!-- 鍥剧墖 -->
-            <div v-else-if="item.dataType == 'image'">
-              <img :src="javaApi+'/img/'+item.prop"
-                   alt="" style="width: 40px;height: 40px;margin-top: 10px;">
-            </div>
-
-            <!-- tag -->
-            <div v-else-if="item.dataType == 'tag'">
-              <el-tag
-                v-if="
-                  typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
-                  'string'
-                "
-                :title="scope.row[item.prop] | formatters(item.formatData)"
-                :type="formatType(scope.row[item.prop], item.formatType)"
-                >{{
-                  scope.row[item.prop] | formatters(item.formatData)
-                }}</el-tag
-              >
-              <el-tag
-                v-for="(tag, index) in dataTypeFn(
-                  scope.row[item.prop],
-                  item.formatData
-                )"
-                v-else-if="
-                  typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
-                  'object'
-                "
-                :key="index"
-                :title="scope.row[item.prop] | formatters(item.formatData)"
-                :type="formatType(tag, item.formatType)"
-                >{{
-                  item.tagGroup
+          <!-- tag -->
+          <div v-else-if="item.dataType == 'tag'">
+            <el-tag
+              v-if="
+                typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
+                'string'
+              "
+              :title="scope.row[item.prop] | formatters(item.formatData)"
+              :type="formatType(scope.row[item.prop], item.formatType)"
+              >{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
+            >
+            <el-tag
+              v-for="(tag, index) in dataTypeFn(
+                scope.row[item.prop],
+                item.formatData
+              )"
+              v-else-if="
+                typeof dataTypeFn(scope.row[item.prop], item.formatData) ==
+                'object'
+              "
+              :key="index"
+              :title="scope.row[item.prop] | formatters(item.formatData)"
+              :type="formatType(tag, item.formatType)"
+              >{{
+                item.tagGroup
+                  ? tag[item.tagGroup.label]
                     ? tag[item.tagGroup.label]
-                      ? tag[item.tagGroup.label]
-                      : tag
                     : tag
-                }}</el-tag
-              >
-              <el-tag
-                v-else
-                :title="scope.row[item.prop] | formatters(item.formatData)"
-                :type="formatType(scope.row[item.prop], item.formatType)"
-                >{{
-                  scope.row[item.prop] | formatters(item.formatData)
-                }}</el-tag
-              >
-            </div>
+                  : tag
+              }}</el-tag
+            >
+            <el-tag
+              v-else
+              :title="scope.row[item.prop] | formatters(item.formatData)"
+              :type="formatType(scope.row[item.prop], item.formatType)"
+              >{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
+            >
+          </div>
 
-            <!-- 鎸夐挳 -->
-            <div v-else-if="item.dataType == 'action'">
-              <template v-for="(o, key) in item.operation">
+          <!-- 鎸夐挳 -->
+          <div v-else-if="item.dataType == 'action'">
+            <template v-for="(o, key) in item.operation">
+              <el-button
+                v-if="o.type != 'upload'"
+                size="mini"
+                v-show="o.showHide ? o.showHide(scope.row) : true"
+                :disabled="o.disabled ? o.disabled(scope.row) : false"
+                :icon="iconFn(o)"
+                :plain="o.plain"
+                :style="{ color: o.name === '鍒犻櫎' ? '#f56c6c' : o.color }"
+                :type="o.type | typeFn(scope.row)"
+                @click="o.clickFun(scope.row)"
+                :key="key"
+              >
+                {{ o.name }}
+              </el-button>
+              <el-upload
+                action="#"
+                size="mini"
+                :on-change="
+                  (file, fileList) => o.clickFun(scope.row, file, fileList)
+                "
+                :multiple="o.multiple ? o.multiple : false"
+                :limit="o.limit ? o.limit : 1"
+                :disabled="o.disabled ? o.disabled(scope.row) : false"
+                :accept="
+                  o.accept
+                    ? o.accept
+                    : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+                "
+                v-if="o.type == 'upload'"
+                style="display: inline-block; width: 50px"
+                v-show="o.showHide ? o.showHide(scope.row) : true"
+                :auto-upload="false"
+                :on-exceed="onExceed"
+                :show-file-list="false"
+                :key="key"
+              >
                 <el-button
-                  v-if="o.type != 'upload'"
-                  size="mini"
-                  v-show="o.showHide ? o.showHide(scope.row) : true"
+                  :size="o.size ? o.size : 'small'"
+                  type="text"
                   :disabled="o.disabled ? o.disabled(scope.row) : false"
-                  :icon="iconFn(o)"
-                  :plain="o.plain"
-                  :style="{ color: o.name === '鍒犻櫎' ? '#f56c6c' : o.color }"
-                  :type="o.type | typeFn(scope.row)"
-                  @click="o.clickFun(scope.row)"
+                  >{{ o.name }}</el-button
                 >
-                  {{ o.name }}
-                </el-button>
-                <el-upload
-                  action="#"
-                  size="mini"
-                  :on-change="
-                    (file, fileList) => o.clickFun(scope.row, file, fileList)
-                  "
-                  :multiple="o.multiple ? o.multiple : false"
-                  :limit="o.limit ? o.limit : 1"
-                  :disabled="o.disabled ? o.disabled(scope.row) : false"
-                  :accept="
-                    o.accept
-                      ? o.accept
-                      : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
-                  "
-                  v-if="o.type == 'upload'"
-                  style="display: inline-block; width: 50px"
-                  v-show="o.showHide ? o.showHide(scope.row) : true"
-                  :auto-upload="false"
-                  :on-exceed="onExceed"
-                  :show-file-list="false"
-                >
-                  <el-button
-                    :size="o.size ? o.size : 'small'"
-                    type="text"
-                    :disabled="o.disabled ? o.disabled(scope.row) : false"
-                    >{{ o.name }}</el-button
-                  >
-                </el-upload>
-              </template>
-            </div>
-            <!-- 榛樿绾睍绀烘暟鎹� -->
-            <div v-else>
-              <span v-if="!item.formatData">{{ scope.row[item.prop] }}</span>
-              <span v-else>{{
-                scope.row[item.prop] | formatters(item.formatData)
-              }}</span>
-            </div>
-          </template>
-        </el-table-column>
-      </template>
+              </el-upload>
+            </template>
+          </div>
+          <!-- 榛樿绾睍绀烘暟鎹� -->
+          <div v-else class="cell" style="width: 100%">
+            <span v-if="!item.formatData">{{ scope.row[item.prop] }}</span>
+            <span v-else>{{
+              scope.row[item.prop] | formatters(item.formatData)
+            }}</span>
+          </div>
+        </template>
+      </el-table-column>
     </el-table>
     <pagination
       v-show="page.total > 0"
@@ -392,4 +389,14 @@
 .el-table >>> .el-table__empty-text {
   text-align: center;
 }
+.cell {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  padding-right: 4px;
+  padding-left: 4px;
+}
+>>> .cell {
+  padding: 0 !important;
+}
 </style>
diff --git a/src/views/CNAS/process/method/standardMethod/index.vue b/src/views/CNAS/process/method/standardMethod/index.vue
new file mode 100644
index 0000000..1b63b97
--- /dev/null
+++ b/src/views/CNAS/process/method/standardMethod/index.vue
@@ -0,0 +1,489 @@
+<style scoped>
+.search {
+  background-color: #fff;
+  height: 80px;
+  display: flex;
+  align-items: center;
+}
+
+.search_thing {
+  width: 350px;
+  display: flex;
+  align-items: center;
+}
+
+.search_label {
+  width: 110px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: calc(100% - 110px);
+}
+
+.table {
+  margin-top: 10px;
+  background-color: #fff;
+  width: calc(100% - 40px);
+  height: calc(100% - 60px - 80px - 10px - 40px);
+  padding: 20px;
+}
+</style>
+
+<template>
+  <div class="standard_method">
+    <div class="search">
+      <div class="search_thing">
+        <div class="search_label">鏍囧噯缂栧彿锛�</div>
+        <div class="search_input">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="queryParams.code"
+            @keyup.enter.native="refreshTable()"
+          ></el-input>
+        </div>
+      </div>
+      <div class="search_thing">
+        <div class="search_label">鏍囧噯鍚嶇О锛�</div>
+        <div class="search_input">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="queryParams.name"
+            @keyup.enter.native="refreshTable()"
+          ></el-input>
+        </div>
+      </div>
+      <div class="search_thing" style="padding-left: 30px">
+        <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="refreshTable()"
+          >鏌� 璇�</el-button
+        >
+      </div>
+      <div class="btn">
+        <el-button
+          size="small"
+          @click="$refs.ValueTable.openUpload()"
+          v-if="inPower"
+        >
+          <i class="el-icon-upload2" style="color: #3a7bfa"></i>
+          <span style="color: #3a7bfa">瀵煎叆</span></el-button
+        >
+        <el-button size="small" type="primary" @click="openAdd" v-if="addPower"
+          >鏂板</el-button
+        >
+      </div>
+    </div>
+    <lims-table
+      :tableData="tableData"
+      :column="column"
+      :page="page"
+      :tableLoading="tableLoading"
+      :height="'calc(100vh - 250px)'"
+      style="padding: 20px; padding-top: 0"
+      @pagination="pagination"
+    ></lims-table>
+    <!-- 鏂板/缂栬緫 -->
+    <el-dialog :title="title" :visible.sync="addDlog" width="500px">
+      <el-form
+        :model="addForm"
+        ref="addForm"
+        :rules="addRules"
+        label-position="right"
+        label-width="120px"
+      >
+        <el-form-item label="棰嗗煙" prop="field">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="addForm.field"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鏍囧噯缂栧彿" prop="code">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="addForm.code"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="妫�楠屽璞�" prop="structureTestObjectId">
+          <el-cascader
+            size="small"
+            :options="tandardTree"
+            v-model="addForm.structureTestObjectId"
+            collapse-tags
+            :props="{ multiple: true, checkStrictly: true }"
+            clearable
+            style="width: 100%"
+          ></el-cascader>
+        </el-form-item>
+        <el-form-item label="鏍囧噯鎻忚堪" prop="name">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="addForm.name"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏍囧噯鎻忚堪EN" prop="nameEn">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="addForm.nameEn"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input
+            size="small"
+            placeholder="璇疯緭鍏�"
+            clearable
+            v-model="addForm.remark"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="璧勮川" prop="qualificationId">
+          <el-select
+            v-model="addForm.qualificationId"
+            size="small"
+            clearable
+            placeholder="璇烽�夋嫨"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in qualificationList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏄惁浜у搧鏍囧噯" prop="isProduct">
+          <el-select
+            v-model="addForm.isProduct"
+            size="small"
+            clearable
+            placeholder="璇烽�夋嫨"
+            style="width: 100%"
+          >
+            <el-option label="鍚�" :value="0"> </el-option>
+            <el-option label="鏄�" :value="1"> </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏄惁鍚敤" prop="isUse">
+          <el-select
+            v-model="addForm.isUse"
+            size="small"
+            clearable
+            placeholder="璇烽�夋嫨"
+            style="width: 100%"
+          >
+            <el-option label="鍚�" :value="0"> </el-option>
+            <el-option label="鏄�" :value="1"> </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addDlog = false">鍙� 娑�</el-button>
+        <el-button
+          :loading="addLoading"
+          type="primary"
+          @click="submitProduct('addForm')"
+          >纭� 璁�</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  selectStandardMethodList,
+  getStandardTree2,
+  delStandardMethod,
+  addStandardMethod,
+  upStandardMethod,
+} from "@/api/cnas/process/method/standardMethod";
+export default {
+  components: {
+    limsTable,
+  },
+  data() {
+    return {
+      addPower: true,
+      title: "鏂板",
+      inPower: true,
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "棰嗗煙", prop: "field", width: "100px" },
+        { label: "鏍囧噯缂栧彿", prop: "code", width: "100px" },
+        { label: "妫�楠屽璞�", prop: "structureTestObjectId", width: "140px" },
+        { label: "鏍囧噯鎻忚堪", prop: "name", width: "100px" },
+        { label: "鏍囧噯鎻忚堪EN", prop: "nameEn", width: "100px" },
+        { label: "澶囨敞", prop: "remark" },
+        { label: "璧勮川", prop: "qualificationId" },
+        {
+          label: "鏄惁浜у搧鏍囧噯",
+          prop: "isProduct",
+          width: "100px",
+          dataType: "tag",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鍚�";
+            } else {
+              return "鏄�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "primary";
+            }
+          },
+        },
+        {
+          label: "鏄惁鍚敤",
+          prop: "isUse",
+          formatData: (params) => {
+            if (params == 0) {
+              return "鍚�";
+            } else {
+              return "鏄�";
+            }
+          },
+          formatType: (params) => {
+            if (params == 0) {
+              return "danger";
+            } else {
+              return "primary";
+            }
+          },
+        },
+        { label: "鍒涘缓浜�", prop: "createUserName" },
+        { label: "鍒涘缓鏃堕棿", prop: "createTime" },
+        { label: "鏇存柊浜�", prop: "updateUserName" },
+        { label: "鏇存柊鏃堕棿", prop: "updateTime" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          width: "120px",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.title = "缂栬緫";
+                this.addForm = row;
+                this.addForm.structureTestObjectId = JSON.parse(
+                  this.addForm.structureTestObjectId
+                );
+                this.addDlog = true;
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1,
+      },
+      tableLoading: false,
+      addForm: {},
+      addDlog: false,
+      addLoading: false,
+      qualificationList: [],
+      tandardTree: [],
+      addRules: {
+        code: [{ required: true, message: "璇疯緭鍏ユ爣鍑嗙紪鍙�", trigger: "blur" }],
+        name: [{ required: true, message: "璇疯緭鍏ユ爣鍑嗘弿杩�", trigger: "blur" }],
+        nameEn: [
+          { required: true, message: "璇疯緭鍏ユ爣鍑嗘弿杩癊N", trigger: "blur" },
+        ],
+        isProduct: [
+          { required: true, message: "璇烽�夋嫨鏄惁浜у搧鏍囧噯", trigger: "change" },
+        ],
+        isUse: [
+          { required: true, message: "璇烽�夋嫨鏄惁鍚敤", trigger: "change" },
+        ],
+      },
+    };
+  },
+  mounted() {
+    this.getQualificationList();
+    this.selectTestObjectByName();
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      selectStandardMethodList({ ...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();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
+      this.selectTestObjectByName();
+    },
+    refresh() {
+      this.selectTestObjectByName();
+      this.page.current = 1;
+      this.queryParams = {};
+      this.getList();
+    },
+    // 鏉冮檺鍒嗛厤
+    getPower() {
+      let power = JSON.parse(sessionStorage.getItem("power"));
+      let up = false;
+      let del = false;
+      let add = false;
+      let inPower = false;
+      for (var i = 0; i < power.length; i++) {
+        if (power[i].menuMethod == "addStandardMethod") {
+          add = true;
+        }
+        if (power[i].menuMethod == "delStandardMethod") {
+          del = true;
+        }
+        if (power[i].menuMethod == "upStandardMethod") {
+          up = true;
+        }
+        if (power[i].menuMethod == "importStandardDetails") {
+          inPower = true;
+        }
+      }
+      this.addPower = add;
+      this.inPower = inPower;
+    },
+    openAdd() {
+      this.title = "鏂板";
+      this.addForm = {};
+      this.addDlog = true;
+    },
+    getQualificationList() {
+      this.getDicts("cnas_method_qualification").then((response) => {
+        let arr = response.data.map((m) => {
+          return {
+            label: m.dictLabel,
+            value: m.dictValue,
+          };
+        });
+        this.qualificationList = arr;
+      });
+    },
+    selectTestObjectByName() {
+      getStandardTree2().then((res) => {
+        res.data.forEach((a) => {
+          this.cascaderFieldData(a);
+        });
+        this.tandardTree = res.data;
+      });
+    },
+    cascaderFieldData(val) {
+      if (val.children === undefined) {
+        return;
+      } else if (val.children.length == 0) {
+        delete val.children;
+      } else {
+        val.children.forEach((a) => {
+          this.cascaderFieldData(a);
+        });
+      }
+    },
+    submitProduct(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.addLoading = true;
+          let addForm = JSON.parse(JSON.stringify(this.addForm));
+          addForm.structureTestObjectId = JSON.stringify(
+            addForm.structureTestObjectId
+          );
+          if (this.title == "鏂板") {
+            addStandardMethod(addForm)
+              .then((res) => {
+                this.addLoading = false;
+                if (res.code != 200) {
+                  return;
+                }
+                this.$message.success("鎻愪氦鎴愬姛");
+                this.getList();
+                this.addDlog = false;
+              })
+              .catch((err) => {
+                this.addLoading = false;
+              });
+          } else {
+            upStandardMethod(addForm)
+              .then((res) => {
+                this.addLoading = false;
+                if (res.code != 200) {
+                  return;
+                }
+                this.$message.success("鎻愪氦鎴愬姛");
+                this.getList();
+                this.addDlog = false;
+              })
+              .catch((err) => {
+                this.addLoading = false;
+              });
+          }
+        } else {
+          return false;
+        }
+      });
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delStandardMethod({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.getList();
+          });
+        })
+        .catch(() => {});
+    },
+  },
+};
+</script>
diff --git a/src/views/performance/class/index.vue b/src/views/performance/class/index.vue
index fe9c55e..18e6ed2 100644
--- a/src/views/performance/class/index.vue
+++ b/src/views/performance/class/index.vue
@@ -67,15 +67,14 @@
         <el-button
           size="small"
           type="primary"
-          v-if="listPower"
+          v-if="checkPermi(['performance:class:time'])"
           @click="configTime"
-          :loading="downLoading"
           >鏃堕棿閰嶇疆</el-button
         >
         <el-button
           size="small"
           type="primary"
-          v-if="downPower"
+          v-if="checkPermi(['performance:class:down'])"
           @click="handleDown"
           :loading="downLoading"
           >瀵� 鍑�</el-button
@@ -84,7 +83,7 @@
           size="small"
           type="primary"
           @click="schedulingVisible = true"
-          v-if="addPower"
+          v-if="checkPermi(['performance:class:add'])"
           >鎺� 鐝�</el-button
         >
       </div>
@@ -106,9 +105,18 @@
             v-on:mouseenter="onMouseEnter(index)"
             v-on:mouseleave="currentUserIndex = null"
           >
-            <div class="user-pic">{{ item.name.charAt(0) }}</div>
+            <div class="user-pic">
+              {{ item.name ? item.name.charAt(0) : "" }}
+            </div>
             <div class="user-info">
-              <p style="font-size: 14px; color: #3a7bfa; line-height: 24px">
+              <p
+                style="
+                  font-size: 14px;
+                  color: #3a7bfa;
+                  line-height: 24px;
+                  margin: 0;
+                "
+              >
                 {{ item.name }}
               </p>
               <p
@@ -119,13 +127,14 @@
                   white-space: nowrap;
                   width: 150px;
                   overflow-x: show;
+                  margin: 0;
                 "
               >
                 鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{
                   item.day3
                 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}
               </p>
-              <p style="margin-top: 4px">
+              <p style="margin-top: 4px; margin: 0">
                 <span
                   style="
                     color: #999999;
@@ -158,7 +167,7 @@
               >
                 <span
                   class="month"
-                  style="position: absolute; top: 4px"
+                  style="position: absolute; top: 0px"
                   v-if="item.week == '鍛ㄦ棩'"
                   >{{ item.weekNum }}鍛�</span
                 >
@@ -185,7 +194,7 @@
                   trigger="click"
                   placement="bottom"
                   @command="(e) => handleCommand(e, m)"
-                  :disabled="!upPower"
+                  :disabled="!checkPermi(['performance:class:edit'])"
                   style="width: 100%; height: 100%; cursor: pointer"
                 >
                   <div
@@ -212,8 +221,8 @@
                     <el-dropdown-item
                       v-for="(n, j) in classType"
                       :key="'h' + j"
-                      :command="n.value"
-                      >{{ n.label }}</el-dropdown-item
+                      :command="n.dictValue"
+                      >{{ n.dictLabel }}</el-dropdown-item
                     >
                   </el-dropdown-menu>
                 </el-dropdown>
@@ -242,9 +251,18 @@
             v-on:mouseenter="onMouseEnter(index)"
             v-on:mouseleave="currentUserIndex = null"
           >
-            <div class="user-pic">{{ item.name.charAt(0) }}</div>
+            <div class="user-pic">
+              {{ item.name ? item.name.charAt(0) : "" }}
+            </div>
             <div class="user-info">
-              <p style="font-size: 14px; color: #3a7bfa; line-height: 24px">
+              <p
+                style="
+                  font-size: 14px;
+                  color: #3a7bfa;
+                  line-height: 24px;
+                  margin: 0;
+                "
+              >
                 {{ item.name }}
               </p>
               <p
@@ -255,13 +273,14 @@
                   white-space: nowrap;
                   width: 150px;
                   overflow-x: show;
+                  margin: 0;
                 "
               >
                 鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{
                   item.day3
                 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}
               </p>
-              <p style="margin-top: 4px">
+              <p style="margin-top: 4px; margin: 0">
                 <span
                   style="
                     color: #999999;
@@ -358,9 +377,9 @@
                 >
                   <el-option
                     v-for="obj in timeTypeList"
-                    :key="obj.value"
-                    :label="obj.label"
-                    :value="obj.value"
+                    :key="obj.dictValue"
+                    :label="obj.dictLabel"
+                    :value="obj.dictValue"
                   >
                   </el-option>
                 </el-select>
@@ -492,9 +511,9 @@
           >
             <el-option
               v-for="item in classType"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="item.dictValue"
             >
             </el-option>
           </el-select>
@@ -523,14 +542,11 @@
   exportFile,
   obtainItemParameterList,
   update,
-  selectUserList,
+  selectUserCondition,
 } from "@/api/performance/class";
 export default {
   data() {
     return {
-      addPower: true,
-      upPower: true,
-      downPower: true,
       query: {
         userName: "",
         laboratory: "",
@@ -613,7 +629,6 @@
       configTimeVisibleLoading: false, // 鏃堕棿閰嶇疆寮规loading
       timeTypeList: [],
       timeQuery: [],
-      listPower: false,
     };
   },
   watch: {
@@ -652,7 +667,7 @@
       this.monthList.push(i);
     }
     this.monthList.reverse();
-    this.getPower();
+    // this.getPower();
   },
   methods: {
     refresh() {
@@ -797,31 +812,6 @@
         });
       });
     },
-    getPower() {
-      let power = JSON.parse(sessionStorage.getItem("power"));
-      let add = false;
-      let up = false;
-      let down = false;
-      let listPower = false;
-      for (var i = 0; i < power.length; i++) {
-        if (power[i].menuMethod == "performanceShiftUpdate") {
-          up = true;
-        }
-        if (power[i].menuMethod == "delDeviceParameter") {
-          down = true;
-        }
-        if (power[i].menuMethod == "performanceShiftAdd") {
-          add = true;
-        }
-        if (power[i].menuMethod == "shiftTimeList") {
-          listPower = true;
-        }
-      }
-      this.addPower = add;
-      this.upPower = up;
-      this.downPower = down;
-      this.listPower = listPower;
-    },
     onMouseEnter(index) {
       this.currentUserIndex = index;
     },
@@ -854,18 +844,22 @@
         endWeek,
         userId: this.schedulingQuery.userId.join(","),
         shift: this.schedulingQuery.shift,
-      }).then((res) => {
-        this.loading = false;
-        if (res.code == 201) return;
-        this.$message.success("鎿嶄綔鎴愬姛");
-        this.schedulingVisible = false;
-        this.schedulingQuery = {
-          week: "",
-          userId: null,
-          shift: "",
-        };
-        this.refresh();
-      });
+      })
+        .then((res) => {
+          this.loading = false;
+          if (res.code == 201) return;
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.schedulingVisible = false;
+          this.schedulingQuery = {
+            week: "",
+            userId: null,
+            shift: "",
+          };
+          this.refresh();
+        })
+        .catch((err) => {
+          this.loading = false;
+        });
     },
     configTime() {
       this.getDicts("sys_class_type").then((response) => {
@@ -883,10 +877,10 @@
             res.data.forEach((item) => {
               item.isEdit = false;
               const index = this.timeTypeList.findIndex(
-                (val) => val.value === item.shift
+                (val) => val.dictValue === item.shift
               );
               if (index > -1) {
-                item.type = this.timeTypeList[index].label;
+                item.type = this.timeTypeList[index].dictLabel;
               }
             });
             this.timeQuery = res.data;
@@ -909,10 +903,10 @@
     saveEdit(item, index) {
       if (item.shift) {
         const index = this.timeTypeList.findIndex(
-          (val) => val.value === item.shift
+          (val) => val.dictValue === item.shift
         );
         if (index > -1) {
-          item.type = this.timeTypeList[index].label;
+          item.type = this.timeTypeList[index].dictLabel;
         }
       }
       delete item.orderBy;
@@ -975,20 +969,24 @@
         userName: this.query.userName,
         laboratory: this.query.laboratory,
         isMonth: this.query.month ? true : false,
-      }).then((res) => {
-        this.$message.success("涓嬭浇鎴愬姛");
-        this.downLoading = false;
-        const blob = new Blob([res], {
-          type: "application/force-download",
+      })
+        .then((res) => {
+          this.$message.success("涓嬭浇鎴愬姛");
+          this.downLoading = false;
+          const blob = new Blob([res], {
+            type: "application/force-download",
+          });
+          let fileName = "";
+          if (this.query.month) {
+            fileName = year + "-" + this.query.month + " 鐝淇℃伅";
+          } else {
+            fileName = year + " 鐝姹囨��";
+          }
+          this.$download.saveAs(blob, fileName + ".xlsx");
+        })
+        .catch((err) => {
+          this.downLoading = false;
         });
-        let fileName = "";
-        if (this.query.month) {
-          fileName = year + "-" + this.query.month + " 鐝淇℃伅";
-        } else {
-          fileName = year + " 鐝姹囨��";
-        }
-        this.$download.saveAs(blob, fileName + ".xlsx");
-      });
     },
     selectEnumByCategory() {
       this.getDicts("sys_class_type").then((response) => {
@@ -1033,63 +1031,35 @@
       }
     },
     getUsers() {
-      selectUserList({
-        current: -1,
-        size: -1,
-      }).then((res) => {
+      selectUserCondition().then((res) => {
         if (res.code === 201) {
           return;
         }
-        let arr = res.data.body.records;
+        let arr = res.data;
         this.personList = arr;
       });
     },
     getDayByDic(e) {
-      let obj = this.classType.find((m) => m.label == e);
+      let obj = this.classType.find((m) => m.dictLabel == e);
       if (obj) {
-        return obj.value;
+        return obj.dictValue;
       }
     },
     getShiftByDic(e) {
-      let obj = this.classType.find((m) => m.value == e);
+      let obj = this.classType.find((m) => m.dictValue == e);
       if (obj) {
-        return obj.label;
+        return obj.dictLabel;
       }
       return "鏃�";
-    },
-    scrollInit() {
-      // 鑾峰彇瑕佺粦瀹氫簨浠剁殑鍏冪礌
-      const nav = document.getElementById("nav");
-      var flag; // 榧犳爣鎸変笅
-      var downX; // 榧犳爣鐐瑰嚮鐨剎涓嬫爣
-      var scrollLeft; // 褰撳墠鍏冪礌婊氬姩鏉$殑鍋忕Щ閲�
-      nav.addEventListener("mousedown", function (event) {
-        flag = true;
-        downX = event.clientX; // 鑾峰彇鍒扮偣鍑荤殑x涓嬫爣
-        scrollLeft = this.scrollLeft; // 鑾峰彇褰撳墠鍏冪礌婊氬姩鏉$殑鍋忕Щ閲�
-      });
-      nav.addEventListener("mousemove", function (event) {
-        if (flag) {
-          // 鍒ゆ柇鏄惁鏄紶鏍囨寜涓嬫粴鍔ㄥ厓绱犲尯鍩�
-          var moveX = event.clientX; // 鑾峰彇绉诲姩鐨剎杞�
-          var scrollX = moveX - downX; // 褰撳墠绉诲姩鐨剎杞翠笅鏍囧噺鍘诲垰鐐瑰嚮涓嬪幓鐨剎杞翠笅鏍囧緱鍒伴紶鏍囨粦鍔ㄨ窛绂�
-          this.scrollLeft = scrollLeft - scrollX; // 榧犳爣鎸変笅鐨勬粴鍔ㄦ潯鍋忕Щ閲忓噺鍘诲綋鍓嶉紶鏍囩殑婊戝姩璺濈
-        }
-      });
-      // 榧犳爣鎶捣鍋滄鎷栧姩
-      nav.addEventListener("mouseup", function () {
-        flag = false;
-      });
-      // 榧犳爣绂诲紑鍏冪礌鍋滄鎷栧姩
-      nav.addEventListener("mouseleave", function (event) {
-        flag = false;
-      });
     },
   },
 };
 </script>
 
 <style scoped>
+.class-page {
+  padding: 10px;
+}
 .form_title {
   height: 36px;
   display: flex;
@@ -1127,7 +1097,7 @@
 }
 .center {
   width: 100%;
-  height: calc(100% - 100px);
+  height: calc(100vh - 220px);
   background-color: #fff;
   overflow-y: auto;
   display: flex;
@@ -1161,8 +1131,8 @@
   min-height: calc(100% - 10px); /* 瑙嗗彛楂樺害 */
 }
 .content-title {
-  height: 52px;
-  line-height: 52px;
+  height: 58px;
+  line-height: 58px;
   border-bottom: 1px solid #eeeeee;
 }
 .content-title-right {
@@ -1194,6 +1164,7 @@
 .content-title-item .day {
   font-size: 14px;
   color: #333333;
+  margin-right: 4px;
 }
 .content-title-item .week {
   font-size: 12px;

--
Gitblit v1.9.3