Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1
| | |
| | | } |
| | | export function ywOutinboundRecordEx (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, { |
| | | trim: true |
| | | trim: true, |
| | | download: true |
| | | }) |
| | | } |
| | |
| | | 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) |
| | | } |
| | |
| | | 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, { |
| | |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="date" |
| | | prop="code" |
| | | label="账单编号"> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="actPayDate" |
| | | prop="btDate" |
| | | label="应收/付日期"> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <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> |
| | |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | openFile(url) { |
| | | window.open(url) |
| | | }, |
| | | handleRemove(e) { |
| | | this.form.leaseTemp = [] |
| | | }, |
| | |
| | | .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 }] |
| | | }) |
| | | } |
| | | } |
| | |
| | | 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(() => { |
| | |
| | | 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> |
| | |
| | | <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;"> |
| | |
| | | categaryList: [], |
| | | deviceList: [], |
| | | showDetail: false, |
| | | showEdit1: false |
| | | showEdit1: false, |
| | | amount: 0 |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | 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) { |
| | |
| | | { value: res.exceptionAmount || 0, name: '异常' }, |
| | | { value: res.errAmount || 0, name: '报废' } |
| | | ] |
| | | this.amount = res.amount |
| | | this.reand() |
| | | }) |
| | | }) |
| | |
| | | { |
| | | name: '设备状态', |
| | | type: 'pie', |
| | | radius: ['40%', '80%'], |
| | | label: { |
| | | show: true, |
| | | position: 'center', |
| | | fontWeight: 'bold', |
| | | fontSize: 22 |
| | | }, |
| | | radius: ['50%', '80%'], |
| | | data: this.deviceList |
| | | } |
| | | ] |
| | |
| | | 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 = { |
| | |
| | | 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 |
| | | }; |
| | | |
| | |
| | | .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; |
| | |
| | | }, |
| | | changeStatus(e, row) { |
| | | updateStatusById({ id: row.id, status: e }) |
| | | .then(res => { |
| | | .finally(() => { |
| | | this.getList() |
| | | }) |
| | | }, |
| | |
| | | <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 /> |
| | |
| | | <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> |
| | | |
| | |
| | | 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, |
| | |
| | | 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 |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | </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 /> |
| | |
| | | <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> |
| | |
| | | <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: { |
| | |
| | | } |
| | | }, |
| | | 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() |
| | |
| | | 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, |
| | |
| | | }, |
| | | 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 |