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