```
<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服務端