#JavaScript (ES6), <s>142</s> 140 bytes
I thought this might have turned out shorter than it did.

    n=>(v=[...Array(n)].map(_=>`${t=" "[r="repeat"](n-x)}\\${s=" "[r](--x)}|${s}/${t}
    `,x=n).join``)+`${h="-"[r](n)}O`+h+[...v].reverse().join``

---
##Try It

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

    f=
    n=>(v=[...Array(n)].map(_=>`${t=" "[r="repeat"](n-x)}\\${s=" "[r](--x)}|${s}/${t}
    `,x=n).join``)+`${h="-"[r](n)}O`+h+[...v].reverse().join``
    i.addEventListener("input",_=>o.innerText=f(+i.value))
    o.innerText=f(i.value=1)

<!-- language: lang-html -->

    <input id=i type=number><pre id=o>

<!-- end snippet -->