An idea is, creating a column as flag to check whether the workflow has been run on the current item before.
In the a Globally Reusable workflow, create a column as association column. Set the default value of this column to “No” (means the workflow has not been run yet).
At the beginning of the workflow, check whether the column value is “No”. If the column value equals to “No”, continue to run the approval steps. Otherwise, skip the approval.
At the end of the workflow, set the column value to “Yes” (means the workflow has been run).
If user wants to start the workflow again, the approval will not be run as the column value matches the value “Yes”.
For classic, we can use these web part. As you are using the modern view, you may need SPFx.