validator->attributes['id']; $remark = '编辑项目表单字段'; $operate = Logs::OPERATE_EDIT; } else { $remark = '新增项目表单字段'; $operate = Logs::OPERATE_CREATE; } // 获取config 内容 $configFile = Laminas::$app->getConfig()['formValidator'][self::LOG_TARGET]; if (!$configFile || !file_exists($configFile)) { throw new InvalidArgumentException('配置文件路径不对呀。'); } $configFile = include $configFile; $formType = $this->validator->attributes['form_type'] ?: 'TEXT'; // 处理type内容 $typeValue = ArrayHelper::getValue($configFile, "{$formType}.type"); if ($typeValue) { $typeValue = ArrayHelper::index(array_values($typeValue)[0] ?? [], 'prop'); } $eventForm = ArrayHelper::merge(ArrayHelper::getValue($configFile, "{$formType}.form"), $typeValue); $this->LocalService()->log->setSaveEventForm('ItemFormField')->saveFileLog( $eventId, $eventForm, $this->validator->attributes, $operate, $remark, $this->validator->attributes['item_id'] ?: 0 ); } public function indexAction(): JsonModel { $this->validator->attach( [['id'], 'required'], ); if (!$this->validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $this->validator->getFirstErrorToString()); } $data = $this->LocalService()->itemFormVersion->getField([ 'form_id' => $this->validator->attributes['id'], 'version' => 'v1.0', ]); return $this->RenderApiJson()->Success($data); } public function versionAction(): JsonModel { $validator = new ValidatorApplication(); $validator->attach( [['id'], 'required'] ); if (!$validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $validator->getFirstErrorToString()); } // 获取所有版本 // 新增无版本, 返回默认值 $query = $this->LocalService()->itemFormVersion->fetchAll([ 'columns' => ['version as label', 'version as value'], 'where' => ['form_id' => $validator->attributes['id']] ]) ?: [['label' => 'v1.0', 'value' => 'v1.0']]; return $this->RenderApiJson()->Success($query); } /** * @url http://xxx.com/item/field/create * @return JsonModel * @throws Exception */ public function createAction(): JsonModel { $this->validator->attach( [['form_id', 'item_id'], 'required'], [['form_id'], 'exist', 'targetClass' => $this->LocalService()->itemForm, 'targetAttribute' => 'id'], // 验证 form_id 是否存在 [['form_type'], 'default', 'value' => FieldForm::FORM_CONFIG_TEXT], [['is_list', 'is_booked_time','is_hide','dicform_id', 'is_item_form_source'], 'default', 'value' => 0], [['is_export'], 'default', 'value' => 1], [['value'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'invalidRadioValue'], [['is_booked_time'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'invalidBookedTime'], [['type'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'invalidEditType'], [['max'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'validMax'], [['var_name'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'validVarName'], [['name'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'validName'], [['is_hyperwindow'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'validHyperWindow'], ); if (!$this->validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $this->validator->getFirstErrorToString()); } // 前端传的 `default` 字段可能会有前缀, 需要处理一下 $default = 'default' . $this->validator->attributes['type']; if (isset($this->validator->attributes[$default]) && $this->validator->attributes[$default] !== 'null') { $this->validator->attributes['default'] = $this->validator->attributes[$default]; } if(isset($this->validator->attributes['checktime_id'])){ if(is_array($this->validator->attributes['checktime_id'])){ $this->validator->attributes['checktime_id'] = !empty($this->validator->attributes['checktime_id']) ? implode(',',$this->validator->attributes['checktime_id']) : ''; }else{ $this->validator->attributes['checktime_id'] = !empty($this->validator->attributes['checktime_id']) ? trim($this->validator->attributes['checktime_id'],',') : ''; } } if(isset($this->validator->attributes['checkname_id'])){ if(is_array($this->validator->attributes['checkname_id'])){ $this->validator->attributes['checkname_id'] = !empty($this->validator->attributes['checkname_id']) ? implode(',',$this->validator->attributes['checkname_id']) : ''; }else{ $this->validator->attributes['checkname_id'] = !empty($this->validator->attributes['checkname_id']) ? trim($this->validator->attributes['checkname_id'],',') : ''; } } if(isset($this->validator->attributes['formchecktime_id'])){ if(is_array($this->validator->attributes['formchecktime_id'])){ $this->validator->attributes['formchecktime_id'] = !empty($this->validator->attributes['formchecktime_id']) ? implode(',',$this->validator->attributes['formchecktime_id']) : ''; }else{ $this->validator->attributes['formchecktime_id'] = !empty($this->validator->attributes['formchecktime_id']) ? trim($this->validator->attributes['formchecktime_id'],',') : ''; } } if(isset($this->validator->attributes['form_field_id'])){ if(is_array($this->validator->attributes['form_field_id'])){ $this->validator->attributes['form_field_id'] = !empty($this->validator->attributes['form_field_id']) ? implode(',',$this->validator->attributes['form_field_id']) : ''; }else{ $this->validator->attributes['form_field_id'] = !empty($this->validator->attributes['form_field_id']) ? trim($this->validator->attributes['form_field_id'],',') : ''; } } //选项无关联信息时,关联分类、关联类型默认为空值 if(isset($this->validator->attributes['relation_information']) && empty($this->validator->attributes['relation_information'])){ $this->validator->attributes['relation_classification'] = 0; $this->validator->attributes['relation_type'] = 0; } $model = new ItemFieldForm($this->validator); if ($this->validator->attributes['id']) { $model->editCheck(); //查询选项值 判断本次是否修改了表单选项的字典项 如果修改了 提示先去删除旧的选项值 再进行修改 $childen_count = $this->LocalService()->itemFormField->getCount([ 'is_del' => 0, 'parent' => $this->validator->attributes['id'] ]); $oldform_id = $this->LocalService()->itemFormField->getOneFieldVal('dicform_id',[ 'id' => $this->validator->attributes['id'], ]); $oldform_id = !empty($oldform_id) ? $oldform_id : 0; if($childen_count > 0 && $this->validator->attributes['dicform_id'] != $oldform_id){ return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '请先删除旧的选项值再进行修改选项字典!'); } $model->editField(); //处理选项值 if($childen_count == 0 && isset($this->validator->attributes['dicform_id']) && !empty($this->validator->attributes['dicform_id'])){ //查询对应的选项值 $where_value = [ 'where'=> [ 'is_del' => 0, 'form_id' => $this->validator->attributes['dicform_id'], ], 'columns'=>['id','value_name','option_value','option_variable','is_score','score_value'] ]; $value_datas = $this->LocalService()->dictionaryLevervalue->fetchAll($where_value); if(!empty($value_datas)){ $i = 1; foreach ($value_datas as $value_data){ $i++; $res =[ 'parent' => $this->validator->attributes['id'], 'name' => $value_data['value_name'], //选项名称 'var_name' => $value_data['option_variable'], //变量名 'value' => $value_data['option_value'], //选项值 'is_check' => 0, //是否默认选中 'is_score' => $value_data['is_score'], //分值选项 'score' => $value_data['score_value'], //分值 'form_id' => $this->validator->attributes['form_id'], 'form_type' => 'RADIO', //分值选项 'version' => $this->validator->attributes['version'], 'order' => $i, ]; //print_r($res);die; //选项值入库 $newresult_id = $model->createField($res,1); $this->addLog($newresult_id); } } } $this->addLog(null); } else { $result_id = $model->createField(); $res = []; //判断是否选择了表单选项的字典项 选了的话 把选项值直接带过来保存到本次表单字段的子集中 后面的直接进行各自编辑 不再批量处理 if(isset($this->validator->attributes['dicform_id']) && !empty($this->validator->attributes['dicform_id'])){ //查询对应的选项值 $where_value = [ 'where'=> [ 'is_del' => 0, 'form_id' => $this->validator->attributes['dicform_id'], ], 'columns'=>['id','value_name','option_value','option_variable','is_score','score_value'] ]; $value_datas = $this->LocalService()->dictionaryLevervalue->fetchAll($where_value); if(!empty($value_datas)){ $i = 1; foreach ($value_datas as $value_data){ $i++; $res =[ 'parent' => $result_id, 'name' => $value_data['value_name'], //选项名称 'var_name' => $value_data['option_variable'], //变量名 'value' => $value_data['option_value'], //选项值 'is_check' => 0, //是否默认选中 'is_score' => $value_data['is_score'], //分值选项 'score' => $value_data['score_value'], //分值 'form_id' => $this->validator->attributes['form_id'], 'form_type' => 'RADIO', //分值选项 'version' => $this->validator->attributes['version'] ? $this->validator->attributes['version'] : 'v1.0', 'order' => $i, ]; //选项值入库 $newresult_id = $model->createField($res,1); $this->addLog($newresult_id); } } } $this->addLog($result_id); } return $this->RenderApiJson()->Success(); } /** * 添加版本 * @doc https://www.showdoc.com.cn/p/28696c346fb0381c8b38250b30929375 * @url http://xx.com/dictionary/field/addVersion * @return JsonModel * @throws Exception */ public function addVersionAction(): JsonModel { return $this->RenderApiJson()->Success(); } /** * 表单详情 * @doc https://www.showdoc.com.cn/p/45af2714da57a616fcb21b118c25fa98 * @url http://xx.com/dictionary/item/field/view * @return JsonModel * @throws Exception */ public function viewAction(): JsonModel { $validator = new ValidatorApplication(); $validator->attach( [['id', 'form_type'], 'required', 'strict' => true], ); if (!$validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $validator->getFirstErrorToString()); } $model = new ItemFieldForm($validator); if(!empty($validator->attributes['form_type']) && !empty($validator->attributes['id'])){ if($validator->attributes['form_type'] == 'RADIO'){ $relation_table = 'itemFormFieldRadio'; }else{ $relation_table = 'itemFormFieldText'; } //查询关联表信息是否存在 之前的程序问题导致不会入这个表 没有的话补充一下 $radio_count = $this->LocalService()->$relation_table->getCount([ 'field_id' => $validator->attributes['id'], ]); if(!$radio_count){ //补充数据 $model->editRadioCheck($validator->attributes['id']); } } $query = $model->view() ?: ['order' => $this->getOrder()]; if(!isset($query['parent']) && empty($query['parent'])){ $query['is_export'] = $query['is_export'] ?: '1'; } // 数据库`score`是 decimal 类型的. 如果是整数的话不要展示小数点。 $query['score'] = floatval($query['score']); $query['is_check'] = $query['is_check'] ?: '0'; $query['is_score'] = $query['is_score'] ?: '0'; $query['checktime_id'] = !empty($query['checktime_id']) ? explode(',',$query['checktime_id']) : []; $query['checkname_id'] = !empty($query['checkname_id']) ? explode(',',$query['checkname_id']) : []; $query['form_field_id'] = !empty($query['form_field_id']) ? explode(',',$query['form_field_id']) : []; $query['formchecktime_id'] = !empty($query['formchecktime_id']) ? explode(',',$query['formchecktime_id']) : []; $selectTableText = [ 'checktime_id'=>'', 'checkname_id'=>'', 'form_field_id'=>'' ]; //回显参照检查点信息 if(!empty($query['checktime_id'])){ $checktimes = $this->LocalService()->itemChecktime->fetchAll([ 'where'=> [ 'is_del' => 0, 'id' => StringHelper::toArray($query['checktime_id']) ], 'columns'=>['name'=>'check_name'], 'order'=>['check_order'] ]); if(!empty($checktimes)){ $checktime_text = []; foreach($checktimes as $checktimeKey=>&$checktime){ $checktime_text[] = $checktime['name']; unset($checktimes[$checktimeKey]); } $selectTableText['checktime_id'] = implode('、',$checktime_text); unset($checktime_text); } unset($checktimes); } //回显参照检查点信息 if(!empty($query['formchecktime_id'])){ $checktimes = $this->LocalService()->itemChecktime->fetchAll([ 'where'=> [ 'is_del' => 0, 'id' => $query['formchecktime_id'] ], 'columns'=>['name'=>'check_name'], 'order'=>['check_order'] ]); if(!empty($checktimes)){ $checktime_text = []; foreach($checktimes as $checktimeKey=>&$checktime){ $checktime_text[] = $checktime['name']; unset($checktimes[$checktimeKey]); } $selectTableText['formchecktime_id'] = implode('、',$checktime_text); unset($checktime_text); } unset($checktimes); } //回显参照检查项信息 if(!empty($query['checkname_id'])){ $checknames = $this->LocalService()->itemCheckname->fetchAll([ 'where'=> [ 'is_del' => 0, 'id' => StringHelper::toArray($query['checkname_id']) ], 'columns'=>['category_id','name'], 'order'=>['category_id','checkname_order'] ]); if(!empty($checknames)){ $checkname_text = []; $category_name_arr = $this->LocalService()->DictionaryCheckcategory->fetchCol('category_name', [ 'is_del' => 0, 'id' => StringHelper::toArray(array_values(array_column($checknames,'category_id'))) ]); foreach($checknames as $checknameKey=>&$checkname){ if(isset($category_name_arr[$checkname['category_id']]) && !empty($category_name_arr[$checkname['category_id']])){ $checkname['name'] = $category_name_arr[$checkname['category_id']].'-'.$checkname['name']; } $checkname_text[] = $checkname['name']; unset($checknames[$checknameKey]); } unset($category_name_arr); $selectTableText['checkname_id'] = implode('、',$checkname_text); unset($checkname_text); } unset($checknames); } //回显参照表单信息 if(!empty($query['form_field_id'])){ $form_fields = $this->LocalService()->itemFormField->fetchAll([ 'where'=> [ 'is_del' => 0, 'id' => StringHelper::toArray($query['form_field_id']) ], 'columns'=>['form_id','name'], ]); if(!empty($form_fields)){ $form_field_text = []; $form_name_arr = $this->LocalService()->itemForm->fetchCol('name',[ 'is_del' => 0, 'id' => StringHelper::toArray(array_values(array_column($form_fields,'form_id'))) ]); foreach($form_fields as $form_fieldkey=>&$form_field){ if(isset($form_name_arr[$form_field['form_id']]) && !empty($form_name_arr[$form_field['form_id']])){ $form_field['name'] = $form_name_arr[$form_field['form_id']].'-'.$form_field['name']; $form_field_text[] = $form_field['name']; } unset($form_fields[$form_fieldkey]); } unset($form_name_arr); $selectTableText['form_field_id'] = implode('、',$form_field_text); unset($form_field_text); } unset($form_fields); } $FormFileData = $model->getFieldConfig(); if(isset($FormFileData['form']) && !empty($FormFileData['form'])){ foreach($FormFileData['form'] as &$FormFileInfo){ if(in_array($FormFileInfo['prop'],['checktime_id','checkname_id','form_field_id','formchecktime_id'])){ $FormFileInfo['showText'] = $selectTableText[$FormFileInfo['prop']]; } } } unset($selectTableText); return $this->RenderApiJson()->Success($query, 'OK', [ 'FormFileData' => $FormFileData ]); } /** * 获取order * @return int */ protected function getOrder(): int { return ($this->LocalService()->itemFormField->getCount(['form_id' => $this->validator->attributes['form_id']]) + 1) * 10; } public function delAction(): JsonModel { $this->validator->attach( [['id'], 'required'], [['id'], 'function', 'targetClass' => ItemFieldForm::class, 'method' => 'invalidDeleteId'] ); if (!$this->validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $this->validator->getFirstErrorToString()); } $model = new ItemFieldForm($this->validator); $this->LocalService()->log->saveFileLog($this->validator->attributes['id'], self::LOG_TARGET, $this->validator->attributes, Logs::OPERATE_DELETE, "删除字段{$model->delete()}"); return $this->RenderApiJson()->Success(); } /** * @url http://xxx.com/item/field/getRelationInformation * @return JsonModel|void * @throws Exception */ public function getRelationInformationAction() { $this->validator->attach( [['type', 'item_id'], 'required'], ); if (!$this->validator->isValid()) { return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $this->validator->getFirstErrorToString()); } if ($this->validator->attributes['type'] == 0) { return $this->RenderApiJson()->Success([ ['label' => '无关联信息', 'value' => '0'] ]); } elseif ($this->validator->attributes['type'] == 1) { // 表单 $query = $this->LocalService()->itemForm->fetchAll([ 'columns' => [ new Expression('name as label'),new Expression('id as value')], 'where' => ['is_del' => 0, 'item_id' => $this->validator->attributes['item_id']] ]); return $this->RenderApiJson()->Success($query); } elseif ($this->validator->attributes['type'] == 2) { // 属性 $query = Laminas::$serviceManager->itemFormVersion->getField([ 'form_id' => $this->validator->attributes['form_id'], 'version' => 'v1.0' ], true); $options[] = ['label' => '无关联信息', 'value' => '0']; foreach ($query as $v) { $options[] = ['label' => $v['name'], 'value' => $v['id']]; } return $this->RenderApiJson()->Success($options); } } /** * Notes: 选择参照检查点 再根据检查点选择检查点下的检查项 来控制可选择的检查项范围 * @param * @return * @author haojinhua * @date 2025-02-11 */ public function selectchecktimeAction(){ if($this->request->isPost()){ $limit = $this->params()->fromPost('limit',20); $page = $this->params()->fromPost('page',1); $offset = intval(($page - 1) * $limit); $form_item = $this->params()->fromPost('item_id',0);//项目ID $form_item = empty($form_item) ? 0 : $form_item; $selectArr = $this->params()->fromPost('id');//选中数据 if (empty($form_item)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '参数不正确'); //查询项目下的字典项检查项分类id $item_categoryid = $this->LocalService()->itemCheckname->fetchCol('category_id',[ 'is_del' => 0, 'item_id' => $form_item, ]); $item_categoryid = array_unique($item_categoryid); //根据检查项分类ID 查询到表单ID $form_where = 'id<0'; if(!empty($item_categoryid)){ $form_where = [ 'is_del' => 0, 'item_id' => $form_item, 'checklist_id' => StringHelper::toArray($item_categoryid), ]; } $form_ids = $this->LocalService()->itemForm->fetchCol('id',$form_where); //根据$form_ids 查询检查点 $checktime_ids = []; if(!empty($form_ids)){ $checktime_ids = $this->LocalService()->itemCheckcontent->fetchCol('check_id', [ 'is_del' => 0, 'item_id' => $form_item, 'form_id' => StringHelper::toArray($form_ids), ]); } $where = [ 'is_del' => 0, 'item_id' => $form_item, ]; if(!empty($checktime_ids)){ $where['id'] = StringHelper::toArray($checktime_ids); }else{ $where = [ 'id' => 0, ]; } $total = $this->LocalService()->itemChecktime->getCount($where); $datas = $this->LocalService()->itemChecktime->fetchAll([ 'where'=>$where, 'columns'=>['id','title'=>'check_name'], 'order'=>['check_order'], 'limit'=>$limit, 'offset'=>$offset ]); unset($where); //选中数据回显 $selectDatas = []; if(!empty($selectArr)){ if(!is_array($selectArr)){ $selectArr = explode(',',$selectArr); } }else{ $selectArr = []; } if(!empty($selectArr)){ $selectDatas = $this->LocalService()->itemChecktime->fetchAll([ 'where'=> [ 'is_del' => 0, 'item_id' => $form_item, 'id' => StringHelper::toArray($selectArr), ], 'columns'=>['id','title'=>'check_name'], 'order'=>['check_order'] ]); } //表单数据返回 $FormFileData = [ ['label' => '检查点','prop' => 'title'] ]; return $this->RenderApiJson()->success($datas,'',['total'=>$total,'selectData'=>$selectDatas,'FormFileData'=>$FormFileData,'limit'=>$limit,'page'=>$page]); }else{ return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR,'非法请求'); } } /** * Notes: 选择参照检查项 * User: lltyy * DateTime: 2024/9/2 15:41 * * @return JsonModel */ public function selectcheckAction(){ if($this->request->isPost()){ $limit = $this->params()->fromPost('limit',20); $page = $this->params()->fromPost('page',1); $offset = intval(($page - 1) * $limit); $form_item = $this->params()->fromPost('item_id',0);//项目ID $form_item = empty($form_item) ? 0 : $form_item; $selectArr = $this->params()->fromPost('id');//选中数据 $checktime_id = $this->params()->fromPost('checktime_id',0);//检查点ID 不控制必填 if (empty($form_item)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '项目ID参数不正确'); $check_formgroup = $this->LocalService()->dictionaryFormGroup->getOneFieldVal('id','is_del = 0 and code = "CHECKCATE"'); $itemform_check = $check_formid = []; if(!empty($check_formgroup)){ $itemform_checks = $this->LocalService()->itemForm->fetchCol('checklist_id',[ 'is_del' => 0, new Operator('checklist_id', Operator::OP_GT, 0), 'group_id' => $check_formgroup, 'item_id' => $form_item, ]); $itemform_check = !empty($itemform_checks) ? array_values($itemform_checks) : []; $check_formid = !empty($itemform_checks) ? array_keys($itemform_checks) : []; } unset($check_formgroup); $category_where = [ 'is_del' => 0, ]; if(!empty($itemform_check)){ $category_where[] = [ 'or' => [ 'is_form' => 1, 'id' => StringHelper::toArray($itemform_check), ] ]; }else{ $category_where['is_form'] = 1; } $category_name_arr = $this->LocalService()->DictionaryCheckcategory->fetchCol('category_name',$category_where);//分类名称 unset($category_where); unset($itemform_check); //获取该项目下的检查项 $where = [ 'is_del' => 0, 'item_id' => $form_item, ]; if(!empty($checktime_id)){ //根据检查点 查询表单ID if(!empty($checktime_id)){ if(!is_array($checktime_id)){ $checktime_id = explode(',',$checktime_id); } } $form_ids_where = 'id < 0'; if(!empty($check_formid)){ $form_ids_where = [ 'is_del' => 0, 'item_id' => $form_item, 'check_id' => StringHelper::toArray($checktime_id), 'form_id' => StringHelper::toArray($check_formid), ]; } $form_ids = $this->LocalService()->itemCheckcontent->fetchCol('form_id',$form_ids_where); //根据表单ID 查询分类 $checklist_where = 'id<0'; if(!empty($form_ids)){ $checklist_where = [ 'is_del' => 0, 'item_id' => $form_item, 'id' => StringHelper::toArray($form_ids), new Operator('checklist_id', Operator::OP_GT, 0), ]; } $checklist_ids = $this->LocalService()->itemForm->fetchCol('checklist_id',$checklist_where); if(!empty($checklist_ids)){ $where['category_id'] = StringHelper::toArray($checklist_ids); }else{ $where = [ 'id' => 0, ]; } }else{ if(!empty($category_name_arr)){ $where[] = [ 'or' => [ 'category_id' => StringHelper::toArray(array_values(array_keys($category_name_arr))), new Operator('form_field_id', Operator::OP_GT, 0), ] ]; }else{ $where[] = new Operator('form_field_id', Operator::OP_GT, 0); } } $total = $this->LocalService()->itemCheckname->getCount($where); $datas = $this->LocalService()->itemCheckname->fetchAll([ 'where'=>$where, 'columns'=>['id','category_id','title'=>'name'], 'order'=>['category_id','checkname_order'], 'limit'=>$limit, 'offset'=>$offset ]); unset($where); if(!empty($datas)){ foreach($datas as &$data){ if(isset($category_name_arr[$data['category_id']]) && !empty($category_name_arr[$data['category_id']])){ $data['title'] = $category_name_arr[$data['category_id']].'-'.$data['title']; } unset($data['category_id']); } } unset($itemcheckDatas); //选中数据回显 $selectDatas = []; if(!empty($selectArr)){ if(!is_array($selectArr)){ $selectArr = explode(',',$selectArr); } }else{ $selectArr = []; } if(!empty($selectArr)){ $selectDatas = $this->LocalService()->itemCheckname->fetchAll([ 'where'=> [ 'is_del' => 0, 'item_id' => $form_item, 'id' => StringHelper::toArray($selectArr), ], 'columns'=>['id','category_id','title'=>'name'], 'order'=>['category_id','checkname_order'] ]); if(!empty($selectDatas)){ foreach($selectDatas as &$selectData){ if(isset($category_name_arr[$selectData['category_id']]) && !empty($category_name_arr[$selectData['category_id']])){ $selectData['title'] = $category_name_arr[$selectData['category_id']].'-'.$selectData['title']; } unset($selectData['category_id']); } } } unset($category_name_arr); //表单数据返回 $FormFileData = [ ['label' => '检查项','prop' => 'title'] ]; return $this->RenderApiJson()->success($datas,'',['total'=>$total,'selectData'=>$selectDatas,'FormFileData'=>$FormFileData,'limit'=>$limit,'page'=>$page]); }else{ return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR,'非法请求'); } } /** * Notes: 选择参考表单检查点 可选全部的检查点 * @param * @return * @author haojinhua * @date 2025-04-07 */ public function selectformchecktimeAction(){ if($this->request->isPost()){ $limit = $this->params()->fromPost('limit',20); $page = $this->params()->fromPost('page',1); $offset = intval(($page - 1) * $limit); $form_item = $this->params()->fromPost('item_id',0);//项目ID $form_item = empty($form_item) ? 0 : $form_item; $selectArr = $this->params()->fromPost('id');//选中数据 if (empty($form_item)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '参数不正确'); $where = [ 'is_del' => 0, 'item_id' => $form_item, ]; $total = $this->LocalService()->itemChecktime->getCount($where); $datas = $this->LocalService()->itemChecktime->fetchAll([ 'where'=>$where, 'columns'=>['id','title'=>'check_name'], 'order'=>['check_order'], 'limit'=>$limit, 'offset'=>$offset ]); unset($where); //选中数据回显 $selectDatas = []; if(!empty($selectArr)){ if(!is_array($selectArr)){ $selectArr = explode(',',$selectArr); } }else{ $selectArr = []; } if(!empty($selectArr)){ $selectDatas = $this->LocalService()->itemChecktime->fetchAll([ 'where'=> [ 'is_del' => 0, 'item_id' => $form_item, 'id' => StringHelper::toArray($selectArr), ], 'columns'=>['id','title'=>'check_name'], 'order'=>['check_order'] ]); } //表单数据返回 $FormFileData = [ ['label' => '检查点','prop' => 'title'] ]; return $this->RenderApiJson()->success($datas,'',['total'=>$total,'selectData'=>$selectDatas,'FormFileData'=>$FormFileData,'limit'=>$limit,'page'=>$page]); }else{ return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR,'非法请求'); } } /** * Notes: 选择参照表单 * User: lltyy * DateTime: 2024/9/2 15:41 * * @return JsonModel */ public function selectformAction(){ if($this->request->isPost()){ $limit = $this->params()->fromPost('limit',20); $page = $this->params()->fromPost('page',1); $offset = intval(($page - 1) * $limit); $form_item = $this->params()->fromPost('item_id',0);//项目ID $form_item = empty($form_item) ? 0 : $form_item; $form_id = $this->params()->fromPost('form_id',0);//表单ID $form_id = empty($form_id) ? 0 : $form_id; $selectArr = $this->params()->fromPost('id');//选中数据 $form_checktime_id = $this->params()->fromPost('form_checktime_id'); if (empty($form_item) || empty($form_id)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '参数不正确'); //获取该项目下的检查项 只能选择未设置为隐私的字段 $where = [ 'is_del' => 0, 'parent' => 0, new NotIn('type', [13, 14, 19]), 'item_id' => $form_item, new Operator('id', Operator::OP_NE, $form_id), 'is_hide' => 0, ]; //获取表单ID $form_group_arr = $this->LocalService()->dictionaryFormGroup->fetchCol('id','is_del = 0 and code in ("GC","RDG","GCO","Telephone_Follow_Up")'); $form_group_arr = !empty($form_group_arr) ? array_values($form_group_arr) : []; $select_form_where = [ 'is_del' => 0, 'type' => 0, 'item_id' => $form_item, new Operator('id', Operator::OP_NE, $form_id), ]; if(!empty($form_group_arr)){ $select_form_where['group_id'] = StringHelper::toArray($form_group_arr); }else{ $select_form_where = [ 'id' => 0, ]; } unset($form_group_arr); $form_arr = $this->LocalService()->itemForm->fetchCol('name',$select_form_where); unset($select_form_where); if(!empty($form_arr)){ if(!empty($form_checktime_id)){ //根据检查点 查询表单ID if(!empty($form_checktime_id)){ if(!is_array($form_checktime_id)){ $form_checktime_id = explode(',',$form_checktime_id); } } //查询检查点下的表单ID $form_ids_where = [ 'is_del' => 0, 'item_id' => $form_item, 'form_id' => StringHelper::toArray(array_values(array_keys($form_arr))), ]; if(!empty($form_checktime_id)){ $form_ids_where['check_id'] = StringHelper::toArray($form_checktime_id); } $form_ids = $this->LocalService()->itemCheckcontent->fetchCol('form_id',$form_ids_where); $where['form_id'] = StringHelper::toArray($form_ids); }else{ $where['form_id'] = StringHelper::toArray(array_values(array_keys($form_arr))); } //去除被关联的表单内容 $select_relation_field_arr = $this->LocalService()->itemFormFieldRadio->fetchCol('relation_information','relation_classification = 2 and relation_information != "" and relation_information is not null'); if(!empty($select_relation_field_arr)){ foreach($select_relation_field_arr as $select_relation_fieldkey=>$select_relation_field){ $new_arr = []; $select_relation_fields = !empty($select_relation_field) ? explode(',',$select_relation_field) : []; foreach($select_relation_fields as $select_relation_fieldid){ if(!empty($select_relation_fieldid)){ $new_arr[] = $select_relation_fieldid; } } if(!empty($new_arr)){ $select_relation_field_arr[$select_relation_fieldkey] = implode(',',$new_arr); }else{ unset($select_relation_field_arr[$select_relation_fieldkey]); } } } if(!empty($select_relation_field_arr)){ $where[] = new NotIn('id', array_values($select_relation_field_arr)); } unset($select_relation_field_arr); }else{ $where = [ 'id' => 0, ]; } $total = $this->LocalService()->itemFormField->getCount($where); $datas = $this->LocalService()->itemFormField->fetchAll([ 'where'=>$where, 'columns'=>['id','form_id','title'=>'name'], 'order'=>['form_id','order'], 'limit'=>$limit, 'offset'=>$offset ]); unset($where); if(!empty($datas)){ foreach($datas as &$data){ if(isset($form_arr[$data['form_id']]) && !empty($form_arr[$data['form_id']])){ $data['title'] = $form_arr[$data['form_id']].'-'.$data['title']; } unset($data['form_id']); } } //选中数据回显 $selectDatas = []; if(!empty($selectArr)){ if(!is_array($selectArr)){ $selectArr = explode(',',$selectArr); } }else{ $selectArr = []; } if(!empty($selectArr)){ $selectDatas = $this->LocalService()->itemFormField->fetchAll([ 'where'=> [ 'is_del' => 0, 'item_id' => $form_item, 'id' => StringHelper::toArray($selectArr), ], 'columns'=>['id','form_id','title'=>'name'], 'order'=>['form_id','order'] ]); if(!empty($selectDatas)){ foreach($selectDatas as $selectKey=>&$selectData){ if(isset($form_arr[$selectData['form_id']]) && !empty($form_arr[$selectData['form_id']])){ $selectData['title'] = $form_arr[$selectData['form_id']].'-'.$selectData['title']; unset($selectData['form_id']); }else{ unset($selectDatas[$selectKey]); } } } } $selectDatas = array_values($selectDatas); unset($form_arr); //表单数据返回 $FormFileData = [ ['label' => '检查项','prop' => 'title'] ]; return $this->RenderApiJson()->success($datas,'',['total'=>$total,'selectData'=>$selectDatas,'FormFileData'=>$FormFileData,'limit'=>$limit,'page'=>$page]); }else{ return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR,'非法请求'); } } public function formFieldSelectAction(): JsonModel { $item_id = $this->params()->fromPost('item_id', 0); // 只获取已关联检查点的表单 $itemFormIdList = array_flip(array_unique($this->LocalService()->itemCheckcontent->fetchCol('form_id', [ 'item_id' => $item_id, 'is_del' => 0 ]) ?? [])); $itemFormNameList = array_intersect_key($this->LocalService()->itemForm->fetchCol('name',[ 'item_id' => $item_id, 'is_del' => 0, ]) ?? [], $itemFormIdList); $result = []; if(!empty($itemFormNameList)) { $itemFormFieldNameList = $this->LocalService()->itemFormField->fetchAll([ 'where' => [ 'item_id' => $item_id, 'is_del' => 0, 'is_item_form_source' => 1 ], 'columns' => ['id', 'form_id', 'name'], 'order' => ['form_id', 'order'], ]); array_walk($itemFormFieldNameList, function (&$itemFormField) use (&$itemFormNameList, &$result){ // 医嘱共享图片字段追加“药物名称”字样 $itemFormField['name'] .= $this->LocalService()->itemFormField->validDrugShareImg($itemFormField['id']) ? '/ 医嘱药物名称' : ''; if(isset($itemFormNameList[$itemFormField['form_id']])) { if(!isset($result[$itemFormField['form_id']])) { $result[$itemFormField['form_id']] = [ 'id' => $itemFormField['form_id'], 'name' => $itemFormNameList[$itemFormField['form_id']], ]; } $result[$itemFormField['form_id']]['children'][] = $itemFormField; } }); } return $this->RenderApiJson()->success( ArrayUtils::merge( [ $this->LocalService()->itemFormField->generateCollecttypeFieldSelect() ], array_values($result) ) ); } public function formChecktimeSelectAction(): JsonModel { $form_id = $this->params()->fromPost('form_id', 0); $item_id = $this->params()->fromPost('item_id', 0); $checktimeIdList = array_unique($this->LocalService()->itemCheckcontent->fetchCol('check_id', ArrayUtils::merge([ 'item_id' => $item_id, 'is_del' => 0 ], $form_id == '-1' ? [] : ['form_id' => $form_id]))); $result = []; if(!empty($checktimeIdList)) { $stageNameList = $this->LocalService()->itemResearchstage->fetchCol('stage_name', [ 'item_id' => $item_id, 'is_del' => 0 ]); $result = $this->LocalService()->itemChecktime->fetchAll([ 'where' => [ 'item_id' => $item_id, 'is_del' => 0, 'id' => StringHelper::toArray($checktimeIdList), ], 'columns' => ['id', 'name' => 'check_name', 'stage_id'], 'order' => ['check_order' => 'asc'] ]); foreach($result as &$checktime){ $checktime['name'] = $stageNameList[$checktime['stage_id']] . ' / ' . $checktime['name']; } } return $this->RenderApiJson()->Success($result); } public function checktimeFormRealtionAction() { $main_id = $this->params()->fromPost('main_id', 0); if($main_id == 0) return $this->RenderApiJson()->Success(); $checktime_id = $this->params()->fromPost('checktime_id',0); $type = $this->params()->fromPost('type',1); // 1 检查项 2 表单 $item_id = $this->params()->fromPost('item_id',0); if($type == 1){ //检查项对应的化验单ID $category_id = $this->LocalService()->itemCheckname->getOneFieldVal('category_id',[ 'id' => $main_id, 'is_del' => 0 ]); $form_id = $this->LocalService()->itemForm->getOneFieldVal('id',[ 'item_id' => $item_id, 'checklist_id' => $category_id, 'is_del' => 0 ]); }else{ //字段对应的表单ID $form_id = $this->LocalService()->itemFormField->getOneFieldVal('form_id',[ 'id' => $main_id, 'is_del' => 0 ]); } $check_id = $this->LocalService()->itemCheckcontent->fetchCol('check_id', [ 'is_del' => 0, 'form_id' => $form_id, 'check_id' => StringHelper::toArray($checktime_id) ]); if(!$check_id) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR,'设置有误'); $checkInfo = $this->LocalService()->itemChecktime->fetchCol('check_name',[ 'id' => StringHelper::toArray($check_id) ]); $back = []; foreach($checkInfo as $k=>$v){ $arr['id'] = $k; $arr['name'] = $v; $back[] = $arr; } return $this->RenderApiJson()->Success($back); } }