From c7e7d101d901ae10b9c32ea02f87abef54e280a7 Mon Sep 17 00:00:00 2001 From: 晏有为 <13214124+yan-youwei@user.noreply.gitee.com> Date: 星期三, 15 五月 2024 10:14:48 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/components/view/b3-work-time-management.vue | 2 src/components/do/b1-ins-order/add.vue | 28 + src/components/tool/value-table.vue | 6 src/components/view/a6-device-overview.vue | 17 src/components/do/b3-work-time-management/work-time-config.vue | 6 src/components/view/b1-inspect-order-plan.vue | 9 src/components/view/b3-classes.vue | 95 +++++ src/components/view/a7-standard-method.vue | 4 src/view/index.vue | 6 src/assets/api/controller.js | 1 src/components/view/notice-detail.vue | 20 src/components/view/b2-standard.vue | 110 +++++-- src/components/tool/scroll-paging.vue | 21 + src/view/notice.vue | 57 +-- src/main.js | 4 src/components/do/b1-inspect-order-plan/Inspection.vue | 53 +++ src/components/do/b3-work-time-management/work-time-management.vue | 10 src/components/do/b3-work-time-management/work-time-statistics.vue | 233 +++++++++++++++ src/components/view/a5-laboratory-management.vue | 4 src/components/view/a6-device-management.vue | 88 ++++- src/components/view/a6-personnel-overview.vue | 17 src/components/view/b1-inspection-order.vue | 16 src/components/view/b1-expenses.vue | 6 src/components/view/index-index.vue | 73 ++++ 24 files changed, 707 insertions(+), 179 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index 7c20039..4ac4421 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -264,6 +264,7 @@ page:"/performanceShift/page",//缁╂晥绠$悊-鐝-鍒嗛〉鏌ヨ update:"/performanceShift/update",//缁╂晥绠$悊-鐝-鐝鐘舵�佷慨鏀� pageYear:"/performanceShift/pageYear",//缁╂晥绠$悊-鐝-骞翠唤鍒嗛〉鏌ヨ + export:"/performanceShift/export",//缁╂晥绠$悊-鐝-瀵煎嚭 } const auxiliaryWorkingHours = { diff --git a/src/components/do/b1-ins-order/add.vue b/src/components/do/b1-ins-order/add.vue index ce7f27f..6cd0389 100644 --- a/src/components/do/b1-ins-order/add.vue +++ b/src/components/do/b1-ins-order/add.vue @@ -197,7 +197,9 @@ <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>鏉ユ牱鏂瑰紡锛�</div> <div class="search_input"> - <el-input size="small" clearable v-model="addObj.formType" :readonly="active>1"></el-input> + <el-select v-model="addObj.formType" size="small" :disabled="active>1" style="width: 100%;"> + <el-option v-for="(a,ai) in formType" :key="ai" :label="a.label" :value="a.value"></el-option> + </el-select> </div> </el-col> <el-col class="search_thing" :span="6"> @@ -287,7 +289,7 @@ <template slot-scope="scope"> <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1" placeholder="妫�楠屾爣鍑�" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)" - @focus="methodFocus" :readonly="active>1"> + @focus="methodFocus" :readonly="active>1" style="width: 100%;"> <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id"> </el-option> </el-select> @@ -634,7 +636,8 @@ tell: '', noLoading: false, orderType: [], - filters: [] + filters: [], + formType: [] } }, watch: { @@ -653,6 +656,7 @@ this.selectStandardMethods() this.selectEnumByCategoryForOrderType() this.selectEnumByCategoryForSonLaboratory() + this.selectEnumByCategoryForSampleForm() if (this.active != 1) { // 鏌ョ湅/瀹℃牳娴佺▼ // 璇锋眰鎺ュ彛锛屽洖鏄炬暟鎹� @@ -667,6 +671,10 @@ this.addObj.sampleNum = this.sampleList.length this.$nextTick(() => { this.$refs.sampleTable.doLayout() + if(this.addObj.sampleNum>0){ + this.$refs.sampleTable.setCurrentRow(this.sampleList[0],true) + this.rowClick(this.sampleList[0]) + } }) }) } @@ -868,8 +876,8 @@ }, activeStandardTree() { let trees = this.selectTree.split(" - ") - if (trees.length < 4) { - this.$message.error('鏈�夋嫨鏍峰搧') + if (trees.length < 5) { + this.$message.error('鏈�夋嫨鍨嬪彿') return } this.addObj.factory = trees[0] @@ -1122,6 +1130,16 @@ } }) }, + selectEnumByCategoryForSampleForm() { + this.$axios.post(this.$api.enums.selectEnumByCategory, { + category: "鏉ユ牱鏂瑰紡" + }).then(res => { + this.formType = res.data + if(this.formType.length > 0){ + this.addObj.formType = this.formType[0].value + } + }) + }, methodChange(val, row) { if(val===null||val==='')return this.getProductLoad = true diff --git a/src/components/do/b1-inspect-order-plan/Inspection.vue b/src/components/do/b1-inspect-order-plan/Inspection.vue index e0ff6ed..ca447d2 100644 --- a/src/components/do/b1-inspect-order-plan/Inspection.vue +++ b/src/components/do/b1-inspect-order-plan/Inspection.vue @@ -41,8 +41,13 @@ flex-direction: column; flex-wrap: wrap; width: 100%; - /* overflow-x: hidden; */ - overflow-x: scroll; + overflow-x: hidden; + /* overflow-x: scroll; */ + cursor: grab; + } + + .center-box:active{ + cursor: grabbing; } .tables { @@ -65,6 +70,10 @@ padding: 5px; box-sizing: border-box; overflow: hidden; + user-select: none; + } + + .content *{ user-select: none; } @@ -212,7 +221,7 @@ size="small">{{ item.templateName }}</el-radio-button> </el-radio-group> </div> - <div class="center-box"> + <div class="center-box" id="nav"> <table border="1" class="tables" cellpadding="10" v-for="(item,index) in tableList" :key="index"> <tbody> <tr v-for="(m,i) in item.arr" :key="i"> @@ -241,8 +250,8 @@ v-else-if="getInspectionValueType(n.i) == 4">/</span> </template> <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='缁撹'"> - <el-select v-if="(getInspectionValueType(n.i) == 2 || getInspectionValueType(n.i) == 5) && state==1" class="table_input" v-model="n.v.v" - @change="saveInsContext()"> + <el-select v-if="(getInspectionValueType(n.i) == 2 || getInspectionValueType(n.i) == 5) && state==1" + class="table_input" v-model="n.v.v" @change="saveInsContext()"> <el-option label="鍚堟牸" :value="1"></el-option> <el-option label="涓嶅悎鏍�" :value="0"></el-option> </el-select> @@ -310,7 +319,7 @@ </el-drawer> <el-drawer title="浠诲姟鍒囨崲" :visible.sync="taskVisible" :size="500"> <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList" - :componentData="componentData" :key="upIndex" /> + :componentData="componentData" :key="upIndex" style="max-height: 100%;height: inherit;"/> </el-drawer> <el-dialog title="妫�楠屽鏍�" :visible.sync="reviewDia" width="500px"> <div class="body" style="display: flex;padding: 10px;" v-if="reviewDia"> @@ -426,6 +435,7 @@ this.getInsStateDicts() this.getComparisonList() this.getAuthorizedPerson() + this.scrollInit() }, watch: { id(val) { @@ -542,7 +552,7 @@ }, selectEnumByCategoryOfSelect(val) { this.enumList = [] - if(val===undefined||val===null){ + if (val === undefined || val === null) { return } this.$axios.post(this.$api.enums.selectEnumByCategory, { @@ -561,7 +571,7 @@ const mySet1 = new Set(); this.tableLists = this.currentSample.insProduct.filter(m => { let num0 = mySet1.size; - if (m.templateId != null) { + if (m.templateId != null&&m.template != null) { mySet1.add(JSON.stringify({ template: m.template, templateId: m.templateId @@ -1246,6 +1256,33 @@ this.personList = data }) }, + 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> diff --git a/src/components/do/b3-work-time-management/work-time-config.vue b/src/components/do/b3-work-time-management/work-time-config.vue index ed06257..d26142d 100644 --- a/src/components/do/b3-work-time-management/work-time-config.vue +++ b/src/components/do/b3-work-time-management/work-time-config.vue @@ -8,7 +8,7 @@ </div> <div class="search_thing"> <div class="search_label">瀹為獙瀹わ細</div> - <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small"> + <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> <el-option v-for="item in laboratoryList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> @@ -16,7 +16,7 @@ <div class="search_thing"> <div class="search_label">閮ㄩ棬锛�</div> <div class="search_input"> - <el-select v-model="componentData.entity.department" placeholder="鍏ㄩ儴" size="small"> + <el-select v-model="componentData.entity.department" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> <el-option v-for="item in partList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> @@ -200,7 +200,7 @@ margin-top: 10px; background-color: #fff; width: calc(100% - 40px); - height: calc(100% - 60px - 80px - 10px - 40px); + height: calc(100% - 60px - 80px - 10px - 24px); padding: 20px; } </style> diff --git a/src/components/do/b3-work-time-management/work-time-management.vue b/src/components/do/b3-work-time-management/work-time-management.vue index cb657d0..17c0b8a 100644 --- a/src/components/do/b3-work-time-management/work-time-management.vue +++ b/src/components/do/b3-work-time-management/work-time-management.vue @@ -13,13 +13,13 @@ </div> <div class="search_thing" style="width: 200px;"> <div class="search_label">鏄熸湡锛�</div> - <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small"> + <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </div> <div class="search_thing"> - <div class="search_label">鏃堕棿鑼冨洿锛�</div> + <div class="search_label" style="width: 90px;">鏃堕棿鑼冨洿锛�</div> <div class="search_input"> <el-date-picker style="width: 100%;" @@ -28,7 +28,7 @@ type="daterange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡"> + end-placeholder="缁撴潫鏃ユ湡" @change="refreshTable()"> </el-date-picker> </div> </div> @@ -36,11 +36,11 @@ <div class="search_thing" style="width: 200px;"> <div class="search_label" >鍚嶅瓧锛�</div> <el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="componentData.entity.number"></el-input> + v-model="componentData.entity.number" @keyup.enter.native="refreshTable()"></el-input> </div> <div class="search_thing" style="width: 200px;"> <div class="search_label">鐘舵�侊細</div> - <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small"> + <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> <el-option v-for="item in stateList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> diff --git a/src/components/do/b3-work-time-management/work-time-statistics.vue b/src/components/do/b3-work-time-management/work-time-statistics.vue index e624163..fd79c90 100644 --- a/src/components/do/b3-work-time-management/work-time-statistics.vue +++ b/src/components/do/b3-work-time-management/work-time-statistics.vue @@ -1,19 +1,246 @@ <template> <div class="work-time-statistics"> - 宸ユ椂缁熻 + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏃ユ湡锛�</div> + <div class="search_input" style="display: flex;align-items: center;"> + <el-date-picker + v-model="componentData.entity.laboratory" + type="month" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + placeholder="閫夋嫨鏈�" size="small" style="width: 100%;"> + </el-date-picker> + </div> + </div> + <div class="search_thing"> + <div class="search_label">鍛樺伐锛�</div> + <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> + <el-option v-for="item in personList" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </div> + <div class="search_thing"> + <div class="search_label">閮ㄩ棬锛�</div> + <div class="search_input"> + <el-select v-model="componentData.entity.laboratory" placeholder="鍏ㄩ儴" size="small" @change="refreshTable()"> + <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;width: 100px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + <el-button size="small" type="primary" style="position: absolute;right: 50px;" @click="handleDown">瀵� 鍑�</el-button> + <el-button size="small" type="primary" style="position: absolute;right: 120px;" @click="handleUp" v-show="currentTable == 'value0'">瀵� 鍏�</el-button> + </div> + <el-radio-group v-model="currentTable" size="small" :key="'111'" style="margin-top: 10px;"> + <el-radio-button label="value0"> + 鍘熷宸ユ椂 + </el-radio-button> + <el-radio-button label="value1"> + 淇宸ユ椂 + </el-radio-button> + </el-radio-group> + <div class="table"> + <ValueTable ref="ValueTable0" + v-show="currentTable == 'value0'" + :url="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" + :componentData="componentData" :inputUrl="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" :downUrl="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" :key="upIndex" /> + <ValueTable ref="ValueTable1" + v-show="currentTable == 'value1'" + :url="$api.auxiliaryWorkingHours.selectAuxiliaryWorkingHours" + :componentData="componentData0" :key="upIndex" /> + </div> </div> </template> <script> +import ValueTable from '../../tool/value-table.vue' export default { + components: { + ValueTable + }, data () { return{ - + componentData: { + entity: { + number: null, + department: null, + laboratory: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [], + tagField: { + deviceStatus: { + select: [] + }, + equipmentManager: { + select: [] + }, + authorizedPerson: { + select: [] + }, + insProductIds:{ + select:[] + } + }, + linkEvent: { + deviceName: { + method: 'selectAllByOne' + } + }, + selectField: { + authorizedPerson: { + select: [], + choose: true + }, + equipmentManager: { + select: [] + }, + insProductIds:{ + select:[], + choose: true + } + }, + requiredAdd: [], + requiredUp: [] + }, + componentData0: { + entity: { + number: null, + department: null, + laboratory: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [], + tagField: { + deviceStatus: { + select: [] + }, + equipmentManager: { + select: [] + }, + authorizedPerson: { + select: [] + }, + insProductIds:{ + select:[] + } + }, + linkEvent: { + deviceName: { + method: 'selectAllByOne' + } + }, + selectField: { + authorizedPerson: { + select: [], + choose: true + }, + equipmentManager: { + select: [] + }, + insProductIds:{ + select:[], + choose: true + } + }, + requiredAdd: [], + requiredUp: [] + }, + upIndex:0, + weekList:[], + personList:[], + currentTable:'value0' + } + }, + mounted(){ + this.getUsers() + }, + methods: { + refresh(){}, + refreshTable(){}, + getUsers(){ + this.$axios.post(this.$api.user.selectUserList, { + page: { + current: -1, + size: -1, + }, + entity: { + name: null, + } + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + if (res.code === 201) { + return + } + let arr = res.data.body.records + this.personList = arr + }) + }, + handleDown(){ + if(this.currentTable == 'value0'){ + this.$refs.ValueTable0.downFile(false) + }else{ + this.$refs.ValueTable1.downFile(false) + } + }, + handleUp(){ + this.$refs.ValueTable0.openUpload() } } } </script> -<style> +<style scoped> +.work-time-statistics{ + height: 100%; +} +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; + } + .search_thing { + width: 270px; + display: flex; + align-items: center; + } + + .search_label { + width: 60px; + font-size: 14px; + text-align: right; + } + + .search_input { + width: calc(100% - 60px); + } + .table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px - 25px); + padding: 20px; + } </style> diff --git a/src/components/tool/scroll-paging.vue b/src/components/tool/scroll-paging.vue index 41b2e10..367409d 100644 --- a/src/components/tool/scroll-paging.vue +++ b/src/components/tool/scroll-paging.vue @@ -2,14 +2,14 @@ <div class="scroll-pagination" ref="content" @scroll="onScroll"> <slot></slot> <el-button - v-if="isLoding" + v-show="isLoding" type="text" style="display: flex; margin: 0 auto; color: #909399" ><i class="el-icon-loading" style="font-size:20px"></i ></el-button> <el-button type="text" - v-if="finishLoding" + v-show="finishLoding" style="display: flex; margin: 0 auto; color: #909399" >宸茬粡娌℃湁鏇村鍟</el-button > @@ -23,6 +23,18 @@ finishLoding: { type:Boolean, default:false + }, + list:{ + type:Array, + default:()=>[] + } + }, + watch: { + list:{ + deep:true, + handler(){ + this.isLoding = false + } } }, data() { @@ -32,7 +44,7 @@ }, created(){ // 闃叉姈 - this.onScroll = this.debounce(this.scrollFn,2000); + this.onScroll = this.debounce(this.scrollFn,500); // 鑺傛祦 // this.onScroll = this.throttle(this.scrollFn,1000); }, @@ -55,8 +67,7 @@ this.isLoding = true setTimeout(() => { this.$emit('load') - this.isLoding = false - }, 1000) + }, 500) }, debounce(func, delay) { let timer = null; diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue index 097a84d..20b9a47 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -95,6 +95,12 @@ align-items: center; justify-content: center; } + .el-table__empty-text{ + text-align: left; + width: 100%; + display: inline-block; + margin-left: 200px; + } </style> <template> diff --git a/src/components/view/a5-laboratory-management.vue b/src/components/view/a5-laboratory-management.vue index 82e8e6d..d3b1cb9 100644 --- a/src/components/view/a5-laboratory-management.vue +++ b/src/components/view/a5-laboratory-management.vue @@ -244,8 +244,8 @@ children:[] }, { - value:'棰濆绫诲瀷', - label:'棰濆绫诲瀷', + value:'鎶ュ憡绫诲瀷', + label:'鎶ュ憡绫诲瀷', children:null }, ], diff --git a/src/components/view/a6-device-management.vue b/src/components/view/a6-device-management.vue index ad072e5..7fc51d6 100644 --- a/src/components/view/a6-device-management.vue +++ b/src/components/view/a6-device-management.vue @@ -107,14 +107,14 @@ </div> </el-image> <!-- 琛ㄥ崟 --> - <el-form :label-position="labelPosition" :model="formData" label-width="100px"> - <el-form-item label="浠櫒鍚嶇О:"> + <el-form :label-position="labelPosition" :model="formData" label-width="120px"> + <el-form-item label="浠櫒鍚嶇О:" required> <el-input :disabled="isUp" v-model="formData.deviceName" size="small"></el-input> </el-form-item> - <el-form-item label="浠櫒鍚嶇ОEN:"> + <el-form-item label="浠櫒鍚嶇ОEN:" required> <el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input> </el-form-item> - <el-form-item label="瑙勬牸鍨嬪彿:"> + <el-form-item label="瑙勬牸鍨嬪彿:" required> <el-input :disabled="isUp" v-model="formData.specificationModel" size="small"></el-input> </el-form-item> <el-form-item label="鐢熶骇鍘傚:"> @@ -132,7 +132,7 @@ <el-form-item label="鍑哄巶缂栧彿:"> <el-input :disabled="isUp" v-model="formData.factoryNo" size="small"></el-input> </el-form-item> - <el-form-item label="绠$悊缂栧彿:"> + <el-form-item label="绠$悊缂栧彿:" required> <el-input :disabled="isUp" v-model="formData.managementNumber" size="small"></el-input> </el-form-item> <el-form-item label="璐疆鏃ユ湡:"> @@ -140,7 +140,7 @@ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡"> </el-date-picker> </el-form-item> - <el-form-item label="鍚敤鏃ユ湡:"> + <el-form-item label="鍚敤鏃ユ湡:" required> <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.activationDate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡"> </el-date-picker> @@ -205,13 +205,13 @@ <el-form-item label="鍗曚环(涓囧厓):"> <el-input :disabled="isUp" v-model="formData.unitPrice" size="small"></el-input> </el-form-item> - <el-form-item label="褰撳墠鐘舵��:"> + <el-form-item label="褰撳墠鐘舵��:" required> <el-select :disabled="isUp" v-model="formData.deviceStatus" placeholder="璇烽�夋嫨" size="small" style="width:100%"> <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> - <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:"> + <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" required> <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small"></el-input> </el-form-item> <el-form-item label="鍥剧墖:"> @@ -258,14 +258,14 @@ </div> </el-image> <!-- 琛ㄥ崟 --> - <el-form :label-position="labelPosition" :model="formData2" label-width="100px"> - <el-form-item label="浠櫒鍚嶇О:"> + <el-form :label-position="labelPosition" :model="formData2" label-width="120px"> + <el-form-item label="浠櫒鍚嶇О:" required> <el-input v-model="formData2.deviceName" size="small"></el-input> </el-form-item> - <el-form-item label="浠櫒鍚嶇ОEN:"> + <el-form-item label="浠櫒鍚嶇ОEN:" required> <el-input v-model="formData2.enDeviceName" size="small"></el-input> </el-form-item> - <el-form-item label="瑙勬牸鍨嬪彿:"> + <el-form-item label="瑙勬牸鍨嬪彿:" required> <el-input v-model="formData2.specificationModel" size="small"></el-input> </el-form-item> <el-form-item label="鐢熶骇鍘傚:"> @@ -286,7 +286,7 @@ <el-form-item label="鍑哄巶缂栧彿:"> <el-input v-model="formData2.factoryNo" size="small"></el-input> </el-form-item> - <el-form-item label="绠$悊缂栧彿:"> + <el-form-item label="绠$悊缂栧彿:" required> <el-input v-model="formData2.managementNumber" size="small"></el-input> </el-form-item> <el-form-item label="璐疆鏃ユ湡:"> @@ -294,7 +294,7 @@ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡"> </el-date-picker> </el-form-item> - <el-form-item label="鍚敤鏃ユ湡:"> + <el-form-item label="鍚敤鏃ユ湡:" required> <el-date-picker style="width:100%" v-model="formData2.activationDate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡"> </el-date-picker> @@ -348,13 +348,13 @@ <el-form-item label="鍗曚环(涓囧厓):"> <el-input v-model="formData2.unitPrice" size="small"></el-input> </el-form-item> - <el-form-item label="褰撳墠鐘舵��:"> + <el-form-item label="褰撳墠鐘舵��:" required> <el-select v-model="formData2.deviceStatus" placeholder="璇烽�夋嫨" size="small" style="width:100%"> <el-option v-for="item in deviceStatusList" :key="item.id" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> - <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:"> + <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" required> <el-input v-model="formData2.calibrationDate" size="small"></el-input> </el-form-item> <el-form-item label="鍥剧墖:"> @@ -667,6 +667,34 @@ } }, submitForm() { + if(!this.formData.deviceName){ + this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉�') + return + } + if(!this.formData.enDeviceName){ + this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉癊N') + return + } + if(!this.formData.specificationModel){ + this.$message.error('鏈緭鍏ヨ鏍煎瀷鍙�') + return + } + if(!this.formData.managementNumber){ + this.$message.error('鏈緭鍏ョ鐞嗙紪鍙�') + return + } + if(!this.formData.activationDate){ + this.$message.error('鏈緭鍏ュ惎鐢ㄦ棩鏈�') + return + } + if(!this.formData.deviceStatus){ + this.$message.error('鏈�夋嫨褰撳墠鐘舵��') + return + } + if(!this.formData.calibrationDate){ + this.$message.error('鏈緭鍏ユ牎鍑嗗懆鏈燂紙鏈堬級') + return + } delete this.formData.createTime delete this.formData.updateTime delete this.formData.createUser @@ -693,6 +721,34 @@ }) }, submitForm2() { + if(!this.formData2.deviceName){ + this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉�') + return + } + if(!this.formData2.enDeviceName){ + this.$message.error('鏈緭鍏ヤ华鍣ㄥ悕绉癊N') + return + } + if(!this.formData2.specificationModel){ + this.$message.error('鏈緭鍏ヨ鏍煎瀷鍙�') + return + } + if(!this.formData2.managementNumber){ + this.$message.error('鏈緭鍏ョ鐞嗙紪鍙�') + return + } + if(!this.formData2.activationDate){ + this.$message.error('鏈緭鍏ュ惎鐢ㄦ棩鏈�') + return + } + if(!this.formData2.deviceStatus){ + this.$message.error('鏈�夋嫨褰撳墠鐘舵��') + return + } + if(!this.formData2.calibrationDate){ + this.$message.error('杈撳叆鏍″噯鍛ㄦ湡锛堟湀锛�') + return + } this.upLoad2 = true; this.formData2.insProductIds = this.formData2.insProductIds.join() this.$axios.post(this.$api.deviceScope.addDeviceParameter, this.formData2, { diff --git a/src/components/view/a6-device-overview.vue b/src/components/view/a6-device-overview.vue index 196ea2e..1e8995e 100644 --- a/src/components/view/a6-device-overview.vue +++ b/src/components/view/a6-device-overview.vue @@ -148,11 +148,11 @@ </div> <div class="search_thing" style="padding-left: 30px;"> <el-button size="small" @click="refresh()">閲� 缃�</el-button> - <el-button size="small" type="primary" @click="currentPage= 1,list=[],finishLoding = false,refreshTable()">鏌� 璇�</el-button> + <el-button size="small" type="primary" @click="currentPage= 1,keyMap = {},list=[],finishLoding = false,refreshTable()">鏌� 璇�</el-button> </div> </div> <div class="table" v-loading="loading"> - <scroll-pagination @load="refreshTable" :finishLoding="finishLoding"> + <scroll-pagination @load="refreshTable" :finishLoding="finishLoding" :list="list"> <ul class="card"> <li v-for="(m,i) in list" :key="i"> <el-image class="img" :src="javaApi+'/img/'+m.imageUpload"> @@ -218,17 +218,27 @@ pageSize: 16, // 涓�椤�16鏉� total: '', loading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue - finishLoding: false // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + keyMap: {} } }, created() { this.selectEnumByCategory() + this.keyMap = {}; this.currentPage = 1; this.list = []; this.refreshTable(); }, methods: { refreshTable() { + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' if(this.currentPage==1){ this.loading = true } @@ -284,6 +294,7 @@ }) }, refresh() { + this.keyMap = {}; this.currentPage= 1; this.list=[]; this.finishLoding = false; diff --git a/src/components/view/a6-personnel-overview.vue b/src/components/view/a6-personnel-overview.vue index 52b9a24..48f969c 100644 --- a/src/components/view/a6-personnel-overview.vue +++ b/src/components/view/a6-personnel-overview.vue @@ -87,11 +87,11 @@ </div> <div class="search_thing" style="padding-left: 30px;"> <el-button size="small" @click="refresh()">閲� 缃�</el-button> - <el-button size="small" type="primary" @click="currentPage= 1,list=[],finishLoding = false,refreshTable()">鏌� 璇�</el-button> + <el-button size="small" type="primary" @click="currentPage= 1,list=[],finishLoding = false,keyMap = {},refreshTable()">鏌� 璇�</el-button> </div> </div> <div class="table" v-loading="loading"> - <scroll-pagination @load="refreshTable" :finishLoding="finishLoding"> + <scroll-pagination @load="refreshTable" :finishLoding="finishLoding" :list="list"> <ul class="card" style="margin-top: 10px;"> <li v-for="(m,i) in list" :key="i"> <el-image style="width: 80px; @@ -143,16 +143,26 @@ pageSize: 16, // 涓�椤�16鏉� total: '', loading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue - finishLoding: false // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + keyMap: {} } }, created() { + this.keyMap = {}; this.currentPage = 1; this.list = []; this.refreshTable(); }, methods: { refreshTable() { + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' if(this.currentPage==1){ this.loading = true } @@ -187,6 +197,7 @@ }) }, refresh() { + this.keyMap = {}; this.currentPage= 1; this.list=[]; this.finishLoding = false; diff --git a/src/components/view/a7-standard-method.vue b/src/components/view/a7-standard-method.vue index b210005..e291006 100644 --- a/src/components/view/a7-standard-method.vue +++ b/src/components/view/a7-standard-method.vue @@ -164,8 +164,8 @@ multiple: true }, }, - requiredAdd: ['code', 'name', 'structureTestObjectId', 'isProduct', 'isUse', 'nameEn'], - requiredUp: ['code', 'name', 'structureTestObjectId', 'isProduct', 'isUse', 'nameEn'] + requiredAdd: ['code', 'name', 'isProduct', 'isUse', 'nameEn'], + requiredUp: ['code', 'name', 'isProduct', 'isUse', 'nameEn'] }, entityCopy: {}, upIndex: 0, diff --git a/src/components/view/b1-expenses.vue b/src/components/view/b1-expenses.vue index be06f02..cd5ee69 100644 --- a/src/components/view/b1-expenses.vue +++ b/src/components/view/b1-expenses.vue @@ -66,9 +66,9 @@ </div> </div> <div class="search_thing"> - <div class="search_label">濮旀墭浜猴細</div> + <div class="search_label">濮旀墭鍗曚綅锛�</div> <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div> + v-model="componentData.entity.company" @keyup.enter.native="refreshTable()"></el-input></div> </div> <div class="search_thing" style="padding-left: 30px;"> <el-button size="small" @click="refresh()">閲� 缃�</el-button> @@ -102,7 +102,7 @@ return { componentData: { entity: { - name: null, + company: null, dates: null, orderBy: { field: 'id,ins_sample_id', diff --git a/src/components/view/b1-inspect-order-plan.vue b/src/components/view/b1-inspect-order-plan.vue index 895743d..6ae4714 100644 --- a/src/components/view/b1-inspect-order-plan.vue +++ b/src/components/view/b1-inspect-order-plan.vue @@ -102,6 +102,11 @@ .ins-order-plan-main .el-form-item__label{ color: #000; } + + .ins-order-plan-main .el-table th.el-table__cell>.cell{ + height: 46px; + line-height: 30px; + } </style> <template> <div class="ins-order-plan-main"> @@ -245,9 +250,9 @@ font: '澶嶆牳', type: 'text', method: 'handleReview', - /* disabFun: (row, index) => { + disabFun: (row, index) => { return row.userId == null || row.insState != 3 || row.verifyUser != 1 - } */ + } }, { id: '', font: '璁ら', diff --git a/src/components/view/b1-inspection-order.vue b/src/components/view/b1-inspection-order.vue index 7ccb0ea..a5f0a23 100644 --- a/src/components/view/b1-inspection-order.vue +++ b/src/components/view/b1-inspection-order.vue @@ -509,13 +509,15 @@ }, // 涓嬭浇鎶ュ憡 download(row) { - // console.log(row); - let url = row.url; - const link = document.createElement('a'); - link.href = this.javaApi + url; - link.target = '_blank'; - document.body.appendChild(link); - link.click(); + let url = row.urlS?row.urlS:row.url; + if(url){ + url = url.split('.')[0]+'.pdf' + const link = document.createElement('a'); + link.href = this.javaApi + url; + link.target = '_blank'; + document.body.appendChild(link); + link.click(); + } }, // 瀹℃牳 handleVerify(row) { diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue index d75d7ca..986d535 100644 --- a/src/components/view/b2-standard.vue +++ b/src/components/view/b2-standard.vue @@ -1,12 +1,12 @@ <style scoped> .standard { - padding: 20px 0; + padding: 10px 0; display: flex; } .left { width: 270px; - height: calc(100% - 40px - 30px); + height: calc(100% - 40px - 10px); background-color: white; padding: 15px; } @@ -38,8 +38,8 @@ } .right .title { - height: 50px; - line-height: 50px; + height: 34px; + line-height: 34px; padding: 0 10px; background-color: white; } @@ -51,19 +51,33 @@ .product_table { border-top: 1px solid #ebeef5; - height: calc(100% - 275px); + height: calc(100% - 235px); margin-top: 5px; background-color: white; user-select: none; } .product_table .el-table { - height: 100%; + height: calc(100% - 35px) !important; } .sort { width: 80% !important; overflow: hidden; + } + >>>.el-table__body-wrapper{ + height: calc(100% - 46px) !important; + } + >>>.header-class{ + height: 40px !important; + } + >>>.header-class th.el-table__cell>.cell{ + line-height: 20px !important; + padding-top: 0 !important; + padding-bottom: 0 !important; + } + >>>.el-table__row{ + height: 35px !important; } </style> <style> @@ -131,19 +145,10 @@ <div class="right"> <el-row class="title"> <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> - <!-- <el-col :span="selectTree==''?24:14" style="text-align: right;" v-if="selectTree!=''"> --> - <!-- <el-button size="small" type="primary" @click="addStandardDia = true" - v-if="addStandardMethod">鏂板鏍囧噯</el-button> - <el-button size="small" type="primary" @click="addProductDia = true" v-if="addStandardProduct">鏂板椤圭洰</el-button> - <el-button size="small" @click="delStandardProductByIds" v-if="delStandardProduct"> - <i class="el-icon-delete" style="color: #3A7BFA;"></i> - <span style="color: #3A7BFA;">鍒犻櫎</span> - </el-button> --> - <!-- </el-col> --> </el-row> <el-row class="standard_table" v-loading="tableLoad"> - <el-table class="el-table" :data="standardList" style="width: 100%;" height="220" tooltip-effect="dark" - highlight-current-row @row-click="rowClick" ref="standard"> + <el-table class="el-table" :data="standardList" style="width: 100%;height: 220px !important;" height="220" tooltip-effect="dark" + highlight-current-row @row-click="rowClick" ref="standard" header-row-class-name="header-class"> <el-table-column prop="code" label="鏍囧噯缂栧彿" show-overflow-tooltip width="200"> <template slot-scope="scope"> <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span> @@ -162,11 +167,15 @@ </el-row> <el-row class="product_table" v-loading="tableLoad2"> <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe - :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" - @select="upProductSelect" @select-all="handleAll"> - <el-table-column type="selection" width="65"> + :fit="true" border + @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" + @select="upProductSelect" + @select-all="handleAll" + class="productTable" + header-row-class-name="header-class"> + <el-table-column type="selection" width="50" > </el-table-column> - <el-table-column prop="model" label="鍨嬪彿" min-width="120" show-overflow-tooltip></el-table-column> + <el-table-column prop="model" label="鍨嬪彿" min-width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="inspectionItem" label="妫�楠岄」" min-width="140" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="inspectionItemClassify" label="妫�楠岄」绫诲瀷" width="120" show-overflow-tooltip></el-table-column> --> <el-table-column prop="inspectionItemSubclass" label="妫�楠岄」瀛愰」" min-width="140" @@ -218,7 +227,8 @@ <el-table-column prop="manHourGroup" label="宸ユ椂鍒嗙粍" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="templateId" label="妯℃澘" width="200"> <template slot-scope="scope"> - <el-select v-model="scope.row.templateId" size="small" @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)"> + <el-select v-model="scope.row.templateId" size="small" filterable + @change="(value)=>upStandardProductListOfTemplate(value,scope.row.id)"> <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> </el-select> </template> @@ -230,6 +240,14 @@ </template> </el-table-column> </el-table> + <el-pagination + style="position: absolute;right: 16px;bottom: 1px;" + @current-change="handleCurrentChange" + :current-page="currentPage" + :page-size="pageSize" + layout="total, prev, pager, next, jumper" + :total="total"> + </el-pagination> </el-row> </div> <el-dialog title="鍒嗙被娣诲姞" :visible.sync="addDia" width="400px"> @@ -272,7 +290,7 @@ <el-button type="primary" @click="addStandardTree" :loading="addLoad">纭� 瀹�</el-button> </span> </el-dialog> - <el-dialog title="鏂板鏍囧噯" :visible.sync="addStandardDia" width="400px"> + <!-- <el-dialog title="鏂板鏍囧噯" :visible.sync="addStandardDia" width="400px"> <div class="body"> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> @@ -289,8 +307,8 @@ <el-button @click="addStandardDia = false">鍙� 娑�</el-button> <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">纭� 瀹�</el-button> </span> - </el-dialog> - <el-dialog title="鏂板椤圭洰" :visible.sync="addProductDia" width="70%"> + </el-dialog> --> + <!-- <el-dialog title="鏂板椤圭洰" :visible.sync="addProductDia" width="70%"> <div class="body" style="height: 60vh;" v-if="addProductDia"> <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" /> </div> @@ -298,7 +316,7 @@ <el-button @click="addProductDia = false">鍙� 娑�</el-button> <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">纭� 瀹�</el-button> </span> - </el-dialog> + </el-dialog> --> <el-dialog title="鍖洪棿璁剧疆" :visible.sync="sectionUpDia" width="70%"> <div class="body" style="padding: 5px 0;"> <el-table :data="sectionList" border style="width: 100%" height="350px"> @@ -427,7 +445,11 @@ sectionLoad: false, sectionRow: null, sectionList: [], - templateList: [] + templateList: [], + total:0, + pageSize:100, + currentPage:1, + standardId: 0 } }, mounted() { @@ -906,16 +928,19 @@ }, rowClick(row, column, event) { this.tableLoad2 = true + this.standardId = row.id this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { id: row.id, - tree: this.selectTree + tree: this.selectTree, + page: this.currentPage }).then(res => { - this.productList = res.data + this.productList = res.data.productList + this.total = res.data.total setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) - }, 300) + }, 200) this.tableLoad2 = false }) }, @@ -932,7 +957,7 @@ return ''; }, upProductSelect(selection, row) { - row.state = row.state == 1 ? 0 : 1 + row.state = (row.state == 1 ? 0 : 1) this.$axios.post(this.$api.standardTree.upStandardProductList, { id: row.id, state: row.state @@ -954,12 +979,14 @@ }, handleAll(e) { if (e.length > 0) { - this.productList.map(m => { + this.productList = this.productList.map(m => { + m.state = 0 this.upProductSelect(null, m) return m }) } else { - this.productList.map(m => { + this.productList = this.productList.map(m => { + m.state = 1 this.upProductSelect(null, m) return m }) @@ -1036,6 +1063,23 @@ this.templateList = res.data }) }, + handleCurrentChange(val) { + this.currentPage = val; + this.tableLoad2 = true + this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { + id: this.standardId, + tree: this.selectTree, + page: val + }).then(res => { + this.productList = res.data.productList + setTimeout(() => { + this.productList.forEach(a => { + if (a.state == 1) this.toggleSelection(a) + }) + }, 200) + this.tableLoad2 = false + }) + }, } } </script> diff --git a/src/components/view/b3-classes.vue b/src/components/view/b3-classes.vue index 2d9ffd5..684829a 100644 --- a/src/components/view/b3-classes.vue +++ b/src/components/view/b3-classes.vue @@ -44,12 +44,12 @@ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> </div> <div class="search_thing btns" style="padding-left: 30px;"> - <el-button size="small" type="primary" v-if="downPower">瀵� 鍑�</el-button> + <el-button size="small" type="primary" v-if="downPower" @click="handleDown" :loading="downLoading">瀵� 鍑�</el-button> <el-button size="small" type="primary" @click="schedulingVisible = true" v-if="addPower">鎺� 鐝�</el-button> </div> </div> <div class="center" v-loading="pageLoading"> - <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0" style="height: 100%;" :key="'123'"> + <scroll-pagination @load="init" :finishLoding="finishLoding" v-show="query.month&&list.length>0" style="height: 100%;" :key="'123'" :list="list"> <div class="clearfix"> <div class="fixed-left"> <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> @@ -60,7 +60,7 @@ <div class="user-pic">{{ item.name.charAt(0) }}</div> <div class="user-info"> <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p> - <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�: {{ item.day0 }}, 涓�: {{ item.day1 }}, 澶�: {{ item.day2 }}, 浼�: {{ item.day3 }}, 鍋�: {{ item.day4 }}</p> + <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{ item.day3 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}</p> <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">鍚堣鍑哄嫟: </span><span style="font-size: 16px; color: #FF4902;">{{ query.month?item.monthlyAttendance .totalAttendance:item.sidebarAnnualAttendance @@ -75,7 +75,7 @@ <span class="month" style="position: absolute;top: 4px;" v-if="item.week=='鍛ㄦ棩'">{{ item.weekNum }}鍛�</span> <p style="height: 26px;position: absolute;bottom: 12px;"> <span class="day">{{ item.day }}</span> - <span class="week">{{ item.week }}</span> + <span class="week">{{ item.week.charAt(1) }}</span> </p> </div> </div> @@ -83,13 +83,13 @@ v-on:mouseenter="onMouseEnter(index)" v-on:mouseleave="currentUserIndex=null"> <div class="content-body-item" v-for="(m,i) in item.list" :key="'d'+i" :class="{hoverType:currentUserIndex==index}"> - <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',}"> + <div class="work-box" :class="{type0:m.shift==='0',type1:m.shift==='1',type2:m.shift==='2',type3:m.shift==='3',type4:m.shift==='4',type5:m.shift==='5',type6:m.shift==='6'}"> <!-- <div class="work-box-left"> <span>{{ getShiftByDic(m.shift) }}</span> </div> --> <el-dropdown trigger="click" placement="bottom" @command="e=>handleCommand(e,m)" :disabled="!downPower"> <!-- <i class="el-icon-arrow-down el-icon--right" style="font-size: 20px;color: #fff;cursor: pointer;"></i> --> - <span style="cursor: pointer;">{{ getShiftByDic(m.shift) }}</span> + <span style="cursor: pointer;" :style="`opacity: ${getShiftByDic(m.shift)=='鏃�'?0:1};`">{{ getShiftByDic(m.shift) }}</span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item v-for="(n,j) in classType" :key="'h'+j" :command="n.value">{{ n.label }}</el-dropdown-item> </el-dropdown-menu> @@ -101,7 +101,7 @@ </div> </div> </scroll-pagination> - <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&yearList.length>0" style="width: 100%;" :key="'111'"> + <scroll-pagination @load="initYear" :finishLoding="finishLoding" v-show="!query.month&&yearList.length>0" style="width: 100%;" :key="'111'" :list="yearList"> <div class="clearfix year-table"> <div class="fixed-left"> <div class="content-title" style="padding-left: 16px;box-sizing: border-box;"> @@ -112,7 +112,7 @@ <div class="user-pic">{{ item.name.charAt(0) }}</div> <div class="user-info"> <p style="font-size: 14px;color: #3A7BFA;line-height: 24px;">{{ item.name }}</p> - <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�: {{ item.day0 }}, 涓�: {{ item.day1 }}, 澶�: {{ item.day2 }}, 浼�: {{ item.day3 }}, 鍋�: {{ item.day4 }}</p> + <p style="color: #999999;font-size: 12px;transform: scale(0.8) translateX(-20px);white-space: nowrap;width: 150px;overflow-x: show;">鏃�:{{ item.day0 }},涓�:{{ item.day1 }},澶�:{{ item.day2 }},浼�:{{ item.day3 }},鍋�:{{ item.day4 }},宸�:{{ item.day6 }}</p> <p style="margin-top: 4px;"><span style="color: #999999;font-size: 12px;display: inline-block;transform: scale(0.8) translateX(-10px);">鍚堣鍑哄嫟: </span><span style="font-size: 16px; color: #FF4902;">{{ item.work_time }}澶�</span></p> </div> @@ -139,7 +139,7 @@ <div class="content-body-item" v-for="(m,i) in item.monthList" :key="'d'+i" :class="{hoverType:currentUserIndex==index}"> <p style="color:rgb(153, 153, 153);font-size: 12px;">鍚堣鍑哄嫟锛�<span style="font-size: 14px;color:#000">{{ m.totalMonthAttendance }}</span></p> <p style="color:rgb(153, 153, 153);font-size: 12px;"> - 鏃�: {{ m.day0 }}, 涓�: {{ m.day1 }}, 澶�: {{ m.day2 }}, 浼�: {{ m.day3 }}, 鍋�: {{ m.day4 }} + 鏃�:{{ m.day0 }},涓�:{{ m.day1 }},澶�:{{ m.day2 }},浼�:{{ m.day3 }},鍋�:{{ m.day4 }},宸�:{{ m.day6 }} </p> </div> </div> @@ -286,7 +286,9 @@ pageLoading: false, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 monthList:[], - yearList:[] + yearList:[], + downLoading:false, + keyMap:{}, } }, watch: { @@ -331,6 +333,7 @@ refresh(){ this.list = []; this.yearList = [] + this.keyMap = {}; this.currentPage = 1 this.query = { userName:'', @@ -345,6 +348,7 @@ } }, refreshTable(){ + this.keyMap = {}; this.currentPage = 1 if(this.query.month){ this.list = []; @@ -355,6 +359,14 @@ } }, init(){ + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' if(this.currentPage==1){ this.pageLoading = true } @@ -405,6 +417,14 @@ }) }, initYear(){ + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' // pageYear if(this.currentPage==1){ this.pageLoading = true @@ -516,6 +536,40 @@ this.refresh() }) }, + handleDown(){ + let year = this.query.year.getFullYear() + let time = ''; + if(this.query.month){ + let month = this.query.month>9?this.query.month:'0'+this.query.month + time = year+'-'+month+'-01 00:00:00' + }else{ + time = year+'-01-01 00:00:00' + } + this.downLoading = true + this.$axios.get(this.$api.performanceShift.export+`?time=${time}&userName=${this.query.userName}&laboratory=${this.query.laboratory}&isMonth=${this.query.month?true:false}`,{responseType: 'blob'}).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+' 鐝姹囨��' + } + const filename = decodeURI(fileName+'.xlsx') + // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠� + const elink = document.createElement('a') + elink.download = filename + elink.style.display = 'none' + elink.href = URL.createObjectURL(blob) + document.body.appendChild(elink) + elink.click() + URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄 + document.body.removeChild(elink) + }) + }, selectEnumByCategory() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "鐝绫诲瀷" @@ -583,7 +637,7 @@ if(obj){ return obj.label } - return '鏈帓鐝�' + return '鏃�' } } } @@ -664,7 +718,7 @@ } .content-title-item{ height: 100%; - width: 60px; + width: 50px; flex-shrink: 0; border-bottom: 1px solid #EEEEEE; box-sizing: border-box; @@ -699,8 +753,9 @@ } .content-body-item{ height: 70px; - width: 60px; + width: 50px; flex-shrink: 0; + font-size: 12px; box-sizing: border-box; padding: 4px; border-right: 1px solid #EEEEEE; @@ -752,6 +807,20 @@ .work-box.type4 span{ color: #F56C6C !important; } +.work-box.type5{ + background: #ff46c145; + color: #ff46c0 !important; +} +.work-box.type5 span{ + color: #ff46c0 !important; +} +.work-box.type6{ + background: #00036418; + color: #000464 !important; +} +.work-box.type6 span{ + color: #000464 !important; +} /* .el-icon-arrow-down::before{ color: #c6c4c4; } */ diff --git a/src/components/view/b3-work-time-management.vue b/src/components/view/b3-work-time-management.vue index 9a90bfc..66d77a4 100644 --- a/src/components/view/b3-work-time-management.vue +++ b/src/components/view/b3-work-time-management.vue @@ -27,7 +27,7 @@ }, data() { return{ - currentComponent:'workTimeConfig' + currentComponent:'workTimeStatistics' } } } diff --git a/src/components/view/index-index.vue b/src/components/view/index-index.vue index d74400e..7c0fc28 100644 --- a/src/components/view/index-index.vue +++ b/src/components/view/index-index.vue @@ -241,7 +241,31 @@ text-align: left; margin-bottom: 10px; } - + >>>.el-calendar-day span{ + display: inline-block; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + border-radius: 4px; + } + >>>.is-selected{ + background: transparent !important; + } + >>>.is-selected .el-calendar-day{ + background: transparent !important; + } + >>>.is-selected .el-calendar-day span{ + background: #3A7BFA !important; + color: #fff !important; + } + >>>.el-calendar-day:hover{ + background: transparent; + } + >>>.el-calendar-day span:hover{ + background: #3A7BFA !important; + color: #fff !important; + } </style> <template> @@ -280,7 +304,7 @@ <img src="../../../static/img/index-0.svg" alt=""> </div> <div class="mun"> - <p style="font-size: 20px;">254</p> + <p style="font-size: 20px;">0</p> <p style="font-size: 14px;margin-bottom: 10px;">鎴戠殑寰呭姙</p> </div> </div> @@ -289,7 +313,7 @@ <img src="../../../static/img/index-1.svg" alt=""> </div> <div class="mun"> - <p style="font-size: 20px;">254</p> + <p style="font-size: 20px;">0</p> <p style="font-size: 14px;margin-bottom: 10px;">宸插姙浜嬪疁</p> </div> </div> @@ -298,7 +322,7 @@ <img src="../../../static/img/index-2.svg" alt=""> </div> <div class="mun"> - <p style="font-size: 20px;">254</p> + <p style="font-size: 20px;">0</p> <p style="font-size: 14px;margin-bottom: 10px;">鍓╀綑寰呭姙</p> </div> </div> @@ -307,7 +331,7 @@ <img src="../../../static/img/index-3.svg" alt=""> </div> <div class="mun"> - <p style="font-size: 20px;">254</p> + <p style="font-size: 20px;">0</p> <p style="font-size: 14px;margin-bottom: 10px;">杩戞湡浜嬪疁</p> </div> </div> @@ -332,8 +356,8 @@ <span> {{ data.day.split('-').slice(2)+'' }} </span> - <el-badge v-if="data.isSelected" is-dot class="item"> - </el-badge> + <!-- <el-badge v-if="data.isSelected" is-dot class="item"> + </el-badge> --> </template> </el-calendar> </div> @@ -354,7 +378,7 @@ <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==5}" @click="currentIndex=5">閫氱煡閫氬憡</div> </div> <div class="right-3-list" v-loading="listLoading"> - <scroll-pagination @load="getList" :finishLoding="finishLoding"> + <scroll-pagination @load="getList" :finishLoding="finishLoding" :list="list"> <div class="list3-item" v-for="(m,i) in list" :key="i"> <div class="list3-item-title"> <img src="../../../static/img/index-tip.svg" alt=""> @@ -439,7 +463,9 @@ pageSize: 8, // 涓�椤�7鏉� total: null, listLoading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue - finishLoding: false // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + timer:null, + keyMap:{}, } }, watch:{ @@ -447,6 +473,7 @@ this.getScheduleByMe() }, currentIndex(){ + this.keyMap = {} this.currentPage = 1; this.list = []; this.getList(); @@ -458,15 +485,33 @@ setInterval(() => { this.nowTime() }, 1000) - this.init(); this.weekdays = this.getWeekdaysForNextWeek() - this.getScheduleByMe() + this.init(); this.currentPage = 1; + this.keyMap = {} this.list = []; this.getList(); + this.getScheduleByMe() + this.timer&&clearInterval(this.timer) + this.timer = setInterval(() => { + this.init(); + this.currentPage = 1; + this.keyMap = {} + this.list = []; + this.getList(); + this.getScheduleByMe() + },1000*60*10) }, methods: { getList(){ + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' if(this.currentPage==1){ this.listLoading = true } @@ -623,10 +668,11 @@ let weekdays = []; for (let i = 0; i < 7; i++) { let date = new Date(); - date.setDate(date.getDate() + i); // 浠婂ぉ涔嬪悗鐨勬棩瀛� + date.setDate(date.getDate() - i); // 浠婂ぉ涔嬪悗鐨勬棩瀛� let day = date.getDay(); // 0-6 浠h〃鏄熸湡鏃ュ埌鏄熸湡鍏� weekdays.push(day); } + weekdays.reverse() weekdays = weekdays.map(m=>{ let day ='' switch (m) { @@ -691,5 +737,8 @@ }) }, }, + deactivated(){ + this.timer&&clearInterval(this.timer) + } } </script> diff --git a/src/components/view/notice-detail.vue b/src/components/view/notice-detail.vue index 0c67cb0..b1fd617 100644 --- a/src/components/view/notice-detail.vue +++ b/src/components/view/notice-detail.vue @@ -1,7 +1,7 @@ <template> <div class="notice-detail-page"> <div class="notice-detail-head"> - <h4 style="margin-bottom: 16px;">{{ noticeInfo.theme }} <el-tag style="margin-left: 10px;" :type="options.find(m=>m.value==noticeInfo.messageType).type" v-if="options.find(m=>m.value==noticeInfo.messageType)">{{ options.find(m=>m.value==noticeInfo.messageType).label }}</el-tag></h4> + <h4 style="margin-bottom: 16px;" v-if="noticeInfo.theme">{{ noticeInfo.theme }} <el-tag style="margin-left: 10px;" :type="options.find(m=>m.value==noticeInfo.messageType).type" v-if="options.find(m=>m.value==noticeInfo.messageType)">{{ options.find(m=>m.value==noticeInfo.messageType).label }}</el-tag></h4> <p style="font-size: 12px;color: #999;margin-bottom: 20px;"> <!-- <span>娑堟伅绫诲瀷锛氬鎵� </span> --> <span>鍙戦�佷汉锛歿{ noticeInfo.createUser }} </span> @@ -41,15 +41,11 @@ options:[] } }, - created(){ - this.noticeInfo = JSON.parse(sessionStorage.getItem("noticeInfo")); - }, mounted(){ - this.noticeInfo = JSON.parse(sessionStorage.getItem("noticeInfo")); + this.noticeInfo = JSON.parse(localStorage.getItem("noticeInfo")); this.$bus.$on("change", (msg) => { this.noticeInfo = JSON.parse(msg); - console.log(this.noticeInfo); - sessionStorage.setItem("noticeInfo", msg); + localStorage.setItem("noticeInfo", msg); }); this.getTypeDicts() }, @@ -69,7 +65,11 @@ <style scoped> .notice-detail-page{ height: calc(100% - 30px); + overflow-y: auto; padding: 16px 0; +} +.notice-detail-page::-webkit-scrollbar { + width: 0; } .notice-detail-head{ background: #fff; @@ -83,9 +83,9 @@ box-sizing: border-box; padding: 8px 20px 20px; background: rgba(0,0,0, 0.03); - box-shadow: 0 0 10px 10px #fff; + /* box-shadow: 0 0 10px 10px #fff; */ border-radius: 4px; - height: calc(100% - 192px - 22px); + min-height: calc(100% - 192px - 22px); } .notice-detail-head-content div{ border-radius: 8px; @@ -98,6 +98,6 @@ } .notice-content{ - height: 100%; + height: 600px; } </style> diff --git a/src/main.js b/src/main.js index f149db9..24fdc91 100644 --- a/src/main.js +++ b/src/main.js @@ -13,8 +13,8 @@ //鏈湴 Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; -// const javaApi = 'http://192.168.11.200:8001';//鏉� -const javaApi = 'http://10.20.102.168:8001';//寮� +const javaApi = 'http://192.168.11.200:8001';//鏉� +// const javaApi = 'http://10.20.102.168:8001';//寮� // const javaApi = 'http://172.20.10.3:8001';//濮� // const javaApi = 'http://192.168.11.2:8001';//鏌� // const javaApi = 'http://114.132.189.42:1234';//娴嬭瘯鏈� diff --git a/src/view/index.vue b/src/view/index.vue index 60b94d2..b9ff928 100644 --- a/src/view/index.vue +++ b/src/view/index.vue @@ -225,8 +225,8 @@ .component_view { height: calc(100vh - 84px); - width: calc(100% - 52px); - padding: 0 26px; + width: calc(100% - 40px); + padding: 0 20px; background: rgb(245, 247, 251); } @@ -393,7 +393,7 @@ <el-button type="primary" @click="handleEdit">纭� 瀹�</el-button> </span> </el-dialog> - <notice ref="notice" /> + <notice ref="notice" @goNoticeDetail="checkForUnreadData()" /> </div> </template> diff --git a/src/view/notice.vue b/src/view/notice.vue index 4a10fef..be68420 100644 --- a/src/view/notice.vue +++ b/src/view/notice.vue @@ -34,10 +34,11 @@ </el-dropdown> </div> <div class="notice-content" v-loading="loading"> - <scroll-pagination @load="refresh" :finishLoding="finishLoding"> + <scroll-pagination @load="refresh" :finishLoding="finishLoding" :list="list"> <div class="notice-content-item" v-for="(m,i) in list" :key="i"> <div class="btns" v-if="m"> - <el-dropdown style="margin-right: 20px;" trigger="click" @command="e=>handleDropdown(e,m)" v-if="m.messageType==2||m.messageType==3"> + <!-- v-if="m.messageType==2||m.messageType==3" --> + <el-dropdown style="margin-right: 20px;" trigger="click" @command="e=>handleDropdown(e,m)" v-if="false"> <span class="el-dropdown-link"> <span class="more" style="line-height: 26px;display: inline-block;">···</span> </span> @@ -124,17 +125,27 @@ pageSize: 8, // 涓�椤�7鏉� total: null, loading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue - finishLoding: false // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + keyMap:{} } }, mounted(){ this.getTypeDicts(); this.currentPage = 1; + this.keyMap = {}; this.list = []; this.refresh(); }, methods:{ refresh(){ + const key = `_${this.currentPage}` + const value = this.keyMap[key] + // 濡傛灉value瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' if(this.currentPage==1){ this.loading = true } @@ -190,8 +201,10 @@ p: "abcd" },29); this.list = []; + this.keyMap = {}; this.currentPage = 1; this.refresh(); + this.$emit('goNoticeDetail') }) }, handleDropdown(e,row){ @@ -215,6 +228,7 @@ } this.$message.success('鍒犻櫎鎴愬姛') this.list = []; + this.keyMap = {}; this.currentPage = 1; this.refresh() }).catch(e => { @@ -222,40 +236,9 @@ }) }).catch(() => {}) }, - // 婊氬姩瑙﹀簳鍔犺浇 - scrollFn() { - let clientHeight = document.documentElement.clientHeight - 18; //鍙鍖哄煙 - let scrollHeight = document.body.scrollHeight; // 婊氬姩鏂囨。楂樺害 - let scrollTop = parseInt(document.documentElement.scrollTop); // 宸叉粴鍔ㄧ殑楂樺害 - let height = 300; - if ( - scrollTop + clientHeight >= scrollHeight - height && - scrollHeight != 0 - ) { - if (!this.finishLoding&&this.currentPage*this.pageSize<this.total) { - this.currentPage = this.currentPage + 1; - this.refresh(); - } - } else { - return false; - } - }, - throttle(fn, wait) { - // 灏佽鍑芥暟杩涜鑺傛祦 - var timer = null; - return function () { - var context = this; - var args = arguments; - if (!timer) { - timer = setTimeout(function () { - fn.apply(context, args); - timer = null; - }, wait); - } - }; - }, handleType(){ this.list = []; + this.keyMap = {}; this.currentPage = 1; this.refresh(); }, @@ -270,13 +253,11 @@ } this.$message.success('鎿嶄綔鎴愬姛') this.list = []; + this.keyMap = {}; this.currentPage = 1; this.refresh(); }) } - }, - destroyed() { - window.removeEventListener("scroll", this.throttle(), false); }, } </script> -- Gitblit v1.9.3