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