120.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
  1. exports.ids = [120];
  2. exports.modules = {
  3. /***/ 126:
  4. /***/ (function(module, exports, __webpack_require__) {
  5. module.exports = __webpack_require__.p + "img/new404.b64d371.png";
  6. /***/ }),
  7. /***/ 127:
  8. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9. "use strict";
  10. __webpack_require__.r(__webpack_exports__);
  11. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88);
  12. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
  13. /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
  14. /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_404_vue_vue_type_style_index_0_id_fc4c9348_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
  15. /***/ }),
  16. /***/ 136:
  17. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  18. "use strict";
  19. // CONCATENATED MODULE: ./node_modules/@nuxt/webpack/node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@nuxt/webpack/node_modules/vue-loader/lib??vue-loader-options!./components/error_page/404.vue?vue&type=template&id=fc4c9348&scoped=true&
  20. var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"main-404",class:{ 'main-404-fixed': _vm.isFixedHeader }},[_vm._ssrNode(((_vm.message)?("<div data-v-fc4c9348>"+_vm._ssrEscape(_vm._s(_vm.message))+"</div>"):("<img"+(_vm._ssrAttr("src",__webpack_require__(126)))+" alt=\"404\" class=\"img-404\" data-v-fc4c9348>")))])}
  21. var staticRenderFns = []
  22. // CONCATENATED MODULE: ./components/error_page/404.vue?vue&type=template&id=fc4c9348&scoped=true&
  23. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/@nuxt/webpack/node_modules/vue-loader/lib??vue-loader-options!./components/error_page/404.vue?vue&type=script&lang=js&
  24. //
  25. //
  26. //
  27. //
  28. //
  29. //
  30. //
  31. /* harmony default export */ var _404vue_type_script_lang_js_ = ({
  32. name: 'ErrorPage404',
  33. props: {
  34. message: {
  35. type: String,
  36. default: ''
  37. }
  38. },
  39. computed: {
  40. isFixedHeader() {
  41. let isFixedHeader = false;
  42. const routeName = this.$route.name;
  43. if (routeName.indexOf('SeoConsultUser') > -1) {
  44. isFixedHeader = true;
  45. }
  46. return isFixedHeader;
  47. }
  48. }
  49. });
  50. // CONCATENATED MODULE: ./components/error_page/404.vue?vue&type=script&lang=js&
  51. /* harmony default export */ var error_page_404vue_type_script_lang_js_ = (_404vue_type_script_lang_js_);
  52. // EXTERNAL MODULE: ./node_modules/@nuxt/webpack/node_modules/vue-loader/lib/runtime/componentNormalizer.js
  53. var componentNormalizer = __webpack_require__(1);
  54. // CONCATENATED MODULE: ./components/error_page/404.vue
  55. function injectStyles (context) {
  56. var style0 = __webpack_require__(127)
  57. if (style0.__inject__) style0.__inject__(context)
  58. }
  59. /* normalize component */
  60. var component = Object(componentNormalizer["a" /* default */])(
  61. error_page_404vue_type_script_lang_js_,
  62. render,
  63. staticRenderFns,
  64. false,
  65. injectStyles,
  66. "fc4c9348",
  67. "34c277a4"
  68. )
  69. /* harmony default export */ var _404 = __webpack_exports__["a"] = (component.exports);
  70. /***/ }),
  71. /***/ 261:
  72. /***/ (function(module, exports) {
  73. // Exports
  74. module.exports = {};
  75. /***/ }),
  76. /***/ 262:
  77. /***/ (function(module, exports) {
  78. // Exports
  79. module.exports = {};
  80. /***/ }),
  81. /***/ 551:
  82. /***/ (function(module, exports, __webpack_require__) {
  83. module.exports = __webpack_require__.p + "img/consult@2x.b81fe4d.png";
  84. /***/ }),
  85. /***/ 552:
  86. /***/ (function(module, exports) {
  87. module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAALKADAAQAAAABAAAALAAAAAD8buejAAACdklEQVRYCe2Zv4sTQRTHs5fEFQvRwkK4yiu00FaQFKbxx79goXBNEpBUFsepIFdco1jmt2BrYSmiXH0exFrwEAUbQbk7UAQT3Ev8vCMLMrDzJjorCDMwvMy8977z3e++TfGmUAgjXwUiF/hmsxmPx+NbURTdmE6nS+SUXPIcYqbE7DCfl8vle61W66OWoxIWsqPR6AVkqxrYX/p3EePiYDB4Y8NRlZopK2R/Mu8DugH5kQ3U1VcsFqMkSc6Bt0bOSexj7HlbvqpwvV5/C8nTgKz3+/27NrA/9XHGBc54Jfk8xJlOp7OdhbWQ5Uj3AZKaLYiy6Z5v2+v1tlD3m+Ci+CkbvkqY5IOy8VUGWWQQZCw+FC5mxci+C2Fb/j/3BcJ5Sx4UDgobCoSSMATxvgwKe5fUAAwKG4J4XwaFvUtqAAaFDUG8L4PC3iU1AIPChiDel0Fh75IagP+dwmqrKn1A+hLX6dBU07VvS1/iiAumM2EAb7oA5h3jTBiFNyG9lxchsK9wxiENfx7CK/TANjVA8ddqtXKpVIrb7fZ3l/hZzhfsCS3e+0fXaDSqHPqZpt5XiN/RCMzr906YV3sbEseZgr0GaaePyZW4C+FEwCBy2AWUuE+/xUnNSyNcHdRvLEH7DFuwShig9wIAkcs2oNRHKTT5/Yi8Z9irNMFVwrOG9lHBoPY/iM0aageeVyqveJ2ZQOLBZDJ5ifVyZQDOAnhnsQdXBpzxmge0Xhmo/xJxHD/kUuYSoFVUXsWuZj39vPvgFcBL0+RSZjldZFlrt1uShsPhfqVSeUJp/QB8ka1jTLWUJNdhpNdeT7n2utbtdt855ISQXBX4BfRivdyFwJl0AAAAAElFTkSuQmCC"
  88. /***/ }),
  89. /***/ 553:
  90. /***/ (function(module, exports, __webpack_require__) {
  91. module.exports = __webpack_require__.p + "img/wechat-icon@2x.2799dc0.png";
  92. /***/ }),
  93. /***/ 554:
  94. /***/ (function(module, exports, __webpack_require__) {
  95. module.exports = __webpack_require__.p + "img/email-icon@2x.2ade157.png";
  96. /***/ }),
  97. /***/ 555:
  98. /***/ (function(module, exports, __webpack_require__) {
  99. module.exports = __webpack_require__.p + "img/icon_chat@2x.0394cc4.png";
  100. /***/ }),
  101. /***/ 556:
  102. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  103. "use strict";
  104. __webpack_require__.r(__webpack_exports__);
  105. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(261);
  106. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);
  107. /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
  108. /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_0_id_8476bef6_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a);
  109. /***/ }),
  110. /***/ 557:
  111. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  112. "use strict";
  113. __webpack_require__.r(__webpack_exports__);
  114. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(262);
  115. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
  116. /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
  117. /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_nuxt_webpack_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_webpack_node_modules_vue_loader_lib_index_js_vue_loader_options_id_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a);
  118. /***/ }),
  119. /***/ 795:
  120. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  121. "use strict";
  122. // ESM COMPAT FLAG
  123. __webpack_require__.r(__webpack_exports__);
  124. // CONCATENATED MODULE: ./node_modules/@nuxt/webpack/node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@nuxt/webpack/node_modules/vue-loader/lib??vue-loader-options!./pages/frontend/skill/detail/_id.vue?vue&type=template&id=8476bef6&scoped=true&
  125. var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isExist)?_c('ErrorPage404'):_c('div',{class:_vm.mobile ? 'mobileMain' : 'mobileWeb',style:({marginTop: _vm.mainMarginTop})},[(!_vm.mobile)?_c('div',{staticClass:"skill-detail-wrapper"},[_c('div',{staticClass:"skill-info"},[_c('img',{staticClass:"cover",attrs:{"src":((_vm.skillDetail.coverImage) + "?x-oss-process=image/resize,w_800"),"alt":""}}),_vm._v(" "),_c('div',{staticClass:"info-wrapper"},[_c('div',{staticClass:"title"},[_vm._v(_vm._s(_vm.skillDetail.title))]),_vm._v(" "),_c('div',{staticClass:"owner-content"},[_c('a',{staticClass:"owner-info",attrs:{"href":("/wo/" + (_vm.skillDetail.user.uid))}},[_c('img',{attrs:{"src":_vm.skillDetail.user.icon_url,"alt":"avatar"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.skillDetail.user.nickname))])])]),_vm._v(" "),_c('div',{staticClass:"price-content"},[_c('div',{staticClass:"price-text"},[_vm._v("¥"+_vm._s(_vm.skillDetail.price))]),_vm._v(" "),(_vm.skillDetail.buy_num > 0)?_c('div',{staticClass:"buy-num"},[_c('span',[_vm._v(_vm._s(_vm.skillDetail.buy_num)+"人")]),_vm._v("已购买")]):_vm._e()]),_vm._v(" "),(_vm.skillDetail.user.uid != _vm.userinfo.uid)?_c('div',{staticClass:"actions"},[(Number(_vm.skillDetail.is_buy) > 0)?_c('el-button',{staticClass:"btn-1",attrs:{"disabled":""}},[_vm._v("已购买")]):_c('el-button',{staticClass:"btn-1",on:{"click":_vm.handleBuySkill}},[_vm._v("立即购买")]),_vm._v(" "),(Number(_vm.skillDetail.is_buy) > 0)?_c('el-button',{staticClass:"btn-2",on:{"click":_vm.handleConsultSkill}},[_c('div',{staticClass:"btn-content"},[_c('img',{attrs:{"src":__webpack_require__(551),"alt":"consult,icon"}}),_vm._v(" "),_c('span',[_vm._v("咨询")])])]):_vm._e()],1):_vm._e()]),_vm._v(" "),_c('div',{staticClass:"qrcode-content"},[_c('img',{attrs:{"src":("/api/user/pubQrcode?uid=" + (_vm.skillDetail.user.uid) + "&type=1&pid=" + (_vm.skillDetail.sale_id)),"alt":""}}),_vm._v(" "),_c('div',{staticClass:"qrcode-tips"},[_c('a',{attrs:{"href":"/index/app","target":"_blank"}},[_vm._v("下载app")]),_vm._v(" "),_c('span',[_vm._v("扫码即可沟通")])])])]),_vm._v(" "),_c('div',{staticClass:"skill-content"},[_c('div',{staticClass:"common-title"},[_vm._v("服务描述")]),_vm._v(" "),(_vm.skillDetail.imageList.length > 0)?_c('div',{staticClass:"skill-image-list"},_vm._l((_vm.skillDetail.imageList),function(item){return _c('img',{key:item,attrs:{"src":(item + "?x-oss-process=image/resize,w_800"),"alt":"skill,skillImage"}})}),0):_vm._e(),_vm._v(" "),_c('div',{staticClass:"ql-snow content-text"},[_c('div',{staticClass:"ql-editor",domProps:{"innerHTML":_vm._s(_vm.skillDetail.content)}})]),_vm._v(" "),(false)?undefined:_vm._e()]),_vm._v(" "),_c('el-dialog',{attrs:{"title":((_vm.skillDetail.user.nickname) + "的联系方式"),"visible":_vm.showUserContactDialog,"width":"35%","center":""},on:{"update:visible":function($event){_vm.showUserContactDialog=$event}}},[_c('div',{staticClass:"contact-wrapper"},[_c('div',{staticClass:"contact-item"},[_c('img',{attrs:{"src":__webpack_require__(552),"alt":""}}),_vm._v(" "),_c('div',{staticClass:"contact-text"},[_vm._v(_vm._s(_vm.skillDetail.user.tel || '未留存'))])]),_vm._v(" "),_c('div',{staticClass:"contact-item"},[_c('img',{attrs:{"src":__webpack_require__(553),"alt":""}}),_vm._v(" "),_c('div',{staticClass:"contact-text"},[_vm._v(_vm._s(_vm.skillDetail.user.weixin || '未留存'))])]),_vm._v(" "),_c('div',{staticClass:"contact-item"},[_c('img',{attrs:{"src":__webpack_require__(554),"alt":""}}),_vm._v(" "),_c('div',{staticClass:"contact-text"},[_vm._v(_vm._s(_vm.skillDetail.user.email || '未留存'))])])])])],1):_c('div',{staticClass:"skill-detail-wrapper-mobile"},[_c('div',{staticClass:"image-list"},[_c('div',{directives:[{name:"swiper",rawName:"v-swiper:mySwiper",value:(_vm.swiperOption),expression:"swiperOption",arg:"mySwiper"}],staticClass:"image-swiper"},[_c('div',{staticClass:"swiper-wrapper"},[_c('div',{staticClass:"swiper-slide"},[_c('img',{attrs:{"src":((_vm.skillDetail.coverImage) + "?x-oss-process=image/resize,w_800"),"alt":"skillImage"}})]),_vm._v(" "),_vm._l((_vm.skillDetail.imageList),function(item){return _c('div',{key:item,staticClass:"swiper-slide"},[_c('img',{attrs:{"src":(item + "?x-oss-process=image/resize,w_800"),"alt":"skillImage"}})])})],2),_vm._v(" "),_c('div',{staticClass:"swiper-pagination swiper-pagination-bullets"})])]),_vm._v(" "),_c('div',{staticClass:"skill-info"},[_c('div',{staticClass:"skill-title"},[_vm._v(_vm._s(_vm.skillDetail.title))]),_vm._v(" "),_c('div',{staticClass:"userinfo-wrapper"},[_c('a',{staticClass:"left-info",attrs:{"href":("/wo/" + (_vm.skillDetail.user.uid) + "?from=skill")}},[_c('img',{staticClass:"avatar",attrs:{"src":_vm.skillDetail.user.icon_url,"alt":"avatar"}}),_vm._v(" "),_c('div',{staticClass:"nickname"},[_vm._v(_vm._s(_vm.skillDetail.user.nickname))])]),_vm._v(" "),_c('div',{staticClass:"right-info"})])]),_vm._v(" "),_c('div',{staticClass:"skill-content ql-snow"},[_c('div',{staticClass:"ql-editor",domProps:{"innerHTML":_vm._s(_vm.skillDetail.content)}})]),_vm._v(" "),_c('div',{staticClass:"pay-wrapper"},[_c('div',{staticClass:"price-info"},[_c('div',{staticClass:"price-text"},[_vm._v("¥"+_vm._s(_vm.skillDetail.price))]),_vm._v(" "),_c('span',[_vm._v("支付金额")])]),_vm._v(" "),_c('div',{staticClass:"chat-content"},[_c('div',{staticClass:"chat-btn",on:{"click":_vm.handleClickChat}},[_c('img',{staticClass:"chat-icon",attrs:{"src":__webpack_require__(555)}}),_vm._v(" "),_c('span',{staticClass:"chat-word"},[_vm._v("聊一聊")])])]),_vm._v(" "),(Number(_vm.skillDetail.is_buy) > 0)?_c('el-button',{staticClass:"pay-btn",attrs:{"disabled":""}},[_vm._v("已购买")]):_c('el-button',{staticClass:"pay-btn",on:{"click":_vm.handleBuySkill}},[_vm._v("立即购买")])],1)])])}
  126. var staticRenderFns = []
  127. // CONCATENATED MODULE: ./pages/frontend/skill/detail/_id.vue?vue&type=template&id=8476bef6&scoped=true&
  128. // EXTERNAL MODULE: external "vuex"
  129. var external_vuex_ = __webpack_require__(2);
  130. // CONCATENATED MODULE: ./components/skill/dealSeoDetail.js
  131. class DealSeoData {
  132. constructor({
  133. $axios,
  134. req,
  135. app,
  136. redirect,
  137. error
  138. }) {
  139. this.$axios = $axios;
  140. this.req = req;
  141. this.app = app;
  142. this.redirect = redirect;
  143. this.error = error;
  144. this.skillDetail = {};
  145. this.isExist = true;
  146. }
  147. async dealData() {
  148. let {
  149. name,
  150. query: {
  151. act
  152. },
  153. path,
  154. params,
  155. fullPath
  156. } = this.app.context.route;
  157. const sale_id = params.id || ''; // 重定向
  158. if (path.indexOf('/frontend/skill/detail') > -1) {
  159. this.redirect(301, '/s/' + sale_id);
  160. }
  161. const skillDetail = await this._getSkillDetail(sale_id);
  162. if (skillDetail && skillDetail.image && skillDetail.image.length) {
  163. let imageList = skillDetail.image.split(',');
  164. skillDetail.coverImage = imageList[0] || '';
  165. imageList.splice(0, 1);
  166. skillDetail.imageList = imageList;
  167. }
  168. this.skillDetail = skillDetail;
  169. return {
  170. isExist: this.isExist,
  171. sale_id,
  172. skillDetail,
  173. mobile: this.app.$deviceType.isMobile(),
  174. head: this.dealThisMeta(),
  175. act
  176. };
  177. }
  178. /** 获取技能详情 */
  179. async _getSkillDetail(sale_id) {
  180. let res = await this.$axios.$post('/api/sale/saleInfo', {
  181. sale_id
  182. });
  183. let skillDetail = {};
  184. if (Number(res.status) === 1) {
  185. skillDetail = res.data;
  186. } else if (Number(res.status) === 40001) {
  187. this.isExist = false;
  188. }
  189. return skillDetail;
  190. }
  191. dealThisMeta() {
  192. if (!this.isExist) {
  193. // 页面不存在时
  194. return {
  195. title: "页面不存在-程序员客栈",
  196. keyword: "",
  197. description: "",
  198. h1: "",
  199. canonical: "",
  200. metaLocation: ""
  201. };
  202. }
  203. let content = this.skillDetail.content.trim();
  204. let title = this.skillDetail.title.trim();
  205. const nickname = this.skillDetail.user.nickname;
  206. if (content.length > 15) {
  207. content = content.substring(0, 15);
  208. }
  209. if (title.length > 15) {
  210. title = title.substring(0, 15);
  211. }
  212. let canonical = '';
  213. if (this.req) {
  214. const {
  215. headers: {
  216. host
  217. },
  218. url
  219. } = this.req; //拼接canonical
  220. if (host.indexOf('local') !== -1) {
  221. canonical = 'http://' + host + url;
  222. } else {
  223. canonical = 'https://' + host + url;
  224. }
  225. }
  226. let head = {
  227. title: `${this.skillDetail.title}-程序员客栈技能服务`,
  228. keyword: `${this.skillDetail.user.company},${this.skillDetail.direction_name},${this.skillDetail.title}`,
  229. description: `${nickname}可以为您提供:${title},技能服务是程序员客栈远程工作平台为企业和自由职业者提供的标准化数字服务,通过标准定价的模块化技能,帮助企业和自由职业者快速达成合作。`,
  230. h1: "",
  231. canonical: canonical,
  232. metaLocation: ""
  233. };
  234. return head;
  235. }
  236. }
  237. // EXTERNAL MODULE: external "qs"
  238. var external_qs_ = __webpack_require__(36);
  239. var external_qs_default = /*#__PURE__*/__webpack_require__.n(external_qs_);
  240. // EXTERNAL MODULE: ./node_modules/quill/dist/quill.core.css
  241. var quill_core = __webpack_require__(84);
  242. // EXTERNAL MODULE: ./node_modules/quill/dist/quill.snow.css
  243. var quill_snow = __webpack_require__(85);
  244. // EXTERNAL MODULE: ./components/error_page/404.vue + 4 modules
  245. var _404 = __webpack_require__(136);
  246. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/@nuxt/webpack/node_modules/vue-loader/lib??vue-loader-options!./pages/frontend/skill/detail/_id.vue?vue&type=script&lang=js&
  247. //
  248. //
  249. //
  250. //
  251. //
  252. //
  253. //
  254. //
  255. //
  256. //
  257. //
  258. //
  259. //
  260. //
  261. //
  262. //
  263. //
  264. //
  265. //
  266. //
  267. //
  268. //
  269. //
  270. //
  271. //
  272. //
  273. //
  274. //
  275. //
  276. //
  277. //
  278. //
  279. //
  280. //
  281. //
  282. //
  283. //
  284. //
  285. //
  286. //
  287. //
  288. //
  289. //
  290. //
  291. //
  292. //
  293. //
  294. //
  295. //
  296. //
  297. //
  298. //
  299. //
  300. //
  301. //
  302. //
  303. //
  304. //
  305. //
  306. //
  307. //
  308. //
  309. //
  310. //
  311. //
  312. //
  313. //
  314. //
  315. //
  316. //
  317. //
  318. //
  319. //
  320. //
  321. //
  322. //
  323. //
  324. //
  325. //
  326. //
  327. //
  328. //
  329. //
  330. //
  331. //
  332. //
  333. //
  334. //
  335. //
  336. //
  337. //
  338. //
  339. //
  340. //
  341. //
  342. //
  343. //
  344. //
  345. //
  346. //
  347. //
  348. //
  349. //
  350. //
  351. //
  352. //
  353. //
  354. //
  355. //
  356. //
  357. //
  358. //
  359. //
  360. //
  361. //
  362. //
  363. //
  364. //
  365. //
  366. //
  367. //
  368. //
  369. //
  370. //
  371. //
  372. //
  373. //
  374. //
  375. //
  376. //
  377. //
  378. //
  379. //
  380. //
  381. //
  382. //
  383. //
  384. //
  385. /* harmony default export */ var _idvue_type_script_lang_js_ = ({
  386. name: 'SeoSkillDetail',
  387. data() {
  388. return {
  389. baseUrl: '',
  390. isWeixinApp: true,
  391. swiperOption: {
  392. loop: true,
  393. slidesPerView: "auto",
  394. centeredSlides: true,
  395. spaceBetween: 30,
  396. pagination: {
  397. el: ".swiper-pagination",
  398. dynamicBullets: true
  399. }
  400. },
  401. showUserContactDialog: false
  402. };
  403. },
  404. components: {
  405. ErrorPage404: _404["a" /* default */]
  406. },
  407. head() {
  408. const {
  409. title = "",
  410. keyword = "",
  411. description = "",
  412. h1 = "",
  413. canonical = "",
  414. metaLocation
  415. } = this.head || {};
  416. let obj = {
  417. title: title,
  418. meta: [{
  419. name: "keywords",
  420. content: keyword
  421. }, {
  422. name: "description",
  423. content: description
  424. }, {
  425. name: "h1",
  426. content: h1
  427. }, {
  428. name: "viewport",
  429. content: "width=device-width, initial-scale=1.0, viewport-fit=cover"
  430. }],
  431. link: [{
  432. rel: "canonical",
  433. href: canonical
  434. }]
  435. };
  436. if (metaLocation) {
  437. obj.meta.push({
  438. name: "location",
  439. content: metaLocation
  440. });
  441. }
  442. return obj;
  443. },
  444. computed: { ...Object(external_vuex_["mapState"])(["deviceType"]),
  445. showWxHeader() {
  446. return !this.deviceType.app && !this.isWeixinApp && (this.deviceType.android || this.deviceType.ios);
  447. },
  448. mainMarginTop() {
  449. if (this.mobile && this.showWxHeader) {
  450. return '0 !important';
  451. } else if (this.mobile) {
  452. return '0px !important';
  453. } else {
  454. return '20px !important';
  455. }
  456. }
  457. },
  458. async asyncData({ ...params
  459. }) {
  460. let dealDataObj = new DealSeoData(params);
  461. let ans = await dealDataObj.dealData();
  462. return { ...ans
  463. };
  464. },
  465. mounted() {
  466. const self = this;
  467. this.baseUrl = this.$store.state.domainConfig.siteUrl;
  468. this.isWeixinApp = navigator.userAgent.indexOf("miniProgram") > -1;
  469. if (this.act === 'pay') {
  470. setTimeout(() => {
  471. self.$message.success('购买成功,请等待对方接单');
  472. }, 800);
  473. }
  474. },
  475. methods: {
  476. /** 点击购买时 */
  477. handleBuySkill() {
  478. // this.$message.info('跳转到购买页即可')
  479. const query = {
  480. product_type: 502,
  481. product_id: this.sale_id,
  482. next: location.href + '?act=pay'
  483. };
  484. if (!this.userinfo || !this.userinfo.nickname) {
  485. // 未登录时 => 去登录
  486. if (this.deviceType.ios || this.deviceType.android) {
  487. location.href = "proginn://login?backToPage=true";
  488. } else {
  489. location.href = this.baseUrl + "/?loginbox=show&next=" + encodeURIComponent(location.href);
  490. }
  491. } else {
  492. // 已登录,跳转支付
  493. if (this.deviceType.ios || this.deviceType.android) {
  494. location.href = "proginn://pay?" + external_qs_default.a.stringify(query);
  495. } else {
  496. location.href = this.baseUrl + "/pay?" + external_qs_default.a.stringify(query);
  497. }
  498. }
  499. },
  500. /** 点击咨询时 */
  501. handleConsultSkill() {
  502. if (Number(this.skillDetail.is_buy) > 0) {
  503. // 已购买,弹出用户联系方式弹窗
  504. this.showUserContactDialog = true;
  505. } else {
  506. // 未购买
  507. this.$message.info('请先购买');
  508. }
  509. },
  510. /** 点击聊一聊时 */
  511. handleClickChat() {
  512. if (!this.mobile) {
  513. this.$message.info("请前往程序员客栈APP操作");
  514. return;
  515. } // location.href = `proginn://skill_train/chat?uid=${this.skillDetail.user.uid}&chattype=1&title=${encodeURIComponent(this.skillDetail.title)}&url=${encodeURIComponent(location.href)}`;
  516. location.href = `proginn://scan_ewm/chat?uid=${this.skillDetail.user.uid}&type=1&pid=${this.sale_id}`;
  517. }
  518. }
  519. });
  520. // CONCATENATED MODULE: ./pages/frontend/skill/detail/_id.vue?vue&type=script&lang=js&
  521. /* harmony default export */ var detail_idvue_type_script_lang_js_ = (_idvue_type_script_lang_js_);
  522. // EXTERNAL MODULE: ./node_modules/@nuxt/webpack/node_modules/vue-loader/lib/runtime/componentNormalizer.js
  523. var componentNormalizer = __webpack_require__(1);
  524. // CONCATENATED MODULE: ./pages/frontend/skill/detail/_id.vue
  525. function injectStyles (context) {
  526. var style0 = __webpack_require__(556)
  527. if (style0.__inject__) style0.__inject__(context)
  528. var style1 = __webpack_require__(557)
  529. if (style1.__inject__) style1.__inject__(context)
  530. }
  531. /* normalize component */
  532. var component = Object(componentNormalizer["a" /* default */])(
  533. detail_idvue_type_script_lang_js_,
  534. render,
  535. staticRenderFns,
  536. false,
  537. injectStyles,
  538. "8476bef6",
  539. "8444fa30"
  540. )
  541. /* harmony default export */ var _id = __webpack_exports__["default"] = (component.exports);
  542. /***/ }),
  543. /***/ 84:
  544. /***/ (function(module, exports) {
  545. // Exports
  546. module.exports = {};
  547. /***/ }),
  548. /***/ 85:
  549. /***/ (function(module, exports) {
  550. // Exports
  551. module.exports = {};
  552. /***/ }),
  553. /***/ 88:
  554. /***/ (function(module, exports) {
  555. // Exports
  556. module.exports = {};
  557. /***/ })
  558. };;
  559. //# sourceMappingURL=120.js.map