Merge remote-tracking branch 'origin/material-ui' into material-ui
|
|
@ -4,5 +4,7 @@ VUE_APP_TITLE = 智能机具管理系统
|
|||
# 生产环境配置
|
||||
ENV = 'production'
|
||||
|
||||
# 智能机具管理系统/生产环境
|
||||
VUE_APP_BASE_API = '/prod-api'
|
||||
# 智能机具管理系统/生产环境-公司
|
||||
# VUE_APP_BASE_API = '/prod-api'
|
||||
# 智能机具管理系统/宏源环境
|
||||
VUE_APP_BASE_API = '/iws/jiju-api'
|
||||
|
|
|
|||
|
|
@ -361,6 +361,12 @@ export function getMachineByQrCode(query) {
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 获取i8工程类型
|
||||
export function getI8ProjectList(params) {
|
||||
return request({
|
||||
url: '/material/bm_project/getProjectList',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 获取卡片列表信息
|
||||
export const getCardListApi = data => {
|
||||
return request({
|
||||
url: '/material/mainPage/demandAndSupply',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取第二行卡片列表信息
|
||||
export const getCardList_2Api = data => {
|
||||
return request({
|
||||
url: '/material//mainPage/getMaTypeHomeList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
// 获取饼图1数据信息
|
||||
export const getPie_1DataApi = data => {
|
||||
return request({
|
||||
url: '/material/mainPage/getDemandTotal',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
// 获取饼图2数据信息
|
||||
export const getPie_2DataApi = data => {
|
||||
return request({
|
||||
url: '/material/mainPage/getMaTypeStatusTotal',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取柱状图和折线图数据信息
|
||||
export const getBarAndLineDataApi = data => {
|
||||
return request({
|
||||
url: '/material/mainPage/getDemandList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import request from '@/utils/request';
|
||||
|
||||
// 总计数量
|
||||
export const getRepairHomeTotalListApi = params => {
|
||||
return request({
|
||||
url: '/material/repair_audit_details/getRepairHomeTotalList',
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
};
|
||||
|
||||
// 列表
|
||||
export const getRepairHomeListApi = params => {
|
||||
return request({
|
||||
url: '/material/repair_audit_details/getRepairHomeList',
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
};
|
||||
|
|
@ -96,3 +96,16 @@ export function getCodeImg() {
|
|||
timeout: 20000
|
||||
})
|
||||
}
|
||||
|
||||
// iws登录
|
||||
export function iwsLogin(data) {
|
||||
return request({
|
||||
url: '/auth/iwsLogin',
|
||||
headers: {
|
||||
isToken: false,
|
||||
repeatSubmit: false
|
||||
},
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,3 +71,27 @@ export function getProjectList(query) {
|
|||
})
|
||||
}
|
||||
|
||||
// 设备管理--获取报告编号信息
|
||||
export function getSynchReportCode(data) {
|
||||
return request({
|
||||
url: '/material/ma_machine/getReport',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
// 设备管理--同步检验报告
|
||||
export function synchReport(data) {
|
||||
return request({
|
||||
url: '/material/ma_machine/synchReport',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
export function editAssetsCode(data) {
|
||||
return request({
|
||||
url: '/material/ma_machine/editAssetsCode',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ export function bindKeeper(data) {
|
|||
})
|
||||
}
|
||||
|
||||
// 库管员管理--绑定
|
||||
// 库管员管理--解绑
|
||||
export function noBindKeeper(data) {
|
||||
return request({
|
||||
url: '/material/ma_type_keeper/unbind',
|
||||
|
|
|
|||
|
|
@ -68,9 +68,14 @@ export function getPurchaseCheckFormByTaskId(taskId) {
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 验收人查询
|
||||
export function getCheckUserList(query) {
|
||||
return request({
|
||||
url: '/material/purchase_check_info/getCheckUserList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -73,10 +73,11 @@ export function bmNoticeInfo(data) {
|
|||
|
||||
|
||||
//通知-添加人员-未选择人员
|
||||
export function getListUnSelected() {
|
||||
export function getListUnSelected(params) {
|
||||
return request({
|
||||
url: '/material/purchase_notice_person/listUnSelected',
|
||||
method: 'get',
|
||||
params,
|
||||
})
|
||||
}
|
||||
// 通知人员--删除
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 获取列表
|
||||
export const getTableListApi = data => {
|
||||
return request({
|
||||
url: '/material/back_apply_info/selectBackApplyList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
// 获取退料数量详情
|
||||
export const getReturnNumDetailsApi = data => {
|
||||
return request({
|
||||
url: '/material/back_apply_info/selectSecondList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 获取列表
|
||||
export const getTableListApi = data => {
|
||||
return request({
|
||||
url: '/material/complex_query/getMaTypeSelectList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 获取列表
|
||||
export const getTableListApi = data => {
|
||||
return request({
|
||||
url: '/material/repair/selectRepairPartList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获取使用数量详情
|
||||
export const getUseNumDetailsApi = data => {
|
||||
return request({
|
||||
url: '/material/repair/selectSecondRepairPartList',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
|
@ -25,6 +25,32 @@ export function getPurChaseReportDetailsListApi(query) {
|
|||
})
|
||||
}
|
||||
|
||||
// 新购入库验收合格报表-弹窗查询
|
||||
export function getPurChaseReportSuccessListApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getPurChaseReportSuccessList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 新购入库数量报表-弹窗查询
|
||||
export function getPurChaseReportInBoundListApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getPurChaseReportInBoundList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 新购入库数量报表-弹窗查询
|
||||
export function getPurChaseReportNotInBoundListApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getPurChaseReportNotInBoundList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 领料出库报表查询
|
||||
export function getLeaseOutListApi(query) {
|
||||
|
|
@ -126,4 +152,31 @@ export function getRepairInputDetailsListApi(query) {
|
|||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 报废报表-列表
|
||||
export function getScrapListApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getScrapList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 报废报表-总条数
|
||||
export function getScrapListNoPageApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getScrapListNoPage',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 报废报表-弹窗查询
|
||||
export function getScrapDetailsListApi(query) {
|
||||
return request({
|
||||
url: '/material/bm_report/getScrapDetailsList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539542068" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22600" width="200" height="200"><path d="M237.58 740.23L176.66 753 67.24 917.89l20.6 20.49 20.6 20.52 166.14-108.72 12.91-60.48L424.13 654l-49.78-49.53z m595.84-620.88a14.84 14.84 0 0 1 20.92 0 14.5 14.5 0 0 1 0 20.8L614.63 378.23 652 415.38 891.67 177.3a14.87 14.87 0 0 1 21 0 14.5 14.5 0 0 1 0 20.81l-239.7 238 33.57 33.31c0.57-0.53 1.15-0.84 1.72-1.45l25.36-25.17 203.19-201.7a102.4 102.4 0 0 0 0-145.68 104.24 104.24 0 0 0-146.75 0L588.12 295.84l-26.64 26.48c-0.51 0.6-0.9 1.23-1.4 1.76l33.51 33.37zM488.23 312.28a210.73 210.73 0 0 0 2.6-56.88 207 207 0 0 0-60.53-128.57C368.17 65.21 277 50.28 200.7 81.91L324 204.19a47.14 47.14 0 0 1-0.07 66.9l-51.44 51a47.68 47.68 0 0 1-67.14 0L84.78 202.4a207.13 207.13 0 0 0 48.39 219.39 209.7 209.7 0 0 0 115.92 58.33 213.3 213.3 0 0 0 60.66 0.63c128.25 127.44 445 441.9 445 441.9 48.06 47.64 126.14 47.64 174.15 0a121.54 121.54 0 0 0-0.07-172.85zM891 885a64.55 64.55 0 0 1-90.8 0.07 63.5 63.5 0 0 1 0.07-90 64.59 64.59 0 0 1 90.66 0 63.23 63.23 0 0 1 0.07 90z m0 0" fill="#ffffff" p-id="22601"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539407635" class="icon" viewBox="0 0 1058 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18439" width="200" height="200"><path d="M1041.066667 361.813333l-484.693334-341.333333c-3.413333-3.413333-6.826667-6.826667-13.653333-10.24-13.653333-6.826667-34.133333-3.413333-44.373333 13.653333l-481.28 337.92c-13.653333 10.24-17.066667 34.133333-3.413334 51.2s34.133333 23.893333 47.786667 13.653334l34.133333-23.893334v559.786667c0 20.48 17.066667 37.546667 37.546667 37.546667s37.546667-17.066667 37.546667-37.546667v-614.4l358.4-252.586667 365.226666 256v607.573334c0 20.48 17.066667 37.546667 37.546667 37.546666s37.546667-17.066667 37.546667-37.546666v-556.373334l27.306666 17.066667c13.653333 10.24 37.546667 3.413333 47.786667-13.653333 13.653333-13.653333 10.24-34.133333-3.413333-44.373334z m-679.253334 27.306667h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c0-30.72-6.826667-37.546667-37.546667-37.546667z m0 204.8h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c0-30.72-6.826667-37.546667-37.546667-37.546667z m0 208.213333h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c0-34.133333-6.826667-37.546667-37.546667-37.546667z m215.04 0h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c0-34.133333-6.826667-37.546667-37.546667-37.546667z m215.04 0h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c3.413333-34.133333-3.413333-37.546667-37.546667-37.546667z m-215.04-208.213333h-81.92c-30.72 0-37.546667 6.826667-37.546666 37.546667v85.333333c0 30.72 6.826667 37.546667 37.546666 37.546667h81.92c30.72 0 37.546667-6.826667 37.546667-37.546667v-85.333333c0-30.72-6.826667-37.546667-37.546667-37.546667z" fill="#ffffff" p-id="18440"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539490318" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20926" width="200" height="200"><path d="M910.208 0H113.792A114.304 114.304 0 0 0 0 113.792v796.416A114.048 114.048 0 0 0 113.792 1024h796.416A114.048 114.048 0 0 0 1024 910.208V113.792A114.176 114.176 0 0 0 910.208 0zM256 768H192v-64h64v64z m0-256H192V448h64v64z m78.272-329.6L214.08 302.208l-6.848 6.848-6.784-6.848-80.256-80.704-6.848-6.784 27.904-27.904 6.848 6.848 59.392 59.584 99.136-98.944L313.6 147.2l6.4 7.104 14.464 14.272 6.848 6.784zM896 768H448v-64h448v64z m0-256H448V448h448v64z m0-256H448V192h448v64z m0 0" fill="#ffffff" p-id="20927"></path></svg>
|
||||
|
After Width: | Height: | Size: 679 B |
|
After Width: | Height: | Size: 9.4 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742541057763" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="37262" width="200" height="200"><path d="M771.512499 509.49597 511.614214 959.653483 251.715929 509.49597 414.441057 509.49597 414.441057 64.132646 608.786347 64.132646 608.786347 509.49597Z" p-id="37263" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 348 B |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539612234" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24591" width="200" height="200"><path d="M886.525028 478.637873v-39.369867L497.811509 141.62926 109.09799 439.204094v550.666833H0.703033V380.660592L497.811509 0l497.108476 380.660592v97.977281z" fill="#ffffff" p-id="24592"></path><path d="M769.118462 740.038447h232.000999v-102.259393H774.678817l54.133566-54.133567-72.284609-72.34852L575.912121 691.91262l72.284608 72.348521 0.255649-0.255649 108.458869 108.394957 72.348521-72.220696-60.077394-60.141306zM192.439396 512.703033h191.736362v191.736363H192.439396zM194.484584 794.619398h191.736362v191.736363h-191.736362zM446.426164 794.875047h191.736363v191.736362h-191.736363z" fill="#ffffff" p-id="24593"></path></svg>
|
||||
|
After Width: | Height: | Size: 784 B |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742540230283" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30256" width="200" height="200"><path d="M907.647015 65.802682l-172.019819 0c-18.984377 0-34.403554 15.45397-34.403554 34.403554l0 825.697585c0 18.949584 15.419178 34.403554 34.403554 34.403554l172.019819 0c18.949584 0 34.403554-15.45397 34.403554-34.403554l0-825.697585C942.05057 81.257675 926.5966 65.802682 907.647015 65.802682zM873.242438 891.500267 770.030751 891.500267l0-756.889453 103.211686 0L873.242438 891.500267z" fill="#ffffff" p-id="30257"></path><path d="M598.009909 272.227078l-172.019819 0c-18.984377 0-34.403554 15.45397-34.403554 34.403554l0 619.273189c0 18.949584 15.419178 34.403554 34.403554 34.403554l172.019819 0c18.949584 0 34.404578-15.45397 34.404578-34.403554l0-619.273189C632.414487 287.682072 616.959493 272.227078 598.009909 272.227078z" fill="#ffffff" p-id="30258"></path><path d="M288.373827 478.651474 116.352985 478.651474c-18.984377 0-34.403554 15.45397-34.403554 34.403554l0 412.848793c0 18.949584 15.419178 34.403554 34.403554 34.403554l172.020842 0c18.949584 0 34.403554-15.45397 34.403554-34.403554l0-412.848793C322.777381 494.106468 307.323411 478.651474 288.373827 478.651474z" fill="#ffffff" p-id="30259"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742540367711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="31467" width="200" height="200"><path d="M512 693.76c301.44 0 464-80.64 464-113.28v-134.4c-107.52 58.24-289.92 85.76-464 85.76S155.52 504.32 48 446.08v134.4c0 32.64 162.56 113.28 464 113.28zM48 704v128c0 138.88 291.84 176 464 176s464-37.12 464-176v-128c-107.52 58.24-289.92 85.76-464 85.76S155.52 762.24 48 704zM512 435.84c301.44 0 464-80.64 464-113.28V192C976 53.12 684.16 16 512 16S48 53.12 48 192v130.56c0 32.64 162.56 113.28 464 113.28z" p-id="31468" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 598 B |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539701402" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26008" width="200" height="200"><path d="M915.667 959.062H108.333V365.29L512 64.938 915.667 365.29v584.627H835.33V405.651L512 165.074 188.67 405.651v473.074h726.997z" p-id="26009" fill="#ffffff"></path><path d="M689.289 852.614c-21.68 0-47.693-8.67-60.699-26.013L498.52 696.535h-4.336c-17.342 4.333-34.686 8.67-52.025 8.67-13.01 0-26.016 0-39.022-4.336-34.686-8.67-65.035-26.013-91.048-52.026-43.355-43.359-65.035-108.39-52.028-173.424 4.336-17.343 17.342-30.349 30.349-34.686h13.009c13.006 0 21.676 4.336 30.349 13.006l43.355 43.355c4.333 8.673 13.006 13.01 21.676 13.01 8.673 0 17.342-4.337 21.679-8.674 13.007-13.006 13.007-34.686 0-47.692l-47.692-43.355c-8.67-13.007-13.007-30.349-8.67-47.692 4.333-17.343 17.339-26.013 34.682-30.349 13.009-4.336 26.015-4.336 39.022-4.336 52.025 0 99.717 21.679 134.402 56.365 26.013 26.013 43.356 56.362 52.029 91.048 8.67 30.348 4.336 65.034-4.336 91.047v4.336l130.069 130.067C767.33 718.21 776 739.89 776 761.567c0 21.679-8.67 47.692-26.013 60.698-17.342 21.679-39.022 30.349-60.698 30.349zM498.521 640.169c13.007 0 26.013 4.336 30.349 13.007l134.403 134.406c4.336 4.333 13.006 8.67 21.679 8.67 8.67 0 17.343-4.337 21.676-8.67 4.336-4.336 8.673-13.006 8.673-21.679 0-8.67-4.336-17.343-8.673-21.68L576.562 609.82c-13.006-13.006-17.342-30.348-13.006-47.692 8.67-21.676 8.67-47.692 4.333-73.705-4.333-26.013-17.339-47.692-34.682-65.035-26.015-26.013-56.365-39.019-86.714-39.019H429.15l34.686 34.682c17.343 17.343 26.013 39.022 26.013 60.702 0 21.676-8.67 47.688-26.013 60.698-17.342 17.343-43.355 26.013-65.034 26.013-21.676 0-47.693-8.669-60.699-26.013l-34.682-34.686v17.343c0 34.686 17.339 65.035 39.019 86.711 17.342 17.343 43.355 30.349 65.035 39.022 8.67 0 17.342 4.334 30.349 4.334 13.006 0 30.348-4.334 43.355-8.67 4.336-4.336 8.669-4.336 17.342-4.336z m0 0" p-id="26010" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742881479198" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6451" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M653 294.8v164.8h-60V380c22.4-33.6 29.2-75.6 17.2-115h12.8c16.6-0.2 30 13.2 30 29.8z m256-42.2l-58.6-112.4c-5.2-10-15.4-16.2-26.6-16.2H558.4l22.2 60h225l42.2 80.8h-80.2c-16.6 0-30 13.4-30 30v155.4h60v-125.4h71c17.6 0 33.6-9.6 41.8-25 8-15 7.4-32.8-1.4-47.2zM427.2 852.4V484.6c0-7.4 3-14.6 8.4-19.6l103.6-98.2c25.2-23.8 33.6-60.2 21.6-92.6l-59.8-161c-4.4-11.8-15.6-19.6-28.2-19.6h-109.4c-16.6 0-30 13.4-30 30v112.8h-32V123.4c0-16.6-13.4-30-30-30H162c-12.6 0-23.8 7.8-28.2 19.6L74.2 274c-12 32.4-3.6 68.8 21.6 92.6l103.6 98.2c5.4 5 8.4 12.2 8.4 19.6v367.8c0 16.6 13.4 30 30 30h159.4c16.4 0.2 30-13.4 30-29.8z m-159.4-367.8c0-23.8-9.8-46.8-27.2-63.2l-103.6-98.2c-7.6-7.2-10.2-18.4-6.6-28.2l52.4-141.4h58.4v112.8c0 16.6 13.4 30 30 30h92c16.6 0 30-13.4 30-30V153.4H452l52.4 141.4c3.6 9.8 1 21-6.6 28.2l-103.6 98.2c-17.2 16.4-27.2 39.4-27.2 63.2v337.8h-99.4V484.6z m425.6 354.2c16.6 0 30-13.4 30-30v-90c0-16.6-13.4-30-30-30s-30 13.4-30 30v90c0 16.6 13.4 30 30 30z m104.4 0c16.6 0 30-13.4 30-30v-90c0-16.6-13.4-30-30-30s-30 13.4-30 30v90c0 16.6 13.4 30 30 30zM955.2 626H928v235.2c0 38.2-31.2 69.4-69.4 69.4h-226c-38.2 0-69.4-31.2-69.4-69.4V626H536v-60h86.8v-45.6c0-16.6 13.4-30 30-30h185.6c16.6 0 30 13.4 30 30V566h86.8v60z m-272.4-60h125.6v-15.6h-125.6v15.6z m185 60H623.4v235.2c0 5.2 4.2 9.4 9.4 9.4h225.8c5.2 0 9.4-4.2 9.4-9.4V626z" p-id="6452" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539074118" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11357" width="200" height="200"><path d="M128.365987 896.000012h-18.119998c-15.685998 0-29.059997-12.038999-31.582997-28.430997L0.422 359.333065c-2.844-18.468998 8.991999-35.879996 26.434997-38.891996 1.7-0.293 3.422-0.44 5.148-0.44h12.631999l132.838987-217.129979c5.772999-9.402999 14.179999-15.068999 23.166997-15.616999 8.986999-0.6 17.736998 4.027 24.074998 12.729999l70.742993 96.345991L401.139961 16.364098c5.699999-9.667999 14.144999-15.579998 23.231998-16.261998 9.105999-0.863 18.029998 3.777 24.396997 12.689999L674.331934 320.000069h18.395998c17.672998 0 31.999997 15.169999 31.999997 33.881996 0 1.826-0.14 3.65-0.417 5.451L710.660931 448.000056h151.089985A63.999994 63.999994 0 0 1 914.999911 476.496053l98.24899 147.351986A63.999994 63.999994 0 0 1 1023.9999 659.352036V864.000016c0 17.672998-14.326999 31.999997-31.999997 31.999996h-95.633991c0 70.691993-57.306994 127.999988-127.999987 127.999988-70.691993 0-127.999988-57.307994-127.999988-127.999988h-255.999975c0 70.691993-57.306994 127.999988-127.999987 127.999988-70.691993 0-127.999988-57.307994-127.999988-127.999988z m639.999938-384.015962v191.999981l191.999981 0.016v-44.647995L862.116916 512.00005l-93.750991-0.016z m-470.359954-14.689999c-15.305999-8.837999-34.876997-3.594-43.712996 11.710999l-95.99999 166.276984c-8.836999 15.305999-3.593 34.875997 11.711998 43.712996 15.305999 8.836999 34.876997 3.593 43.712996-11.712999l95.999991-166.276984c8.836999-15.304999 3.593-34.875997-11.712999-43.711996z m255.999975 0c-15.305999-8.837999-34.876997-3.594-43.712996 11.710999l-95.99999 166.276984c-8.836999 15.305999-3.593 34.875997 11.711998 43.712996 15.305999 8.836999 34.876997 3.593 43.712996-11.712999l95.999991-166.276984c8.836999-15.304999 3.593-34.875997-11.712999-43.711996zM768.364925 960.000006c35.346997 0 63.999994-28.653997 63.999994-63.999994 0-35.345997-28.652997-63.999994-63.999994-63.999993-35.345997 0-63.999994 28.653997-63.999994 63.999993 0 35.345997 28.653997 63.999994 63.999994 63.999994z m-511.99995 0c35.346997 0 63.999994-28.653997 63.999994-63.999994 0-35.345997-28.652997-63.999994-63.999994-63.999993-35.345997 0-63.999994 28.653997-63.999994 63.999993 0 35.345997 28.653997 63.999994 63.999994 63.999994z" fill="#ffffff" p-id="11358"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742539321980" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17386" width="200" height="200"><path d="M202 345.4L69 549.8a21.2 21.2 0 0 0-3.4 11.5V802c0 6.7 5.5 12.2 12.2 12.2h22.9c4.5 58.8 53.2 105.3 113.1 105.3 60 0 108.6-46.5 113.1-105.3h67.5V336.7H218c-6.4 0-12.5 3.3-16 8.7z m28.9 97.5h127.4c2 0 3.6 1.6 3.6 3.6v105.9c0 1.9-1.6 3.5-3.5 3.5H156.5c-1.7 0-2.8-1.9-1.8-3.4l69.2-106c1.6-2.2 4.2-3.6 7-3.6zM726 691.5c-63 0-114 51-114 114s51 114 114 114 114-51 114-114-51.1-114-114-114z" fill="#ffffff" p-id="17387"></path><path d="M899.1 131.4H454.3c-33 0-59.8 26.8-59.8 59.8v623h504.6c33 0 59.8-26.8 59.8-59.8V191.2c0-33-26.7-59.8-59.8-59.8z" fill="#ffffff" p-id="17388"></path></svg>
|
||||
|
After Width: | Height: | Size: 738 B |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742540424683" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34260" width="200" height="200"><path d="M512 2.327273C230.4 2.327273 2.327273 230.4 2.327273 512S230.4 1021.672727 512 1021.672727c281.6 0 509.672727-228.072727 509.672727-509.672727S793.6 2.327273 512 2.327273z m139.636364 518.981818v46.545454h-100.072728v44.218182H651.636364v46.545455h-100.072728v90.763636h-81.454545v-90.763636h-100.072727v-46.545455h100.072727v-44.218182h-100.072727v-46.545454h74.472727l-116.363636-209.454546h93.090909v2.327273l88.436363 176.872727 88.436364-179.2h93.090909l-116.363636 209.454546H651.636364z" fill="#ffffff" p-id="34261"></path></svg>
|
||||
|
After Width: | Height: | Size: 692 B |
|
|
@ -0,0 +1 @@
|
|||
<svg t="1742541104200" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="39079" width="200" height="200"><path d="M771.512499 514.290159 511.614214 64.132646 251.715929 514.290159 414.441057 514.290159 414.441057 959.653483 608.786347 959.653483 608.786347 514.290159Z" p-id="39080" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 353 B |
|
After Width: | Height: | Size: 3.4 KiB |
|
|
@ -95,9 +95,21 @@ export default {
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = '/index';
|
||||
})
|
||||
// this.$store.dispatch('LogOut').then(() => {
|
||||
// location.href = '/index';
|
||||
// })
|
||||
console.log('🚀 ~ process.env.VUE_APP_BASE_API:', process.env.VUE_APP_BASE_API)
|
||||
if (process.env.VUE_APP_BASE_API == '/iws/jiju-api') {
|
||||
setTimeout(() => {
|
||||
window.location.replace(
|
||||
'http://sgwpdm.ah.sgcc.com.cn/iws/',
|
||||
)
|
||||
}, 500)
|
||||
} else {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = '/login'
|
||||
})
|
||||
}
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ Vue.prototype.downloadJson = downloadJson
|
|||
Vue.prototype.handleTree = handleTree
|
||||
Vue.prototype.indexContinuation = indexContinuation
|
||||
Vue.prototype.globalUrl = global_
|
||||
// 全局设置element-ui Dialog组件的close-on-click-modal close-on-press-escape属性为false
|
||||
Element.Dialog.props.closeOnClickModal.default = false
|
||||
Element.Dialog.props.closeOnPressEscape.default = false
|
||||
// 全局组件挂载
|
||||
Vue.component('DictTag', DictTag)
|
||||
Vue.component('Pagination', Pagination)
|
||||
|
|
|
|||
|
|
@ -64,13 +64,14 @@ export const constantRoutes = [
|
|||
{
|
||||
path: '',
|
||||
component: Layout,
|
||||
redirect: 'index',
|
||||
redirect: 'home/equipment-supply',
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
component: () => import('@/views/index'),
|
||||
path: 'home/equipment-supply',
|
||||
component: () => import('@/views/home/equipment-supply/index.vue'),
|
||||
name: 'Index',
|
||||
meta: { title: '首页', icon: 'dashboard', affix: true }
|
||||
meta: { title: '首页', icon: 'dashboard', affix: true },
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -243,7 +244,8 @@ Router.prototype.replace = function push(location) {
|
|||
}
|
||||
|
||||
export default new Router({
|
||||
mode: 'history', // 去掉url中的#
|
||||
// mode: 'history', // 去掉url中的#
|
||||
mode: process.env.VUE_APP_BASE_API == '/iws/jiju-api' ? 'hash' : 'history', // 宏源: hash
|
||||
scrollBehavior: () => ({ y: 0 }),
|
||||
routes: constantRoutes
|
||||
})
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { getConfig } from '@/api/config';
|
|||
export function get() {
|
||||
getConfig()
|
||||
.then(response => {
|
||||
console.log(response)
|
||||
// console.log(response)
|
||||
localStorage.setItem('systemConfig', JSON.stringify(response.data));
|
||||
})
|
||||
.catch(error => {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import { tansParams, blobValidate } from '@/utils/bonus'
|
|||
import cache from '@/plugins/cache'
|
||||
import { saveAs } from 'file-saver'
|
||||
import { decryptWithSM4, encryptWithSM4, hashWithSM3AndSalt } from '@/utils/sm'
|
||||
import router from '@/router'
|
||||
|
||||
const systemConfig = JSON.parse(localStorage.getItem('systemConfig')) || {
|
||||
requestConfig: { encryptRequest: false, checkIntegrity: false, encryptResponse: false }
|
||||
};
|
||||
|
|
@ -108,19 +110,24 @@ service.interceptors.response.use(res => {
|
|||
return res.data
|
||||
}
|
||||
if (code === 401) {
|
||||
if (!isRelogin.show) {
|
||||
isRelogin.show = true
|
||||
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
|
||||
confirmButtonText: '重新登录',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
isRelogin.show = false
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = '/index'
|
||||
})
|
||||
console.log('🚀 ~ process.env.VUE_APP_BASE_API:', process.env.VUE_APP_BASE_API)
|
||||
if (process.env.VUE_APP_BASE_API == '/iws/jiju-api') {
|
||||
store.dispatch('LogOut').then(() => {
|
||||
}).catch((err) => {
|
||||
console.log('🚀 ~ store.dispatch ~ err:', err)
|
||||
})
|
||||
setTimeout(() => {
|
||||
// 'http://sgwpdm.ah.sgcc.com.cn/iws/cas/login?appId=3874dcb953f184dc75450e33d6d6d4fa&service=http://sgwpdm.ah.sgcc.com.cn/iws/mea-view/',
|
||||
window.location.replace(
|
||||
'http://sgwpdm.ah.sgcc.com.cn/iws/'
|
||||
)
|
||||
}, 500)
|
||||
} else {
|
||||
store.dispatch('LogOut').then(() => {
|
||||
// location.href = '/login'
|
||||
router.push('/login')
|
||||
}).catch(() => {
|
||||
isRelogin.show = false
|
||||
router.push('/login')
|
||||
})
|
||||
}
|
||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@
|
|||
import { getDirectAuditListApi } from '@/api/business/index'
|
||||
|
||||
export default {
|
||||
name: 'Direct-rotation-apply',
|
||||
data() {
|
||||
return {
|
||||
userId: '',
|
||||
|
|
@ -161,8 +162,8 @@ export default {
|
|||
try {
|
||||
const params = {
|
||||
...this.queryParams,
|
||||
startTime: this.timeRange[0] || '',
|
||||
endTime: this.timeRange[1] || ''
|
||||
startTime: this.timeRange ? this.timeRange[0] : '',
|
||||
endTime: this.timeRange ? this.timeRange[1] : ''
|
||||
}
|
||||
const res = await getDirectAuditListApi(params)
|
||||
this.tableList = res.rows
|
||||
|
|
|
|||
|
|
@ -223,17 +223,12 @@ export default {
|
|||
|
||||
.file-box {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
box-sizing: border-box;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(12, 1fr);
|
||||
grid-gap: 10px;
|
||||
div {
|
||||
width: calc((100% - 110px) / 12);
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
height: 80px;
|
||||
text-align: center;
|
||||
line-height: 60px;
|
||||
background-color: #19a4a0;
|
||||
}
|
||||
|
||||
& div:nth-child(12n) {
|
||||
|
|
|
|||
|
|
@ -103,8 +103,10 @@
|
|||
|
||||
<script>
|
||||
import { getReceiveApplyApi } from '@/api/receive-apply/index.js'
|
||||
import { getToken, setToken, setExpiresIn } from '@/utils/auth'
|
||||
|
||||
export default {
|
||||
name: 'Receive-apply',
|
||||
data() {
|
||||
return {
|
||||
total: 0, // 总条数
|
||||
|
|
@ -139,9 +141,54 @@ export default {
|
|||
]
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.userId = sessionStorage.getItem('userId')
|
||||
this.getList()
|
||||
async created() {
|
||||
const origin = window.location.href
|
||||
console.log(origin.split('ticket')[1], 'origin')
|
||||
const token = getToken()
|
||||
console.log('🚀 ~ created ~ shh:', token)
|
||||
|
||||
if (origin.indexOf('ticket') != -1 && !token) {
|
||||
this.isIws = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '登录中',
|
||||
})
|
||||
try {
|
||||
const res = await iwsLogin({
|
||||
ticket: origin.split('ticket%3D')[1].split('%26')[0] || origin.split('ticket=')[1].split('&')[0],
|
||||
sysType: 0
|
||||
})
|
||||
console.log('🚀 ~ created ~ res:', res)
|
||||
if (res.code == 200) {
|
||||
setToken(res.data.access_token)
|
||||
this.$store.commit('SET_TOKEN', res.data.access_token)
|
||||
setExpiresIn(1800)
|
||||
this.$store.commit('SET_EXPIRES_IN', 1800)
|
||||
}
|
||||
// setExpiresIn(res.data.expires_in)
|
||||
// this.$store.commit('SET_EXPIRES_IN', res.data.expires_in)
|
||||
loading.close()
|
||||
|
||||
setTimeout(() => {
|
||||
this.$router.push({ path: '/business-examine/receive-apply' })
|
||||
// this.getList()
|
||||
}, 300)
|
||||
} catch (error) {
|
||||
console.log('🚀 ~ created ~ error:', error)
|
||||
this.$message({
|
||||
message: '登录失败, 即将关闭页面',
|
||||
type: 'error'
|
||||
})
|
||||
loading.close()
|
||||
setTimeout(() => {
|
||||
// 关闭窗口
|
||||
window.close()
|
||||
}, 1500)
|
||||
}
|
||||
} else {
|
||||
this.userId = sessionStorage.getItem('userId')
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 查询
|
||||
|
|
@ -161,8 +208,8 @@ export default {
|
|||
try {
|
||||
const params = {
|
||||
...this.queryParams,
|
||||
startTime: this.timeRange[0] || '',
|
||||
endTime: this.timeRange[1] || ''
|
||||
startTime: this.timeRange ? this.timeRange[0] : '',
|
||||
endTime: this.timeRange ? this.timeRange[1] : ''
|
||||
}
|
||||
const res = await getReceiveApplyApi(params)
|
||||
this.tableList = res.data.rows
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<el-table-column prop="num" label="减免数量" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="maName" label="机具名称" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="maModel" label="规格型号" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="reduceNum" label="领料数量" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="num" label="领料数量" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="startTime" label="领料日期" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="endTime" label="退料日期" align="center" show-overflow-tooltip />
|
||||
<el-table-column
|
||||
|
|
@ -246,17 +246,12 @@ export default {
|
|||
|
||||
.file-box {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
box-sizing: border-box;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(12, 1fr);
|
||||
grid-gap: 10px;
|
||||
div {
|
||||
width: calc((100% - 110px) / 12);
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
height: 80px;
|
||||
text-align: center;
|
||||
line-height: 60px;
|
||||
background-color: #19a4a0;
|
||||
}
|
||||
|
||||
& div:nth-child(12n) {
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ import Treeselect from '@riophae/vue-treeselect'
|
|||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import { getReceiveApplyApi } from '@/api/reduction-apply/index.js'
|
||||
export default {
|
||||
name: '',
|
||||
name: 'Reduction-apply',
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
noOptionsText="没有数据"
|
||||
noResultsText="没有搜索结果"
|
||||
placeholder="请选择领用工程"
|
||||
@select="projectChange"
|
||||
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="领料人" prop="leasePerson">
|
||||
|
|
@ -136,11 +136,22 @@
|
|||
:label="item.fullPath"
|
||||
:value="item.typeId"
|
||||
:data-key="item.typeId"
|
||||
@mouseenter.native="showCustomTooltip(item, $event)"
|
||||
@mouseleave.native="hideCustomTooltip"
|
||||
>
|
||||
<span v-html="highlightText(item.fullPath, searchKeyword)"></span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px">库存:{{ item.storageNum }}</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<div
|
||||
v-if="currentTooltipItem"
|
||||
class="custom-tooltip"
|
||||
:style="{
|
||||
left: tooltipPosition.x + 'px',
|
||||
top: tooltipPosition.y + 'px'
|
||||
}"
|
||||
>
|
||||
<img :src="currentTooltipItem.imageUrl || defaultImage" style="max-width: 200px; max-height: 150px;" @load="imageLoaded" @error="imageLoadError"/>
|
||||
<p>库存: {{ currentTooltipItem.storageNum }}</p>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-input
|
||||
|
|
@ -346,6 +357,7 @@
|
|||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
|
@ -364,6 +376,7 @@ import Treeselect from '@riophae/vue-treeselect'
|
|||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
||||
export default {
|
||||
name: 'Index',
|
||||
dicts: ['purchase_task_status'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
|
|
@ -536,7 +549,11 @@ export default {
|
|||
dialogImageUrl: '',
|
||||
dialogVisible: false,
|
||||
uploadKey: Date.now(),
|
||||
uploadUrl: process.env.VUE_APP_BASE_API + '/file/upload' // 上传的图片服务器地址
|
||||
uploadUrl: process.env.VUE_APP_BASE_API + '/file/upload', // 上传的图片服务器地址
|
||||
currentTooltipItem: null,
|
||||
tooltipPosition: { x: 0, y: 0 },
|
||||
defaultImage: 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg',
|
||||
tooltipTimeout: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -591,6 +608,27 @@ export default {
|
|||
console.log(this.$route.query, 'this.$route.query')
|
||||
},
|
||||
methods: {
|
||||
showCustomTooltip(item, event) {
|
||||
clearTimeout(this.tooltipTimeout);
|
||||
this.tooltipTimeout = setTimeout(() => {
|
||||
this.currentTooltipItem = item;
|
||||
this.tooltipPosition = {
|
||||
x: event.clientX + 15,
|
||||
y: event.clientY + 15
|
||||
};
|
||||
}, 300); // 300ms延迟显示,避免鼠标快速移动时频繁触发
|
||||
},
|
||||
imageLoaded() {
|
||||
this.shouldShowTooltip = true; // 图片加载完成,显示悬浮框
|
||||
},
|
||||
imageLoadError() {
|
||||
this.shouldShowTooltip = true; // 图片加载失败,也显示悬浮框
|
||||
},
|
||||
|
||||
hideCustomTooltip() {
|
||||
clearTimeout(this.tooltipTimeout);
|
||||
this.currentTooltipItem = null;
|
||||
},
|
||||
// 获取类型名称-tree
|
||||
async getMaTypeNameOpt() {
|
||||
try {
|
||||
|
|
@ -746,22 +784,22 @@ export default {
|
|||
this.isFileFbs = false
|
||||
this.rules['bmFileInfos'][0].required = false
|
||||
}
|
||||
setTimeout(() => {
|
||||
getListProject({ unitId: this.maForm.unitId }).then(response => {
|
||||
this.projectList = response.data
|
||||
this.maForm.projectId = null
|
||||
})
|
||||
}, 500)
|
||||
},
|
||||
projectChange(val) {
|
||||
this.maForm.projectName = val.name
|
||||
setTimeout(() => {
|
||||
// projectId: this.maForm.projectId
|
||||
getListUnite({}).then(response => {
|
||||
this.uniteList = response.data
|
||||
})
|
||||
}, 500)
|
||||
// setTimeout(() => {
|
||||
// getListProject({ unitId: this.maForm.unitId }).then(response => {
|
||||
// this.projectList = response.data
|
||||
// this.maForm.projectId = null
|
||||
// })
|
||||
// }, 500)
|
||||
},
|
||||
// projectChange(val) {
|
||||
// this.maForm.projectName = val.name
|
||||
// setTimeout(() => {
|
||||
// // projectId: this.maForm.projectId
|
||||
// getListUnite({}).then(response => {
|
||||
// this.uniteList = response.data
|
||||
// })
|
||||
// }, 500)
|
||||
// },
|
||||
async standardConfigChange(val) {
|
||||
console.log('🚀 ~ standardConfigChange ~ val:', val)
|
||||
const loading = this.$loading()
|
||||
|
|
@ -992,13 +1030,17 @@ export default {
|
|||
},
|
||||
// 确认
|
||||
async handleConfirm(type) {
|
||||
await getAgreement({
|
||||
unitId: this.maForm.unitId,
|
||||
projectId: this.maForm.projectId
|
||||
}).then(response => {
|
||||
this.agreementId = response.data.agreementId
|
||||
this.maForm.agreementId = this.agreementId
|
||||
})
|
||||
// await getAgreement({
|
||||
// unitId: this.maForm.unitId,
|
||||
// projectId: this.maForm.projectId
|
||||
// }).then(response => {
|
||||
// if(response.msg==="未找到匹配的协议信息"){
|
||||
// this.maForm.agreementId = null
|
||||
// }else{
|
||||
// this.agreementId = response.data.agreementId
|
||||
// this.maForm.agreementId = this.agreementId
|
||||
// }
|
||||
// })
|
||||
await this.$modal
|
||||
.confirm(type == 0 ? '是否确认提交' : '是否确认保存')
|
||||
.then(async () => {
|
||||
|
|
@ -1163,6 +1205,7 @@ export default {
|
|||
// downloadFileData({ fileName: file.name,fileUrl:file.url })
|
||||
}
|
||||
},
|
||||
|
||||
// 高亮文本
|
||||
highlightText(text, keyword) {
|
||||
if (!keyword) return text
|
||||
|
|
@ -1405,4 +1448,20 @@ export default {
|
|||
color: #fff;
|
||||
font-size: 20px;
|
||||
}
|
||||
.type-tooltip {
|
||||
max-width: none !important;
|
||||
}
|
||||
|
||||
.custom-tooltip {
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
background: rgb(6, 6, 6);
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
padding: 12px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||
pointer-events: none;
|
||||
max-width: 250px;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@
|
|||
import { getReceiveList, receiveDelete } from '@/api/business/index'
|
||||
|
||||
export default {
|
||||
name: 'DirectApplyRecord',
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ import printJS from 'print-js'
|
|||
import { getLeaseTaskList, deleteLeaseTask, getLeaseTask, getCodePDF } from '@/api/business/index'
|
||||
|
||||
export default {
|
||||
name: 'Index',
|
||||
dicts: ['lease_apply_task_status'],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import PageHeader from '@/components/pageHeader'
|
|||
import ApplyHome from './component/applyHome.vue'
|
||||
import ApplyDetail from './component/applyDetail.vue'
|
||||
export default {
|
||||
name: 'CostRecord',
|
||||
components: {
|
||||
PageHeader,
|
||||
ApplyHome,
|
||||
|
|
|
|||
|
|
@ -391,7 +391,7 @@ import Treeselect from '@riophae/vue-treeselect'
|
|||
import Decimal from '@/utils/decimal'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
export default {
|
||||
name: '',
|
||||
name: 'DiscountApply',
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import Home from "./component/homeApply.vue"; // 主列表
|
|||
import AddTools from "./component/addToolsApply.vue"; // 发布
|
||||
import QueryTools from "./component/queryToolsApply.vue"; // 查询机具
|
||||
export default {
|
||||
name: "LeasePublish",
|
||||
components: {
|
||||
Home,
|
||||
PageHeaderApply,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,168 @@
|
|||
<template>
|
||||
<div :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '@/views/dashboard/mixins/resize'
|
||||
|
||||
const animationDuration = 6000
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
barAndLineX: {
|
||||
type: Array,
|
||||
default: () => ['机具']
|
||||
},
|
||||
barY1: {
|
||||
type: Array,
|
||||
default: () => ['0']
|
||||
},
|
||||
barY2: {
|
||||
type: Array,
|
||||
default: () => ['0']
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
watch: {
|
||||
barAndLineX: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
},
|
||||
barY1: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
},
|
||||
barY2: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.chart = echarts.init(this.$el, 'macarons')
|
||||
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow' // 阴影指示器
|
||||
}
|
||||
},
|
||||
|
||||
legend: {
|
||||
data: ['需求', '供应'],
|
||||
icon: 'path://M 0,0 h 16 a 6,6 0 0 1 6,6 v 8 a 6,6 0 0 1 -6,6 h -16 a 6,6 0 0 1 -6,-6 v -8 a 6,6 0 0 1 6,-6 z',
|
||||
bottom: 10, // 图例放在 x 轴下方
|
||||
itemWidth: 20, // 图例项宽度
|
||||
itemHeight: 13, // 图例项高度
|
||||
itemGap: 10, // 图例项之间的间距
|
||||
padding: [5, 10], // 图例内边距
|
||||
textStyle: {
|
||||
color: '#333', // 图例文字颜色
|
||||
lineHeight: 13
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '12%', // 底部留出空间给图例
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
// data: ['卸扣5t', '卸扣8t', '手扳葫芦', '绞磨', '机具1', '机具2', '机具13'],
|
||||
data: this.barAndLineX,
|
||||
axisTick: {
|
||||
alignWithLabel: true
|
||||
},
|
||||
axisLabel: {
|
||||
rotate: -15, // x 轴标签倾斜 45°
|
||||
margin: 30, // 标签与轴线的距离
|
||||
color: '#333'
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#a8a7a7' // x 轴轴线颜色
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
axisTick: {
|
||||
show: false
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#a8a7a7' // x 轴轴线颜色
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '需求',
|
||||
type: 'bar',
|
||||
barWidth: '20%', // 柱子宽度
|
||||
data: this.barY1,
|
||||
animationDuration: 2000,
|
||||
itemStyle: {
|
||||
color: '#26a8ff' // 自定义颜色
|
||||
}
|
||||
},
|
||||
{
|
||||
name: '供应',
|
||||
type: 'bar',
|
||||
barWidth: '20%', // 柱子宽度
|
||||
data: this.barY2,
|
||||
animationDuration: 2000,
|
||||
itemStyle: {
|
||||
color: '#ff8e9d' // 自定义颜色
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,199 @@
|
|||
<template>
|
||||
<div :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '@/views/dashboard/mixins/resize'
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
autoResize: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
chartData: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
barAndLineX: {
|
||||
type: Array,
|
||||
default: () => ['机具']
|
||||
},
|
||||
// 折线图 Y 轴数据源1
|
||||
lineY1: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 折线图 Y 轴数据源2
|
||||
lineY2: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
barAndLineX: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
},
|
||||
lineY1: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
},
|
||||
lineY2: {
|
||||
deep: true,
|
||||
handler() {
|
||||
this.initChart()
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart()
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.chart = echarts.init(this.$el, 'macarons')
|
||||
this.setOptions(this.chartData)
|
||||
},
|
||||
setOptions({ expectedData, actualData } = {}) {
|
||||
this.chart.setOption({
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
// data: ['卸扣5t', '卸扣8t', '手扳葫芦', '绞磨', '机具1', '机具2', '机具13'],
|
||||
data: this.barAndLineX,
|
||||
boundaryGap: false, // 折线与 y 轴不留间隙
|
||||
axisTick: {
|
||||
show: true // 隐藏刻度线
|
||||
},
|
||||
axisLabel: {
|
||||
rotate: -15, // x 轴标签倾斜 45°
|
||||
margin: 30, // 标签与轴线的距离
|
||||
padding: [0, 20, 0, 0],
|
||||
color: '#333'
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#a8a7a7' // x 轴轴线颜色
|
||||
}
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
axisTick: {
|
||||
show: false // 隐藏刻度线
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#a8a7a7' // x 轴轴线颜色
|
||||
}
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: 10,
|
||||
right: 50,
|
||||
bottom: '12%', // 底部留出空间给图例
|
||||
top: 30,
|
||||
containLabel: true
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'cross' // 十字准星指示器
|
||||
},
|
||||
padding: [5, 10]
|
||||
},
|
||||
legend: {
|
||||
data: ['需求量', '待供应量'],
|
||||
icon: 'path://M 0,0 h 16 a 6,6 0 0 1 6,6 v 8 a 6,6 0 0 1 -6,6 h -16 a 6,6 0 0 1 -6,-6 v -8 a 6,6 0 0 1 6,-6 z',
|
||||
bottom: 10, // 图例放在 x 轴下方
|
||||
itemWidth: 20, // 图例项宽度
|
||||
itemHeight: 13, // 图例项高度
|
||||
itemGap: 10, // 图例项之间的间距
|
||||
padding: [5, 10], // 图例内边距
|
||||
textStyle: {
|
||||
color: '#333', // 图例文字颜色
|
||||
lineHeight: 13
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '需求量',
|
||||
type: 'line',
|
||||
smooth: false, // 平滑曲线
|
||||
data: this.lineY1, // 数据
|
||||
itemStyle: {
|
||||
color: '#33aeff' // 折线颜色
|
||||
},
|
||||
lineStyle: {
|
||||
color: '#33aeff', // 折线颜色
|
||||
width: 1 // 折线宽度
|
||||
},
|
||||
areaStyle: {
|
||||
color: 'rgba(56, 136, 250, 0.3)' // 区域背景颜色
|
||||
},
|
||||
animationDuration: 2800,
|
||||
animationEasing: 'cubicInOut',
|
||||
symbol: 'none', // 隐藏数据点圆点
|
||||
showSymbol: false // 确保不显示数据点
|
||||
},
|
||||
{
|
||||
name: '待供应量',
|
||||
type: 'line',
|
||||
smooth: false, // 平滑曲线
|
||||
data: this.lineY2, // 数据
|
||||
itemStyle: {
|
||||
color: '#ff8e9d' // 折线颜色
|
||||
},
|
||||
lineStyle: {
|
||||
color: '#ff8e9d', // 折线颜色
|
||||
width: 1 // 折线宽度
|
||||
},
|
||||
areaStyle: {
|
||||
color: ' rgba(255, 0, 90, 0.3)' // 区域背景颜色
|
||||
},
|
||||
animationDuration: 2800,
|
||||
animationEasing: 'quadraticOut',
|
||||
symbol: 'none', // 隐藏数据点圆点
|
||||
showSymbol: false // 确保不显示数据点
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
<template>
|
||||
<div :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '@/views/dashboard/mixins/resize'
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
pie_1Data: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [
|
||||
{ value: 0, name: '计划需求量', itemStyle: { color: '#65dfe0' } },
|
||||
{ value: 0, name: '已供应量', itemStyle: { color: '#ff8e9d' } },
|
||||
{ value: 0, name: '待供应量', itemStyle: { color: '#6ccaf6' } }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart(this.pie_1Data)
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
watch: {
|
||||
pie_1Data: {
|
||||
deep: true,
|
||||
handler(val) {
|
||||
this.initChart(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
initChart(pie_1Data) {
|
||||
this.chart = echarts.init(this.$el, 'macarons')
|
||||
const total = pie_1Data.reduce((sum, item) => sum + item.value, 0)
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: '{b} : {c} ({d}%)'
|
||||
// formatter: '{b} {c}'
|
||||
},
|
||||
legend: {
|
||||
left: 'center',
|
||||
bottom: '0',
|
||||
icon: 'circle',
|
||||
data: ['计划需求量', '已供应量', '待供应量']
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
// roseType: 'radius', // radius 为玫瑰饼图
|
||||
radius: [0, 95],
|
||||
center: ['50%', '50%'],
|
||||
// data: [
|
||||
// { value: 320, name: '待供应量', itemStyle: { color: '#6ccaf6' } },
|
||||
// { value: 240, name: '计划需求量', itemStyle: { color: '#65dfe0' } },
|
||||
// { value: 149, name: '已供应量', itemStyle: { color: '#ff8e9d' } }
|
||||
// ],
|
||||
data: pie_1Data,
|
||||
animationEasing: 'cubicInOut',
|
||||
animationDuration: 2600,
|
||||
itemStyle: {
|
||||
borderWidth: 1, // 分割线宽度
|
||||
borderColor: '#fff' // 分割线颜色(白色)
|
||||
},
|
||||
label: {
|
||||
show: true, // 显示标签
|
||||
// formatter: '{b}: {d}%', // 显示 name 和比率
|
||||
formatter: function (params) {
|
||||
const percent =
|
||||
params.data.value == 0 ? 0 : ((params.data.value / total) * 100).toFixed(2)
|
||||
return `${params.name}: ${percent}%`
|
||||
},
|
||||
fontSize: 12, // 字体大小
|
||||
color: '#333' // 字体颜色
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
<template>
|
||||
<div :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from 'echarts'
|
||||
require('echarts/theme/macarons') // echarts theme
|
||||
import resize from '@/views/dashboard/mixins/resize'
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
pie_2Data: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [
|
||||
{ value: 0, name: '在库量', itemStyle: { color: '#26a8ff' } },
|
||||
{ value: 0, name: '在用量', itemStyle: { color: '#45d8d9' } },
|
||||
{ value: 0, name: '在修量', itemStyle: { color: '#ff8e9d' } },
|
||||
{ value: 0, name: '新购待入库量', itemStyle: { color: '#6ccaf6' } },
|
||||
{ value: 0, name: '修试待入库量', itemStyle: { color: '#ffb667' } }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.initChart(this.pie_2Data)
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
watch: {
|
||||
pie_2Data: {
|
||||
deep: true,
|
||||
handler(val) {
|
||||
this.initChart(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
initChart(pie_2Data) {
|
||||
this.chart = echarts.init(this.$el, 'macarons')
|
||||
const total = pie_2Data.reduce((sum, item) => sum + item.value, 0)
|
||||
this.chart.setOption({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: '{b} : {c} ({d}%)'
|
||||
},
|
||||
legend: {
|
||||
left: 'center',
|
||||
bottom: '0',
|
||||
icon: 'circle',
|
||||
data: ['在库量', '在用量', '在修量', '新购待入库量', '修试待入库量']
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
// roseType: 'radius', // radius 为玫瑰饼图
|
||||
radius: [60, 95],
|
||||
center: ['50%', '50%'],
|
||||
// data: [
|
||||
// { value: 320, name: '在库量', itemStyle: { color: '#26a8ff' } },
|
||||
// { value: 240, name: '在用量', itemStyle: { color: '#45d8d9' } },
|
||||
// { value: 120, name: '在修量', itemStyle: { color: '#ff8e9d' } },
|
||||
// { value: 80, name: '新购待入库量', itemStyle: { color: '#6ccaf6' } },
|
||||
// { value: 90, name: '修试待入库量', itemStyle: { color: '#ffb667' } }
|
||||
// ],
|
||||
data: pie_2Data,
|
||||
animationEasing: 'cubicInOut',
|
||||
animationDuration: 2600,
|
||||
itemStyle: {
|
||||
borderWidth: 1, // 分割线宽度
|
||||
borderColor: '#fff' // 分割线颜色(白色)
|
||||
},
|
||||
label: {
|
||||
show: true, // 显示标签
|
||||
// formatter: '{b}: {d}%', // 显示 name 和比率
|
||||
formatter: function (params) {
|
||||
const percent =
|
||||
params.data.value == 0 ? 0 : ((params.data.value / total) * 100).toFixed(2)
|
||||
return `${params.name}: ${percent}%`
|
||||
},
|
||||
fontSize: 12, // 字体大小
|
||||
color: '#333' // 字体颜色
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
<template>
|
||||
<div class="card-model-space">
|
||||
<div :style="{ backgroundColor: theme }" class="left-icon">
|
||||
<svg-icon :icon-class="iconType" class="icon-box" />
|
||||
</div>
|
||||
<div class="right-text">
|
||||
<div>{{ cardNum }}</div>
|
||||
<div>{{ cardTitle }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
theme: {
|
||||
type: String,
|
||||
default: '#ffa94c'
|
||||
},
|
||||
cardTitle: {
|
||||
type: String,
|
||||
default: '标题'
|
||||
},
|
||||
iconType: {
|
||||
type: String,
|
||||
default: 'project_num'
|
||||
},
|
||||
// 数量
|
||||
cardNum: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.card-model-space {
|
||||
display: flex;
|
||||
border-radius: 8px;
|
||||
color: #000;
|
||||
height: 85%;
|
||||
background: #fff;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
|
||||
|
||||
.left-icon {
|
||||
width: 30%;
|
||||
height: 100%;
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.icon-box {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.right-text {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
padding-left: 6px;
|
||||
|
||||
& div:first-child {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
}
|
||||
& div:last-child {
|
||||
margin-top: 4px;
|
||||
font-size: 13px;
|
||||
color: #525252;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
<template>
|
||||
<div class="card-model" :style="{ backgroundColor: theme }" @click="onHandleViewDetails">
|
||||
<div class="f-14">
|
||||
<svg-icon :icon-class="iconType" class="icon-box" />
|
||||
{{ cardTitle }}
|
||||
</div>
|
||||
<div class="f-count-wrapper">
|
||||
<div class="f-count">{{ cardNum }}</div>
|
||||
</div>
|
||||
<!-- <div class="f-14">
|
||||
较上月{{ isReduce ? '增高' : '降低' }}{{ ratio }}%
|
||||
|
||||
<svg-icon v-if="!isReduce" icon-class="down_arrow" />
|
||||
<svg-icon v-else icon-class="up_arrow" />
|
||||
</div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
// 主题背景色
|
||||
theme: {
|
||||
type: String,
|
||||
default: '#ffa94c'
|
||||
},
|
||||
// 标题
|
||||
cardTitle: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
// 图标类型
|
||||
iconType: {
|
||||
type: String,
|
||||
default: 'demand_count'
|
||||
},
|
||||
// 是否降低
|
||||
isReduce: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
// 数量
|
||||
cardNum: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
// 百分比
|
||||
ratio: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
onHandleViewDetails() {
|
||||
console.log('查询二级页面', this.cardTitle)
|
||||
// 使用自定义事件 通知父组件打开二级页面
|
||||
// this.$emit('onOpenLevelTwoPages', this.cardTitle)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.card-model {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* 初始阴影 */
|
||||
transition: transform 0.3s ease; /* 添加过渡效果 */
|
||||
|
||||
& div {
|
||||
width: 100%;
|
||||
// padding-left: 40px;
|
||||
transform: translateX(40px);
|
||||
}
|
||||
|
||||
.f-14 {
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
letter-spacing: 1px;
|
||||
width:100%;
|
||||
.icon-box {
|
||||
font-size: 18px;
|
||||
position: absolute;
|
||||
transform: translateX(-120%);
|
||||
}
|
||||
}
|
||||
|
||||
.f-count-wrapper {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center; /* 水平居中 */
|
||||
align-items: flex-end; /* 垂直靠下 */
|
||||
margin-top: 10px;
|
||||
}
|
||||
.f-count {
|
||||
margin: 4px 0;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.card-model:hover {
|
||||
cursor: pointer;
|
||||
transform: scale(1.03);
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); /* 鼠标移入时更明显的阴影 */
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<template>
|
||||
<div class="chart-model-box">
|
||||
<div class="chart-title">{{ chartTitle }}</div>
|
||||
<div class="chart-content">
|
||||
<!-- <PieChart /> -->
|
||||
<component
|
||||
:is="ChartTypeName"
|
||||
:chartData="chartData"
|
||||
:pie_1Data="pie_1Data"
|
||||
:pie_2Data="pie_2Data"
|
||||
:barAndLineX="barAndLineX"
|
||||
:barY1="barY1"
|
||||
:barY2="barY2"
|
||||
:lineY1="lineY1"
|
||||
:lineY2="lineY2"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PieChart1 from './PieChart_1.vue' // 饼图 1
|
||||
import PieChart2 from './PieChart_2.vue' // 饼图 2
|
||||
import BarChart from './BarChart.vue' // 柱状图
|
||||
import LineChart from './LineChart.vue' // 折线图
|
||||
export default {
|
||||
components: {
|
||||
BarChart,
|
||||
LineChart,
|
||||
PieChart1,
|
||||
PieChart2
|
||||
},
|
||||
props: {
|
||||
chartTitle: {
|
||||
type: String,
|
||||
default: '标题'
|
||||
},
|
||||
ChartTypeName: {
|
||||
type: String,
|
||||
default: 'PieChart'
|
||||
},
|
||||
// 饼图 1 数据源
|
||||
pie_1Data: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 饼图 2 数据源
|
||||
pie_2Data: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 饼图和折线图 X 轴数据源
|
||||
barAndLineX: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 柱图 Y 轴数据源1
|
||||
barY1: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 柱图 Y 轴数据源2
|
||||
barY2: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 折线图 Y 轴数据源1
|
||||
lineY1: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 折线图 Y 轴数据源2
|
||||
lineY2: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chartData: {}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.chart-model-box {
|
||||
width: 100%;
|
||||
height: 50vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 1px solid #c0bfbf;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
|
||||
.chart-title {
|
||||
padding: 12px 0 12px 12px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
|
||||
background-color: #f9f9f9;
|
||||
border-top-left-radius: 12px;
|
||||
border-top-right-radius: 12px;
|
||||
}
|
||||
|
||||
.chart-content {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<template>
|
||||
<div class="table-container">
|
||||
<PageHeader :pageContent="levelTwoTitle" @goBack="goBack" />
|
||||
<el-table>
|
||||
<el-table-column type="index" width="55" />
|
||||
<el-table-column align="center" label="占位1" prop="maCode" />
|
||||
<el-table-column align="center" label="占位2" prop="maCode" />
|
||||
<el-table-column align="center" label="占位3" prop="maCode" />
|
||||
<el-table-column align="center" label="占位4" prop="maCode" />
|
||||
<el-table-column align="center" label="占位5" prop="maCode" />
|
||||
<el-table-column align="center" label="占位6" prop="maCode" />
|
||||
<el-table-column align="center" label="占位7" prop="maCode" />
|
||||
<el-table-column align="center" label="占位8" prop="maCode" />
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PageHeader from '@/components/pageHeader'
|
||||
export default {
|
||||
components: {
|
||||
PageHeader
|
||||
},
|
||||
props: {
|
||||
levelTwoTitle: {
|
||||
type: String,
|
||||
default: '详情'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
methods: {
|
||||
goBack() {
|
||||
this.$emit('onCloseLevelTwoPages')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.table-container {
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,511 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<template v-if="!isHome">
|
||||
<!-- 机具供应展示 -->
|
||||
<el-form size="small" :model="queryParams" ref="queryFormRef">
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item>
|
||||
<el-date-picker
|
||||
v-model="queryDate"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd"
|
||||
style="width: 95%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item prop="unitId">
|
||||
<treeselect
|
||||
:options="unitList"
|
||||
:show-count="true"
|
||||
style="width: 95%"
|
||||
:normalizer="normalizer"
|
||||
noChildrenText="没有数据了"
|
||||
noOptionsText="没有数据"
|
||||
placeholder="请选择公司"
|
||||
noResultsText="没有搜索结果"
|
||||
v-model="queryParams.unitId"
|
||||
:disable-branch-nodes="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item prop="projectId">
|
||||
<treeselect
|
||||
style="width: 95%"
|
||||
:show-count="true"
|
||||
:options="projectList"
|
||||
:normalizer="normalizer"
|
||||
noOptionsText="没有数据"
|
||||
noChildrenText="没有数据了"
|
||||
placeholder="请选择领工程"
|
||||
noResultsText="没有搜索结果"
|
||||
:disable-branch-nodes="true"
|
||||
v-model="queryParams.projectId"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="onHandleSearch">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="onHandleReset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<!-- 卡片区域 -->
|
||||
<div class="card-box">
|
||||
<div class="title-card">需求供应</div>
|
||||
<div class="card-box-content-1">
|
||||
<div v-for="(card, index) in cardList_1" :key="index">
|
||||
<CardModel
|
||||
:ratio="card.ratio"
|
||||
:theme="card.theme"
|
||||
:iconType="card.icon"
|
||||
:cardNum="card.cardNum"
|
||||
:cardTitle="card.title"
|
||||
:isReduce="card.isReduce"
|
||||
@onOpenLevelTwoPages="onOpenLevelTwoPages"
|
||||
/>
|
||||
</div>
|
||||
<div class="card-box-space-last">
|
||||
<CardModelSpace
|
||||
:key="index"
|
||||
:theme="card.theme"
|
||||
:iconType="card.icon"
|
||||
:cardTitle="card.title"
|
||||
:cardNum="card.cardNum"
|
||||
v-for="(card, index) in cardList_3"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-box">
|
||||
<div class="title-card">仓储状态</div>
|
||||
<div class="card-box-content">
|
||||
<div v-for="(card, index) in cardList_2" :key="index">
|
||||
<CardModel
|
||||
:theme="card.theme"
|
||||
:iconType="card.icon"
|
||||
:cardTitle="card.title"
|
||||
:isReduce="card.isReduce"
|
||||
:cardNum="card.cardNum"
|
||||
:ratio="card.ratio"
|
||||
@onOpenLevelTwoPages="onOpenLevelTwoPages"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 图表区域 -->
|
||||
<div class="chart-box">
|
||||
<div :key="index" v-for="(chart, index) in chartList">
|
||||
<ChartModelBox
|
||||
:chartTitle="chart.title"
|
||||
:ChartTypeName="chart.type"
|
||||
:pie_1Data="pie_1Data"
|
||||
:pie_2Data="pie_2Data"
|
||||
:barAndLineX="barAndLineX"
|
||||
:barY1="barY1"
|
||||
:barY2="barY2"
|
||||
:lineY1="lineY1"
|
||||
:lineY2="lineY2"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<TableModel @onCloseLevelTwoPages="onCloseLevelTwoPages" :levelTwoTitle="levelTwoTitle" />
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CardModel from './components/card-model' // 卡片组件
|
||||
import CardModelSpace from './components/card-model-space' // 第一行右侧小卡片组件
|
||||
import ChartModelBox from './components/chart-model-box' // 图表组件
|
||||
import TableModel from './components/table-model' // 二级页面列表组件
|
||||
import Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
||||
import {
|
||||
getCardListApi,
|
||||
getPie_1DataApi,
|
||||
getPie_2DataApi,
|
||||
getCardList_2Api,
|
||||
getBarAndLineDataApi
|
||||
} from '@/api/home/equipment-supply.js'
|
||||
import { getListProject, getListUnite } from '@/api/lease/apply'
|
||||
export default {
|
||||
components: {
|
||||
CardModel,
|
||||
CardModelSpace,
|
||||
ChartModelBox,
|
||||
TableModel,
|
||||
Treeselect
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 是否二级页面
|
||||
isHome: false,
|
||||
// 二级页面标题
|
||||
levelTwoTitle: '',
|
||||
// 公司列表
|
||||
unitList: [],
|
||||
// 工程列表
|
||||
projectList: [],
|
||||
// 日期查询条件
|
||||
queryDate: [],
|
||||
// 表单查询条件
|
||||
queryParams: {
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
unitId: undefined,
|
||||
projectId: undefined
|
||||
},
|
||||
|
||||
cardList_1: [
|
||||
{
|
||||
title: '需求量',
|
||||
theme: '#ffa94c',
|
||||
icon: 'demand_count',
|
||||
isReduce: false,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '已供应量',
|
||||
theme: '#027db4',
|
||||
icon: 'supply_ready',
|
||||
isReduce: false,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '待供应量',
|
||||
theme: '#fb6260',
|
||||
icon: 'supply_to_be',
|
||||
isReduce: true,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
}
|
||||
],
|
||||
cardList_2: [
|
||||
{
|
||||
title: '在库量',
|
||||
theme: '#5ad55a',
|
||||
icon: 'In_the_library',
|
||||
isReduce: false,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '在用量',
|
||||
theme: '#0099ff',
|
||||
icon: 'In_use',
|
||||
isReduce: true,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '在修量',
|
||||
theme: '#8167f5',
|
||||
icon: 'In_repair',
|
||||
isReduce: false,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '修试待入库量',
|
||||
theme: '#b8741a',
|
||||
icon: 'repair_store',
|
||||
isReduce: true,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
{
|
||||
title: '新购待入库量',
|
||||
theme: '#bfbf00',
|
||||
icon: 'penning_store',
|
||||
isReduce: true,
|
||||
cardNum: 0,
|
||||
ratio: 0
|
||||
},
|
||||
],
|
||||
cardList_3: [
|
||||
{
|
||||
title: '工程总数量(个)',
|
||||
theme: '#ffa94c',
|
||||
icon: 'project_num',
|
||||
cardNum: 0
|
||||
},
|
||||
{
|
||||
title: '供应总件数(件)',
|
||||
theme: '#52c1f5',
|
||||
icon: 'quantity_num',
|
||||
cardNum: 0
|
||||
},
|
||||
{
|
||||
title: '供应总价值(万元)',
|
||||
theme: '#73a0fa',
|
||||
icon: 'total_price',
|
||||
cardNum: 0
|
||||
}
|
||||
],
|
||||
|
||||
// 图表区数据
|
||||
chartList: [
|
||||
{
|
||||
title: '需求供应情况统计',
|
||||
type: 'PieChart1'
|
||||
},
|
||||
{
|
||||
title: '机具状态统计',
|
||||
type: 'PieChart2'
|
||||
},
|
||||
{
|
||||
title: '机具需求占比',
|
||||
type: 'BarChart'
|
||||
},
|
||||
{
|
||||
title: '待供应占比统计',
|
||||
type: 'LineChart'
|
||||
}
|
||||
],
|
||||
pie_1Data: [],
|
||||
pie_2Data: [],
|
||||
barAndLineX: [],
|
||||
barY1: [],
|
||||
lineY1: [],
|
||||
barY2: [],
|
||||
lineY2: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 获取卡片列表信息
|
||||
async getCardListFun() {
|
||||
const queryParams = {
|
||||
...this.queryParams,
|
||||
startTime: this.queryDate && this.queryDate.length > 0 ? this.queryDate[0] : '',
|
||||
endTime: this.queryDate && this.queryDate.length > 0 ? this.queryDate[1] : ''
|
||||
}
|
||||
const { data: res } = await getCardListApi(queryParams)
|
||||
const {
|
||||
demandNum,
|
||||
// demandIncrease,
|
||||
suppliedQuantityNum,
|
||||
// suppliedQuantityIncrease,
|
||||
suppliedToBeQuantityNum,
|
||||
// suppliedToBeQuantityIncrease,
|
||||
projectNum,
|
||||
suppliedQuantityAllNum,
|
||||
suppliedQuantityPrice
|
||||
} = res
|
||||
this.cardList_1[0].cardNum = demandNum
|
||||
// this.cardList_1[0].ratio = Math.abs(demandIncrease)
|
||||
// demandIncrease > 0 ? (this.cardList_1[0].isReduce = true) : (this.cardList_1[0].isReduce = false)
|
||||
this.cardList_1[1].cardNum = suppliedQuantityNum
|
||||
// this.cardList_1[1].ratio = Math.abs(suppliedQuantityIncrease)
|
||||
// suppliedQuantityIncrease > 0 ? (this.cardList_1[1].isReduce = true) : (this.cardList_1[1].isReduce = false)
|
||||
this.cardList_1[2].cardNum = suppliedToBeQuantityNum
|
||||
// this.cardList_1[2].ratio = Math.abs(suppliedToBeQuantityIncrease)
|
||||
// suppliedToBeQuantityIncrease > 0
|
||||
// ? (this.cardList_1[2].isReduce = true)
|
||||
// : (this.cardList_1[2].isReduce = false)
|
||||
this.cardList_3[0].cardNum = projectNum
|
||||
this.cardList_3[1].cardNum = suppliedQuantityAllNum || 0
|
||||
this.cardList_3[2].cardNum = suppliedQuantityPrice || 0
|
||||
|
||||
// 获取第二行卡片数据
|
||||
const { data: result } = await getCardList_2Api(queryParams)
|
||||
const {
|
||||
inStockNum,
|
||||
// inStockIncrease,
|
||||
inUseNum,
|
||||
// inUseIncrease,
|
||||
inRepairNum,
|
||||
// inRepairIncrease,
|
||||
newPurchaseNum,
|
||||
// newPurchaseIncrease,
|
||||
newRepairNum,
|
||||
// newRepairIncrease
|
||||
} = result
|
||||
|
||||
this.cardList_2[0].cardNum = inStockNum
|
||||
// this.cardList_2[0].ratio = Math.abs(inStockIncrease)
|
||||
// inStockIncrease > 0 ? (this.cardList_2[0].isReduce = true) : (this.cardList_2[0].isReduce = false)
|
||||
this.cardList_2[1].cardNum = inUseNum
|
||||
// this.cardList_2[1].ratio = Math.abs(inUseIncrease)
|
||||
// inUseIncrease > 0 ? (this.cardList_2[1].isReduce = true) : (this.cardList_2[1].isReduce = false)
|
||||
this.cardList_2[2].cardNum = inRepairNum
|
||||
// this.cardList_2[2].ratio = Math.abs(inRepairIncrease)
|
||||
// inRepairIncrease > 0 ? (this.cardList_2[2].isReduce = true) : (this.cardList_2[2].isReduce = false)
|
||||
this.cardList_2[3].cardNum = newPurchaseNum
|
||||
// this.cardList_2[3].ratio = Math.abs(newPurchaseIncrease)
|
||||
// newPurchaseIncrease > 0 ? (this.cardList_2[3].isReduce = true) : (this.cardList_2[3].isReduce = false)
|
||||
this.cardList_2[4].cardNum = newRepairNum
|
||||
// this.cardList_2[4].ratio = Math.abs(newRepairIncrease)
|
||||
// newRepairIncrease > 0 ? (this.cardList_2[4].isReduce = true) : (this.cardList_2[4].isReduce = false)
|
||||
|
||||
this.pie_2Data = [
|
||||
{ value: inStockNum, name: '在库量', itemStyle: { color: '#26a8ff' } },
|
||||
{ value: inUseNum, name: '在用量', itemStyle: { color: '#45d8d9' } },
|
||||
{ value: inRepairNum, name: '在修量', itemStyle: { color: '#ff8e9d' } },
|
||||
{ value: newPurchaseNum, name: '新购待入库量', itemStyle: { color: '#6ccaf6' } },
|
||||
{ value: newRepairNum, name: '修试待入库量', itemStyle: { color: '#ffb667' } }
|
||||
]
|
||||
|
||||
// 获取饼图和柱状图
|
||||
const { data: barAndLine } = await getBarAndLineDataApi(queryParams)
|
||||
const { typeNameList, demandNumList, suppliedQuantityNumList, suppliedToBeQuantityNumList } = barAndLine
|
||||
this.barAndLineX = typeNameList
|
||||
this.barY1 = demandNumList
|
||||
this.lineY1 = demandNumList
|
||||
this.barY2 = suppliedQuantityNumList
|
||||
this.lineY2 = suppliedToBeQuantityNumList
|
||||
|
||||
console.log('barAndLine', barAndLine)
|
||||
},
|
||||
// 获取图表数据
|
||||
async getPie_1DataFun() {
|
||||
const queryParams = {
|
||||
...this.queryParams,
|
||||
startTime: this.queryDate && this.queryDate.length > 0 ? this.queryDate[0] : '',
|
||||
endTime: this.queryDate && this.queryDate.length > 0 ? this.queryDate[1] : ''
|
||||
}
|
||||
const { data: pie1 } = await getPie_1DataApi(queryParams)
|
||||
const { demandNum, suppliedQuantityNum, suppliedToBeQuantityNum } = pie1
|
||||
this.pie_1Data = [
|
||||
// { value: demandNum, name: '计划需求量', itemStyle: { color: '#65dfe0' } },
|
||||
{ value: suppliedQuantityNum, name: '已供应量', itemStyle: { color: '#ff8e9d' } },
|
||||
{ value: suppliedToBeQuantityNum, name: '待供应量', itemStyle: { color: '#6ccaf6' } }
|
||||
]
|
||||
},
|
||||
|
||||
// 获取公司和工程
|
||||
async getCompanyAndProjectFun() {
|
||||
const comRes = await getListUnite({ projectId: null })
|
||||
this.unitList = comRes.data
|
||||
const proRes = await getListProject({ unitId: null })
|
||||
this.projectList = proRes.data
|
||||
},
|
||||
// 查询
|
||||
onHandleSearch() {
|
||||
this.getCardListFun()
|
||||
this.getPie_1DataFun()
|
||||
},
|
||||
// 重置
|
||||
onHandleReset() {
|
||||
this.queryDate = this.getDefaultDateRange()
|
||||
this.$refs.queryFormRef.resetFields()
|
||||
this.getCardListFun()
|
||||
this.getPie_1DataFun()
|
||||
},
|
||||
// 自定义事件 打开二级页面
|
||||
onOpenLevelTwoPages(title) {
|
||||
this.levelTwoTitle = title
|
||||
this.isHome = true
|
||||
},
|
||||
// 自定义事件 关闭二级页面
|
||||
onCloseLevelTwoPages() {
|
||||
this.isHome = false
|
||||
},
|
||||
// 转换菜单数据结构
|
||||
normalizer(node) {
|
||||
if (node.children && !node.children.length) {
|
||||
delete node.children
|
||||
}
|
||||
return {
|
||||
id: node.id,
|
||||
label: node.name,
|
||||
children: node.children
|
||||
}
|
||||
},
|
||||
// 默认日期范围
|
||||
getDefaultDateRange() {
|
||||
const today = new Date()
|
||||
|
||||
// 获取上个月的同一天
|
||||
const lastMonth = new Date(today)
|
||||
lastMonth.setMonth(today.getMonth() - 1)
|
||||
|
||||
// 处理日期溢出问题
|
||||
if (lastMonth.getDate() !== today.getDate()) {
|
||||
lastMonth.setDate(0) // 设置为上个月的最后一天
|
||||
}
|
||||
|
||||
const formatDate = date => {
|
||||
const y = date.getFullYear()
|
||||
const m = String(date.getMonth() + 1).padStart(2, '0')
|
||||
const d = String(date.getDate()).padStart(2, '0')
|
||||
return `${y}-${m}-${d}`
|
||||
}
|
||||
|
||||
return [formatDate(lastMonth), formatDate(today)]
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.queryDate = this.getDefaultDateRange()
|
||||
this.getCompanyAndProjectFun()
|
||||
this.getCardListFun()
|
||||
this.getPie_1DataFun()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// 卡片区样式
|
||||
.card-box {
|
||||
display: flex;
|
||||
.title-card {
|
||||
padding: 16px 0;
|
||||
margin-right: 14px;
|
||||
writing-mode: vertical-rl;
|
||||
letter-spacing: 4px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.card-box-content-1 {
|
||||
flex: 1;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 12px;
|
||||
margin-right: -12px;
|
||||
|
||||
.card-box-space-last {
|
||||
grid-column: span 2;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-right: -6px;
|
||||
}
|
||||
}
|
||||
.card-box-content {
|
||||
flex: 1;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 12px;
|
||||
margin-right: -18px;
|
||||
}
|
||||
}
|
||||
|
||||
// 图表区样式
|
||||
.chart-box {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
::v-deep .vue-treeselect__control {
|
||||
height: 30px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
<template>
|
||||
<div class="card-model" :style="{ backgroundColor: state.theme }" @click="onHandleViewDetails">
|
||||
<div class="f-14">
|
||||
<svg-icon :icon-class="state.icon" class="icon-box" />
|
||||
{{ state.title }}
|
||||
</div>
|
||||
<div class="f-count">{{ state.count }}</div>
|
||||
<!-- <div class="f-14">
|
||||
<span v-if="!state.isIncrease">
|
||||
较上月降低
|
||||
<span style="color: red">{{ state.increase || 0 }}</span>
|
||||
%
|
||||
</span>
|
||||
<span v-else>较上月增长 {{ state.increase || 0 }} %</span>
|
||||
|
||||
<svg-icon v-if="!state.isIncrease" icon-class="down_arrow" />
|
||||
<svg-icon v-else icon-class="up_arrow" />
|
||||
</div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
state: {
|
||||
type: Object,
|
||||
default: {}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// console.log('card-model', this.state)
|
||||
},
|
||||
|
||||
methods: {
|
||||
onHandleViewDetails() {
|
||||
// console.log('查询二级页面', this.cardTitle)
|
||||
// 使用自定义事件 通知父组件打开二级页面
|
||||
// this.$emit('onOpenLevelTwoPages', this.cardTitle)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.card-model {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* 初始阴影 */
|
||||
transition: transform 0.3s ease; /* 添加过渡效果 */
|
||||
|
||||
& div {
|
||||
width: 100%;
|
||||
// padding-left: 40px;
|
||||
transform: translateX(40px);
|
||||
}
|
||||
|
||||
.f-14 {
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
letter-spacing: 1px;
|
||||
|
||||
.icon-box {
|
||||
font-size: 18px;
|
||||
position: absolute;
|
||||
transform: translateX(-120%);
|
||||
}
|
||||
}
|
||||
|
||||
.f-count {
|
||||
margin: 4px 0;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.card-model:hover {
|
||||
cursor: pointer;
|
||||
transform: scale(1.03);
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); /* 鼠标移入时更明显的阴影 */
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,283 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 机具供应展示 -->
|
||||
<el-form v-show="showSearch" size="small" :model="queryParams" ref="queryFormRef" inline @submit.native.prevent>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item>
|
||||
<el-date-picker
|
||||
v-model="queryDate"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
:picker-options="pickerOptions"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-form-item prop="keyWord">
|
||||
<el-input
|
||||
v-model="queryParams.keyWord"
|
||||
placeholder="请输入关键词检索"
|
||||
clearable
|
||||
style="width: 250px"
|
||||
@keyup.enter.native="onHandleSearch"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="onHandleSearch">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="onHandleReset">重置</el-button>
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出数据</el-button>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div class="card-box">
|
||||
<div class="card-box-content">
|
||||
<div v-for="(card, index) in cardList_2" :key="index">
|
||||
<CardModel :state="card" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table :data="tableList" fit highlight-current-row style="width: 100%">
|
||||
<!-- 多选 -->
|
||||
<!-- <el-table-column type="selection" width="55" align="center" /> -->
|
||||
<el-table-column
|
||||
type="index"
|
||||
width="55"
|
||||
label="序号"
|
||||
align="center"
|
||||
:index="indexContinuation(queryParams.pageNum, queryParams.pageSize)"
|
||||
/>
|
||||
<el-table-column
|
||||
v-for="(column, index) in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:key="index"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getRepairHomeTotalListApi, getRepairHomeListApi } from '@/api/home/maintain-balance'
|
||||
import CardModel from './components/card-model' // 卡片组件
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CardModel
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
// 表单查询条件
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
startTime: '',
|
||||
endTime: '',
|
||||
keyWord: ''
|
||||
},
|
||||
// 日期查询条件
|
||||
queryDate: [], // 默认时间范围
|
||||
cardList_2: [
|
||||
{
|
||||
title: '总接收量',
|
||||
theme: '#5ad55a',
|
||||
icon: 'In_the_library',
|
||||
isIncrease: true,
|
||||
increase: 0,
|
||||
count: 0
|
||||
},
|
||||
{
|
||||
title: '已修数量',
|
||||
theme: '#0099ff',
|
||||
icon: 'In_use',
|
||||
isIncrease: true,
|
||||
increase: 0,
|
||||
count: 0
|
||||
},
|
||||
{
|
||||
title: '在修数量',
|
||||
theme: '#8167f5',
|
||||
icon: 'In_repair',
|
||||
isIncrease: true,
|
||||
increase: 0,
|
||||
count: 0
|
||||
},
|
||||
{
|
||||
title: '报废数量',
|
||||
theme: '#bfbf00',
|
||||
icon: 'scrapped',
|
||||
isIncrease: true,
|
||||
increase: 0,
|
||||
count: 0
|
||||
},
|
||||
{
|
||||
title: '试验数量',
|
||||
theme: '#b8741a',
|
||||
icon: 'repair_store',
|
||||
isIncrease: true,
|
||||
increase: 0,
|
||||
count: 0
|
||||
}
|
||||
],
|
||||
pickerOptions: {
|
||||
// disabledDate 禁用日期
|
||||
disabledDate(time) {
|
||||
return time.getTime() > Date.now()
|
||||
}
|
||||
},
|
||||
tableList: [],
|
||||
tableColumns: [
|
||||
{ label: '类型名称', prop: 'typeName' },
|
||||
{ label: '规格型号', prop: 'typeModelName' },
|
||||
{ label: '维修单号', prop: 'repairCode', width: '150' },
|
||||
{ label: '单位', prop: 'unitName' },
|
||||
{ label: '总接收数量', prop: 'backNum' },
|
||||
{ label: '已修数量', prop: 'repairedNum' },
|
||||
{ label: '在修数量', prop: 'repairingNum' },
|
||||
{ label: '报废数量', prop: 'scrapNum' },
|
||||
{ label: '试验数量', prop: 'testNum' },
|
||||
{ label: '更换配件量', prop: 'changePartNum' },
|
||||
{ label: '收费配件金额(元)', prop: 'amountPartPrice' },
|
||||
{ label: '不收费配件金额(元)', prop: 'noAmountPartPrice' }
|
||||
]
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.queryDate = this.getDefaultDateRange()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
if (this.queryDate) {
|
||||
this.queryParams.startTime = this.queryDate[0]
|
||||
this.queryParams.endTime = this.queryDate[1]
|
||||
} else {
|
||||
this.queryParams.startTime = ''
|
||||
this.queryParams.endTime = ''
|
||||
}
|
||||
const loading = this.$loading({ text: '加载中...' })
|
||||
// console.log('🚀 ~ getList ~ this.queryParams:', this.queryParams)
|
||||
try {
|
||||
const res = await getRepairHomeListApi(this.queryParams)
|
||||
// console.log('🚀 ~ getList ~ res:', res)
|
||||
this.tableList = res.data.rows
|
||||
this.total = res.data.total
|
||||
const res2 = await getRepairHomeTotalListApi(this.queryParams)
|
||||
if (res2.code === 200 && res2.data) {
|
||||
res2.data.forEach((item, index) => {
|
||||
this.cardList_2[index].increase = item.increase
|
||||
this.cardList_2[index].isIncrease = item.isIncrease
|
||||
if (index === 0) {
|
||||
this.cardList_2[0].count = item.backNum
|
||||
} else if (index === 1) {
|
||||
this.cardList_2[1].count = item.repairedNum
|
||||
} else if (index === 2) {
|
||||
this.cardList_2[2].count = item.repairingNum
|
||||
} else if (index === 3) {
|
||||
this.cardList_2[3].count = item.scrapNum
|
||||
} else if (index === 4) {
|
||||
this.cardList_2[4].count = item.testNum
|
||||
}
|
||||
})
|
||||
}
|
||||
loading.close()
|
||||
} catch (error) {
|
||||
console.log('🚀 ~ getList ~ error:', error)
|
||||
loading.close()
|
||||
}
|
||||
},
|
||||
// 查询
|
||||
onHandleSearch() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
// 重置
|
||||
onHandleReset() {
|
||||
this.queryDate = this.getDefaultDateRange()
|
||||
this.$refs.queryFormRef.resetFields()
|
||||
this.getList()
|
||||
},
|
||||
// 默认日期范围
|
||||
getDefaultDateRange() {
|
||||
const today = new Date()
|
||||
|
||||
// 获取上个月的同一天
|
||||
const lastMonth = new Date(today)
|
||||
lastMonth.setMonth(today.getMonth() - 1)
|
||||
|
||||
// 处理日期溢出问题
|
||||
if (lastMonth.getDate() !== today.getDate()) {
|
||||
lastMonth.setDate(0) // 设置为上个月的最后一天
|
||||
}
|
||||
|
||||
const formatDate = date => {
|
||||
const y = date.getFullYear()
|
||||
const m = String(date.getMonth() + 1).padStart(2, '0')
|
||||
const d = String(date.getDate()).padStart(2, '0')
|
||||
return `${y}-${m}-${d}`
|
||||
}
|
||||
|
||||
return [formatDate(lastMonth), formatDate(today)]
|
||||
},
|
||||
// 导出数据
|
||||
handleExport() {
|
||||
if (this.queryDate) {
|
||||
this.queryParams.startTime = this.queryDate[0]
|
||||
this.queryParams.endTime = this.queryDate[1]
|
||||
} else {
|
||||
this.queryParams.startTime = ''
|
||||
this.queryParams.endTime = ''
|
||||
}
|
||||
try {
|
||||
let fileName = `修试平衡表_${new Date().getTime()}.xLsx`
|
||||
let url = '/material/repair_audit_details/exportRepairHomeList'
|
||||
const params = { ...this.queryParams }
|
||||
console.log('🚀 ~ 导出 ~ params:', params)
|
||||
this.download(url, params, fileName)
|
||||
} catch (error) {
|
||||
console.log('导出数据失败', error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// 卡片区样式
|
||||
.card-box {
|
||||
display: flex;
|
||||
height: 110px;
|
||||
|
||||
.card-box-content {
|
||||
flex: 1;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 12px;
|
||||
margin-right: -12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -46,6 +46,7 @@
|
|||
<el-table-column show-overflow-tooltip align="center" prop="scrapNum" label="(退库)报废数量" />
|
||||
<!-- <el-table-column show-overflow-tooltip align="center" prop="description" label="描述" />-->
|
||||
<el-table-column show-overflow-tooltip align="center" prop="postStoreNum" label="操作后库存" />
|
||||
<el-table-column show-overflow-tooltip align="center" prop="creator" label="操作人" />
|
||||
<el-table-column show-overflow-tooltip align="center" prop="createTime" label="日期" />
|
||||
<el-table-column align="center" label="状态">
|
||||
<template slot-scope="{ row }">
|
||||
|
|
|
|||
1111
src/views/login1.vue
|
|
@ -187,12 +187,12 @@
|
|||
:action="upload.url" style="width: 100%;" :file-list="fileList"
|
||||
:on-success="handleSuccess" :on-error="handleError" :on-remove="handleFileRemove"
|
||||
:before-upload="beforeUpload"
|
||||
accept="image/*,.pdf,.doc,.docx"
|
||||
accept="image/*,.pdf,.doc,.docx,video/*"
|
||||
>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip text-center" slot="tip">
|
||||
<span>按住Ctrl可同时多选,支持上传图、PDF、Word格式文件,单个文件不能超过5M</span>
|
||||
<span>按住Ctrl可同时多选,支持上传图片、视频、PDF、Word格式文件,单个文件不能超过20MB</span>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
|
|
@ -269,7 +269,7 @@ import { imgUpLoad, fileUpLoad } from "@/api/system/upload";
|
|||
import { downloadFile } from "@/utils/download";
|
||||
import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
name: "ToolsType",
|
||||
name: "Archives",
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -598,14 +598,30 @@ export default {
|
|||
},
|
||||
|
||||
beforeUpload(file) {
|
||||
const isRarOrZip = ['.rar', '.zip'].some(ext => file.name.toLowerCase().endsWith(ext));
|
||||
if (!isRarOrZip) {
|
||||
this.$message.error('仅支持上传 rar 或 zip 格式的文件');
|
||||
// const isRarOrZip = ['.rar', '.zip'].some(ext => file.name.toLowerCase().endsWith(ext));
|
||||
// if (!isRarOrZip) {
|
||||
// this.$message.error('仅支持上传 rar 或 zip 格式的文件');
|
||||
// return false;
|
||||
// }
|
||||
const validExtensions = ['.pdf', '.doc', '.docx'];
|
||||
const validTypes = ['image/', 'video/'];
|
||||
const fileName = file.name.toLowerCase();
|
||||
const fileType = file.type;
|
||||
|
||||
// 检查文件扩展名
|
||||
const hasValidExtension = validExtensions.some(ext => fileName.endsWith(ext));
|
||||
// 检查文件 MIME 类型
|
||||
const hasValidType = validTypes.some(type => fileType.startsWith(type));
|
||||
|
||||
if (!hasValidExtension && !hasValidType) {
|
||||
this.$message.error('仅支持上传图片、视频、PDF、Word格式文件');
|
||||
return false;
|
||||
}
|
||||
const isLt5M = file.size / 1024 / 1024 < 5;
|
||||
|
||||
|
||||
const isLt5M = file.size / 1024 / 1024 < 20;
|
||||
if (!isLt5M) {
|
||||
this.$message.error('单个文件大小不能超过 5MB');
|
||||
this.$message.error('单个文件大小不能超过 20MB');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -750,7 +750,6 @@ export default {
|
|||
searchKey: path.join('').toLowerCase(),
|
||||
num: node.num || 0,
|
||||
maTypeName: parents[parents.length - 1] || '',
|
||||
specificationType: node.typeName,
|
||||
unitName: node.unitName,
|
||||
unitValue: node.unitValue,
|
||||
manageType: node.manageType
|
||||
|
|
@ -802,7 +801,7 @@ export default {
|
|||
...typeData,
|
||||
preNum: 0,
|
||||
typeModel: typeData.typeName,
|
||||
typeName: typeData.specificationType,
|
||||
typeName: typeData.maTypeName,
|
||||
apDetection: '',
|
||||
remark: '',
|
||||
maCodeList: [],
|
||||
|
|
@ -866,6 +865,9 @@ export default {
|
|||
// 获取 任务详情数据
|
||||
async GetViewByApply(params) {
|
||||
const res = await getBackApplyInfo(this.rowId)
|
||||
if (res.msg && res.msg != '操作成功') {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
console.log(res)
|
||||
const data = res.data
|
||||
this.queryParams.unitId = data.backApplyInfo.unitId
|
||||
|
|
@ -1103,6 +1105,7 @@ export default {
|
|||
typeId: typeId
|
||||
}
|
||||
await getMachineById(param).then(res => {
|
||||
console.log('🚀 ~ awaitgetMachineById ~ res.data:', res.data)
|
||||
this.machineList = res.data
|
||||
this.machineList.forEach(item => {
|
||||
item.bmFileInfos = []
|
||||
|
|
@ -1119,21 +1122,16 @@ export default {
|
|||
console.log(this.maCodeList)
|
||||
console.log(this.machineList)
|
||||
if (this.rowId != '') {
|
||||
// //编辑插入已选数据后再回显勾选
|
||||
this.rowData.tempMaCodeList.forEach(item => {
|
||||
this.machineList.unshift(item) //插入
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.codeTableList.toggleRowSelection(item, true)
|
||||
// })
|
||||
})
|
||||
this.maCodeList = this.rowData.maCodeList
|
||||
console.log('🚀 ~ 编辑 ~ this.maCodeList:', this.maCodeList)
|
||||
this.machineList.forEach(item => {
|
||||
this.maCodeList.forEach(sub => {
|
||||
if (sub.maId == item.maId) {
|
||||
this.$nextTick(() => {
|
||||
setTimeout(() => {
|
||||
this.$refs.codeTableList.toggleRowSelection(item, true)
|
||||
}, 500)
|
||||
item.apDetection = sub.apDetection
|
||||
}, 200)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -1141,13 +1139,13 @@ export default {
|
|||
} else {
|
||||
//新增回显勾选
|
||||
// console.log("新增")
|
||||
console.log(this.maCodeList, '新增')
|
||||
this.machineList.forEach(item => {
|
||||
this.maCodeList.forEach(sub => {
|
||||
if (sub.maId == item.maId) {
|
||||
this.$nextTick(() => {
|
||||
setTimeout(() => {
|
||||
this.$refs.codeTableList.toggleRowSelection(item, true)
|
||||
}, 500)
|
||||
this.$refs.codeTableList.toggleRowSelection(item, true)
|
||||
item.apDetection = sub.apDetection
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
@ -1159,6 +1157,7 @@ export default {
|
|||
this.open = true
|
||||
},
|
||||
codeSelectionChange(selection) {
|
||||
if (!this.open) return
|
||||
this.maCodeList = selection
|
||||
// console.log(selection)
|
||||
// this.queryParams.equipmentList = selection
|
||||
|
|
|
|||
|
|
@ -298,18 +298,18 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="外观判定" prop="apDetection" align="center" width="160" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<!-- <template slot-scope="scope"> -->
|
||||
<!-- <el-input
|
||||
v-model.number="scope.row.apDetection"
|
||||
placeholder="外观判定" maxlength="20"
|
||||
type="text" clearable :readonly="isView"
|
||||
style="width: 100%"
|
||||
/> -->
|
||||
<el-radio-group v-model="scope.row.apDetection" disabled>
|
||||
<!-- <el-radio-group v-model="scope.row.apDetection" disabled>
|
||||
<el-radio label="1">完好</el-radio>
|
||||
<el-radio label="0">损坏</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-radio-group> -->
|
||||
<!-- </template> -->
|
||||
</el-table-column>
|
||||
<el-table-column label="附件" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
|
|
@ -645,6 +645,9 @@ export default {
|
|||
// 获取 任务详情数据
|
||||
async GetViewByApply(params) {
|
||||
const res = await getBackApplyInfo(this.rowId)
|
||||
if (res.msg && res.msg != '操作成功') {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
console.log(res)
|
||||
const data = res.data
|
||||
console.log(data)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import Home from './component/home.vue'
|
|||
import AddReturn from './component/addReturn.vue'
|
||||
import QueryReturn from './component/queryReturn.vue'
|
||||
export default {
|
||||
name: 'Return',
|
||||
components: {
|
||||
PageHeader,
|
||||
Home,
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ import {
|
|||
// import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
||||
export default {
|
||||
name: 'bmAssetAttributes',
|
||||
name: 'BmAssetAttributes',
|
||||
dicts: ['sys_normal_disable'],
|
||||
// components: { Treeselect },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -20,160 +20,73 @@
|
|||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
size="mini"
|
||||
@click="handleQuery"
|
||||
>搜索</el-button
|
||||
>
|
||||
<el-button
|
||||
icon="el-icon-refresh"
|
||||
size="mini"
|
||||
@click="resetQuery"
|
||||
>重置</el-button
|
||||
>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
>新建</el-button
|
||||
>
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新建</el-button>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="warning"-->
|
||||
<!-- plain-->
|
||||
<!-- icon="el-icon-download"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- @click="handleExport"-->
|
||||
<!-- >导入数据</el-button-->
|
||||
<!-- >-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="warning"-->
|
||||
<!-- plain-->
|
||||
<!-- icon="el-icon-download"-->
|
||||
<!-- size="mini"-->
|
||||
<!-- @click="handleExport"-->
|
||||
<!-- >导入数据</el-button-->
|
||||
<!-- >-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport">
|
||||
导出数据
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">
|
||||
导出数据
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
></right-toolbar>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="projectList"
|
||||
@selection-change="handleSelectionChange"
|
||||
border
|
||||
>
|
||||
<el-table v-loading="loading" :data="projectList" @selection-change="handleSelectionChange" border>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column width="60" align="center" label="序号" type="index" >
|
||||
<el-table-column width="60" align="center" label="序号" type="index">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
|
||||
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="工程项目名称"
|
||||
align="center"
|
||||
prop="proName"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实施单位"
|
||||
align="center"
|
||||
prop="impUnitName"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column label="工程项目名称" align="center" prop="proName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="实施单位" align="center" prop="impUnitName" :show-overflow-tooltip="true" />
|
||||
<el-table-column
|
||||
label="工程类型"
|
||||
align="center"
|
||||
prop="proType"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
></el-table-column>
|
||||
<el-table-column label="工程编号" align="center" prop="proCode" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="是否匹配i8工程" align="center" prop="isMatchI8" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.isMatchI8 == '匹配'" style="color: green">{{ scope.row.isMatchI8 }}</div>
|
||||
<div v-if="scope.row.isMatchI8 == '不匹配'" style="color: red">{{ scope.row.isMatchI8 }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="工程编号"
|
||||
align="center"
|
||||
prop="proCode"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="是否匹配i8工程"
|
||||
align="center"
|
||||
prop="isMatchI8"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.isMatchI8=='匹配'" style="color: green;">{{ scope.row.isMatchI8 }}</div>
|
||||
<div v-if="scope.row.isMatchI8=='不匹配'" style="color: red;">{{ scope.row.isMatchI8 }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="合同主体"
|
||||
align="center"
|
||||
prop="contractPart"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="项目经理"
|
||||
align="center"
|
||||
prop="proManager"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="联系电话"
|
||||
align="center"
|
||||
prop="telphone"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="i8工程编号"
|
||||
align="center"
|
||||
prop="externalId"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="工程状态"
|
||||
align="center"
|
||||
prop="proStatus"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<dict-tag
|
||||
:options="dict.type.bm_project_status"
|
||||
:value="scope.row.proStatus"
|
||||
/>
|
||||
<el-table-column label="合同主体" align="center" prop="contractPart" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="项目经理" align="center" prop="proManager" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="联系电话" align="center" prop="telphone" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="i8工程编号" align="center" prop="externalId" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="工程状态" align="center" prop="proStatus" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.bm_project_status" :value="scope.row.proStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="140">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -187,200 +100,159 @@
|
|||
/>
|
||||
|
||||
<!-- 添加或修改参数配置对话框 -->
|
||||
<el-dialog
|
||||
:title="title"
|
||||
:visible.sync="open"
|
||||
width="700px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程名称" prop="proName">
|
||||
<el-input
|
||||
v-model="form.proName"
|
||||
placeholder="请输入工程名称"
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程编号" prop="proCode">
|
||||
<el-input
|
||||
v-model="form.proCode"
|
||||
placeholder="请输入工程编号"
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body :close-on-click-modal="false">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="关联i8工程" prop="relatedI8">
|
||||
<el-select
|
||||
v-model="form.relatedI8"
|
||||
placeholder="请选择关联i8工程"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleChangeI8Pro"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in i8ProOpts"
|
||||
:key="index"
|
||||
:label="item.projectName"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="i8工程ID" prop="externalId">
|
||||
<el-input v-model="form.externalId" placeholder="请输入i8工程ID" maxlength="50" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程名称" prop="proName">
|
||||
<el-input v-model="form.proName" placeholder="请输入工程名称" maxlength="50" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程编号" prop="proCode">
|
||||
<el-input v-model="form.proCode" placeholder="请输入工程编号" maxlength="50" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="实施单位" prop="impUnit">
|
||||
<el-select
|
||||
v-model="form.impUnit"
|
||||
filterable
|
||||
placeholder="请选择实施单位"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="status in impUnitList"
|
||||
:key="status.value"
|
||||
:label="status.label"
|
||||
:value="status.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程类型" prop="proTypeId">
|
||||
<el-select v-model="form.proTypeId" placeholder="请选择工程类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="keeper in proDataRange"
|
||||
:key="keeper.value"
|
||||
:label="keeper.label"
|
||||
:value="keeper.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="实施单位" prop="impUnit">
|
||||
<el-select
|
||||
v-model="form.impUnit"
|
||||
filterable
|
||||
placeholder="请选择实施单位"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="status in impUnitList"
|
||||
:key="status.value"
|
||||
:label="status.label"
|
||||
:value="status.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程类型" prop="proTypeId">
|
||||
<el-select
|
||||
v-model="form.proTypeId"
|
||||
placeholder="请选择工程类型"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="keeper in proDataRange"
|
||||
:key="keeper.value"
|
||||
:label="keeper.label"
|
||||
:value="keeper.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程状态" prop="proStatus">
|
||||
<el-select
|
||||
v-model="form.proStatus"
|
||||
filterable
|
||||
placeholder="请选择工程状态"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in proStatusOpts"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程性质" prop="proNature">
|
||||
<el-select
|
||||
v-model="form.proNature"
|
||||
filterable
|
||||
placeholder="请选择工程性质"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="基建" value="0"></el-option>
|
||||
<el-option label="用户工程" value="1"></el-option>
|
||||
<el-option label="技修大改" value="2"></el-option>
|
||||
<el-option label="其它" value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目经理" prop="proManager">
|
||||
<el-input v-model="form.proManager" placeholder="请输入项目经理姓名" maxlength="20" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="telphone">
|
||||
<el-input v-model="form.telphone" placeholder="请输入联系电话" maxlength="11" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程状态" prop="proStatus">
|
||||
<el-select
|
||||
v-model="form.proStatus"
|
||||
filterable
|
||||
placeholder="请选择工程状态"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="开工准备" value="0"></el-option>
|
||||
<el-option label="在建" value="1"></el-option>
|
||||
<el-option label="停工" value="2"></el-option>
|
||||
<el-option label="完工未竣工" value="3"></el-option>
|
||||
<el-option label="竣工" value="4"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程性质" prop="proNature">
|
||||
<el-select
|
||||
v-model="form.proNature"
|
||||
filterable
|
||||
placeholder="请选择工程性质"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="基建" value="0"></el-option>
|
||||
<el-option label="用户工程" value="1"></el-option>
|
||||
<el-option label="技修大改" value="2"></el-option>
|
||||
<el-option label="其它" value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同主体单位" prop="contractPart">
|
||||
<el-input v-model="form.contractPart" placeholder="请输入合同主体单位" maxlength="50" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属项目中心" prop="proCenter">
|
||||
<el-input v-model="form.proCenter" placeholder="请输入所属项目中心" maxlength="50" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目经理" prop="proManager">
|
||||
<el-input
|
||||
v-model="form.proManager"
|
||||
placeholder="请输入项目经理姓名"
|
||||
maxlength="20"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="telphone">
|
||||
<el-input
|
||||
v-model="form.telphone"
|
||||
placeholder="请输入联系电话"
|
||||
maxlength="11"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同主体单位" prop="contractPart">
|
||||
<el-input
|
||||
v-model="form.contractPart"
|
||||
placeholder="请输入合同主体单位"
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属项目中心" prop="proCenter">
|
||||
<el-input
|
||||
v-model="form.proCenter"
|
||||
placeholder="请输入所属项目中心"
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="i8工程ID" prop="externalId">
|
||||
<el-input
|
||||
v-model="form.externalId"
|
||||
placeholder="请输入i8工程ID"
|
||||
maxlength="50"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="关联i8工程" prop="relatedI8Project">
|
||||
<el-input
|
||||
v-model="form.relatedI8Project"
|
||||
placeholder="输入搜索关键词"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="请输入内容"
|
||||
v-model="form.remark"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm" :loading="isLoading">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="请输入内容"
|
||||
v-model="form.remark"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm" :loading="isLoading">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -393,13 +265,17 @@ import {
|
|||
updateProject,
|
||||
queryProDataApi,
|
||||
getProjectUserList,
|
||||
unitTypeList,
|
||||
impUnitTypeList,
|
||||
getI8ProjectList
|
||||
} from '@/api/basic/basic'
|
||||
import { unitTypeList,impUnitTypeList } from '@/api/basic/basic'
|
||||
import axios from 'axios'
|
||||
import CryptoJS from 'crypto-js'
|
||||
// import { deptTreeSelect } from '@/api/system/user'
|
||||
// import Treeselect from '@riophae/vue-treeselect'
|
||||
// import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
export default {
|
||||
name: 'bmProject',
|
||||
name: 'BmProject',
|
||||
dicts: ['bm_project_status'],
|
||||
// components: { Treeselect },
|
||||
data() {
|
||||
|
|
@ -421,9 +297,29 @@ export default {
|
|||
// 表格数据
|
||||
projectList: [],
|
||||
//字典数据
|
||||
// i8工程类型
|
||||
i8ProOpts: [
|
||||
// {
|
||||
// id: '0024a75450',
|
||||
// htzt: '安徽送变电工程有限公司',
|
||||
// oname: '施工管理部',
|
||||
// pcNo: 'PROJ-2024-0862',
|
||||
// projectName: '安庆市变电站新建工程',
|
||||
// stat: '在建',
|
||||
// textcol1: '第四项目管理部(安庆)',
|
||||
// xmjl: '张先生'
|
||||
// }
|
||||
],
|
||||
proStatusOpts: [
|
||||
{ label: '开工准备', value: '0' },
|
||||
{ label: '在建', value: '1' },
|
||||
{ label: '停工', value: '2' },
|
||||
{ label: '完工未竣工', value: '3' },
|
||||
{ label: '竣工', value: '4' }
|
||||
],
|
||||
typeList: [],
|
||||
impUnitList:[],
|
||||
projectStatuses:[],
|
||||
impUnitList: [],
|
||||
projectStatuses: [],
|
||||
// 部门树选项
|
||||
deptOptions: undefined,
|
||||
// 弹出层标题
|
||||
|
|
@ -432,65 +328,65 @@ export default {
|
|||
open: false,
|
||||
// 日期范围
|
||||
dateRange: [],
|
||||
projectNatures:[],
|
||||
projectNatures: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
proName: undefined,
|
||||
proName: undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
chosenData: {},
|
||||
proDataRange:[],
|
||||
proStatusDataRange:[],
|
||||
proNatureDataRange:[],
|
||||
proDataRange: [],
|
||||
proStatusDataRange: [],
|
||||
proNatureDataRange: [],
|
||||
// 表单校验
|
||||
rules: {
|
||||
proName: [
|
||||
{
|
||||
required: true,
|
||||
message: '工程项目名称不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
impUnit: [
|
||||
{
|
||||
required: true,
|
||||
message: '实施单位不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
proTypeId: [
|
||||
{
|
||||
required: true,
|
||||
message: '工程类型不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
proStatus: [
|
||||
{
|
||||
required: true,
|
||||
message: '工程状态不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
proNature: [
|
||||
{
|
||||
required: true,
|
||||
message: '工程性质不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
telphone: [
|
||||
{ required: false, message: "手机号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
},
|
||||
{ required: false, message: '手机号不能为空', trigger: 'blur' },
|
||||
{
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||
message: '请输入正确的手机号码',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
|
@ -500,47 +396,77 @@ export default {
|
|||
this.getProjectType()
|
||||
},
|
||||
methods: {
|
||||
async getProjectType(){
|
||||
let prodataRes = await queryProDataApi('bm_project_type');
|
||||
this.proDataRange = prodataRes.data.map((item) => {
|
||||
return {
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue,
|
||||
};
|
||||
});
|
||||
// 获取i8工程类型
|
||||
async getI8ProType() {
|
||||
const url = 'http://sgwpdm.ah.sgcc.com.cn/iws/data-center/dc-security/user/login'
|
||||
const password = CryptoJS.MD5('Aa2345!').toString()
|
||||
console.log('🚀 ~ getI8ProType ~ password:', password)
|
||||
const account = 'jijusystem'
|
||||
|
||||
let proStatusdataRes = await queryProDataApi('bm_project_status');
|
||||
this.proStatusDataRange = proStatusdataRes.data.map((item) => {
|
||||
axios
|
||||
.post(
|
||||
url,
|
||||
{ account: account, password: password },
|
||||
{ headers: { 'Content-Type': 'application/json' } }
|
||||
)
|
||||
.then(response => {
|
||||
console.log('🚀 ~ response.data:', response.data)
|
||||
const token = response.data.data.token
|
||||
console.log('🚀 ~ token:', token)
|
||||
getI8ProjectList({ token })
|
||||
.then(res => {
|
||||
console.log('🚀 ~ res-i8:', res)
|
||||
this.i8ProOpts = res.data.data
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
},
|
||||
async getProjectType() {
|
||||
let prodataRes = await queryProDataApi('bm_project_type')
|
||||
this.proDataRange = prodataRes.data.map(item => {
|
||||
return {
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue,
|
||||
};
|
||||
});
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue
|
||||
}
|
||||
})
|
||||
|
||||
let proNaturedataRes = await queryProDataApi('bm_project_nature');
|
||||
this.proNatureDataRange = proNaturedataRes.data.map((item) => {
|
||||
let proStatusdataRes = await queryProDataApi('bm_project_status')
|
||||
this.proStatusDataRange = proStatusdataRes.data.map(item => {
|
||||
return {
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue,
|
||||
};
|
||||
});
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue
|
||||
}
|
||||
})
|
||||
|
||||
let proNaturedataRes = await queryProDataApi('bm_project_nature')
|
||||
this.proNatureDataRange = proNaturedataRes.data.map(item => {
|
||||
return {
|
||||
label: item.dictLabel,
|
||||
value: item.dictValue
|
||||
}
|
||||
})
|
||||
},
|
||||
//获取实施单位
|
||||
getType() {
|
||||
impUnitTypeList().then((response) => {
|
||||
let matTypeRes = response.data;
|
||||
let result=[];
|
||||
matTypeRes.forEach(item=>{
|
||||
const parts = item.ancestors.split(',');
|
||||
if(parts.length==2){
|
||||
result.push({
|
||||
label: item.deptName,
|
||||
value: item.deptId,
|
||||
});
|
||||
}
|
||||
})
|
||||
impUnitTypeList().then(response => {
|
||||
let matTypeRes = response.data
|
||||
let result = []
|
||||
matTypeRes.forEach(item => {
|
||||
const parts = item.ancestors.split(',')
|
||||
if (parts.length == 2) {
|
||||
result.push({
|
||||
label: item.deptName,
|
||||
value: item.deptId
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.impUnitList=result
|
||||
this.impUnitList = result
|
||||
})
|
||||
},
|
||||
selecType(id) {
|
||||
|
|
@ -552,7 +478,7 @@ export default {
|
|||
},
|
||||
/** 查询部门下拉树结构 */
|
||||
getDeptTree() {
|
||||
deptTreeSelect().then((response) => {
|
||||
deptTreeSelect().then(response => {
|
||||
this.deptOptions = response.data
|
||||
})
|
||||
},
|
||||
|
|
@ -564,7 +490,7 @@ export default {
|
|||
/** 查询字典类型列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
getProjectList(this.queryParams).then((response) => {
|
||||
getProjectList(this.queryParams).then(response => {
|
||||
this.projectList = response.rows
|
||||
this.total = response.total
|
||||
this.loading = false
|
||||
|
|
@ -583,7 +509,7 @@ export default {
|
|||
proName: undefined,
|
||||
dictType: undefined,
|
||||
status: '0',
|
||||
remark: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
|
|
@ -603,28 +529,31 @@ export default {
|
|||
this.reset()
|
||||
this.open = true
|
||||
this.title = '新增工程'
|
||||
this.getI8ProType()
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map((item) => item.proId)
|
||||
this.ids = selection.map(item => item.proId)
|
||||
this.single = selection.length != 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
changeStatus(row) {
|
||||
let param = {
|
||||
proId: row.proId,
|
||||
status: row.status,
|
||||
status: row.status
|
||||
}
|
||||
updateProject(param).then((response) => {
|
||||
updateProject(param).then(response => {
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.getI8ProType()
|
||||
this.reset()
|
||||
getProjectListDetail(row.proId).then((response) => {
|
||||
getProjectListDetail(row.proId).then(response => {
|
||||
this.form = response.data
|
||||
this.form.impUnit =Number(this.form.impUnit)
|
||||
this.form.impUnit = Number(this.form.impUnit)
|
||||
this.form.relatedI8 = this.form.externalId
|
||||
})
|
||||
this.open = true
|
||||
this.title = '编辑工程'
|
||||
|
|
@ -632,12 +561,13 @@ export default {
|
|||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function () {
|
||||
this.$refs['form'].validate((valid) => {
|
||||
console.log(this.form, '提交--->>>')
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
this.isLoading = true
|
||||
if (this.form.proId != undefined) {
|
||||
updateProject(this.form)
|
||||
.then((response) => {
|
||||
.then(response => {
|
||||
this.$modal.msgSuccess('修改成功')
|
||||
this.open = false
|
||||
this.isLoading = false
|
||||
|
|
@ -648,7 +578,7 @@ export default {
|
|||
})
|
||||
} else {
|
||||
addProject(this.form)
|
||||
.then((response) => {
|
||||
.then(response => {
|
||||
this.$modal.msgSuccess('新增成功')
|
||||
this.open = false
|
||||
this.isLoading = false
|
||||
|
|
@ -681,9 +611,9 @@ export default {
|
|||
'/material/bm_project/export',
|
||||
{
|
||||
...this.queryParams,
|
||||
dataCondition: this.ids,
|
||||
dataCondition: this.ids
|
||||
},
|
||||
`工程项目_${new Date().getTime()}.xlsx`,
|
||||
`工程项目_${new Date().getTime()}.xlsx`
|
||||
)
|
||||
},
|
||||
/** 刷新缓存按钮操作 */
|
||||
|
|
@ -693,6 +623,30 @@ export default {
|
|||
// this.$store.dispatch('dict/cleanDict')
|
||||
// })
|
||||
// },
|
||||
},
|
||||
handleChangeI8Pro(val) {
|
||||
console.log('🚀 ~ handleChangeI8Pro ~ val:', val)
|
||||
if (!val) {
|
||||
this.form.proName = ''
|
||||
this.form.externalId = ''
|
||||
this.form.proCode = ''
|
||||
this.form.proManager = ''
|
||||
this.form.contractPart = ''
|
||||
this.form.proCenter = ''
|
||||
this.form.impUnit = ''
|
||||
this.form.proStatus = ''
|
||||
return
|
||||
}
|
||||
const current = this.i8ProOpts.find(item => item.id == val)
|
||||
console.log('🚀 ~ handleChangeI8Pro ~ current:', current)
|
||||
this.form.proName = current.projectName
|
||||
this.form.externalId = current.id
|
||||
this.form.proCode = current.pcNo
|
||||
this.form.proManager = current.xmjl
|
||||
this.form.contractPart = current.htzt
|
||||
this.form.proCenter = current.textcol1
|
||||
this.form.impUnit = this.impUnitList.find(item => item.label == current.oname)?.value
|
||||
this.form.proStatus = this.proStatusOpts.find(item => item.label == current.stat)?.value
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ import { deptTreeSelect } from '@/api/system/user'
|
|||
import Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
export default {
|
||||
name: 'bmUnit',
|
||||
name: 'BmUnit',
|
||||
dicts: ['sys_normal_disable'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -394,7 +394,7 @@ import Treeselect from "@riophae/vue-treeselect";
|
|||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
|
||||
export default {
|
||||
name: "bmUnitPeople",
|
||||
name: "BmUnitPeople",
|
||||
dicts: ['sys_normal_disable', 'sys_user_sex'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@
|
|||
import { listRole } from "@/api/system/role";
|
||||
import { getKeeperIds, updateBmConfig } from "@/api/ma/typeConfigKeeper";
|
||||
export default {
|
||||
name: "siteConfig",
|
||||
name: "SiteConfig",
|
||||
data() {
|
||||
return {
|
||||
activeName: "first",
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ import {
|
|||
updateData,
|
||||
} from "@/api/system/dict/data";
|
||||
export default {
|
||||
name: "unitType",
|
||||
name: "UnitType",
|
||||
dicts: ["sys_normal_disable"],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ import qrcode from 'qrcodejs2';
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: 'Home',
|
||||
name: 'Code',
|
||||
dicts: ['qr_box_type'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
>减免明细导出</el-button>
|
||||
<el-button type="warning" size="mini" @click="handleExportAll"
|
||||
>全部明细导出</el-button>
|
||||
<el-button type="warning" size="mini" @click="handleExportEach"
|
||||
>各结算明细导出</el-button>
|
||||
<el-button type="success" size="mini" @click="handleAdd"
|
||||
>提交</el-button>
|
||||
</el-col>
|
||||
|
|
@ -54,12 +56,12 @@
|
|||
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="租赁单价" align="center" prop="leasePrice" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.num">
|
||||
<template slot-scope="scope" v-show="scope.row.leasePrice">
|
||||
{{ scope.row.leasePrice.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="租赁数量" align="center" prop="num" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<template slot-scope="scope" v-show="scope.row.num">
|
||||
{{ scope.row.num.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -67,12 +69,12 @@
|
|||
<!-- <el-table-column label="归还数量" align="center" prop="" :show-overflow-tooltip="true" /> -->
|
||||
<el-table-column label="归还日期 " align="center" prop="endTime" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="租赁天数" align="center" prop="leaseDays" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.num">
|
||||
<template slot-scope="scope" v-show="scope.row.leaseDays">
|
||||
{{ Number(scope.row.leaseDays).toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="租赁费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.costs">
|
||||
<template slot-scope="scope" v-show="scope.row.costs">
|
||||
{{ scope.row.costs.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -95,13 +97,13 @@
|
|||
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="维修数量" align="center" prop="num" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.num" >
|
||||
<template slot-scope="scope" v-show="scope.row.num" >
|
||||
{{ scope.row.num.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否收费" align="center" prop="partType" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="维修费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.costs" >
|
||||
<template slot-scope="scope" v-show="scope.row.costs" >
|
||||
{{ scope.row.costs.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -123,13 +125,13 @@
|
|||
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="报废数量" align="center" prop="num" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.num">
|
||||
<template slot-scope="scope" v-show="scope.row.num">
|
||||
{{ scope.row.num.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否收费" align="center" prop="partType" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="报废费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.costs">
|
||||
<template slot-scope="scope" v-show="scope.row.costs">
|
||||
{{ scope.row.costs.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -151,12 +153,12 @@
|
|||
<el-table-column label="规格型号" align="center" prop="modelName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="计量单位" align="center" prop="mtUnitName" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="丢失数量" align="center" prop="num" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.num">
|
||||
<template slot-scope="scope" v-show="scope.row.num">
|
||||
{{ scope.row.num.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="丢失费用(元)" align="center" prop="costs" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.costs">
|
||||
<template slot-scope="scope" v-show="scope.row.costs">
|
||||
{{ scope.row.costs.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -184,7 +186,7 @@
|
|||
<el-table-column label="减免天数" align="center" prop="days" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="减免原因" align="center" prop="remark" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="减免费用(元)" align="center" prop="leaseMoney" :show-overflow-tooltip="true">
|
||||
<template slot-scope="scope" v-if="scope.row.leaseMoney">
|
||||
<template slot-scope="scope" v-show="scope.row.leaseMoney">
|
||||
{{ scope.row.leaseMoney.toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -279,7 +281,6 @@ export default {
|
|||
this.loseList = response.data.loseList //丢失费用列表
|
||||
this.loseCost = this.countCost(this.loseList)
|
||||
this.reducList = response.data.reductionList //减免费用列表
|
||||
console.log('111111111111111111',this.reducList)
|
||||
if(this.reducList!=null){
|
||||
this.reducList.forEach((item) => {
|
||||
this.reducCost = Number(this.reducCost) + Number(item.leaseMoney)
|
||||
|
|
@ -317,8 +318,6 @@ export default {
|
|||
let arrCost = 0
|
||||
list.forEach((item) => {
|
||||
// arrCost += parseInt(item.costs)
|
||||
|
||||
console.log(item)
|
||||
if (item.partType != 0 && item.scrapType != 0) {
|
||||
arrCost = arrCost + Number(item.costs)
|
||||
}
|
||||
|
|
@ -332,8 +331,8 @@ export default {
|
|||
.confirm('是否确认提交?')
|
||||
.then(() => {
|
||||
let params = {
|
||||
'agreementId': this.rowData.agreementId, 'agreementCode': this.rowData.agreementCode,'totalCostAll': this.costAll,
|
||||
'leaseList': this.leaseList, 'repairList': this.repairList, 'scrapList': this.scrapList,'loseList': this.loseList,
|
||||
'agreementIds': Array.isArray(this.rowData) ? this.rowData.map(item => item.agreementId) : [],'totalCostAll': this.costAll,
|
||||
'leaseList': this.leaseList, 'repairList': this.repairList, 'scrapList': this.scrapList,'loseList': this.loseList,'reductionList': this.reducList,
|
||||
}
|
||||
console.log('2222222222222',params)
|
||||
submitCosts(params).then((response) => {
|
||||
|
|
@ -460,6 +459,15 @@ export default {
|
|||
`全部费用明细_${new Date().getTime()}.xlsx`,
|
||||
)
|
||||
},
|
||||
handleExportEach() {
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportEach',
|
||||
{...params,},
|
||||
`各费用明细_${new Date().getTime()}.xlsx`,
|
||||
)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -378,7 +378,8 @@ export default {
|
|||
/** 导出按钮操作 */
|
||||
//租赁
|
||||
handleExport1() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportLease',
|
||||
{...params,},
|
||||
|
|
@ -387,7 +388,8 @@ export default {
|
|||
},
|
||||
//丢失
|
||||
handleExport2() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportLose',
|
||||
{...params,},
|
||||
|
|
@ -396,7 +398,8 @@ export default {
|
|||
},
|
||||
// 维修
|
||||
handleExport3() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportRepair',
|
||||
{...params,},
|
||||
|
|
@ -405,7 +408,8 @@ export default {
|
|||
},
|
||||
//报废
|
||||
handleExport4() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportScrap',
|
||||
{...params,},
|
||||
|
|
@ -418,7 +422,8 @@ export default {
|
|||
// )
|
||||
},
|
||||
handleExport5() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportReduction',
|
||||
{...params,},
|
||||
|
|
@ -427,7 +432,8 @@ export default {
|
|||
},
|
||||
|
||||
handleExportAll() {
|
||||
const params = this.rowData
|
||||
let data = _.cloneDeep(this.rowData);
|
||||
const params = {params:JSON.stringify(data)}
|
||||
this.download(
|
||||
'material/slt_agreement_info/exportAll',
|
||||
{...params,},
|
||||
|
|
|
|||
|
|
@ -404,8 +404,8 @@ export default {
|
|||
},
|
||||
//结算审批查看
|
||||
handleView(row) {
|
||||
let arr = row
|
||||
console.log('2222222222222',row)
|
||||
let arr = [];
|
||||
arr.push(row);
|
||||
this.$emit("goDetail",JSON.stringify(arr));
|
||||
},
|
||||
//结算审批
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import PageHeader from '@/components/pageHeader'
|
|||
import ApplyHome from './component/applyHome.vue'
|
||||
import ApplyDetail from './component/applyDetail.vue'
|
||||
export default {
|
||||
name: 'CostApplyList',
|
||||
components: {
|
||||
PageHeader,
|
||||
ApplyHome,
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import PageHeader from '@/components/pageHeader'
|
|||
import ExamHome from './component/examHome.vue'
|
||||
import ExamDetail from './component/examDetail.vue'
|
||||
export default {
|
||||
name: 'CostExamList',
|
||||
components: {
|
||||
PageHeader,
|
||||
ExamHome,
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ import {getProtocolList, } from "@/api/costPush/costPush";
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: "",
|
||||
name: "ProtocolMatch",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -427,7 +427,7 @@ import {getPushReviewList, } from "@/api/costPush/costPush";
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: "",
|
||||
name: "PushCost",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ import {getPushReviewList,getLeaseList,getRepairList,getLoseList,getScrapList }
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: "",
|
||||
name: "PushReview",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@
|
|||
<script>
|
||||
import { getConfigListApi, addConfigApi, editConfigApi, deleteConfigApi } from '@/api/countersign/countersign'
|
||||
export default {
|
||||
name: 'signConfig',
|
||||
name: 'Config',
|
||||
dicts: ['countersign_process_name', 'countersign_type_name', 'tm_task_type'],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ import { deptTreeSelect } from "@/api/system/user";
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: "signProcess",
|
||||
name: "Process",
|
||||
dicts: ["countersign_process_config_name", "countersign_process_type_name"],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ export default {
|
|||
endTime: this.queryParams.time && this.queryParams.time[1],
|
||||
pageSize: this.queryParams.pageSize,
|
||||
pageNum: this.queryParams.pageNum,
|
||||
statusList: this.queryParams.taskStatus ? [this.queryParams.taskStatus]:this.dict.type.lease_task_status.map(item => item.value)
|
||||
statusList: this.queryParams.taskStatus ? [this.queryParams.taskStatus]:[1,2,3,4]
|
||||
};
|
||||
getListLeaseApply(params).then((response) => {
|
||||
this.typeList = response.data.rows;
|
||||
|
|
@ -605,9 +605,18 @@ export default {
|
|||
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
const params = {
|
||||
keyWord: this.queryParams.keyWord,
|
||||
taskStatus: this.queryParams.taskStatus,
|
||||
startTime: this.queryParams.time && this.queryParams.time[0],
|
||||
endTime: this.queryParams.time && this.queryParams.time[1],
|
||||
pageSize: this.queryParams.pageSize,
|
||||
pageNum: this.queryParams.pageNum,
|
||||
statusList: this.queryParams.taskStatus ? [this.queryParams.taskStatus]:[1,2,3,4]
|
||||
};
|
||||
this.download(
|
||||
"/material/lease_apply_info/export",
|
||||
{ ...this.queryParams },
|
||||
{ ...params },
|
||||
`领料申请_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import Home from "./component/homeApply.vue"; // 主列表
|
|||
import AddTools from "./component/addToolsApply.vue"; // 新增机具 和 修改机具
|
||||
import QueryTools from "./component/queryToolsApply.vue"; // 查询机具 和 验收机具
|
||||
export default {
|
||||
name: "Apply",
|
||||
components: {
|
||||
Home,
|
||||
PageHeaderApply,
|
||||
|
|
|
|||
|
|
@ -559,6 +559,7 @@ import vueEasyPrint from 'vue-easy-print'
|
|||
// import chapter from '../../../../utils/chapter';
|
||||
import printJS from 'print-js'
|
||||
export default {
|
||||
name: 'OutBound',
|
||||
dicts: ['lease_task_status'],
|
||||
components: { vueEasyPrint },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -506,7 +506,7 @@ import Treeselect from '@riophae/vue-treeselect'
|
|||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
||||
export default {
|
||||
name: 'supplier',
|
||||
name: 'Protocol',
|
||||
dicts: ['branch_project'],
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -54,10 +54,11 @@
|
|||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="el-icon-upload2" size="mini" @click="handleSynch">检验报告同步</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table v-loading="loading" :data="deviceList" ref="multipleTable" row-key="teamId">
|
||||
<el-table v-loading="loading" :data="deviceList" ref="multipleTable" row-key="maId">
|
||||
<!-- <el-table-column type="selection" width="55" align="center" :reserve-selection="true" /> -->
|
||||
<el-table-column label="序号" align="center" width="80" type="index">
|
||||
<template slot-scope="scope">
|
||||
|
|
@ -69,12 +70,31 @@
|
|||
<el-table-column label="规格型号" align="center" prop="materialModel" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="设备编号" align="center" prop="maCode" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="设备状态" align="center" prop="statusName" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="固定资产编号" align="center" prop="assetsCode" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="设备原编号" align="center" prop="preCode" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="购置批次" align="center" prop="buyTask" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="固定资产编号" align="center" prop="assetsCode" width="200px" sortable show-overflow-tooltip >
|
||||
<template slot-scope="scope">
|
||||
<div style="display: flex; align-items: center; justify-content: center;">
|
||||
<el-input
|
||||
v-model="scope.row.assetsCode"
|
||||
placeholder="请输入"
|
||||
size="small"
|
||||
style="width: 80%; margin-right: 5px;"
|
||||
/>
|
||||
<el-button type="text" icon="el-icon-check" @click="handleAssetsCodeChange(scope.row)"></el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="设备原值" align="center" prop="buyPrice" sortable show-overflow-tooltip/>
|
||||
<el-table-column label="购置批次" align="center" prop="buyTask" sortable show-overflow-tooltip>
|
||||
<template slot-scope="{ row }">
|
||||
<span style="color:blue; cursor: pointer" @click="handleViewBuyTask(row)">
|
||||
{{ row.buyTask }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="绑定标签" align="center" prop="qrCode" sortable show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.qrCode!=null" style="color:blue" @click="handleViewQrCode(scope.row)">
|
||||
<span v-if="scope.row.qrCode!=null" style="color:blue; cursor: pointer" @click="handleViewQrCode(scope.row)">
|
||||
{{ "查看" }}
|
||||
</span>
|
||||
<span v-else>
|
||||
|
|
@ -82,7 +102,7 @@
|
|||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="所在仓库" align="center" prop="ownHouse" sortable show-overflow-tooltip/>
|
||||
<!-- <el-table-column label="所在仓库" align="center" prop="ownHouse" sortable show-overflow-tooltip/> -->
|
||||
<el-table-column label="操作" align="center" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -102,7 +122,7 @@
|
|||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
<!-- <el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
|
|
@ -110,7 +130,7 @@
|
|||
v-hasPermi="['ma:machine:remove']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -263,7 +283,7 @@
|
|||
<el-option
|
||||
v-for="keeper in KeeperOptions"
|
||||
:key="keeper.userId+''"
|
||||
:label="keeper.userName"
|
||||
:label="keeper.nickName"
|
||||
:value="keeper.userId+''"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
|
@ -281,7 +301,7 @@
|
|||
<el-option
|
||||
v-for="keeper in repairerOptions"
|
||||
:key="keeper.userId"
|
||||
:label="keeper.userName"
|
||||
:label="keeper.nickName"
|
||||
:value="keeper.userId+''"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
|
@ -327,22 +347,42 @@
|
|||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 检验报告同步对话框 -->
|
||||
<el-dialog :title="titleSynch" :visible.sync="openSynch" width="500px" append-to-body @close="cancelSynch">
|
||||
<el-form ref="formSynchParams" :model="formSynchParams" :inline="true">
|
||||
<el-form-item prop="reportCode">
|
||||
<el-input v-model="formSynchParams.reportCode" placeholder="请输入报告编号" maxlength="20" style="width: 340px"/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuerySynch">查询</el-button>
|
||||
</el-form-item>
|
||||
<div style="margin-top: 10px; height: 100px; text-align: center; ">
|
||||
<img v-if="formSynchParams.pdf" src="../../../../assets/img/pdf.png" alt="暂无图片" @click="downloadPdf" style="max-width: 100%; max-height: 100%;" />
|
||||
</div>
|
||||
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer" style="text-align: right">
|
||||
<el-button type="primary" @click="synchSubmit">同步</el-button>
|
||||
<el-button @click="cancelSynch">取消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getListDevice,getDeviceDetail,editDevice,addDevice,delDevice,getDeviceType,getZichanType } from "@/api/ma/device";
|
||||
import { getListDevice,getDeviceDetail,editDevice,addDevice,delDevice,getDeviceType,getZichanType,getSynchReportCode,synchReport,editAssetsCode } from "@/api/ma/device";
|
||||
import { getKeeperIds} from "@/api/ma/typeConfigKeeper";
|
||||
import { getRepairIds } from "@/api/ma/typeConfigRepair";
|
||||
import {
|
||||
getUserTypeList,
|
||||
} from "@/api/ma/base";
|
||||
import { downloadFile } from '@/utils/download'
|
||||
import { downloadFile, downloadFileData } from '@/utils/download'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import QRCode from 'qrcodejs2';
|
||||
import html2canvas from 'html2canvas';
|
||||
export default {
|
||||
name: "Post",
|
||||
name: "Device",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
@ -421,6 +461,10 @@
|
|||
// 表单参数
|
||||
form: {
|
||||
qrCode: "",
|
||||
keeperArr: [],
|
||||
repairerArr: [],
|
||||
keeperNameArr: [],
|
||||
repairerNameArr: [],
|
||||
},
|
||||
// 表单校验
|
||||
rules: {
|
||||
|
|
@ -433,7 +477,19 @@
|
|||
qrCode:"",
|
||||
qrcodeUrl: '',
|
||||
KeeperOptions: [],
|
||||
sortedKeeperOptions: [],
|
||||
repairerOptions: [],
|
||||
sortedRepairerOptions: [],
|
||||
|
||||
titleSynch: "", //检验报告同步标题
|
||||
openSynch: false, //检验报告同步
|
||||
synchLoading: false, //检验报告同步loading
|
||||
formSynchParams: { //检验报告同步表单
|
||||
reportCode: "", //检验报告编号
|
||||
pdf: "", //检验报告pdf
|
||||
pdfName: "", //检验报告pdf名称
|
||||
},
|
||||
dataSynch: {}, //检验报告同步数据
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
|
@ -543,32 +599,67 @@
|
|||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
// 固定资产录入
|
||||
handleAssetsCodeChange(row) {
|
||||
if (!row.assetsCode) {
|
||||
this.$message.error('请输入资产编号');
|
||||
}else{
|
||||
editAssetsCode(row).then(response => {
|
||||
this.$message.success('固定资产录入成功');
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
handleUpdate(row){
|
||||
this.reset()
|
||||
const maId = row.maId
|
||||
getDeviceDetail(maId).then((response) => {
|
||||
this.form = response.data;
|
||||
if (response.data.keeperId) {
|
||||
this.form.keeperArr = response.data.keeperId.split(',');
|
||||
} else {
|
||||
this.form.keeperArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
if (response.data.repairId) {
|
||||
this.form.repairerArr = response.data.repairId.split(',');
|
||||
} else {
|
||||
this.form.repairerArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
if (this.form.qrCode) {
|
||||
this.generateQRCode(this.form.qrCode);
|
||||
// 将生成的二维码转换为图片URL
|
||||
} else {
|
||||
this.qrcodeUrl = '';
|
||||
}
|
||||
this.showHouse = true
|
||||
this.title = '修改'
|
||||
})
|
||||
},
|
||||
handleUpdate(row){
|
||||
this.reset()
|
||||
const maId = row.maId
|
||||
getDeviceDetail(maId).then((response) => {
|
||||
this.form = response.data;
|
||||
if (response.data.keeperId) {
|
||||
const keeperIds = response.data.keeperId.split(',');
|
||||
// 根据 keeperIds 从 KeeperOptions 中获取对应的 keeper 对象
|
||||
const keepers = keeperIds.map((id) =>
|
||||
this.KeeperOptions.find((keeper) => keeper.userId + '' === id)
|
||||
).filter(Boolean); // 过滤掉可能不存在的 keeper
|
||||
|
||||
// 根据 keeperName 中文排序
|
||||
keepers.sort((a, b) =>
|
||||
a.nickName.localeCompare(b.nickName, 'zh-CN')
|
||||
);
|
||||
|
||||
// 提取排序后的 keeperId
|
||||
this.form.keeperArr = keepers.map((keeper) => keeper.userId + '');
|
||||
} else {
|
||||
this.form.keeperArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
if (response.data.repairId) {
|
||||
const repairerIds = response.data.repairId.split(',');
|
||||
// 根据 keeperIds 从 KeeperOptions 中获取对应的 keeper 对象
|
||||
const repairers = repairerIds.map((id) =>
|
||||
this.repairerOptions.find((repairer) => repairer.userId + '' === id)
|
||||
).filter(Boolean); // 过滤掉可能不存在的 keeper
|
||||
|
||||
// 根据 keeperName 中文排序
|
||||
repairers.sort((a, b) =>
|
||||
a.nickName.localeCompare(b.nickName, 'zh-CN')
|
||||
);
|
||||
|
||||
// 提取排序后的 keeperId
|
||||
this.form.repairerArr = repairers.map((repairer) => repairer.userId + '');
|
||||
} else {
|
||||
this.form.repairerArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
if (this.form.qrCode) {
|
||||
this.generateQRCode(this.form.qrCode);
|
||||
// 将生成的二维码转换为图片URL
|
||||
} else {
|
||||
this.qrcodeUrl = '';
|
||||
}
|
||||
this.showHouse = true
|
||||
this.title = '修改'
|
||||
})
|
||||
},
|
||||
|
||||
handleView(row){
|
||||
this.reset()
|
||||
|
|
@ -576,12 +667,36 @@
|
|||
getDeviceDetail(maId).then((response) => {
|
||||
this.form = response.data;
|
||||
if (response.data.keeperId) {
|
||||
this.form.keeperArr = response.data.keeperId.split(',');
|
||||
const keeperIds = response.data.keeperId.split(',');
|
||||
// 根据 keeperIds 从 KeeperOptions 中获取对应的 keeper 对象
|
||||
const keepers = keeperIds.map((id) =>
|
||||
this.KeeperOptions.find((keeper) => keeper.userId + '' === id)
|
||||
).filter(Boolean); // 过滤掉可能不存在的 keeper
|
||||
|
||||
// 根据 keeperName 中文排序
|
||||
keepers.sort((a, b) =>
|
||||
a.nickName.localeCompare(b.nickName, 'zh-CN')
|
||||
);
|
||||
|
||||
// 提取排序后的 keeperId
|
||||
this.form.keeperArr = keepers.map((keeper) => keeper.userId + '');
|
||||
} else {
|
||||
this.form.keeperArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
if (response.data.repairId) {
|
||||
this.form.repairerArr = response.data.repairId.split(',');
|
||||
const repairerIds = response.data.repairId.split(',');
|
||||
// 根据 keeperIds 从 KeeperOptions 中获取对应的 keeper 对象
|
||||
const repairers = repairerIds.map((id) =>
|
||||
this.repairerOptions.find((repairer) => repairer.userId + '' === id)
|
||||
).filter(Boolean); // 过滤掉可能不存在的 keeper
|
||||
|
||||
// 根据 keeperName 中文排序
|
||||
repairers.sort((a, b) =>
|
||||
a.nickName.localeCompare(b.nickName, 'zh-CN')
|
||||
);
|
||||
|
||||
// 提取排序后的 keeperId
|
||||
this.form.repairerArr = repairers.map((repairer) => repairer.userId + '');
|
||||
} else {
|
||||
this.form.repairerArr = []; // 如果不存在,设置为空数组
|
||||
}
|
||||
|
|
@ -692,7 +807,92 @@
|
|||
})
|
||||
}
|
||||
},
|
||||
handleViewBuyTask(row) {
|
||||
this.$router.push({
|
||||
path: '/purchase/goodsEntry',
|
||||
query: {
|
||||
buyTask: row.buyTask
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
//检验报告同步
|
||||
handleSynch(){
|
||||
this.titleSynch = "检验报告同步";
|
||||
this.openSynch = true;
|
||||
},
|
||||
|
||||
handleQuerySynch(){
|
||||
const params = {
|
||||
reportCode: this.formSynchParams.reportCode,
|
||||
}
|
||||
getSynchReportCode(params).then((response) => {
|
||||
let data = response.data;
|
||||
this.dataSynch = data;
|
||||
if(data.pdf){
|
||||
this.formSynchParams.pdf = data.pdf;
|
||||
this.formSynchParams.pdfName = data.reportName;
|
||||
}else{
|
||||
this.formSynchParams.pdf = "";
|
||||
this.formSynchParams.pdfName = "";
|
||||
this.$message.error('该报告编号暂无文件');
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
downloadPdf(){
|
||||
if (this.formSynchParams.pdf) {
|
||||
const link = document.createElement('a');
|
||||
link.href = this.formSynchParams.pdf;
|
||||
// 从 URL 中提取文件名,如果无法提取则使用默认文件名
|
||||
const fileName = this.formSynchParams.pdfName;
|
||||
link.download = fileName;
|
||||
// 设置在新页面打开
|
||||
link.target = '_blank';
|
||||
// 将链接添加到文档中
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 移除链接
|
||||
document.body.removeChild(link);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
cancelSynch(){
|
||||
this.openSynch = false;
|
||||
this.formSynchParams = { //检验报告同步表单
|
||||
reportCode: "", //检验报告编号
|
||||
pdf: "", //检验报告pdf
|
||||
pdfName: "", //检验报告pdf名称
|
||||
};
|
||||
this.dataSynch = {};
|
||||
},
|
||||
|
||||
//同步
|
||||
synchSubmit(){
|
||||
const params = {
|
||||
checkTimeSynch: this.dataSynch.checkTimeSynch,
|
||||
nextCheckTimeSynch: this.dataSynch.nextCheckTimeSynch,
|
||||
pdf: this.dataSynch.pdf,
|
||||
reportName: this.dataSynch.reportName,
|
||||
reportNum: this.dataSynch.reportNum,
|
||||
samples: this.dataSynch.samples,
|
||||
};
|
||||
|
||||
synchReport(params).then((response) => {
|
||||
if (response.code == 200) {
|
||||
this.$modal.msgSuccess(response.msg);
|
||||
this.openSynch = false;
|
||||
this.formSynchParams = {
|
||||
reportCode: "",
|
||||
pdf: "",
|
||||
pdfName: "",
|
||||
};
|
||||
this.dataSynch = {};
|
||||
}
|
||||
this.getList();
|
||||
})
|
||||
}
|
||||
|
||||
// handleExport() {
|
||||
// this.download('/material/ma_machine/export', {
|
||||
|
|
|
|||
|
|
@ -249,6 +249,7 @@ import {
|
|||
} from '@/api/ma/base'
|
||||
|
||||
export default {
|
||||
name: 'MechEquipConfigMgmt/index',
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -374,7 +374,7 @@ import Treeselect from "@riophae/vue-treeselect";
|
|||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
import IconSelect from "@/components/IconSelect";
|
||||
export default {
|
||||
name: "partType",
|
||||
name: "PartType",
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ import {
|
|||
} from "@/api/ma/base";
|
||||
|
||||
export default {
|
||||
name: "",
|
||||
name: "PriceHistory",
|
||||
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -243,7 +243,7 @@ export default {
|
|||
let queryTemp = this.queryParams;
|
||||
// queryTemp.level = 0;
|
||||
this.download(
|
||||
"/material/ma_type/export",
|
||||
"/material/ma_type/exportHistory",
|
||||
{
|
||||
...queryTemp,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="营业执照">
|
||||
<!-- <el-form-item label="营业执照">
|
||||
<el-upload
|
||||
class = "upload-demo"
|
||||
action="#"
|
||||
|
|
@ -192,7 +192,7 @@
|
|||
:on-remove="handleRemoveElectricianImgList"
|
||||
>
|
||||
|
||||
<!-- 文件格式下载,图片格式预览 -->
|
||||
|
||||
<div slot="file" slot-scope="{file}">
|
||||
<img v-if="isImage(file)" class="el-upload-list__item-thumbnail" :src="file.url" alt="">
|
||||
<div v-else class="picture-card-container" >
|
||||
|
|
@ -214,7 +214,7 @@
|
|||
|
||||
<i class="el-icon-plus avatar-uploader-icon" ></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
|
|
@ -238,7 +238,7 @@
|
|||
import {Base64} from 'js-base64'
|
||||
import { forEach } from 'jszip';
|
||||
export default {
|
||||
name: "supplier",
|
||||
name: "Supplier",
|
||||
data() {
|
||||
return {
|
||||
uploadKey: Date.now(),
|
||||
|
|
|
|||
|
|
@ -225,11 +225,11 @@
|
|||
<el-dialog
|
||||
:title="title"
|
||||
:visible.sync="open"
|
||||
width="1200px"
|
||||
width="1300px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="仓库信息">
|
||||
|
|
@ -305,6 +305,23 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="管理模式" prop="manageType">
|
||||
<el-select
|
||||
v-model="form.manageType"
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option value="0" label="编码管理">编码管理</el-option>
|
||||
<el-option value="1" label="数量管理">数量管理</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="计量单位" prop="unitName">
|
||||
<el-input
|
||||
|
|
@ -315,18 +332,6 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="排序" prop="sortNum">
|
||||
<el-input
|
||||
v-model.number="form.sortNum"
|
||||
type="number" :min="0" @input="(v)=>(form.sortNum=v.replace(/[^\d]/g,''))"
|
||||
placeholder="请输入排序"
|
||||
maxlength="10"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="计量数值" prop="unitValue">
|
||||
<el-select
|
||||
|
|
@ -344,9 +349,22 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="是否扣税" prop="isCharging">
|
||||
<el-select
|
||||
v-model="form.isCharging"
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option value="0" label="扣税">扣税</el-option>
|
||||
<el-option value="1" label="不扣税">不扣税</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<!-- <el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="总保有量" prop="name9">
|
||||
<el-input
|
||||
|
|
@ -416,40 +434,41 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-row> -->
|
||||
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="购置价(元/含税)"
|
||||
label="内部租赁价(元/天)"
|
||||
prop="leasePrice"
|
||||
label-width="140px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.leasePrice"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
type="number" :min="0"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="购置价(元/不含税)"
|
||||
prop="buyPrice"
|
||||
label-width="120px"
|
||||
label-width="140px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.buyPrice"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
type="number" :min="0"
|
||||
style="width: 170px"
|
||||
maxlength="20"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="购置价(元/不含税)"
|
||||
prop="name10"
|
||||
label-width="130px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.name10"
|
||||
placeholder="请输入"
|
||||
type="number" :min="0"
|
||||
maxlength="20"
|
||||
style="width: 160px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<!-- <el-col :span="6">
|
||||
<el-form-item label="赔偿价(元)" prop="payPrice" label-width="120px">
|
||||
<el-input
|
||||
v-model="form.payPrice"
|
||||
|
|
@ -459,44 +478,27 @@
|
|||
style="width: 170px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="外部租赁价(元/天)"
|
||||
prop="rentPrice"
|
||||
label-width="120px"
|
||||
label-width="140px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.rentPrice"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
type="number" :min="0"
|
||||
style="width: 160px"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="内部租赁价(元/天)"
|
||||
prop="leasePrice"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.leasePrice"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
type="number" :min="0"
|
||||
style="width: 160px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否试验" prop="isTest">
|
||||
<el-select
|
||||
v-model="form.isTest"
|
||||
|
|
@ -504,43 +506,26 @@
|
|||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option value="0" label="未试验">未试验</el-option>
|
||||
<el-option value="1" label="已试验">已试验</el-option>
|
||||
<el-option value="0" label="否">否</el-option>
|
||||
<el-option value="1" label="是">是</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="管理模式" prop="manageType">
|
||||
<el-select
|
||||
v-model="form.manageType"
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option value="0" label="编码管理">编码管理</el-option>
|
||||
<el-option value="1" label="数量管理">数量管理</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="是否扣税" prop="isCharging">
|
||||
<el-select
|
||||
v-model="form.isCharging"
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option value="0" label="扣税">扣税</el-option>
|
||||
<el-option value="1" label="不扣税">不扣税</el-option>
|
||||
</el-select>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="排序" prop="sortNum">
|
||||
<el-input
|
||||
v-model.number="form.sortNum"
|
||||
type="number" :min="0" @input="(v)=>(form.sortNum=v.replace(/[^\d]/g,''))"
|
||||
placeholder="请输入排序"
|
||||
maxlength="10"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="检验周期(月)" prop="testCycle">
|
||||
<el-input
|
||||
v-model="form.testCycle"
|
||||
|
|
@ -551,56 +536,58 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="抽检比例(%)" prop="name11">
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="抽检比例(%)" prop="samplingRatio">
|
||||
<el-input
|
||||
v-model="form.name11"
|
||||
v-model="form.samplingRatio"
|
||||
type="number" :min="0"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
style="width: 170px"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="核定载荷(T/MPa)"
|
||||
prop="ratedLoad"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.ratedLoad"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="核定载荷(T/MPa)"
|
||||
prop="ratedLoad"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.ratedLoad"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
style="width: 160px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="试验载荷(T/MPa)"
|
||||
prop="testLoad"
|
||||
label-width="130px"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.testLoad"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
style="width: 160px"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="持荷时间(分)" prop="holdingTime">
|
||||
<el-input
|
||||
v-model="form.holdingTime"
|
||||
type="number" :min="0"
|
||||
placeholder="请输入"
|
||||
maxlength="20"
|
||||
style="width: 170px"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -727,7 +714,7 @@ import { getRepairIds } from "@/api/ma/typeConfigRepair";
|
|||
import { imgUpLoad } from "@/api/system/upload";
|
||||
|
||||
export default {
|
||||
name: "ToolsType",
|
||||
name: "Type",
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -818,6 +805,34 @@ export default {
|
|||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
manageType: [
|
||||
{
|
||||
required: true,
|
||||
message: "管理模式不能为空",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
unitName: [
|
||||
{
|
||||
required: true,
|
||||
message: "计量单位不能为空",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
buyPrice: [
|
||||
{
|
||||
required: true,
|
||||
message: "购置价不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
leasePrice: [
|
||||
{
|
||||
required: true,
|
||||
message: "内部租赁价不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
]
|
||||
},
|
||||
companyId: undefined,
|
||||
dialogImageUrl: "",
|
||||
|
|
@ -1186,38 +1201,18 @@ export default {
|
|||
this.levelTemp = data.level;
|
||||
this.idTemp = data.id;
|
||||
console.log("dataAdd", data);
|
||||
console.log("idTemp", data);
|
||||
if (data.level === 3) {
|
||||
this.reset();
|
||||
Object.assign(this.form, data);
|
||||
|
||||
// 修改这部分代码,添加空值判断
|
||||
if (this.treeOptions && this.treeOptions[0] && this.treeOptions[0].children) {
|
||||
this.treeTemp = this.treeOptions[0].children;
|
||||
// 初始化层级信息
|
||||
this.level0TempName = '';
|
||||
this.level1TempName = '';
|
||||
this.level2TempName = '';
|
||||
|
||||
// 使用可选链操作符来避免undefined错误
|
||||
this.treeTemp?.forEach((item) => {
|
||||
item.children?.forEach((itemTemp) => {
|
||||
if (itemTemp.level == 2 && itemTemp.id == data.parentId) {
|
||||
this.level2Temp = itemTemp.id;
|
||||
this.level2TempName = itemTemp.label;
|
||||
this.level1Temp = itemTemp.parentId;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 同样添加空值判断
|
||||
this.treeTemp?.forEach((item) => {
|
||||
if (item.level == 1 && item.id == this.level1Temp) {
|
||||
this.level1TempName = item.label;
|
||||
}
|
||||
});
|
||||
|
||||
this.treeTemp?.forEach((item) => {
|
||||
if (item.level == 0 && item.id == data.houseId) {
|
||||
this.level0TempName = item.label;
|
||||
}
|
||||
});
|
||||
// 递归查找层级信息
|
||||
if (this.treeOptions && this.treeOptions.length > 0) {
|
||||
this.findLevelInfo(this.treeOptions, data);
|
||||
}
|
||||
|
||||
this.isLevel1Disabled = true;
|
||||
|
|
@ -1238,6 +1233,39 @@ export default {
|
|||
this.addTitleVisible = true;
|
||||
}
|
||||
},
|
||||
|
||||
// 递归查找层级信息的方法
|
||||
findLevelInfo(nodes, targetData) {
|
||||
for (const node of nodes) {
|
||||
if (node.level === 0 && node.id === targetData.houseId) {
|
||||
this.level0TempName = node.label;
|
||||
}
|
||||
if (node.level === 2 && node.id === targetData.parentId) {
|
||||
this.level2TempName = node.label;
|
||||
// 递归查找 level 为 1 的父节点
|
||||
if (node.parentId !== undefined) {
|
||||
this.findLevel1Info(this.treeOptions, node.parentId);
|
||||
}
|
||||
}
|
||||
if (node.children && node.children.length > 0) {
|
||||
this.findLevelInfo(node.children, targetData);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 递归查找 level 为 1 的节点信息
|
||||
findLevel1Info(nodes, parentId) {
|
||||
for (const node of nodes) {
|
||||
if (node.level === 1 && node.id === parentId) {
|
||||
this.level1TempName = node.label;
|
||||
break;
|
||||
}
|
||||
if (node.children && node.children.length > 0) {
|
||||
this.findLevel1Info(node.children, parentId);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* 树节点删除 */
|
||||
removeTreeNode(data) {
|
||||
// this.$message.success('删除--')
|
||||
|
|
@ -1386,7 +1414,7 @@ export default {
|
|||
font-size: 14px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
line-height: 1.5;
|
||||
// line-height: 1.5;
|
||||
}
|
||||
|
||||
// 输入框文字样式
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ import { getUserList } from "@/api/basic/basic";
|
|||
import { getInfo } from "@/api/login";
|
||||
import { downloadFile } from "@/utils/download";
|
||||
export default {
|
||||
name: "typeConfig",
|
||||
name: "TypeConfigKeeper",
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -329,6 +329,7 @@ export default {
|
|||
pageSize: 1000,
|
||||
displayBindRelationship: true,
|
||||
houseId: "",
|
||||
keyword: "",
|
||||
// phonenumber: undefined,
|
||||
// status: undefined,
|
||||
// typeId: undefined
|
||||
|
|
@ -539,10 +540,22 @@ export default {
|
|||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.queryParams.typeId = undefined;
|
||||
this.queryParams.userId = undefined;
|
||||
this.queryParams.pageNum = 1;
|
||||
this.queryParams.pageSize = 1000;
|
||||
this.queryParams.level = 0;
|
||||
this.queryParams.level = 1;
|
||||
this.$refs.tree.setCurrentKey(null);
|
||||
this.$refs.treeTwo.setCurrentKey(null);
|
||||
if (
|
||||
this.treeOptionsTwo.length > 0 &&
|
||||
this.treeOptionsTwo[0].children.length > 0
|
||||
) {
|
||||
const firstNode = this.treeOptionsTwo[0].children[0];
|
||||
this.queryParams.typeId = firstNode.id;
|
||||
this.queryParams.level = 1;
|
||||
this.queryParams.houseId = firstNode.houseId;
|
||||
this.getList();
|
||||
}
|
||||
this.handleQuery();
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ import { getUserList } from "@/api/basic/basic";
|
|||
import { getInfo } from "@/api/login";
|
||||
import { downloadFile } from "@/utils/download";
|
||||
export default {
|
||||
name: "typeConfig",
|
||||
name: "TypeConfigRepair",
|
||||
components: { Treeselect },
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ import { deptTreeSelect } from "@/api/system/user";
|
|||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
name: "whHouse",
|
||||
name: "WhHouse",
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ import { getPartTypeCheckInfo,getPartTypeFileList } from '@/api/part/partArrived
|
|||
import { downloadFile } from "@/utils/download";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
name: "AcceptDetail",
|
||||
name: "PartAcceptDetail",
|
||||
dicts: ["purchase_task_status"],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ import vueEasyPrint from "vue-easy-print";
|
|||
import { downloadFile } from '@/utils/download'
|
||||
import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
name: "PartAcceptList",
|
||||
name: "PartAccept",
|
||||
dicts: ['part_task_status'],
|
||||
components: { vueEasyPrint },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -288,7 +288,7 @@ import { getPartTypeCheckInfo,getPartTypeFileList } from '@/api/part/partArrived
|
|||
import { downloadFile } from "@/utils/download";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
name: "AcceptDetail",
|
||||
name: "PartAcceptDetailTwo",
|
||||
dicts: ["purchase_task_status"],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ import vueEasyPrint from "vue-easy-print";
|
|||
import { downloadFile } from '@/utils/download'
|
||||
import { getToken } from '@/utils/auth'
|
||||
export default {
|
||||
name: "PartAcceptList",
|
||||
name: "PartAcceptTwo",
|
||||
dicts: ['part_task_status'],
|
||||
components: { vueEasyPrint },
|
||||
data() {
|
||||
|
|
|
|||
|
|
@ -369,6 +369,11 @@
|
|||
<el-form-item label="通知内容:" prop="remark" label-width="100px">
|
||||
<el-input v-model="form.remark" type="textarea" maxlength="100" :autosize="{ minRows: 3, maxRows: 6 }" placeholder="请输入通知内容" style="width: 450px"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="人员名称:" prop="userName" label-width="100px">
|
||||
<el-input v-model="form.userName" placeholder="请输入人员名称" style="width: 240px; margin-right: 10px"/>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="getNoticeList">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetDiaQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -395,6 +400,13 @@
|
|||
|
||||
<!-- 人员添加 -->
|
||||
<el-dialog title="人员添加" :visible.sync="peopleOpen" v-if="peopleOpen" width="1000px" append-to-body>
|
||||
<el-form :model="userForm" size="small" inline>
|
||||
<el-form-item label="人员名称:" prop="userName" label-width="100px">
|
||||
<el-input v-model="userForm.userName" placeholder="请输入人员名称" style="width: 240px; margin-right: 10px"/>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="getAllUserList">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="restUser">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionAddUser" height="450">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column label="序号" align="center" type="index" />
|
||||
|
|
@ -484,6 +496,8 @@ export default {
|
|||
},
|
||||
form: {
|
||||
remark: "",
|
||||
taskId: "",
|
||||
userName: "",
|
||||
},
|
||||
// 表单校验
|
||||
rules: {
|
||||
|
|
@ -491,6 +505,9 @@ export default {
|
|||
{ required: true, message: "通知内容不能为空", trigger: "blur" },
|
||||
],
|
||||
},
|
||||
userForm: {
|
||||
userName: "",
|
||||
},
|
||||
openPrint: false,
|
||||
printData: {},
|
||||
printDataSign: {},
|
||||
|
|
@ -665,23 +682,31 @@ export default {
|
|||
},
|
||||
getNoticeList() {
|
||||
const taskId = this.form.taskId;
|
||||
getNoticePeople({ taskId: taskId }).then((response) => {
|
||||
getNoticePeople({ taskId: taskId, userName: this.form.userName }).then((response) => {
|
||||
this.getListPeople = response.rows;
|
||||
this.showPeople = true;
|
||||
this.loadingTwo = false;
|
||||
this.title = "通知";
|
||||
});
|
||||
},
|
||||
resetDiaQuery() {
|
||||
this.form.userName = ""
|
||||
this.getNoticeList();
|
||||
},
|
||||
addUserOpen() {
|
||||
this.getAllUserList();
|
||||
this.peopleOpen = true;
|
||||
},
|
||||
/** 查询所有用户列表--可添加人员 */
|
||||
getAllUserList() {
|
||||
getListUnSelected().then((response) => {
|
||||
getListUnSelected({userName: this.userForm.userName}).then((response) => {
|
||||
this.userList = response.rows;
|
||||
});
|
||||
},
|
||||
restUser() {
|
||||
this.userForm.userName = "";
|
||||
this.getAllUserList();
|
||||
},
|
||||
|
||||
// 多选框选中-添加人员
|
||||
handleSelectionAddUser(selection) {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import Home from "./component/home.vue"; // 主列表
|
|||
import AddTools from './component/addTools.vue' // 新增配件新购 和 修改配件新购
|
||||
import QueryTools from './component/queryTools.vue' // 查询配件新购
|
||||
export default {
|
||||
name: "PartArrived",
|
||||
components: {
|
||||
Home,
|
||||
PageHeader,
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import Home from "./component/homeApply.vue"; // 主列表
|
|||
import AddTools from "./component/addToolsApply.vue"; // 新增 和 修改
|
||||
import QueryTools from "./component/queryToolsApply.vue"; // 查询
|
||||
export default {
|
||||
name: "PartLease",
|
||||
components: {
|
||||
Home,
|
||||
PageHeaderApply,
|
||||
|
|
|
|||