From c7d99f5e11c4cf0667f67b8170e1c585db2e2016 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期六, 08 二月 2025 15:34:15 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1
---
admin/src/views/contract/components/pendingBills.vue | 4
admin/src/views/stock/components/inventoryDetails.vue | 34 ++++-
admin/public/template/material.xlsx | 0
admin/src/views/project/components/houseDetails.vue | 135 +++++++++++----------
admin/src/views/finance/collectionSettings.vue | 58 ++++++---
admin/src/api/ywMaterial.js | 13 ++
admin/src/views/operation/components/deviceEdit.vue | 18 +-
admin/src/views/stock/assetList.vue | 48 +++++++
admin/src/api/ywStocktaking.js | 8 +
admin/src/views/stock/asset.vue | 2
admin/src/views/stock/query.vue | 7 +
admin/src/api/store/index.js | 3
12 files changed, 224 insertions(+), 106 deletions(-)
diff --git a/admin/public/template/material.xlsx b/admin/public/template/material.xlsx
new file mode 100644
index 0000000..2c7b158
--- /dev/null
+++ b/admin/public/template/material.xlsx
Binary files differ
diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js
index 03aac7a..09260a5 100644
--- a/admin/src/api/store/index.js
+++ b/admin/src/api/store/index.js
@@ -41,6 +41,7 @@
}
export function ywOutinboundRecordEx (data) {
return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, {
- trim: true
+ trim: true,
+ download: true
})
}
diff --git a/admin/src/api/ywMaterial.js b/admin/src/api/ywMaterial.js
index e7da119..92e8655 100644
--- a/admin/src/api/ywMaterial.js
+++ b/admin/src/api/ywMaterial.js
@@ -26,3 +26,16 @@
export function deleteById (id) {
return request.get(`/visitsAdmin/cloudService/business/ywMaterial/delete/${id}`)
}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
+// 瀵煎叆妯℃澘
+export function importMaterialBatch (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywMaterial/importMaterialBatch', data)
+}
diff --git a/admin/src/api/ywStocktaking.js b/admin/src/api/ywStocktaking.js
index 00c5235..8eb6fb9 100644
--- a/admin/src/api/ywStocktaking.js
+++ b/admin/src/api/ywStocktaking.js
@@ -37,6 +37,14 @@
return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/finishById?id=${id}`)
}
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/visitsAdmin/cloudService/business/ywStocktakingRecord/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
// 鏌ヨ
export function ywStocktakingRecordPage (data) {
return request.post('/visitsAdmin/cloudService/business/ywStocktakingRecord/page', data, {
diff --git a/admin/src/views/contract/components/pendingBills.vue b/admin/src/views/contract/components/pendingBills.vue
index a068377..14b3358 100644
--- a/admin/src/views/contract/components/pendingBills.vue
+++ b/admin/src/views/contract/components/pendingBills.vue
@@ -34,7 +34,7 @@
border
style="width: 100%">
<el-table-column
- prop="date"
+ prop="code"
label="璐﹀崟缂栧彿">
</el-table-column>
<el-table-column
@@ -75,7 +75,7 @@
</template>
</el-table-column>
<el-table-column
- prop="actPayDate"
+ prop="btDate"
label="搴旀敹/浠樻棩鏈�">
</el-table-column>
</el-table>
diff --git a/admin/src/views/finance/collectionSettings.vue b/admin/src/views/finance/collectionSettings.vue
index 9a1ec04..fce513d 100644
--- a/admin/src/views/finance/collectionSettings.vue
+++ b/admin/src/views/finance/collectionSettings.vue
@@ -20,28 +20,41 @@
<el-tooltip style="margin-right: 10px; margin-top: 10px; flex-shrink: 0;" effect="dark" content="鍖呭惈绉熻祦璐广�佺墿涓氳垂銆佺璧佹娂閲戙�佺墿涓氭娂閲�" placement="bottom-start">
<i class="el-icon-question"></i>
</el-tooltip>
- <el-upload
- style="flex: 1;"
- class="upload-demo"
- :action="uploadImgUrl"
- :data="uploadData"
- :on-success="uploadAvatarSuccess"
- :on-remove="handleRemove"
- :file-list="form.leaseTemp">
- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- </el-upload>
+ <div style="display: flex; align-items: center;">
+ <el-button type="text" v-for="(item, index) in form.leaseTemp" :key="index" style="margin-right: 10px;" @click="openFile(item.url)">{{item.name}}</el-button>
+ <el-upload
+ class="upload-demo"
+ :action="uploadImgUrl"
+ :data="uploadData"
+ :on-success="uploadAvatarSuccess"
+ :on-remove="handleRemove">
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </div>
+<!-- <el-upload-->
+<!-- style="flex: 1;"-->
+<!-- class="upload-demo"-->
+<!-- :action="uploadImgUrl"-->
+<!-- :data="uploadData"-->
+<!-- :on-success="uploadAvatarSuccess"-->
+<!-- :on-remove="handleRemove"-->
+<!-- :file-list="form.leaseTemp">-->
+<!-- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>-->
+<!-- </el-upload>-->
</div>
</el-form-item>
<el-form-item label="鍏朵粬閫氱煡鍗曟ā鏉�">
- <el-upload
- class="upload-demo"
- :action="uploadImgUrl"
- :data="uploadData"
- :on-success="uploadAvatarSuccess1"
- :on-remove="handleRemove1"
- :file-list="form.otherTemp">
- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- </el-upload>
+ <div style="display: flex; align-items: center;">
+ <el-button type="text" v-for="(item, index) in form.otherTemp" :key="index" style="margin-right: 10px;" @click="openFile(item.url)">{{item.name}}</el-button>
+ <el-upload
+ class="upload-demo"
+ :action="uploadImgUrl"
+ :data="uploadData"
+ :on-success="uploadAvatarSuccess1"
+ :on-remove="handleRemove1">
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submit" :disabled="loading" :loading="loading">淇濆瓨</el-button>
@@ -93,6 +106,9 @@
this.loading = false
})
},
+ openFile(url) {
+ window.open(url)
+ },
handleRemove(e) {
this.form.leaseTemp = []
},
@@ -112,8 +128,8 @@
.then(res => {
this.form.smsTemp = res.smsTemp
this.form.emailTemp = res.emailTemp
- this.form.leaseTemp = [{ url: res.leaseTemp.url, name: res.leaseTemp.title }]
- this.form.otherTemp = [{ url: res.otherTemp.url, name: res.otherTemp.title }]
+ this.form.leaseTemp = [{ url: res.leaseTemp.url, ...res.leaseTemp, name: res.leaseTemp.title }]
+ this.form.otherTemp = [{ url: res.otherTemp.url, ...res.otherTemp, name: res.otherTemp.title }]
})
}
}
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 1abaeb7..f727966 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -325,13 +325,17 @@
detailById(id).then(res => {
this.param = res
this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
- this.param.multifileList = res.multifileList.map(item => {
- return {
- ...item,
- createUserName: item.userName,
- createTime: item.createDate
- }
- })
+ console.log(this.param.rooms)
+ if (res.multifileList && res.multifileList.length > 0) {
+ this.param.multifileList = res.multifileList.map(item => {
+ return {
+ ...item,
+ createUserName: item.userName,
+ createTime: item.createDate
+ }
+ })
+ }
+ this.changeProject()
this.getHouseTree()
const cateId = this.param.cateId || ''
setTimeout(() => {
diff --git a/admin/src/views/project/components/houseDetails.vue b/admin/src/views/project/components/houseDetails.vue
index 98310e9..634af23 100644
--- a/admin/src/views/project/components/houseDetails.vue
+++ b/admin/src/views/project/components/houseDetails.vue
@@ -121,10 +121,6 @@
label="绛捐鏃�">
</el-table-column>
<el-table-column
- prop="address"
- label="鍚堝悓鏉ユ簮">
- </el-table-column>
- <el-table-column
label="鍚堝悓鐘舵��">
<template slot-scope="{row}">
<span class="primaryColor" v-if="row.status === 0">寰呮墽琛�</span>
@@ -254,10 +250,14 @@
<div class="xm">
<div class="xm_chat">
<el-card class="xm_chat_row">
- <div id="chat1"></div>
+ <div class="xm_chat_row_info">
+ <span>鎬昏</span>
+ <span>{{amount}}</span>
+ </div>
+ <div id="chat1" v-if="activeName === 'third'"></div>
</el-card>
<el-card class="xm_chat_row">
- <div id="chat2"></div>
+ <div id="chat2" v-if="activeName === 'third'"></div>
</el-card>
</div>
<el-card style="margin-top: 20px;">
@@ -387,7 +387,8 @@
categaryList: [],
deviceList: [],
showDetail: false,
- showEdit1: false
+ showEdit1: false,
+ amount: 0
}
},
methods: {
@@ -408,6 +409,7 @@
this.$refs.EditRef.param.rooms = [this.info.projectId, this.info.buildingId, this.info.floor, this.info.id]
this.$refs.EditRef.isShowModal = true
this.$refs.EditRef.changeProject()
+ this.$refs.EditRef.getHouseVal([this.info.projectId, this.info.buildingId, this.info.floor, this.info.id])
})
},
handleDetail(row) {
@@ -435,6 +437,7 @@
{ value: res.exceptionAmount || 0, name: '寮傚父' },
{ value: res.errAmount || 0, name: '鎶ュ簾' }
]
+ this.amount = res.amount
this.reand()
})
})
@@ -582,13 +585,7 @@
{
name: '璁惧鐘舵��',
type: 'pie',
- radius: ['40%', '80%'],
- label: {
- show: true,
- position: 'center',
- fontWeight: 'bold',
- fontSize: 22
- },
+ radius: ['50%', '80%'],
data: this.deviceList
}
]
@@ -599,51 +596,24 @@
var chartDom = document.getElementById('chat2');
var myChart = echarts.init(chartDom);
var option;
- const rawData = [
- [100, 302, 301, 334, 390, 330, 320],
- [320, 132, 101, 134, 90, 230, 210],
- [220, 182, 191, 234, 290, 330, 310],
- [150, 212, 201, 154, 190, 330, 410],
- [820, 832, 901, 934, 1290, 1330, 1320]
- ];
- const totalData = [];
- for (let i = 0; i < rawData[0].length; ++i) {
- let sum = 0;
- for (let j = 0; j < rawData.length; ++j) {
- sum += rawData[j][i];
- }
- totalData.push(sum);
- }
- const series = [
- 'Direct',
- 'Mail Ad',
- 'Affiliate Ad',
- 'Video Ad',
- 'Search Engine'
- ].map((name, sid) => {
- return {
- name,
- type: 'bar',
- stack: 'total',
- barWidth: '60%',
- data: rawData[sid].map((d, did) =>
- totalData[did] <= 0 ? 0 : d / totalData[did]
- )
- };
- });
- let seriesArr = this.categaryList.map(item => {
- return {
- name: item.cateName,
- type: 'bar',
- stack: 'total',
- barWidth: '60%',
- data: item.ywDeviceCateDataVOList.map((child) =>
- child.deviceAmount
- )
- }
+ let seriesArr = []
+ this.categaryList.forEach((one, index) => {
+ one.ywDeviceCateDataVOList.forEach(two => {
+ let data = []
+ this.categaryList.forEach(item => {
+ data.push(0)
+ })
+ data[index] = two.deviceAmount
+ seriesArr.push({
+ name: two.cateName,
+ type: 'bar',
+ barGap:-1,
+ stack: one.cateName,
+ data
+ })
+ })
})
let xAxisData = this.categaryList.map(item => item.cateName)
- console.log(series)
console.log(seriesArr)
console.log(xAxisData)
option = {
@@ -660,15 +630,30 @@
trigger: 'axis',
axisPointer: {
type: 'shadow'
+ },
+ formatter: params => {
+ var res = `${params[0].name} <br/>`
+ for (const item of params) {
+ if (item.value !== 0) {
+ res += `<span style="background: ${item.color}; height:10px; width: 10px; border-radius: 50%;display: inline-block;margin-right:10px;"></span> ${item.seriesName} 锛�${item.value}<br/>`
+ }
+ }
+ return res
}
},
- yAxis: {
- type: 'value'
- },
- xAxis: {
- type: 'category',
- data: xAxisData
- },
+ xAxis: [
+ {
+ type: 'category',
+ position: 'bottom',
+ data: xAxisData
+ }
+ ],
+ yAxis: [
+ {
+ type: 'value',
+ data: Array.from({ length: 100 }, (_, i) => i + 1)
+ }
+ ],
series: seriesArr
};
@@ -870,6 +855,28 @@
.xm_chat_row {
width: 49%;
height: 300px;
+ position: relative;
+ .xm_chat_row_info {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ span {
+ &:nth-child(1) {
+ font-size: 20px;
+ color: #222222;
+ }
+ &:nth-child(2) {
+ font-size: 28px;
+ color: #222222;
+ font-weight: bold;
+ }
+ }
+ }
#chat1 {
width: 100%;
height: 260px;
diff --git a/admin/src/views/stock/asset.vue b/admin/src/views/stock/asset.vue
index 8f78846..787f8af 100644
--- a/admin/src/views/stock/asset.vue
+++ b/admin/src/views/stock/asset.vue
@@ -111,7 +111,7 @@
},
changeStatus(e, row) {
updateStatusById({ id: row.id, status: e })
- .then(res => {
+ .finally(() => {
this.getList()
})
},
diff --git a/admin/src/views/stock/assetList.vue b/admin/src/views/stock/assetList.vue
index 90214cc..02bbe42 100644
--- a/admin/src/views/stock/assetList.vue
+++ b/admin/src/views/stock/assetList.vue
@@ -3,8 +3,16 @@
<QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
<div class="mt20">
<el-button type="primary" @click="$refs.newMaterial.open('鏂板缓鐗╂枡')">娣诲姞</el-button>
- <el-button>瀵煎嚭</el-button>
- <el-button>瀵煎叆</el-button>
+ <el-button @click="exportExcel">瀵煎嚭</el-button>
+ <el-popover
+ placement="right"
+ trigger="click">
+ <div style="display: flex; align-items: center; justify-content: center;">
+ <el-button type="primary" @click="$refs.uploadFile.click()">瀵煎叆妯℃澘</el-button>
+ <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+ </div>
+ <el-button style="margin-left: 10px;" slot="reference">瀵煎叆</el-button>
+ </el-popover>
</div>
<el-table v-loading="loading" :data="list" stripe>
<el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100" show-overflow-tooltip />
@@ -38,6 +46,7 @@
<Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
</div>
<newMaterial ref="newMaterial" @success="getList" />
+ <input type="file" ref="uploadFile" @change="importTemplate" accept=".xlsx" style="position: fixed; top: -100px;" />
</div>
</template>
@@ -48,7 +57,7 @@
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
-import { fetchList, updateStatus, deleteById } from '@/api/ywMaterial'
+import { fetchList, updateStatus, deleteById, exportExcel, importMaterialBatch } from '@/api/ywMaterial'
export default {
components: {
Pagination,
@@ -87,6 +96,39 @@
this.getList()
},
methods: {
+ // 瀵煎嚭妯℃澘
+ exportTemplate () {
+ window.open('/template/material.xlsx')
+ },
+ // 瀵煎叆妯℃澘
+ importTemplate(e) {
+ const FormDate = new FormData()
+ FormDate.append('file', e.target.files[0])
+ importMaterialBatch(FormDate)
+ .then(res => {
+ this.getList()
+ })
+ .finally(() => {
+ this.$refs.uploadFile.value = null
+ })
+ },
+ exportExcel () {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ exportExcel({
+ page: this.pagination.page,
+ capacity: 1000000,
+ model: this.filters
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ })
+ .catch(() => {})
+ },
getList(page) {
const { pagination, filters } = this
this.loading = true
diff --git a/admin/src/views/stock/components/inventoryDetails.vue b/admin/src/views/stock/components/inventoryDetails.vue
index c5b03c4..b5e7a9b 100644
--- a/admin/src/views/stock/components/inventoryDetails.vue
+++ b/admin/src/views/stock/components/inventoryDetails.vue
@@ -39,7 +39,7 @@
<el-input v-model="form.materialCode" style="width: 200px; margin-right: 10px;" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜"></el-input>
<el-select v-model="form.status" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣鐘舵��">
<el-option label="宸茬洏" :value="1"></el-option>
- <el-option label="鏈洏" :value="0"></el-option>
+ <el-option label="鏈洏" :value="2"></el-option>
</el-select>
<el-select v-model="form.type" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣缁撴灉">
<el-option label="璐﹀疄鐩哥" :value="0"></el-option>
@@ -48,7 +48,7 @@
</el-select>
<el-button type="primary" @click="getList">鏌ヨ</el-button>
<el-button @click="clear">娓呯┖</el-button>
- <el-button>瀵煎嚭</el-button>
+ <el-button @click="exportExcel">瀵煎嚭</el-button>
</div>
<div class="list_search_right">
<span>宸茬洏:{{info.finishAmount || 0}}</span>
@@ -60,8 +60,8 @@
</div>
<div style="width: 100%; margin: 20px 0;">
<el-table :data="list" stripe>
- <el-table-column prop="materialCode" label="璧勪骇缂栫爜" show-overflow-tooltip />
- <el-table-column prop="materialName" label="璧勪骇鍚嶇О" show-overflow-tooltip />
+ <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip />
+ <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip />
<el-table-column prop="materialQrcode" label="鏉$爜" show-overflow-tooltip />
<el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip />
<el-table-column prop="materialAttr" label="瑙勬牸鍨嬪彿" show-overflow-tooltip />
@@ -70,8 +70,8 @@
<el-table-column prop="stock" label="璐﹂潰鏁伴噺" show-overflow-tooltip />
<el-table-column label="鐩樼偣鏁伴噺" show-overflow-tooltip>
<template slot-scope="{row}">
- <span style="color: red;" v-if="row.type === 1">{{row.actStock}}</span>
- <span style="color: green;" v-else-if="row.type === 2">{{row.actStock}}</span>
+ <span style="color: green;" v-if="row.type === 1">{{row.actStock}}</span>
+ <span style="color: red;" v-else-if="row.type === 2">{{row.actStock}}</span>
<span v-else>{{row.actStock}}</span>
</template>
</el-table-column>
@@ -97,7 +97,7 @@
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseOpera from '@/components/base/BaseOpera'
- import { ywStocktakingRecordPage, getById } from '@/api/ywStocktaking'
+ import { ywStocktakingRecordPage, getById, exportExcel } from '@/api/ywStocktaking'
export default {
name: "inventoryDetails",
components: {
@@ -120,6 +120,26 @@
}
},
methods: {
+ exportExcel () {
+ this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+ .then(() => {
+ exportExcel({
+ page: this.page,
+ capacity: 1000000,
+ model: {
+ ...this.form,
+ stocktakingId: this.id
+ }
+ })
+ .then(response => {
+ this.download(response)
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ })
+ .catch(() => {})
+ },
handleSizeChange(size) {
this.pageSize = size
this.getList()
diff --git a/admin/src/views/stock/query.vue b/admin/src/views/stock/query.vue
index d5d750f..d36de1e 100644
--- a/admin/src/views/stock/query.vue
+++ b/admin/src/views/stock/query.vue
@@ -26,6 +26,7 @@
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { ywStockPage,ywStockPageEx } from '@/api/store/index'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
export default {
components: {
Pagination,
@@ -67,8 +68,14 @@
},
created() {
this.getList()
+ this.initData()
},
methods: {
+ initData() {
+ getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+ this.queryFormConfig.formItems[0].options = res.records || []
+ })
+ },
getList(page) {
const { pagination, filters } = this
this.loading = true
--
Gitblit v1.9.3