| | |
| | | <template> |
| | | <div class="edit-selClient-box"> |
| | | <el-dialog |
| | | :title="editCommonConfig.title" |
| | | :visible.sync="editConfig.editVisible" |
| | | :width="dialogWidth" |
| | | :before-close="handleClose" |
| | | :append-to-body="true" |
| | | :close-on-click-modal="false" |
| | | > |
| | | <div slot="title" class="tac drawerHeader">{{ editCommonConfig.title }}</div> |
| | | |
| | | <div class="bg-view"> |
| | | <div class="query-bg"> |
| | | <!-- <el-input placeholder="请输入内容" v-model="queryInput" size="mini" class="input-with-select"> |
| | | <el-select v-model="select" slot="prepend" placeholder="请选择"> |
| | | <el-option v-for="item in commonOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-input> --> |
| | | <SearchCommonView |
| | | ref="searchCommonView" |
| | | :search-options="searchOptions" |
| | | @searchClick="searchClick" |
| | | @resetClick="resetClick" |
| | | :search-sel="searchSel" |
| | | /> |
| | | <div class="btn"> |
| | | <!-- <el-button type="primary" size="mini" disabled>设置字段</el-button> |
| | | <el-button type="primary" size="mini" disabled>快速创建</el-button> --> |
| | | <div style="display: flex;justify-content: space-between"> |
| | | <div class="query-bg" style="margin: 10px"> |
| | | <el-input |
| | | v-model="bomParams.keyword" |
| | | placeholder="搜索产品名称,编码等关键词" |
| | | ></el-input> |
| | | <el-button type="primary" @click="searchClick">查询</el-button> |
| | | </div> |
| | | <div style="margin: 10px"> |
| | | <el-cascader |
| | | v-model="categoryIds" |
| | | collapse-tags |
| | | placeholder="请选择产品类别" |
| | | :options="productCategoryList" |
| | | :props="props" |
| | | clearable |
| | | @change="getProductList" |
| | | ></el-cascader> |
| | | </div> |
| | | </div> |
| | | <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="false" @selCommonClick="selNameClick"> |
| | | <TableCommonView |
| | | :warehouseId="warehouseId" |
| | | class="bg-list" |
| | | ref="tableListRef" |
| | | :loading="loading" |
| | | :table-list="tableList" |
| | | :select-box="editCommonConfig.isSelectBox" |
| | | :selectBoxList="selectBoxList" |
| | | name="product" |
| | | @selCommonClick="selNameClick" |
| | | @selTableCol="selTableCol" |
| | | @getSelectArray="getSelectArray" |
| | | > |
| | | </TableCommonView> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <div class="remark">说明:支持多字段模糊查询,仅显示符合条件的前5条数据</div> |
| | | <div class="btn-pager"> |
| | | <PagerView |
| | | class="page" |
| | | :pager-options="pagerOptions" |
| | | :pagerCount="pagerCount" |
| | | layout="total, sizes, prev, pager, next" |
| | | v-on="pagerEvents" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer" v-if="editCommonConfig.isSelectBox"> |
| | | <el-button type="primary" @click="saveClick()">确定</el-button> |
| | | <el-button @click="editConfig.editVisible = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | // import { getProductListFromGrpc,getProductList } from "@/api/productManage/product" |
| | | import { getProductList,locationProductListApi } from "@/api/product/product" |
| | | import pageMixin from "@/components/makepager/pager/mixin/pageMixin" |
| | | import { getProductCategoryList } from '@/api/product/productCategory' |
| | | import { getTreeData } from '@/common/untils/index'; |
| | | export default { |
| | | name: "EditSelCommonDialog", |
| | | mixins: [pageMixin], |
| | | props: { |
| | | warehouseId:{ |
| | | type:Number, |
| | | default:0 |
| | | }, |
| | | editCommonConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return { |
| | | editVisible: false, |
| | | isSelectBox: false, |
| | | title: "", |
| | | clientId: 0, |
| | | isRequest: true, |
| | | client_name: "", |
| | | tableInfomation: [] |
| | | } |
| | | } |
| | | }, |
| | | sign: { |
| | | type: String, |
| | | default: "" |
| | | // 不可选的数据 |
| | | selectBoxList: { |
| | | type: Array, |
| | | default: () => [] |
| | | } |
| | | }, |
| | | components: {}, |
| | | computed: {}, |
| | | data() { |
| | | return { |
| | | dialogWidth: "50%", |
| | | categoryIds:[], |
| | | props:{ |
| | | label:'name', |
| | | value:'id', |
| | | multiple:true |
| | | }, |
| | | dialogWidth: "42rem", |
| | | pagerCount: 5, |
| | | editConfig: this.editCommonConfig, |
| | | queryInput: "", |
| | | select: "全部字段", |
| | | tableData: [], |
| | | searchSelOptions: [], |
| | | loading: false, |
| | | tableList: {}, |
| | | searchOptions: [], |
| | | search_map: {}, |
| | | searchSel: {}, |
| | | keyword: "", |
| | | keywordType: "" |
| | | showcolTop: ["产品规格", "产品型号"], |
| | | selectArray: [], |
| | | bomParams: { |
| | | keyword: "", |
| | | page: 1, |
| | | pageSize: 10, |
| | | types: ["原材料", "半成品", "成品"] |
| | | }, |
| | | productCategoryList:[] |
| | | } |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | this.setTable(); |
| | | this.getData(); |
| | | this.queryProductCategoryList(); |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | | if (this.editConfig.title === "产品名称") { |
| | | this.tableList = { |
| | | tableInfomation: [], |
| | | tableColumn: [ |
| | | { label: "产品名称", prop: "name", isClick: true }, |
| | | { label: "产品编号", prop: "number" } |
| | | ] |
| | | } |
| | | this.searchSel = { value: "name", label: "产品名称" } |
| | | this.tableList = { |
| | | tableInfomation: [], |
| | | selectIndex: false, |
| | | selectBox: this.editCommonConfig.isSelectBox, |
| | | showcol: this.showcolTop, |
| | | allcol: [], |
| | | tableColumn: this.setTopTableColumn(this.showcolTop) |
| | | } |
| | | this.searchOptions = [] |
| | | let allcol = [] |
| | | for (let i = 0; i < this.tableList.tableColumn.length; i++) { |
| | | const label = this.tableList.tableColumn[i].label |
| | | const value = this.tableList.tableColumn[i].prop |
| | | this.searchOptions.push({ value: value, label: label }) |
| | | if (!this.tableList.tableColumn[i].default) { |
| | | const label = this.tableList.tableColumn[i].label |
| | | allcol.push(label) |
| | | } |
| | | } |
| | | this.tableList.allcol = allcol |
| | | }, |
| | | setTopTableColumn(showcol) { |
| | | |
| | | let tableColumn = [ |
| | | { |
| | | label: "产品编码", |
| | | prop: "id", |
| | | min: 110, |
| | | isShowColumn: true, |
| | | default: true |
| | | }, |
| | | { |
| | | label: "产品名称", |
| | | prop: "name", |
| | | isShowColumn: true, |
| | | default: true, |
| | | isClick: true |
| | | }, |
| | | /*{ |
| | | label: "产品类别", |
| | | prop: "categoryName", |
| | | isShowColumn: true, |
| | | default: true |
| | | },*/ |
| | | { |
| | | label: "位置", |
| | | prop: "locationName", |
| | | min: 110, |
| | | isShowColumn: true, |
| | | default: true |
| | | }, |
| | | { |
| | | label: "数量", |
| | | prop: "amount", |
| | | min: 110, |
| | | isShowColumn: true, |
| | | default: true |
| | | }, |
| | | { |
| | | label: "产品规格", |
| | | prop: "specs", |
| | | isShowColumn: showcol.includes("产品规格"), |
| | | default: false |
| | | }, |
| | | { |
| | | label: "产品型号", |
| | | prop: "type", |
| | | width: 90, |
| | | isShowColumn: showcol.includes("产品型号"), |
| | | default: false |
| | | } |
| | | ] |
| | | return tableColumn |
| | | }, |
| | | selTableCol(val) { |
| | | this.showcolTop = val |
| | | this.tableList.tableColumn = this.setTopTableColumn(val) |
| | | }, |
| | | // 列表多选 |
| | | getSelectArray(val) { |
| | | this.selectArray = val |
| | | }, |
| | | async queryProductCategoryList(){ |
| | | const {code ,data}=await getProductCategoryList({page:0,pageSize:0}); |
| | | if(code===200){ |
| | | this.productCategoryList=getTreeData(data); |
| | | } |
| | | } , |
| | | saveClick() { |
| | | this.$emit("getSelectArray", this.selectArray) |
| | | this.editConfig.editVisible = false |
| | | }, |
| | | // 请求数据 |
| | | async getData() { |
| | |
| | | }, |
| | | // 产品名称 |
| | | async getProductList() { |
| | | // let fn = this.sign == "purchase" ? getProductList : getProductListFromGrpc; |
| | | let fn |
| | | await fn({ |
| | | page: 1, |
| | | pageSize: 100 |
| | | }).then((res) => { |
| | | console.log(res.data) |
| | | if (res.data.code === 200) { |
| | | if (res.data.data.list && res.data.data.list.length > 0) { |
| | | const list = res.data.data.list.map((item) => { |
| | | return { |
| | | ...item |
| | | this.bomParams.page = this.pagerOptions.currPage ? this.pagerOptions.currPage : 1 |
| | | this.bomParams.pageSize = this.pagerOptions.pageSize ? this.pagerOptions.pageSize : 15 |
| | | let params = JSON.parse(JSON.stringify(this.bomParams)); |
| | | const routerParams=this.$route.query; |
| | | const ids=[...new Set(this.categoryIds.flat(Infinity))]; |
| | | params.categoryIds=ids; |
| | | if(routerParams.workType==1){ |
| | | await getProductList(params).then((res) => { |
| | | console.log(res.data) |
| | | if (res.code === 200) { |
| | | if (res.data) { |
| | | this.tableList.tableInfomation = res.data || [] |
| | | this.pagerOptions.totalCount = res.total ? res.total : 0 |
| | | } else { |
| | | this.tableList.tableInfomation = [] |
| | | } |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list.slice(0, 5) || [] |
| | | } else { |
| | | this.tableList.tableInfomation = [] |
| | | } |
| | | } |
| | | this.loading = false |
| | | }) |
| | | this.loading = false |
| | | }) |
| | | }else{ |
| | | params={ |
| | | "keyword": "", |
| | | "page":this.pagerOptions.currPage ? this.pagerOptions.currPage : 1, |
| | | "pageSize": this.pagerOptions.pageSize ? this.pagerOptions.pageSize : 15, |
| | | "warehouseId": routerParams.warehouseId?parseInt(routerParams.warehouseId):this.warehouseId |
| | | }; |
| | | params.categoryIds=ids; |
| | | locationProductListApi(params).then(res=>{ |
| | | if (res.code === 200) { |
| | | if (res.data) { |
| | | this.tableList.tableInfomation = res.data || [] |
| | | this.tableList.tableInfomation.map(item=>{ |
| | | item.locationName=item.location.name; |
| | | }); |
| | | this.pagerOptions.totalCount = res.total ? res.total : 0 |
| | | } else { |
| | | this.tableList.tableInfomation = [] |
| | | } |
| | | } |
| | | this.loading = false |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | handleClose() { |
| | | this.editConfig.editVisible = false |
| | | }, |
| | | selNameClick(row) { |
| | | if (this.editCommonConfig.isSelectBox) { |
| | | return true |
| | | } |
| | | this.editConfig.editVisible = false |
| | | if (this.editConfig.title === "产品名称") { |
| | | this.$emit("selClient", row, "productName") |
| | | } |
| | | }, |
| | | // 搜索 |
| | | searchClick(val, content) { |
| | | console.log(val, content) |
| | | this.search_map = { |
| | | [val.value]: content |
| | | } |
| | | this.keyword = content |
| | | this.keywordType = val.label |
| | | searchClick() { |
| | | this.bomParams.page = 1 |
| | | this.total = 0 |
| | | this.getData() |
| | | }, |
| | | resetClick() { |
| | | this.search_map = {} |
| | | this.keyword = "" |
| | | this.keywordType = "" |
| | | this.getData() |
| | | } |
| | | } |
| | |
| | | <!-- Add "scoped" attribute to limit CSS to this component only --> |
| | | <style lang="scss" scoped> |
| | | .bg-view { |
| | | margin: 10px; |
| | | .bg-list { |
| | | height: 370px; |
| | | } |
| | | .query-bg { |
| | | margin-left: -20px; |
| | | margin-bottom: 10px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .el-input { |
| | | width: 310px; |
| | | .el-select { |
| | | width: 100px; |
| | | } |
| | | } |
| | | |
| | | .btn { |
| | | float: right; |
| | | } |
| | |
| | | cursor: pointer; |
| | | } |
| | | .dialog-footer { |
| | | height: 40px; |
| | | line-height: 40px; |
| | | color: red; |
| | | .btn-pager { |
| | | display: flex; |
| | | margin-top: 0px; |
| | | .page { |
| | | margin-left: auto; |
| | | } |
| | | } |
| | | } |
| | | ::v-deep { |
| | | .input-with-select .el-input-group__prepend { |
| | | background-color: #fff; |
| | | .el-dialog__body { |
| | | padding-bottom: 10px !important; |
| | | } |
| | | } |
| | | </style> |