error('账号未绑定工厂'); } $this->model = new WorkorderModel; $map = [ 'index' => 'workorder.view', 'info' => 'workorder.view', 'add' => 'workorder.edit', 'edit' => 'workorder.edit', 'del' => 'workorder.delete', ]; $action = strtolower($this->request->action()); if (isset($map[$action]) && FactoryPerm::deny($map[$action])) { $this->error('没有权限:' . FactoryPerm::label($map[$action])); } } /** * 列表 */ public function index() { $limit = $this->request->request('limit/d', 10); $keyword = $this->request->request('keyword', '', 'trim'); $query = $this->model->with(['product'])->order('id desc'); if ($keyword !== '') { $query->where('no|batch_no|customer|product_name|spec|remark', 'like', '%' . $keyword . '%'); } $list = $query->paginate($limit); $this->success('', ['total' => $list->total(), 'rows' => $list->items()]); } /** * 详情 */ public function info() { $id = $this->request->request('id/d'); $row = $this->model->with(['processes', 'product.processes'])->find($id); if (!$row) { $this->error(__('No Results were found')); } $this->success('', $row); } /** * 添加 */ public function add() { $params = $this->request->post(); if (!$params) { $this->error(__('Parameter %s can not be empty', '')); } $params['creator_user_id'] = $this->auth->id; unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']); $params = $this->normalizeProduct($params); $processes = isset($params['processes']) ? $params['processes'] : []; unset($params['processes']); $this->model->allowField(true)->save($params); if (!$processes && !empty($params['product_id'])) { $product = ProductModel::with('processes')->find($params['product_id']); $processes = $product ? $product['processes'] : []; } ProcessWriter::save($this->model->id, $processes, 'workorder'); $this->success('', ['id' => $this->model->id]); } /** * 编辑 */ public function edit() { $id = $this->request->post('id/d'); $row = $this->model->find($id); if (!$row) { $this->error(__('No Results were found')); } $params = $this->request->post(); unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']); $params = $this->normalizeProduct($params); $processes = isset($params['processes']) ? $params['processes'] : null; unset($params['processes']); $row->allowField(true)->save($params); if (is_array($processes)) { ProcessWriter::save($row->id, $processes, 'workorder'); } $this->success(); } /** * 删除 */ public function del() { $ids = $this->request->post('id'); if (!$ids) { $this->error(__('Parameter %s can not be empty', 'id')); } $list = $this->model->where('id', 'in', $ids)->select(); foreach ($list as $row) { \think\Db::name('ps_workorder_process')->where('workorder_id', $row->id)->delete(); $row->delete(); } $this->success(); } /** * 产品可选:选了带出名称,不选则必填名称。 * * @param array $params * @return array */ protected function normalizeProduct(array $params) { $productId = (int)($params['product_id'] ?? 0); $name = trim((string)($params['product_name'] ?? '')); $spec = trim((string)($params['spec'] ?? '')); unset($params['name']); $product = null; if ($productId > 0) { $product = ProductModel::get($productId); } if ($productId > 0 && $name === '') { $name = $product ? (string)$product['name'] : ''; } if ($name === '') { $this->error('请选择产品或填写名称'); } if ($spec === '' && $product) { $spec = (string)$product['spec']; } $params['product_id'] = $productId; $params['product_name'] = mb_substr($name, 0, 100); $params['spec'] = mb_substr($spec, 0, 100); return $params; } }