has_permission('basic_material_edit')) {
$btn = '编辑 ';
}
$use_buildin_look = kernel::single('desktop_user')->has_permission('basic_material_detail');
if ($use_buildin_look) {
if ($btn == '-') {
$btn = '';
}
$btn .= '查看';
}
return $btn;
}else{
return '-';
}
}
var $column_use_expire='保质期监控';
var $column_use_expire_width = "75";
function column_use_expire($row){
$basicMaterialConfObj = app::get('material')->model('basic_material_conf');
$tmp_bm_id = $row['bm_id'];
$bm_conf = $basicMaterialConfObj->getList('use_expire',array('bm_id'=>$tmp_bm_id));
if($bm_conf[0]['use_expire'] == 1){
return '开启';
}else{
return '关闭';
}
}
var $column_bbu_id='所属公司业务组织';
var $column_bbu_id_width = "125";
function column_bbu_id($row){
static $bbuList;
if (!isset($bbuList)) {
$bbuList = [];
//检查是否安装dealer应用
if (app::get('dealer')->is_installed()) {
$bbuList = [];
$bbuList = app::get('dealer')->model('bbu')->getList('bbu_id,bbu_code');
if ($bbuList) {
$bbuList = array_column($bbuList, null, 'bbu_id');
}
}
}
if ($bbuList[$row[$this->col_prefix.'bbu_id']]) {
return $bbuList[$row[$this->col_prefix.'bbu_id']]['bbu_code'];
}
return $row[$this->col_prefix.'bbu_id'];
}
var $detail_history = '操作日志';
// =============== 物料详情页面方法 ===============
function detail_basic($bm_id){
$render = app::get('material')->render();
$basicMaterialObj = app::get('material')->model('basic_material');
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
$basicMaterialCodeObj = app::get('material')->model('codebase');
$basicMaterialConfObj = app::get('material')->model('basic_material_conf');
$basicMaterialConfObjSpe = app::get('material')->model('basic_material_conf_special');
$basicMaterialBrand = app::get('ome')->model('brand');
$catMdl = app::get('material')->model('basic_material_cat');
$materialLib = kernel::single('material_basic_material');
$tmp_bm_id = $bm_id = intval($bm_id);
$basicMaterialInfo = $basicMaterialObj->dump($bm_id);
$basicMaterialExtInfo = $basicMaterialExtObj->dump($bm_id);
//这里的cat_id实际上是类型 type_id
$basicMaterialExtInfo['type_id'] = $basicMaterialExtInfo['cat_id'];
unset($basicMaterialExtInfo['cat_id'],$basicMaterialExtInfo['color'],$basicMaterialExtInfo['size']);
$basicMaterialConfInfo = $basicMaterialConfObj->dump($tmp_bm_id);
$material_info = array_merge($basicMaterialInfo, (array) $basicMaterialExtInfo, (array) $basicMaterialConfInfo);
$basicBarCode = $basicMaterialCodeObj->dump(array('bm_id' => $bm_id, 'type' => material_codebase::getBarcodeType()), 'code');
$material_info['material_cdoe'] = empty($basicBarCode) ? '' : $basicBarCode['code'];
$render->pagedata['material_info'] = $material_info;
$basicMaterialBrandInfo = $basicMaterialBrand->dump(array('brand_id'=>$material_info['brand_id']),'brand_id,brand_name');
$render->pagedata['brandList'] = $basicMaterialBrandInfo;
$cats = $catMdl->dump(array('cat_id'=>$basicMaterialInfo['cat_id']),'cat_name');
$render->pagedata['cats'] = $cats;
#获取物料分类
$goods_type_obj = app::get('ome')->model('goods_type');
$goods_types = $goods_type_obj->dump(array('type_id'=>$basicMaterialExtInfo['type_id']),'type_id,name');
$render->pagedata['goods_types'] = $goods_types;
$basicMaterialCombinationItemsObj = app::get('material')->model('basic_material_combination_items');
$rows = array();
$items = $basicMaterialCombinationItemsObj->getList('bm_id,material_bn,material_name,material_num', array('pbm_id' => $bm_id), 0, -1);
$render->pagedata['items'] = $items;
//
$propsMdl = app::get('material')->model('basic_material_props');
$propsList = $propsMdl->getlist('*', ['bm_id' => $tmp_bm_id]);
$arr_props = array();
foreach($propsList as $v){
$arr_props[$v['props_col']] = $v['props_value'];
}
$render->pagedata['arr_props'] = $arr_props;
$customcols = kernel::single('material_customcols')->getcols();
foreach($customcols as $k=>$v){
if($arr_props[$v['col_key']]){
$customcols[$k]['col_value'] = $arr_props[$v['col_key']];
}
}
$render->pagedata['customcols'] = $customcols;
return $render->fetch('admin/material/basic/basic.html');
}
/**
* 获取单个物料的图片数据
* @param int $bm_id 物料ID
* @return array|null 图片数据
*/
private function __getSingleMaterialImage($bm_id) {
if (!$bm_id) {
return null;
}
try {
$imageAttachModel = app::get('image')->model('image_attach');
$imageModel = app::get('image')->model('image');
// 获取最新的图片关联记录
$attach = $imageAttachModel->getRow('target_id,image_id,attach_id,last_modified', array(
'target_type' => 'material',
'target_id' => $bm_id
), 'last_modified DESC');
if (empty($attach)) {
return null;
}
// 获取图片信息
$image_info = $imageModel->getRow('image_id,image_name,url,ident,width,height,storage', array(
'image_id' => $attach['image_id']
));
if (empty($image_info)) {
return null;
}
// 构建图片数据
$image = array(
'image_id' => $image_info['image_id'],
'image_name' => $image_info['image_name'],
'url' => $image_info['url'],
'ident' => $image_info['ident'],
'width' => $image_info['width'],
'height' => $image_info['height'],
'storage' => $image_info['storage'],
'attach_id' => $attach['attach_id'],
'last_modified' => $attach['last_modified']
);
// 获取完整路径
if ($image['storage'] !== 'network') {
try {
$image['full_url'] = base_storager::image_path($image['image_id'], '');
} catch (Exception $e) {
$image['full_url'] = $image['url'];
}
} else {
$image['full_url'] = $image['url'];
}
return $image;
} catch (Exception $e) {
// 避免在生产环境使用error_log
return null;
}
}
/**
* 批量获取物料图片数据,避免重复查询
* @param array $list 物料列表数据
* @return array 图片数据缓存
*/
private function __getMaterialImages($list) {
// 如果已经缓存过,直接返回
if (self::$imageCache !== null) {
return self::$imageCache;
}
// 收集所有需要查询图片的 bm_id
$bm_ids = array();
if (is_array($list) && !empty($list)) {
foreach ($list as $row) {
if (isset($row['bm_id']) && intval($row['bm_id'])) {
$bm_ids[] = intval($row['bm_id']);
}
}
}
if (empty($bm_ids)) {
self::$imageCache = array();
return self::$imageCache;
}
// 使用model的getList方法替代直接SQL查询
$imageAttachModel = app::get('image')->model('image_attach');
$imageModel = app::get('image')->model('image');
try {
// 1. 通过model获取所有关联记录
$attachList = $imageAttachModel->getList('target_id,image_id,attach_id,last_modified', array(
'target_type' => 'material',
'target_id|in' => $bm_ids
), 0, -1, 'last_modified DESC');
if (empty($attachList)) {
self::$imageCache = array();
return self::$imageCache;
}
// 2. 收集所有图片ID,并建立关联映射
$image_ids = array();
$attach_map = array(); // 用于快速查找关联关系
foreach ($attachList as $attach) {
$bm_id = $attach['target_id'];
$image_id = $attach['image_id'];
// 只保留最新的关联记录(attach_id最大的)
if (!isset($attach_map[$bm_id]) || $attach['attach_id'] > $attach_map[$bm_id]['attach_id']) {
$attach_map[$bm_id] = $attach;
}
$image_ids[] = $image_id;
}
// 去重图片ID
$image_ids = array_unique($image_ids);
if (empty($image_ids)) {
self::$imageCache = array();
return self::$imageCache;
}
// 3. 通过model获取图片信息
$imageList = $imageModel->getList('image_id,image_name,url,ident,width,height,storage', array(
'image_id|in' => $image_ids
));
// 4. 组装数据
$imageCache = array();
foreach ($attach_map as $bm_id => $attach) {
$image_id = $attach['image_id'];
// 查找对应的图片信息
$image_info = null;
foreach ($imageList as $img) {
if ($img['image_id'] == $image_id) {
$image_info = $img;
break;
}
}
if ($image_info) {
// 构建图片数据
$image = array(
'image_id' => $image_info['image_id'],
'image_name' => $image_info['image_name'],
'url' => $image_info['url'],
'ident' => $image_info['ident'],
'width' => $image_info['width'],
'height' => $image_info['height'],
'storage' => $image_info['storage'],
'attach_id' => $attach['attach_id'],
'last_modified' => $attach['last_modified']
);
// 获取完整路径
if ($image['storage'] !== 'network') {
try {
$image['full_url'] = base_storager::image_path($image['image_id'], '');
} catch (Exception $e) {
$image['full_url'] = $image['url'];
}
} else {
$image['full_url'] = $image['url'];
}
$imageCache[$bm_id] = $image;
}
}
self::$imageCache = $imageCache;
return $imageCache;
} catch (Exception $e) {
// 避免在生产环境使用error_log
self::$imageCache = array();
return array();
}
}
/**
* 物料图片列显示处理(处理单行数据)
* @param array $row 单行物料数据
* @param array $list 完整列表数据(用于批量查询优化)
* @return string 图片HTML
*/
function column_images($row, $list = array()) {
if (!is_array($row) || !isset($row['bm_id'])) {
return '无图片';
}
$bm_id = intval($row['bm_id']);
if (!$bm_id) {
return '无图片';
}
// 使用批量查询的图片数据
$images = $this->__getMaterialImages($list);
if (empty($images) || !isset($images[$bm_id])) {
return '无图片';
}
$image = $images[$bm_id]; // 直接获取图片对象
// 检查图片数据完整性
if (!isset($image['full_url']) || empty($image['full_url'])) {
return '图片加载中...';
}
$imageHtml = '
';
return $imageHtml;
}
}