liukangdong
2025-02-08 c7d99f5e11c4cf0667f67b8170e1c585db2e2016
Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1
已添加1个文件
已修改11个文件
282 ■■■■ 文件已修改
admin/public/template/material.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/store/index.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/ywMaterial.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/ywStocktaking.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/contract/components/pendingBills.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/finance/collectionSettings.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/components/deviceEdit.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/project/components/houseDetails.vue 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/asset.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/assetList.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/components/inventoryDetails.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/query.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/template/material.xlsx
Binary files differ
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
  })
}
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)
}
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, {
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>
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>
                            <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
                                style="flex: 1;"
                                class="upload-demo"
                                :action="uploadImgUrl"
                                :data="uploadData"
                                :on-success="uploadAvatarSuccess"
                                :on-remove="handleRemove"
                                :file-list="form.leaseTemp">
                                    :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="其他通知单模板">
                        <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"
                            :file-list="form.otherTemp">
                                :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 }]
            })
      }
    }
admin/src/views/operation/components/deviceEdit.vue
@@ -325,6 +325,8 @@
      detailById(id).then(res => {
        this.param = res
        this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
        console.log(this.param.rooms)
        if (res.multifileList && res.multifileList.length > 0) {
        this.param.multifileList = res.multifileList.map(item => {
          return {
            ...item,
@@ -332,6 +334,8 @@
            createTime: item.createDate
          }
        })
        }
        this.changeProject()
        this.getHouseTree()
        const cateId = this.param.cateId || ''
        setTimeout(() => {
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,
        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',
            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
            )
          }
              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: {
          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;
admin/src/views/stock/asset.vue
@@ -111,7 +111,7 @@
    },
    changeStatus(e, row) {
      updateStatusById({ id: row.id, status: e })
        .then(res => {
        .finally(() => {
          this.getList()
        })
    },
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
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()
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