To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of phones to be repaired as \(P\) and the number of laptops to be repaired as \(L\).

The objective is to maximize profit. The profit from repairing a phone is $50, and the profit from repairing a laptop is $60. Therefore, the total profit can be represented as \(50P + 60L\).

There are two constraints based on the time available for inspection and fixing:
1. Inspection Time Constraint: Each phone requires 20 minutes of inspection, and each laptop requires 30 minutes of inspection. The total available time for inspection is 6000 minutes. This can be represented as \(20P + 30L \leq 6000\).
2. Fixing Time Constraint: Each phone requires 30 minutes of fixing, and each laptop requires 50 minutes of fixing. The total available time for fixing is 7000 minutes. This can be represented as \(30P + 50L \leq 7000\).

Additionally, we have non-negativity constraints since the number of phones and laptops cannot be negative: \(P \geq 0\) and \(L \geq 0\).

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
model = Model("Electronics_Repair")

# Define the decision variables
P = model.addVar(lb=0, vtype=GRB.INTEGER, name="Phones")
L = model.addVar(lb=0, vtype=GRB.INTEGER, name="Laptops")

# Define the objective function: Maximize profit
model.setObjective(50*P + 60*L, GRB.MAXIMIZE)

# Add constraints
# Inspection time constraint
model.addConstr(20*P + 30*L <= 6000, "Inspection_Time")
# Fixing time constraint
model.addConstr(30*P + 50*L <= 7000, "Fixing_Time")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution: Repair {P.x} phones and {L.x} laptops.")
    print(f"Maximum profit: ${model.ObjVal}")
else:
    print("No optimal solution found.")
```