```
<template>
<el-dialog
class="ba-operate-dialog care-dialog"
:close-on-click-modal="true"
width="98%"
@open="openCareFun"
v-model="state.dialog"
style="overflow: hidden;
overflow-y: scroll;"
>
<template #header>
<div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
选择货品
</div>
</template>
<view class="goods-box" >
<el-row :gutter="20">
<el-col :span="6" >
<el-card class="box-card" >
<div class="tree-box">
<el-tree :data="cateTree" :props="defaultProps" :highlight-current="true" @node-click="handleNodeClick"
default-expand-all="true"
node-key="id"
:default-checked-keys="[0]"
:current-node-key="0"
/>
</div>
</el-card>
</el-col>
<el-col :span="18" >
<el-card class="box-card" >
<view class="search-box">
<el-form :model="form" @keyup.enter="onSearchSubmit" >
<el-row :gutter="20" >
<el-col :span="12" :offset="4">
<el-form-item label="名称">
<!-- 货号、名称、简码 -->
<el-input v-model="form.kw" placeholder="货号、名称、简码"/>
</el-form-item>
</el-col>
<!-- <el-col :span="8"> 16 28
<el-form-item label="">
<el-input v-model="form.sn" placeholder="按条形码查询" />
</el-form-item>
</el-col> -->
<el-col :span="4">
<el-form-item>
<el-button type="primary" @click="onSearchSubmit">查询</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</view>
<!-- 表格 -->
<div class="goods-table">
<el-table :data="tableData" v-loading="loading" height="300" style="width: 100%"
stripe
ref="tableDataRef"
@select="handlerPTempSelect"
@selection-change="handlePTempSelectionChange"
@row-click="rowClickHandlePtemp"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="goods_no" label="商品编号" width="110" fixed="left"/>
<el-table-column label="图片" width="80">
<template #default="scope">
<el-image v-if="scope.row.template.template_images[0]" style="width: 50px; height: 50px;border-radius: 4px;" :src="scope.row.template.template_images[0]" :fit="scope.row.template.template_name" />
</template>
</el-table-column>
<el-table-column prop="template.template_name" label="商品名称" width="100" />
<el-table-column prop="color_name" label="颜色" width="100" />
<el-table-column prop="template.template_no" label="商品简码" width="100"/>
<el-table-column prop="brand_name" label="品牌" width="100"/>
<el-table-column prop="unit_price" label="吊牌价" width="100"/>
</el-table>
<div class="goods-pagination-block">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="[10, 20, 50, 100]"
:disabled="disabled"
:background="true"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
<view>
<el-row :gutter="20" style="margin-top:80px;">
<el-col :span="6" :offset="6" align="center">
<el-button type="primary" @click="handleConfirm">确定</el-button>
</el-col>
<el-col :span="6" align="center">
<el-button type="danger" @click="handleCancel" >返回</el-button>
</el-col>
</el-row>
</view>
</el-card>
</el-col>
</el-row>
</view>
</el-dialog>
</template>
<script setup lang="ts">
import { reactive, ref, inject,defineExpose,watch,defineEmits,onMounted } from 'vue'
import { ElNotification } from 'element-plus'
import { useI18n } from 'vue-i18n'
import {getGoodsList} from "/@/api/backend/aGoods";
const emit = defineEmits([ "doSth" ]);
let props = defineProps({
cateTree:{
type:Object,
},
kw:{
type:String,
}
})
onMounted(() => {
});
let state = reactive({
dialog:false,
})
// 打开
const openCareFun = ()=>{
tableDataRef.value.clearSelection()// 清空选中
form.kw = props.kw // 默认查询
searchGoods()
}
const openDialogFun = ()=>{
state.dialog = true
}
// 选择数据
const tempData = reactive({
selectCheckList:[], // 选择的货品
goodsCateId:0, // 选中分类ID
})
interface Tree {
label: string
children?: Tree[]
}
const defaultProps = {
children: 'children',
label: 'label',
}
const handleNodeClick = (data: Tree) => {
console.log(data)
tempData.goodsCateId = data.id
searchGoods()
}
const form = reactive({
kw: props.kw || '',
sn:"", // 按条形码查询
})
let tableData = ref([]) // 表格数据
const currentPage = ref(1)
const pageSize = ref(10)
const total = ref(0)
const disabled = ref(true)
const loading = ref(false)
watch(() => tableData, (newValue, oldValue) => {
console.log('watch-item',{
newValue:newValue,
oldValue:oldValue,
})
disabled.value = tableData.value.length>0?false:true;
}, {deep:true})
const onSearchSubmit = () => {
searchGoods()
}
const searchGoods = () => {
loading.value = true
let search = []
if(tempData.goodsCateId >0){
search = [
{
field:'template.category_id',
operator:'FIND_IN_SET',
val:tempData.goodsCateId,
}
]
}
let param = {
search,
quick_search:form.kw,
limit:pageSize.value,
page:currentPage.value,
}
getGoodsList(param).then(res => {
console.log(res.data)
tableData.value = res.data.list
total.value = res.data.total
loading.value = false
});
}
// 页码
const handleSizeChange = (val: number) => {
console.log(`${val} items per page`)
pageSize.value = val
searchGoods()
}
const handleCurrentChange = (val: number) => {
console.log(`current page: ${val}`)
currentPage.value = val
searchGoods()
}
const tableDataRef = ref()
// 表格某一行的单击事件
function rowClickHandlePtemp(row) {
const selectData = tempData.selectCheckList
tableDataRef.value.clearSelection()
if (selectData.length >= 1) {
const [item] = selectData;
const shouldSelect = item !== row;
tableDataRef.value.toggleRowSelection(row, shouldSelect);
} else {
tableDataRef.value.toggleRowSelection(row, true);
}
}
// 当用户手动勾选数据行的 Checkbox 时触发的事件
function handlerPTempSelect(selection, row) {
tableDataRef.value.clearSelection() // 清除 所有勾选项
if(selection.length == 0) return
tableDataRef.value.toggleRowSelection(row,true)
}
// 当选择项发生变化时会触发该事件
function handlePTempSelectionChange(val) {
if(val.length > 1){
return
}
tempData.selectCheckList = val
}
// 确定
const handleConfirm = ()=>{
// 判断商品是否选择
if(tempData.selectCheckList.length == 0){
ElNotification({
title: '提示',
message: '请选择一个货品!',
type: 'warning',
})
return false
}
if(tempData.selectCheckList.length > 1){
ElNotification({
title: '提示',
message: '只能选择一个货品!',
type: 'warning',
})
return false
}
state.dialog = false
emit('doSth',{
goods:tempData.selectCheckList,
fun:'doSth'
});
}
const handleCancel = ()=>{
state.dialog = false
}
defineExpose({openDialogFun})
</script>
<style scoped lang="scss">
.goods-table ::v-deep .el-table th.el-table__cell:nth-child(1) .cell {
visibility: hidden;
}
.ftw{
font-weight: 900;
}
.o-wrap{
overflow-wrap: break-word;
}
.tree-box{
overflow: auto;
height: 50vh;
}
.goods-pagination-block{
margin-top: 18px;
}
</style>
```
- Golang
- Beego框架
- Gin框架
- gin框架介绍
- 使用Gin web框架的知名开源线上项目
- go-admin-gin
- air 热启动
- 完整的form表单参数验证语法
- Go 语言入门练手项目推荐
- Golang是基于多线程模型
- golang 一些概念
- Golang程序开发注意事项
- fatal error: all goroutines are asleep - deadlock
- defer
- Golang 的内建调试器
- go部署
- golang指针重要性
- 包(golang)
- Golang框架选型比较: goframe, beego, iris和gin
- GoFrame
- golang-admin-项目
- go module的使用方法及原理
- go-admin支持多框架的后台系统(go-admin.cn)
- docker gocv
- go-fac
- MSYS2
- 企业开发框架系统推荐
- gorm
- go-zero
- 优秀系统
- GinSkeleton(gin web 及gin 知识)
- 一次 request -> response 的生命周期概述
- 路由与路由组以及gin源码学习
- 中间件以及gin源码学习
- golang项目部署
- 独立部署golang
- 代理部署golang
- 容器部署golang
- golang交叉编译
- goravel
- kardianos+gin 项目作为windows服务运行
- go env
- 适用在Windows、Linux和macOS环境下打包Go应用程序的详细步骤和命令
- Redis
- Dochub
- Docker部署开发go环境
- Docker部署运行go环境
- dochub说明
- Vue
- i18n
- vue3
- vue3基本知识
- element-plus 表格单选
- vue3后台模板
- Thinkphp
- Casbin权限控制中间件
- 容器、依赖注入、门面、事件、中间件
- tp6问答
- 伪静态
- thinkphp-queue
- think-throttle
- thinkphp队列queue的一些使用说明,queue:work和queue:listen的区别
- ThinkPHP6之模型事件的触发条件
- thinkphp-swoole
- save、update、insert 的区别
- Socket
- workerman
- 介绍
- 从ThinkPHP6移植到Webman的一些技术和经验(干货)
- swoole
- swoole介绍
- hyperf
- hf官网
- Swoft
- swoft官网
- easyswoole
- easyswoole官网地址
- EASYSWOOLE 聊天室DEMO
- socket问答
- MySQL
- 聚簇索引与非聚簇索引
- Mysql使用max获取最大值细节
- 主从复制
- 随机生成20万User表的数据
- MySQL进阶-----前缀索引、单例与联合索引
- PHP
- 面向切面编程AOP
- php是单线程的一定程度上也可以看成是“多线程”
- PHP 线程,进程、并发、并行 的理解
- excel数据画表格图片
- php第三方包
- monolog/monolog
- league/glide
- 博客-知识网站
- php 常用bc函数
- PHP知识点的应用场景
- AOP(面向切面编程)
- 注解
- 依赖注入
- 事件机制
- phpspreadsheet导出数据和图片到excel
- Hyperf
- mineAdmin
- 微服务
- nacos注册服务
- simps-mqtt连接客户端simps
- Linux
- 切换php版本
- Vim
- Laravel
- RabbitMQ
- thinkphp+rabbitmq
- 博客
- Webman框架
- 框架注意问题
- 关于内存泄漏
- 移动端自动化
- 懒人精灵
- 工具应用
- render
- gitlab Sourcetree
- ssh-agent失败 错误代码-1
- 资源网站
- Git
- wkhtmltopdf
- MSYS2 介绍
- powershell curl 使用教程
- NSSM(windows服务工具)
- MinGW64
- 知识扩展
- 对象存储系统
- minio
- 雪花ID
- 请求body参数类型
- GraphQL
- js 深拷贝
- window 共享 centos文件夹
- 前端get/post 请求 特殊符号 “+”传参数问题
- 什么是SCM系统?SCM系统与ERP系统有什么区别?
- nginx 日志格式统一为 json
- 特殊符号怎么打
- 收藏网址
- 收藏-golang
- 收藏-vue3
- 收藏-php
- 收藏-node
- 收藏-前端
- 规划ITEM
- 旅游类
- 人脸识别
- dlib
- Docker&&部署
- Docker-compose
- Docker的网络模式
- rancher
- DHorse
- Elasticsearch
- es与kibana都docke连接
- 4种数据同步到Elasticsearch方案
- GPT
- 推荐系统
- fastposter海报生成
- elasticsearch+logstash+kibana
- beego文档系统-MinDoc
- jeecg开源平台
- Java
- 打包部署
- spring boot
- 依赖
- Maven 相关 命令
- Gradle 相关命令
- mybatis
- mybatis.plus
- spring boot 模板引擎
- SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程
- Spring Cloud
- Sentinel
- nacos
- Apollo
- java推荐项目
- gradle
- Maven
- Nexus仓库管理器
- Python
- Masonite框架
- scrapy
- Python2的pip2
- Python3 安装 pip3
- 安全攻防
- 运维技术
- 腾讯云安全加固建议
- 免费freessl证书申请
- ruby
- homeland
- Protobuf
- GIT
- FFMPEG
- 命令说明
- 音频
- ffmpeg合并多个MP4视频
- NODEJS
- 开发npm包
- MongoDB
- php-docker-mongodb环境搭建
- mongo基本命令
- Docker安装MongoDB最新版并连接
- 少儿编程官网
- UI推荐
- MQTT
- PHP连接mqtt
- EMQX服务端
- php搭建mqtt服务端