فهرست منبع

lint: jy-pc eslint 问题修复

zhangyuhan 1 سال پیش
والد
کامیت
906c0911de
68فایلهای تغییر یافته به همراه5028 افزوده شده و 3275 حذف شده
  1. 495 462
      apps/jy-pc/public/tinymce/langs/zh_CN.js
  2. 7 7
      apps/jy-pc/src/App.vue
  3. 42 30
      apps/jy-pc/src/api/index.js
  4. 2 3
      apps/jy-pc/src/api/modules/ad.js
  5. 10 10
      apps/jy-pc/src/api/modules/authen.js
  6. 1 1
      apps/jy-pc/src/api/modules/bigmember.js
  7. 7 7
      apps/jy-pc/src/api/modules/entbase.js
  8. 1 1
      apps/jy-pc/src/api/modules/entniche.js
  9. 4 5
      apps/jy-pc/src/api/modules/front.js
  10. 12 12
      apps/jy-pc/src/api/modules/jyinfo.js
  11. 5 5
      apps/jy-pc/src/api/modules/pay.js
  12. 4 4
      apps/jy-pc/src/api/modules/proposed.js
  13. 3 3
      apps/jy-pc/src/api/modules/public.js
  14. 2 2
      apps/jy-pc/src/api/modules/publicapply.js
  15. 1 1
      apps/jy-pc/src/api/modules/resourceCenter.js
  16. 0 0
      apps/jy-pc/src/assets/fonts/app/iconfont.js
  17. 3 1
      apps/jy-pc/src/assets/style/element.theme.scss
  18. 62 51
      apps/jy-pc/src/assets/tinymce/ax_wordlimit/plugin.js
  19. 62 51
      apps/jy-pc/src/assets/tinymce/ax_wordlimit/plugin.min.js
  20. 145 129
      apps/jy-pc/src/components/article-item/ArticleItem.vue
  21. 166 85
      apps/jy-pc/src/components/collect-info/CollectInfo.vue
  22. 23 19
      apps/jy-pc/src/components/dialog/Dialog.vue
  23. 16 6
      apps/jy-pc/src/components/dialog/WorkspaceButtonGroup.vue
  24. 35 18
      apps/jy-pc/src/components/editor/Editor.vue
  25. 47 42
      apps/jy-pc/src/components/empty/Empty.vue
  26. 10 14
      apps/jy-pc/src/components/layout/ContentLayOut.vue
  27. 16 10
      apps/jy-pc/src/components/result/Result.vue
  28. 18 8
      apps/jy-pc/src/components/reward/Reward.vue
  29. 26 11
      apps/jy-pc/src/components/search-input/SearchInput.vue
  30. 18 16
      apps/jy-pc/src/components/selector/AreaSelector.vue
  31. 310 224
      apps/jy-pc/src/components/selector/AreaSelectorContent.vue
  32. 10 12
      apps/jy-pc/src/components/selector/IndustrySelector.vue
  33. 143 105
      apps/jy-pc/src/components/selector/IndustrySelectorContent.vue
  34. 198 179
      apps/jy-pc/src/components/selector/SelectorCard.vue
  35. 10 12
      apps/jy-pc/src/components/selector/TimeSelector.vue
  36. 120 95
      apps/jy-pc/src/components/selector/TimeSelectorContent.vue
  37. 11 15
      apps/jy-pc/src/components/steps/StepItem.vue
  38. 1 1
      apps/jy-pc/src/components/toast/CustomToast.vue
  39. 19 13
      apps/jy-pc/src/store/user.js
  40. 16 12
      apps/jy-pc/src/utils/index.js
  41. 11 6
      apps/jy-pc/src/utils/math.js
  42. 8 8
      apps/jy-pc/src/utils/mixins/visited.js
  43. 10 6
      apps/jy-pc/src/utils/toast/index.js
  44. 68 38
      apps/jy-pc/src/utils/utils.js
  45. 2 4
      apps/jy-pc/src/views/404.vue
  46. 79 45
      apps/jy-pc/src/views/authen/Index.vue
  47. 270 128
      apps/jy-pc/src/views/authen/components/addEditCom.vue
  48. 148 126
      apps/jy-pc/src/views/authen/components/upload.vue
  49. 62 44
      apps/jy-pc/src/views/authen/components/viewCom.vue
  50. 359 215
      apps/jy-pc/src/views/demand-detail/Detail.vue
  51. 64 44
      apps/jy-pc/src/views/equity/Exchange.vue
  52. 202 89
      apps/jy-pc/src/views/issued-detail/Detail.vue
  53. 93 50
      apps/jy-pc/src/views/issued/Index.vue
  54. 427 149
      apps/jy-pc/src/views/issued/components/IssuedForm.vue
  55. 61 47
      apps/jy-pc/src/views/issued/components/IssuedTable.vue
  56. 28 19
      apps/jy-pc/src/views/issued/components/SwitchEnt.vue
  57. 40 26
      apps/jy-pc/src/views/issued/info/InfoIssued.vue
  58. 87 64
      apps/jy-pc/src/views/issued/my/MyIssued.vue
  59. 148 90
      apps/jy-pc/src/views/proposed-detail/Detail.vue
  60. 315 172
      apps/jy-pc/src/views/proposed-detail/components/Credentials.vue
  61. 53 33
      apps/jy-pc/src/views/proposed-detail/components/InformationSummary.vue
  62. 64 61
      apps/jy-pc/src/views/proposed-detail/components/ProjectPerson.vue
  63. 58 35
      apps/jy-pc/src/views/proposed-detail/components/projectDebriefing.vue
  64. 94 23
      apps/jy-pc/src/views/search/Issued.vue
  65. 3 2
      apps/jy-pc/src/views/search/components/InfoListLayout.vue
  66. 59 35
      apps/jy-pc/src/views/search/components/SearchHeader.vue
  67. 104 24
      apps/jy-pc/src/views/search/construction.vue
  68. 30 10
      apps/jy-pc/src/views/static/Disclaimer.vue

+ 495 - 462
apps/jy-pc/public/tinymce/langs/zh_CN.js

@@ -1,462 +1,495 @@
-tinymce.addI18n('zh_CN',{
-"Redo": "\u91cd\u505a",
-"Undo": "\u64a4\u9500",
-"Cut": "\u526a\u5207",
-"Copy": "\u590d\u5236",
-"Paste": "\u7c98\u8d34",
-"Select all": "\u5168\u9009",
-"New document": "\u65b0\u6587\u4ef6",
-"Ok": "\u786e\u5b9a",
-"Cancel": "\u53d6\u6d88",
-"Visual aids": "\u7f51\u683c\u7ebf",
-"Bold": "\u7c97\u4f53",
-"Italic": "\u659c\u4f53",
-"Underline": "\u4e0b\u5212\u7ebf",
-"Strikethrough": "\u5220\u9664\u7ebf",
-"Superscript": "\u4e0a\u6807",
-"Subscript": "\u4e0b\u6807",
-"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
-"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
-"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
-"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
-"Justify": "\u4e24\u7aef\u5bf9\u9f50",
-"Bullet list": "\u9879\u76ee\u7b26\u53f7",
-"Numbered list": "\u7f16\u53f7\u5217\u8868",
-"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
-"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
-"Close": "\u5173\u95ed",
-"Formats": "\u683c\u5f0f",
-"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
-"Headers": "\u6807\u9898",
-"Header 1": "\u6807\u98981",
-"Header 2": "\u6807\u98982",
-"Header 3": "\u6807\u98983",
-"Header 4": "\u6807\u98984",
-"Header 5": "\u6807\u98985",
-"Header 6": "\u6807\u98986",
-"Headings": "\u6807\u9898",
-"Heading 1": "\u6807\u98981",
-"Heading 2": "\u6807\u98982",
-"Heading 3": "\u6807\u98983",
-"Heading 4": "\u6807\u98984",
-"Heading 5": "\u6807\u98985",
-"Heading 6": "\u6807\u98986",
-"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
-"Div": "Div",
-"Pre": "Pre",
-"Code": "\u4ee3\u7801",
-"Paragraph": "\u6bb5\u843d",
-"Blockquote": "\u5f15\u6587\u533a\u5757",
-"Inline": "\u6587\u672c",
-"Blocks": "\u57fa\u5757",
-"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
-"Fonts": "\u5b57\u4f53",
-"Font Sizes": "\u5b57\u53f7",
-"Class": "\u7c7b\u578b",
-"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
-"OR": "\u6216",
-"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
-"Upload": "\u4e0a\u4f20",
-"Block": "\u5757",
-"Align": "\u5bf9\u9f50",
-"Default": "\u9ed8\u8ba4",
-"Circle": "\u7a7a\u5fc3\u5706",
-"Disc": "\u5b9e\u5fc3\u5706",
-"Square": "\u65b9\u5757",
-"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
-"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
-"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
-"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
-"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
-"Anchor...": "\u951a\u70b9...",
-"Name": "\u540d\u79f0",
-"Id": "\u6807\u8bc6\u7b26",
-"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
-"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
-"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
-"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
-"Source code": "\u6e90\u4ee3\u7801",
-"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
-"Language": "\u8bed\u8a00",
-"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
-"Color Picker": "\u9009\u8272\u5668",
-"R": "R",
-"G": "G",
-"B": "B",
-"Left to right": "\u4ece\u5de6\u5230\u53f3",
-"Right to left": "\u4ece\u53f3\u5230\u5de6",
-"Emoticons": "\u8868\u60c5",
-"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
-"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
-"Title": "\u6807\u9898",
-"Keywords": "\u5173\u952e\u8bcd",
-"Description": "\u63cf\u8ff0",
-"Robots": "\u673a\u5668\u4eba",
-"Author": "\u4f5c\u8005",
-"Encoding": "\u7f16\u7801",
-"Fullscreen": "\u5168\u5c4f",
-"Action": "\u64cd\u4f5c",
-"Shortcut": "\u5feb\u6377\u952e",
-"Help": "\u5e2e\u52a9",
-"Address": "\u5730\u5740",
-"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
-"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
-"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
-"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
-"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
-"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
-"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
-"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
-"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
-"Plugins": "\u63d2\u4ef6",
-"Handy Shortcuts": "\u5feb\u6377\u952e",
-"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
-"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
-"Alternative description": "\u66ff\u4ee3\u63cf\u8ff0",
-"Accessibility": "\u8f85\u52a9\u529f\u80fd",
-"Image is decorative": "\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684",
-"Source": "\u5730\u5740",
-"Dimensions": "\u5927\u5c0f",
-"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
-"General": "\u666e\u901a",
-"Advanced": "\u9ad8\u7ea7",
-"Style": "\u6837\u5f0f",
-"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
-"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
-"Border": "\u8fb9\u6846",
-"Insert image": "\u63d2\u5165\u56fe\u7247",
-"Image...": "\u56fe\u7247...",
-"Image list": "\u56fe\u7247\u5217\u8868",
-"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
-"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
-"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
-"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
-"Edit image": "\u7f16\u8f91\u56fe\u7247",
-"Image options": "\u56fe\u7247\u9009\u9879",
-"Zoom in": "\u653e\u5927",
-"Zoom out": "\u7f29\u5c0f",
-"Crop": "\u88c1\u526a",
-"Resize": "\u8c03\u6574\u5927\u5c0f",
-"Orientation": "\u65b9\u5411",
-"Brightness": "\u4eae\u5ea6",
-"Sharpen": "\u9510\u5316",
-"Contrast": "\u5bf9\u6bd4\u5ea6",
-"Color levels": "\u989c\u8272\u5c42\u6b21",
-"Gamma": "\u4f3d\u9a6c\u503c",
-"Invert": "\u53cd\u8f6c",
-"Apply": "\u5e94\u7528",
-"Back": "\u540e\u9000",
-"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
-"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
-"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
-"Text to display": "\u663e\u793a\u6587\u5b57",
-"Url": "\u5730\u5740",
-"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
-"Current window": "\u5f53\u524d\u7a97\u53e3",
-"None": "\u65e0",
-"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
-"Open link": "\u6253\u5f00\u94fe\u63a5",
-"Remove link": "\u5220\u9664\u94fe\u63a5",
-"Anchors": "\u951a\u70b9",
-"Link...": "\u94fe\u63a5...",
-"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
-"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
-"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
-"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:\/\/ \u524d\u7f00\u5417\uff1f",
-"Link list": "\u94fe\u63a5\u5217\u8868",
-"Insert video": "\u63d2\u5165\u89c6\u9891",
-"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
-"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
-"Alternative source": "\u955c\u50cf",
-"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
-"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
-"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
-"Embed": "\u5185\u5d4c",
-"Media...": "\u591a\u5a92\u4f53...",
-"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
-"Page break": "\u5206\u9875\u7b26",
-"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
-"Preview": "\u9884\u89c8",
-"Print...": "\u6253\u5370...",
-"Save": "\u4fdd\u5b58",
-"Find": "\u67e5\u627e",
-"Replace with": "\u66ff\u6362\u4e3a",
-"Replace": "\u66ff\u6362",
-"Replace all": "\u5168\u90e8\u66ff\u6362",
-"Previous": "\u4e0a\u4e00\u4e2a",
-"Next": "\u4e0b\u4e00\u4e2a",
-"Find and Replace": "\u67e5\u627e\u548c\u66ff\u6362",
-"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
-"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
-"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
-"Find whole words only": "\u5168\u5b57\u5339\u914d",
-"Find in selection": "\u5728\u9009\u533a\u4e2d\u67e5\u627e",
-"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
-"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
-"No misspellings found.": "\u6ca1\u6709\u53d1\u73b0\u62fc\u5199\u9519\u8bef",
-"Ignore": "\u5ffd\u7565",
-"Ignore all": "\u5168\u90e8\u5ffd\u7565",
-"Finish": "\u5b8c\u6210",
-"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
-"Insert table": "\u63d2\u5165\u8868\u683c",
-"Table properties": "\u8868\u683c\u5c5e\u6027",
-"Delete table": "\u5220\u9664\u8868\u683c",
-"Cell": "\u5355\u5143\u683c",
-"Row": "\u884c",
-"Column": "\u5217",
-"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
-"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
-"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
-"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
-"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
-"Delete row": "\u5220\u9664\u884c",
-"Row properties": "\u884c\u5c5e\u6027",
-"Cut row": "\u526a\u5207\u884c",
-"Copy row": "\u590d\u5236\u884c",
-"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
-"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
-"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
-"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
-"Delete column": "\u5220\u9664\u5217",
-"Cols": "\u5217",
-"Rows": "\u884c",
-"Width": "\u5bbd",
-"Height": "\u9ad8",
-"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
-"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
-"Caption": "\u6807\u9898",
-"Show caption": "\u663e\u793a\u6807\u9898",
-"Left": "\u5de6\u5bf9\u9f50",
-"Center": "\u5c45\u4e2d",
-"Right": "\u53f3\u5bf9\u9f50",
-"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
-"Scope": "\u8303\u56f4",
-"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
-"H Align": "\u6c34\u5e73\u5bf9\u9f50",
-"V Align": "\u5782\u76f4\u5bf9\u9f50",
-"Top": "\u9876\u90e8\u5bf9\u9f50",
-"Middle": "\u5782\u76f4\u5c45\u4e2d",
-"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
-"Header cell": "\u8868\u5934\u5355\u5143\u683c",
-"Row group": "\u884c\u7ec4",
-"Column group": "\u5217\u7ec4",
-"Row type": "\u884c\u7c7b\u578b",
-"Header": "\u8868\u5934",
-"Body": "\u8868\u4f53",
-"Footer": "\u8868\u5c3e",
-"Border color": "\u8fb9\u6846\u989c\u8272",
-"Insert template...": "\u63d2\u5165\u6a21\u677f...",
-"Templates": "\u6a21\u677f",
-"Template": "\u6a21\u677f",
-"Text color": "\u6587\u5b57\u989c\u8272",
-"Background color": "\u80cc\u666f\u8272",
-"Custom...": "\u81ea\u5b9a\u4e49...",
-"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
-"No color": "\u65e0",
-"Remove color": "\u79fb\u9664\u989c\u8272",
-"Table of Contents": "\u5185\u5bb9\u5217\u8868",
-"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
-"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
-"Word count": "\u5b57\u6570",
-"Count": "\u8ba1\u6570",
-"Document": "\u6587\u6863",
-"Selection": "\u9009\u62e9",
-"Words": "\u5355\u8bcd",
-"Words: {0}": "\u5b57\u6570\uff1a{0}",
-"{0} words": "{0} \u5b57",
-"File": "\u6587\u4ef6",
-"Edit": "\u7f16\u8f91",
-"Insert": "\u63d2\u5165",
-"View": "\u89c6\u56fe",
-"Format": "\u683c\u5f0f",
-"Table": "\u8868\u683c",
-"Tools": "\u5de5\u5177",
-"Powered by {0}": "\u7531{0}\u9a71\u52a8",
-"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
-"Image title": "\u56fe\u7247\u6807\u9898",
-"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
-"Border style": "\u8fb9\u6846\u6837\u5f0f",
-"Error": "\u9519\u8bef",
-"Warn": "\u8b66\u544a",
-"Valid": "\u6709\u6548",
-"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
-"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
-"System Font": "\u7cfb\u7edf\u5b57\u4f53",
-"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
-"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
-"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
-"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
-"example": "\u793a\u4f8b",
-"Search": "\u641c\u7d22",
-"All": "\u5168\u90e8",
-"Currency": "\u8d27\u5e01",
-"Text": "\u6587\u5b57",
-"Quotations": "\u5f15\u7528",
-"Mathematical": "\u6570\u5b66",
-"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
-"Symbols": "\u7b26\u53f7",
-"Arrows": "\u7bad\u5934",
-"User Defined": "\u81ea\u5b9a\u4e49",
-"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
-"currency sign": "\u8d27\u5e01\u7b26\u53f7",
-"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
-"colon sign": "\u5192\u53f7",
-"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
-"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
-"lira sign": "\u91cc\u62c9\u7b26\u53f7",
-"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
-"naira sign": "\u5948\u62c9\u7b26\u53f7",
-"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
-"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
-"won sign": "\u97e9\u5143\u7b26\u53f7",
-"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
-"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
-"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
-"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
-"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
-"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
-"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
-"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
-"austral sign": "\u6fb3\u5143\u7b26\u53f7",
-"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
-"cedi sign": "\u585e\u5730\u7b26\u53f7",
-"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
-"spesmilo sign": "spesmilo\u7b26\u53f7",
-"tenge sign": "\u575a\u6208\u7b26\u53f7",
-"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
-"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
-"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
-"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
-"ruble sign": "\u5362\u5e03\u7b26\u53f7",
-"yen character": "\u65e5\u5143\u5b57\u6837",
-"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
-"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
-"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
-"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
-"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
-"People": "\u4eba\u7c7b",
-"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
-"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
-"Activity": "\u6d3b\u52a8",
-"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
-"Objects": "\u7269\u4ef6",
-"Flags": "\u65d7\u5e1c",
-"Characters": "\u5b57\u7b26",
-"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
-"{0} characters": "{0} \u4e2a\u5b57\u7b26",
-"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
-"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
-"Update": "\u66f4\u65b0",
-"Color swatch": "\u989c\u8272\u6837\u672c",
-"Turquoise": "\u9752\u7eff\u8272",
-"Green": "\u7eff\u8272",
-"Blue": "\u84dd\u8272",
-"Purple": "\u7d2b\u8272",
-"Navy Blue": "\u6d77\u519b\u84dd",
-"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
-"Dark Green": "\u6df1\u7eff\u8272",
-"Medium Blue": "\u4e2d\u84dd\u8272",
-"Medium Purple": "\u4e2d\u7d2b\u8272",
-"Midnight Blue": "\u6df1\u84dd\u8272",
-"Yellow": "\u9ec4\u8272",
-"Orange": "\u6a59\u8272",
-"Red": "\u7ea2\u8272",
-"Light Gray": "\u6d45\u7070\u8272",
-"Gray": "\u7070\u8272",
-"Dark Yellow": "\u6697\u9ec4\u8272",
-"Dark Orange": "\u6df1\u6a59\u8272",
-"Dark Red": "\u6df1\u7ea2\u8272",
-"Medium Gray": "\u4e2d\u7070\u8272",
-"Dark Gray": "\u6df1\u7070\u8272",
-"Light Green": "\u6d45\u7eff\u8272",
-"Light Yellow": "\u6d45\u9ec4\u8272",
-"Light Red": "\u6d45\u7ea2\u8272",
-"Light Purple": "\u6d45\u7d2b\u8272",
-"Light Blue": "\u6d45\u84dd\u8272",
-"Dark Purple": "\u6df1\u7d2b\u8272",
-"Dark Blue": "\u6df1\u84dd\u8272",
-"Black": "\u9ed1\u8272",
-"White": "\u767d\u8272",
-"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
-"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
-"history": "\u5386\u53f2",
-"styles": "\u6837\u5f0f",
-"formatting": "\u683c\u5f0f\u5316",
-"alignment": "\u5bf9\u9f50",
-"indentation": "\u7f29\u8fdb",
-"Font": "\u5b57\u4f53",
-"Size": "\u5b57\u53f7",
-"More...": "\u66f4\u591a...",
-"Select...": "\u9009\u62e9...",
-"Preferences": "\u9996\u9009\u9879",
-"Yes": "\u662f",
-"No": "\u5426",
-"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
-"Version": "\u7248\u672c",
-"Code view": "\u4ee3\u7801\u89c6\u56fe",
-"Open popup menu for split buttons": "\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae",
-"List Properties": "\u5217\u8868\u5c5e\u6027",
-"List properties...": "\u6807\u9898\u5b57\u4f53\u5c5e\u6027",
-"Start list at number": "\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868",
-"Line height": "\u884c\u9ad8",
-"comments": "\u5907\u6ce8",
-"Format Painter": "\u683c\u5f0f\u5237",
-"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
-"Capitalization": "\u5927\u5199",
-"lowercase": "\u5c0f\u5199",
-"UPPERCASE": "\u5927\u5199",
-"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
-"permanent pen": "\u8bb0\u53f7\u7b14",
-"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
-"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
-"case change": "\u6848\u4f8b\u66f4\u6539",
-"page embed": "\u9875\u9762\u5d4c\u5165",
-"Advanced sort...": "\u9ad8\u7ea7\u6392\u5e8f...",
-"Advanced Sort": "\u9ad8\u7ea7\u6392\u5e8f",
-"Sort table by column ascending": "\u6309\u5217\u5347\u5e8f\u8868",
-"Sort table by column descending": "\u6309\u5217\u964d\u5e8f\u8868",
-"Sort": "\u6392\u5e8f",
-"Order": "\u6392\u5e8f",
-"Sort by": "\u6392\u5e8f\u65b9\u5f0f",
-"Ascending": "\u5347\u5e8f",
-"Descending": "\u964d\u5e8f",
-"Column {0}": "\u5217{0}",
-"Row {0}": "\u884c{0}",
-"Spellcheck...": "\u62fc\u5199\u68c0\u67e5...",
-"Misspelled word": "\u62fc\u5199\u9519\u8bef\u7684\u5355\u8bcd",
-"Suggestions": "\u5efa\u8bae",
-"Change": "\u66f4\u6539",
-"Finding word suggestions": "\u67e5\u627e\u5355\u8bcd\u5efa\u8bae",
-"Success": "\u6210\u529f",
-"Repair": "\u4fee\u590d",
-"Issue {0} of {1}": "\u5171\u8ba1{1}\u95ee\u9898{0}",
-"Images must be marked as decorative or have an alternative text description": "\u56fe\u50cf\u5fc5\u987b\u6807\u8bb0\u4e3a\u88c5\u9970\u6027\u6216\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0",
-"Images must have an alternative text description. Decorative images are not allowed.": "\u56fe\u50cf\u5fc5\u987b\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0\u3002\u4e0d\u5141\u8bb8\u4f7f\u7528\u88c5\u9970\u56fe\u50cf\u3002",
-"Or provide alternative text:": "\u6216\u63d0\u4f9b\u5907\u9009\u6587\u672c\uff1a",
-"Make image decorative:": "\u4f7f\u56fe\u50cf\u88c5\u9970\uff1a",
-"ID attribute must be unique": "ID \u5c5e\u6027\u5fc5\u987b\u662f\u552f\u4e00\u7684",
-"Make ID unique": "\u4f7f ID \u72ec\u4e00\u65e0\u4e8c",
-"Keep this ID and remove all others": "\u4fdd\u7559\u6b64 ID \u5e76\u5220\u9664\u6240\u6709\u5176\u4ed6",
-"Remove this ID": "\u5220\u9664\u6b64 ID",
-"Remove all IDs": "\u6e05\u9664\u5168\u90e8IDs",
-"Checklist": "\u6e05\u5355",
-"Anchor": "\u951a\u70b9",
-"Special character": "\u7279\u6b8a\u7b26\u53f7",
-"Code sample": "\u4ee3\u7801\u793a\u4f8b",
-"Color": "\u989c\u8272",
-"Document properties": "\u6587\u6863\u5c5e\u6027",
-"Image description": "\u56fe\u7247\u63cf\u8ff0",
-"Image": "\u56fe\u7247",
-"Insert link": "\u63d2\u5165\u94fe\u63a5",
-"Target": "\u6253\u5f00\u65b9\u5f0f",
-"Link": "\u94fe\u63a5",
-"Poster": "\u5c01\u9762",
-"Media": "\u5a92\u4f53",
-"Print": "\u6253\u5370",
-"Prev": "\u4e0a\u4e00\u4e2a",
-"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
-"Whole words": "\u5168\u5b57\u5339\u914d",
-"Insert template": "\u63d2\u5165\u6a21\u677f"
-});
+tinymce.addI18n('zh_CN', {
+  Redo: '\u91cd\u505a',
+  Undo: '\u64a4\u9500',
+  Cut: '\u526a\u5207',
+  Copy: '\u590d\u5236',
+  Paste: '\u7c98\u8d34',
+  'Select all': '\u5168\u9009',
+  'New document': '\u65b0\u6587\u4ef6',
+  Ok: '\u786e\u5b9a',
+  Cancel: '\u53d6\u6d88',
+  'Visual aids': '\u7f51\u683c\u7ebf',
+  Bold: '\u7c97\u4f53',
+  Italic: '\u659c\u4f53',
+  Underline: '\u4e0b\u5212\u7ebf',
+  Strikethrough: '\u5220\u9664\u7ebf',
+  Superscript: '\u4e0a\u6807',
+  Subscript: '\u4e0b\u6807',
+  'Clear formatting': '\u6e05\u9664\u683c\u5f0f',
+  'Align left': '\u5de6\u8fb9\u5bf9\u9f50',
+  'Align center': '\u4e2d\u95f4\u5bf9\u9f50',
+  'Align right': '\u53f3\u8fb9\u5bf9\u9f50',
+  Justify: '\u4e24\u7aef\u5bf9\u9f50',
+  'Bullet list': '\u9879\u76ee\u7b26\u53f7',
+  'Numbered list': '\u7f16\u53f7\u5217\u8868',
+  'Decrease indent': '\u51cf\u5c11\u7f29\u8fdb',
+  'Increase indent': '\u589e\u52a0\u7f29\u8fdb',
+  Close: '\u5173\u95ed',
+  Formats: '\u683c\u5f0f',
+  'Your browser doesn\'t support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.':
+    '\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002',
+  Headers: '\u6807\u9898',
+  'Header 1': '\u6807\u98981',
+  'Header 2': '\u6807\u98982',
+  'Header 3': '\u6807\u98983',
+  'Header 4': '\u6807\u98984',
+  'Header 5': '\u6807\u98985',
+  'Header 6': '\u6807\u98986',
+  Headings: '\u6807\u9898',
+  'Heading 1': '\u6807\u98981',
+  'Heading 2': '\u6807\u98982',
+  'Heading 3': '\u6807\u98983',
+  'Heading 4': '\u6807\u98984',
+  'Heading 5': '\u6807\u98985',
+  'Heading 6': '\u6807\u98986',
+  Preformatted: '\u9884\u5148\u683c\u5f0f\u5316\u7684',
+  Div: 'Div',
+  Pre: 'Pre',
+  Code: '\u4ee3\u7801',
+  Paragraph: '\u6bb5\u843d',
+  Blockquote: '\u5f15\u6587\u533a\u5757',
+  Inline: '\u6587\u672c',
+  Blocks: '\u57fa\u5757',
+  'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.':
+    '\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002',
+  Fonts: '\u5b57\u4f53',
+  'Font Sizes': '\u5b57\u53f7',
+  Class: '\u7c7b\u578b',
+  'Browse for an image': '\u6d4f\u89c8\u56fe\u50cf',
+  OR: '\u6216',
+  'Drop an image here': '\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64',
+  Upload: '\u4e0a\u4f20',
+  Block: '\u5757',
+  Align: '\u5bf9\u9f50',
+  Default: '\u9ed8\u8ba4',
+  Circle: '\u7a7a\u5fc3\u5706',
+  Disc: '\u5b9e\u5fc3\u5706',
+  Square: '\u65b9\u5757',
+  'Lower Alpha': '\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd',
+  'Lower Greek': '\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd',
+  'Lower Roman': '\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd',
+  'Upper Alpha': '\u5927\u5199\u82f1\u6587\u5b57\u6bcd',
+  'Upper Roman': '\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd',
+  'Anchor...': '\u951a\u70b9...',
+  Name: '\u540d\u79f0',
+  Id: '\u6807\u8bc6\u7b26',
+  'Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.':
+    '\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002',
+  'You have unsaved changes are you sure you want to navigate away?':
+    '\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f',
+  'Restore last draft': '\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f',
+  'Special character...': '\u7279\u6b8a\u5b57\u7b26...',
+  'Source code': '\u6e90\u4ee3\u7801',
+  'Insert/Edit code sample':
+    '\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b',
+  Language: '\u8bed\u8a00',
+  'Code sample...': '\u793a\u4f8b\u4ee3\u7801...',
+  'Color Picker': '\u9009\u8272\u5668',
+  R: 'R',
+  G: 'G',
+  B: 'B',
+  'Left to right': '\u4ece\u5de6\u5230\u53f3',
+  'Right to left': '\u4ece\u53f3\u5230\u5de6',
+  Emoticons: '\u8868\u60c5',
+  'Emoticons...': '\u8868\u60c5\u7b26\u53f7...',
+  'Metadata and Document Properties':
+    '\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027',
+  Title: '\u6807\u9898',
+  Keywords: '\u5173\u952e\u8bcd',
+  Description: '\u63cf\u8ff0',
+  Robots: '\u673a\u5668\u4eba',
+  Author: '\u4f5c\u8005',
+  Encoding: '\u7f16\u7801',
+  Fullscreen: '\u5168\u5c4f',
+  Action: '\u64cd\u4f5c',
+  Shortcut: '\u5feb\u6377\u952e',
+  Help: '\u5e2e\u52a9',
+  Address: '\u5730\u5740',
+  'Focus to menubar': '\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f',
+  'Focus to toolbar': '\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f',
+  'Focus to element path':
+    '\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84',
+  'Focus to contextual toolbar':
+    '\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355',
+  'Insert link (if link plugin activated)':
+    '\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+  'Save (if save plugin activated)':
+    '\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+  'Find (if searchreplace plugin activated)':
+    '\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)',
+  'Plugins installed ({0}):': '\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):',
+  'Premium plugins:': '\u4f18\u79c0\u63d2\u4ef6\uff1a',
+  'Learn more...': '\u4e86\u89e3\u66f4\u591a...',
+  'You are using {0}': '\u4f60\u6b63\u5728\u4f7f\u7528 {0}',
+  Plugins: '\u63d2\u4ef6',
+  'Handy Shortcuts': '\u5feb\u6377\u952e',
+  'Horizontal line': '\u6c34\u5e73\u5206\u5272\u7ebf',
+  'Insert/edit image': '\u63d2\u5165/\u7f16\u8f91\u56fe\u7247',
+  'Alternative description': '\u66ff\u4ee3\u63cf\u8ff0',
+  Accessibility: '\u8f85\u52a9\u529f\u80fd',
+  'Image is decorative': '\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684',
+  Source: '\u5730\u5740',
+  Dimensions: '\u5927\u5c0f',
+  'Constrain proportions': '\u4fdd\u6301\u7eb5\u6a2a\u6bd4',
+  General: '\u666e\u901a',
+  Advanced: '\u9ad8\u7ea7',
+  Style: '\u6837\u5f0f',
+  'Vertical space': '\u5782\u76f4\u8fb9\u8ddd',
+  'Horizontal space': '\u6c34\u5e73\u8fb9\u8ddd',
+  Border: '\u8fb9\u6846',
+  'Insert image': '\u63d2\u5165\u56fe\u7247',
+  'Image...': '\u56fe\u7247...',
+  'Image list': '\u56fe\u7247\u5217\u8868',
+  'Rotate counterclockwise': '\u9006\u65f6\u9488\u65cb\u8f6c',
+  'Rotate clockwise': '\u987a\u65f6\u9488\u65cb\u8f6c',
+  'Flip vertically': '\u5782\u76f4\u7ffb\u8f6c',
+  'Flip horizontally': '\u6c34\u5e73\u7ffb\u8f6c',
+  'Edit image': '\u7f16\u8f91\u56fe\u7247',
+  'Image options': '\u56fe\u7247\u9009\u9879',
+  'Zoom in': '\u653e\u5927',
+  'Zoom out': '\u7f29\u5c0f',
+  Crop: '\u88c1\u526a',
+  Resize: '\u8c03\u6574\u5927\u5c0f',
+  Orientation: '\u65b9\u5411',
+  Brightness: '\u4eae\u5ea6',
+  Sharpen: '\u9510\u5316',
+  Contrast: '\u5bf9\u6bd4\u5ea6',
+  'Color levels': '\u989c\u8272\u5c42\u6b21',
+  Gamma: '\u4f3d\u9a6c\u503c',
+  Invert: '\u53cd\u8f6c',
+  Apply: '\u5e94\u7528',
+  Back: '\u540e\u9000',
+  'Insert date/time': '\u63d2\u5165\u65e5\u671f/\u65f6\u95f4',
+  'Date/time': '\u65e5\u671f/\u65f6\u95f4',
+  'Insert/edit link': '\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5',
+  'Text to display': '\u663e\u793a\u6587\u5b57',
+  Url: '\u5730\u5740',
+  'Open link in...': '\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...',
+  'Current window': '\u5f53\u524d\u7a97\u53e3',
+  None: '\u65e0',
+  'New window': '\u5728\u65b0\u7a97\u53e3\u6253\u5f00',
+  'Open link': '\u6253\u5f00\u94fe\u63a5',
+  'Remove link': '\u5220\u9664\u94fe\u63a5',
+  Anchors: '\u951a\u70b9',
+  'Link...': '\u94fe\u63a5...',
+  'Paste or type a link': '\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5',
+  'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?':
+    '\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f',
+  'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?':
+    '\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp://:\u524d\u7f00\u5417\uff1f',
+  'The URL you entered seems to be an external link. Do you want to add the required https:// prefix?':
+    '\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f',
+  'Link list': '\u94fe\u63a5\u5217\u8868',
+  'Insert video': '\u63d2\u5165\u89c6\u9891',
+  'Insert/edit video': '\u63d2\u5165/\u7f16\u8f91\u89c6\u9891',
+  'Insert/edit media': '\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53',
+  'Alternative source': '\u955c\u50cf',
+  'Alternative source URL': '\u66ff\u4ee3\u6765\u6e90\u7f51\u5740',
+  'Media poster (Image URL)': '\u5c01\u9762(\u56fe\u7247\u5730\u5740)',
+  'Paste your embed code below:':
+    '\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:',
+  Embed: '\u5185\u5d4c',
+  'Media...': '\u591a\u5a92\u4f53...',
+  'Nonbreaking space': '\u4e0d\u95f4\u65ad\u7a7a\u683c',
+  'Page break': '\u5206\u9875\u7b26',
+  'Paste as text': '\u7c98\u8d34\u4e3a\u6587\u672c',
+  Preview: '\u9884\u89c8',
+  'Print...': '\u6253\u5370...',
+  Save: '\u4fdd\u5b58',
+  Find: '\u67e5\u627e',
+  'Replace with': '\u66ff\u6362\u4e3a',
+  Replace: '\u66ff\u6362',
+  'Replace all': '\u5168\u90e8\u66ff\u6362',
+  Previous: '\u4e0a\u4e00\u4e2a',
+  Next: '\u4e0b\u4e00\u4e2a',
+  'Find and Replace': '\u67e5\u627e\u548c\u66ff\u6362',
+  'Find and replace...': '\u67e5\u627e\u5e76\u66ff\u6362...',
+  'Could not find the specified string.':
+    '\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.',
+  'Match case': '\u533a\u5206\u5927\u5c0f\u5199',
+  'Find whole words only': '\u5168\u5b57\u5339\u914d',
+  'Find in selection': '\u5728\u9009\u533a\u4e2d\u67e5\u627e',
+  Spellcheck: '\u62fc\u5199\u68c0\u67e5',
+  'Spellcheck Language': '\u62fc\u5199\u68c0\u67e5\u8bed\u8a00',
+  'No misspellings found.': '\u6ca1\u6709\u53d1\u73b0\u62fc\u5199\u9519\u8bef',
+  Ignore: '\u5ffd\u7565',
+  'Ignore all': '\u5168\u90e8\u5ffd\u7565',
+  Finish: '\u5b8c\u6210',
+  'Add to Dictionary': '\u6dfb\u52a0\u5230\u5b57\u5178',
+  'Insert table': '\u63d2\u5165\u8868\u683c',
+  'Table properties': '\u8868\u683c\u5c5e\u6027',
+  'Delete table': '\u5220\u9664\u8868\u683c',
+  Cell: '\u5355\u5143\u683c',
+  Row: '\u884c',
+  Column: '\u5217',
+  'Cell properties': '\u5355\u5143\u683c\u5c5e\u6027',
+  'Merge cells': '\u5408\u5e76\u5355\u5143\u683c',
+  'Split cell': '\u62c6\u5206\u5355\u5143\u683c',
+  'Insert row before': '\u5728\u4e0a\u65b9\u63d2\u5165',
+  'Insert row after': '\u5728\u4e0b\u65b9\u63d2\u5165',
+  'Delete row': '\u5220\u9664\u884c',
+  'Row properties': '\u884c\u5c5e\u6027',
+  'Cut row': '\u526a\u5207\u884c',
+  'Copy row': '\u590d\u5236\u884c',
+  'Paste row before': '\u7c98\u8d34\u5230\u4e0a\u65b9',
+  'Paste row after': '\u7c98\u8d34\u5230\u4e0b\u65b9',
+  'Insert column before': '\u5728\u5de6\u4fa7\u63d2\u5165',
+  'Insert column after': '\u5728\u53f3\u4fa7\u63d2\u5165',
+  'Delete column': '\u5220\u9664\u5217',
+  Cols: '\u5217',
+  Rows: '\u884c',
+  Width: '\u5bbd',
+  Height: '\u9ad8',
+  'Cell spacing': '\u5355\u5143\u683c\u5916\u95f4\u8ddd',
+  'Cell padding': '\u5355\u5143\u683c\u5185\u8fb9\u8ddd',
+  Caption: '\u6807\u9898',
+  'Show caption': '\u663e\u793a\u6807\u9898',
+  Left: '\u5de6\u5bf9\u9f50',
+  Center: '\u5c45\u4e2d',
+  Right: '\u53f3\u5bf9\u9f50',
+  'Cell type': '\u5355\u5143\u683c\u7c7b\u578b',
+  Scope: '\u8303\u56f4',
+  Alignment: '\u5bf9\u9f50\u65b9\u5f0f',
+  'H Align': '\u6c34\u5e73\u5bf9\u9f50',
+  'V Align': '\u5782\u76f4\u5bf9\u9f50',
+  Top: '\u9876\u90e8\u5bf9\u9f50',
+  Middle: '\u5782\u76f4\u5c45\u4e2d',
+  Bottom: '\u5e95\u90e8\u5bf9\u9f50',
+  'Header cell': '\u8868\u5934\u5355\u5143\u683c',
+  'Row group': '\u884c\u7ec4',
+  'Column group': '\u5217\u7ec4',
+  'Row type': '\u884c\u7c7b\u578b',
+  Header: '\u8868\u5934',
+  Body: '\u8868\u4f53',
+  Footer: '\u8868\u5c3e',
+  'Border color': '\u8fb9\u6846\u989c\u8272',
+  'Insert template...': '\u63d2\u5165\u6a21\u677f...',
+  Templates: '\u6a21\u677f',
+  Template: '\u6a21\u677f',
+  'Text color': '\u6587\u5b57\u989c\u8272',
+  'Background color': '\u80cc\u666f\u8272',
+  'Custom...': '\u81ea\u5b9a\u4e49...',
+  'Custom color': '\u81ea\u5b9a\u4e49\u989c\u8272',
+  'No color': '\u65e0',
+  'Remove color': '\u79fb\u9664\u989c\u8272',
+  'Table of Contents': '\u5185\u5bb9\u5217\u8868',
+  'Show blocks': '\u663e\u793a\u533a\u5757\u8fb9\u6846',
+  'Show invisible characters': '\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26',
+  'Word count': '\u5b57\u6570',
+  Count: '\u8ba1\u6570',
+  Document: '\u6587\u6863',
+  Selection: '\u9009\u62e9',
+  Words: '\u5355\u8bcd',
+  'Words: {0}': '\u5b57\u6570\uff1a{0}',
+  '{0} words': '{0} \u5b57',
+  File: '\u6587\u4ef6',
+  Edit: '\u7f16\u8f91',
+  Insert: '\u63d2\u5165',
+  View: '\u89c6\u56fe',
+  Format: '\u683c\u5f0f',
+  Table: '\u8868\u683c',
+  Tools: '\u5de5\u5177',
+  'Powered by {0}': '\u7531{0}\u9a71\u52a8',
+  'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help':
+    '\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9',
+  'Image title': '\u56fe\u7247\u6807\u9898',
+  'Border width': '\u8fb9\u6846\u5bbd\u5ea6',
+  'Border style': '\u8fb9\u6846\u6837\u5f0f',
+  Error: '\u9519\u8bef',
+  Warn: '\u8b66\u544a',
+  Valid: '\u6709\u6548',
+  'To open the popup, press Shift+Enter':
+    '\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846',
+  'Rich Text Area. Press ALT-0 for help.':
+    '\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002',
+  'System Font': '\u7cfb\u7edf\u5b57\u4f53',
+  'Failed to upload image: {0}': '\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}',
+  'Failed to load plugin: {0} from url {1}':
+    '\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}',
+  'Failed to load plugin url: {0}':
+    '\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}',
+  'Failed to initialize plugin: {0}':
+    '\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}',
+  example: '\u793a\u4f8b',
+  Search: '\u641c\u7d22',
+  All: '\u5168\u90e8',
+  Currency: '\u8d27\u5e01',
+  Text: '\u6587\u5b57',
+  Quotations: '\u5f15\u7528',
+  Mathematical: '\u6570\u5b66',
+  'Extended Latin': '\u62c9\u4e01\u8bed\u6269\u5145',
+  Symbols: '\u7b26\u53f7',
+  Arrows: '\u7bad\u5934',
+  'User Defined': '\u81ea\u5b9a\u4e49',
+  'dollar sign': '\u7f8e\u5143\u7b26\u53f7',
+  'currency sign': '\u8d27\u5e01\u7b26\u53f7',
+  'euro-currency sign': '\u6b27\u5143\u7b26\u53f7',
+  'colon sign': '\u5192\u53f7',
+  'cruzeiro sign': '\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7',
+  'french franc sign': '\u6cd5\u90ce\u7b26\u53f7',
+  'lira sign': '\u91cc\u62c9\u7b26\u53f7',
+  'mill sign': '\u5bc6\u5c14\u7b26\u53f7',
+  'naira sign': '\u5948\u62c9\u7b26\u53f7',
+  'peseta sign': '\u6bd4\u585e\u5854\u7b26\u53f7',
+  'rupee sign': '\u5362\u6bd4\u7b26\u53f7',
+  'won sign': '\u97e9\u5143\u7b26\u53f7',
+  'new sheqel sign': '\u65b0\u8c22\u514b\u5c14\u7b26\u53f7',
+  'dong sign': '\u8d8a\u5357\u76fe\u7b26\u53f7',
+  'kip sign': '\u8001\u631d\u57fa\u666e\u7b26\u53f7',
+  'tugrik sign': '\u56fe\u683c\u91cc\u514b\u7b26\u53f7',
+  'drachma sign': '\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7',
+  'german penny symbol': '\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7',
+  'peso sign': '\u6bd4\u7d22\u7b26\u53f7',
+  'guarani sign': '\u74dc\u62c9\u5c3c\u7b26\u53f7',
+  'austral sign': '\u6fb3\u5143\u7b26\u53f7',
+  'hryvnia sign': '\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7',
+  'cedi sign': '\u585e\u5730\u7b26\u53f7',
+  'livre tournois sign': '\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7',
+  'spesmilo sign': 'spesmilo\u7b26\u53f7',
+  'tenge sign': '\u575a\u6208\u7b26\u53f7',
+  'indian rupee sign': '\u5370\u5ea6\u5362\u6bd4',
+  'turkish lira sign': '\u571f\u8033\u5176\u91cc\u62c9',
+  'nordic mark sign': '\u5317\u6b27\u9a6c\u514b',
+  'manat sign': '\u9a6c\u7eb3\u7279\u7b26\u53f7',
+  'ruble sign': '\u5362\u5e03\u7b26\u53f7',
+  'yen character': '\u65e5\u5143\u5b57\u6837',
+  'yuan character': '\u4eba\u6c11\u5e01\u5143\u5b57\u6837',
+  'yuan character, in hong kong and taiwan':
+    '\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09',
+  'yen/yuan character variant one':
+    '\u5143\u5b57\u6837\uff08\u5927\u5199\uff09',
+  'Loading emoticons...': '\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...',
+  'Could not load emoticons':
+    '\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7',
+  People: '\u4eba\u7c7b',
+  'Animals and Nature': '\u52a8\u7269\u548c\u81ea\u7136',
+  'Food and Drink': '\u98df\u7269\u548c\u996e\u54c1',
+  Activity: '\u6d3b\u52a8',
+  'Travel and Places': '\u65c5\u6e38\u548c\u5730\u70b9',
+  Objects: '\u7269\u4ef6',
+  Flags: '\u65d7\u5e1c',
+  Characters: '\u5b57\u7b26',
+  'Characters (no spaces)': '\u5b57\u7b26(\u65e0\u7a7a\u683c)',
+  '{0} characters': '{0} \u4e2a\u5b57\u7b26',
+  'Error: Form submit field collision.':
+    '\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002',
+  'Error: No form element found.':
+    '\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002',
+  Update: '\u66f4\u65b0',
+  'Color swatch': '\u989c\u8272\u6837\u672c',
+  Turquoise: '\u9752\u7eff\u8272',
+  Green: '\u7eff\u8272',
+  Blue: '\u84dd\u8272',
+  Purple: '\u7d2b\u8272',
+  'Navy Blue': '\u6d77\u519b\u84dd',
+  'Dark Turquoise': '\u6df1\u84dd\u7eff\u8272',
+  'Dark Green': '\u6df1\u7eff\u8272',
+  'Medium Blue': '\u4e2d\u84dd\u8272',
+  'Medium Purple': '\u4e2d\u7d2b\u8272',
+  'Midnight Blue': '\u6df1\u84dd\u8272',
+  Yellow: '\u9ec4\u8272',
+  Orange: '\u6a59\u8272',
+  Red: '\u7ea2\u8272',
+  'Light Gray': '\u6d45\u7070\u8272',
+  Gray: '\u7070\u8272',
+  'Dark Yellow': '\u6697\u9ec4\u8272',
+  'Dark Orange': '\u6df1\u6a59\u8272',
+  'Dark Red': '\u6df1\u7ea2\u8272',
+  'Medium Gray': '\u4e2d\u7070\u8272',
+  'Dark Gray': '\u6df1\u7070\u8272',
+  'Light Green': '\u6d45\u7eff\u8272',
+  'Light Yellow': '\u6d45\u9ec4\u8272',
+  'Light Red': '\u6d45\u7ea2\u8272',
+  'Light Purple': '\u6d45\u7d2b\u8272',
+  'Light Blue': '\u6d45\u84dd\u8272',
+  'Dark Purple': '\u6df1\u7d2b\u8272',
+  'Dark Blue': '\u6df1\u84dd\u8272',
+  Black: '\u9ed1\u8272',
+  White: '\u767d\u8272',
+  'Switch to or from fullscreen mode': '\u5207\u6362\u5168\u5c4f\u6a21\u5f0f',
+  'Open help dialog': '\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846',
+  history: '\u5386\u53f2',
+  styles: '\u6837\u5f0f',
+  formatting: '\u683c\u5f0f\u5316',
+  alignment: '\u5bf9\u9f50',
+  indentation: '\u7f29\u8fdb',
+  Font: '\u5b57\u4f53',
+  Size: '\u5b57\u53f7',
+  'More...': '\u66f4\u591a...',
+  'Select...': '\u9009\u62e9...',
+  Preferences: '\u9996\u9009\u9879',
+  Yes: '\u662f',
+  No: '\u5426',
+  'Keyboard Navigation': '\u952e\u76d8\u6307\u5f15',
+  Version: '\u7248\u672c',
+  'Code view': '\u4ee3\u7801\u89c6\u56fe',
+  'Open popup menu for split buttons':
+    '\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae',
+  'List Properties': '\u5217\u8868\u5c5e\u6027',
+  'List properties...': '\u6807\u9898\u5b57\u4f53\u5c5e\u6027',
+  'Start list at number': '\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868',
+  'Line height': '\u884c\u9ad8',
+  comments: '\u5907\u6ce8',
+  'Format Painter': '\u683c\u5f0f\u5237',
+  'Insert/edit iframe': '\u63d2\u5165/\u7f16\u8f91\u6846\u67b6',
+  Capitalization: '\u5927\u5199',
+  lowercase: '\u5c0f\u5199',
+  UPPERCASE: '\u5927\u5199',
+  'Title Case': '\u9996\u5b57\u6bcd\u5927\u5199',
+  'permanent pen': '\u8bb0\u53f7\u7b14',
+  'Permanent Pen Properties': '\u6c38\u4e45\u7b14\u5c5e\u6027',
+  'Permanent pen properties...': '\u6c38\u4e45\u7b14\u5c5e\u6027...',
+  'case change': '\u6848\u4f8b\u66f4\u6539',
+  'page embed': '\u9875\u9762\u5d4c\u5165',
+  'Advanced sort...': '\u9ad8\u7ea7\u6392\u5e8f...',
+  'Advanced Sort': '\u9ad8\u7ea7\u6392\u5e8f',
+  'Sort table by column ascending': '\u6309\u5217\u5347\u5e8f\u8868',
+  'Sort table by column descending': '\u6309\u5217\u964d\u5e8f\u8868',
+  Sort: '\u6392\u5e8f',
+  Order: '\u6392\u5e8f',
+  'Sort by': '\u6392\u5e8f\u65b9\u5f0f',
+  Ascending: '\u5347\u5e8f',
+  Descending: '\u964d\u5e8f',
+  'Column {0}': '\u5217{0}',
+  'Row {0}': '\u884c{0}',
+  'Spellcheck...': '\u62fc\u5199\u68c0\u67e5...',
+  'Misspelled word': '\u62fc\u5199\u9519\u8bef\u7684\u5355\u8bcd',
+  Suggestions: '\u5efa\u8bae',
+  Change: '\u66f4\u6539',
+  'Finding word suggestions': '\u67e5\u627e\u5355\u8bcd\u5efa\u8bae',
+  Success: '\u6210\u529f',
+  Repair: '\u4fee\u590d',
+  'Issue {0} of {1}': '\u5171\u8ba1{1}\u95ee\u9898{0}',
+  'Images must be marked as decorative or have an alternative text description':
+    '\u56fe\u50cf\u5fc5\u987b\u6807\u8bb0\u4e3a\u88c5\u9970\u6027\u6216\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0',
+  'Images must have an alternative text description. Decorative images are not allowed.':
+    '\u56fe\u50cf\u5fc5\u987b\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0\u3002\u4e0d\u5141\u8bb8\u4f7f\u7528\u88c5\u9970\u56fe\u50cf\u3002',
+  'Or provide alternative text:':
+    '\u6216\u63d0\u4f9b\u5907\u9009\u6587\u672c\uff1a',
+  'Make image decorative:': '\u4f7f\u56fe\u50cf\u88c5\u9970\uff1a',
+  'ID attribute must be unique':
+    'ID \u5c5e\u6027\u5fc5\u987b\u662f\u552f\u4e00\u7684',
+  'Make ID unique': '\u4f7f ID \u72ec\u4e00\u65e0\u4e8c',
+  'Keep this ID and remove all others':
+    '\u4fdd\u7559\u6b64 ID \u5e76\u5220\u9664\u6240\u6709\u5176\u4ed6',
+  'Remove this ID': '\u5220\u9664\u6b64 ID',
+  'Remove all IDs': '\u6e05\u9664\u5168\u90e8IDs',
+  Checklist: '\u6e05\u5355',
+  Anchor: '\u951a\u70b9',
+  'Special character': '\u7279\u6b8a\u7b26\u53f7',
+  'Code sample': '\u4ee3\u7801\u793a\u4f8b',
+  Color: '\u989c\u8272',
+  'Document properties': '\u6587\u6863\u5c5e\u6027',
+  'Image description': '\u56fe\u7247\u63cf\u8ff0',
+  Image: '\u56fe\u7247',
+  'Insert link': '\u63d2\u5165\u94fe\u63a5',
+  Target: '\u6253\u5f00\u65b9\u5f0f',
+  Link: '\u94fe\u63a5',
+  Poster: '\u5c01\u9762',
+  Media: '\u5a92\u4f53',
+  Print: '\u6253\u5370',
+  Prev: '\u4e0a\u4e00\u4e2a',
+  'Find and replace': '\u67e5\u627e\u548c\u66ff\u6362',
+  'Whole words': '\u5168\u5b57\u5339\u914d',
+  'Insert template': '\u63d2\u5165\u6a21\u677f'
+})

+ 7 - 7
apps/jy-pc/src/App.vue

@@ -8,20 +8,20 @@ import 'tinymce/skins/content/default/content.css'
 export default {
   name: 'App',
   components: {},
-  data () {
+  data() {
     return {
       isRouterAlive: true
     }
   },
   computed: {},
-  created () {},
-  provide () {
+  created() {},
+  provide() {
     return {
       reload: this.reload
     }
   },
   methods: {
-    reload () {
+    reload() {
       this.isRouterAlive = false
       this.$nextTick(() => {
         this.isRouterAlive = true
@@ -32,11 +32,11 @@ export default {
 </script>
 <style lang="scss">
 @import '@/assets/style/base.scss';
-@import "@/assets/style/common.scss";
+@import '@/assets/style/common.scss';
 @import '@/assets/style/pic-icon.scss';
-@import "@/assets/style/reset-ele.scss";
+@import '@/assets/style/reset-ele.scss';
 #app {
-  font-family: "Avenir", Helvetica, Arial, sans-serif;
+  font-family: 'Avenir', Helvetica, Arial, sans-serif;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
   color: #171826;

+ 42 - 30
apps/jy-pc/src/api/index.js

@@ -1,45 +1,53 @@
 import axios from 'axios'
 
-const debug = process.env.NODE_ENV !== 'production'
+const debug = import.meta.env.NODE_ENV !== 'production'
 
 if (debug) {
-  console.log('[debug]当前环境:', process.env)
+  console.log('[debug]当前环境:', import.meta.env)
 }
 
 const service = axios.create({
-  baseURL: process.env.VUE_APP_BASE_API
+  baseURL: import.meta.env.VITE_APP_BASE_API
 })
 
-service.interceptors.request.use(config => {
-  if (config?.formData) {
-    config.headers.content = 'multipart/form-data'
-  }
-  /*
+service.interceptors.request.use(
+  (config) => {
+    if (config?.formData) {
+      config.headers.content = 'multipart/form-data'
+    }
+    /*
     开发环境无代理,联调时需手动添加appId、userId参数
     判断是否是开发环境-接口是否是信息发布程序接口-是否需要添加参数,满足则加上appId、userId参数
     isAdd为信息发布api手动添加的标识,用于筛选是否需要添加appId、userId参数
   */
-  if (debug) {
-    if (config?.isAdd && config?.url && config?.url.indexOf('jyinfo') > -1) {
-      const userId = 'idgfgtuuniniyf'
-      if (config.data instanceof FormData) {
-        config.data.append('appId', '10000')
-        config.data.append('userId', userId)
-      } else if (Object.prototype.toString.call(config.data) === '[object Object]') {
-        config.data.appId = '10000'
-        config.data.userId = userId
-      } else {
-        config.data = (config.data ? config.data + '&' : '') + 'appId=10000&userId=' + userId
+    if (debug) {
+      if (config?.isAdd && config?.url && config?.url.indexOf('jyinfo') > -1) {
+        const userId = 'idgfgtuuniniyf'
+        if (config.data instanceof FormData) {
+          config.data.append('appId', '10000')
+          config.data.append('userId', userId)
+        } else if (
+          Object.prototype.toString.call(config.data) === '[object Object]'
+        ) {
+          config.data.appId = '10000'
+          config.data.userId = userId
+        } else {
+          config.data =
+            (config.data ? config.data + '&' : '') +
+            'appId=10000&userId=' +
+            userId
+        }
       }
     }
+    return config
+  },
+  (error) => {
+    if (debug) {
+      console.log('[debug]请求错误:', error)
+    }
+    return Promise.reject(error)
   }
-  return config
-}, error => {
-  if (debug) {
-    console.log('[debug]请求错误:', error)
-  }
-  return Promise.reject(error)
-})
+)
 
 service.interceptors.response.use(
   (response) => {
@@ -47,14 +55,18 @@ service.interceptors.response.use(
     if (response.status === 200) {
       if (res) {
         // 判断是否需要登录
-        if (res.error_msg === '需要登录' || res.error_msg === '未登录' || res.error_code === 1001 || res.err_code === 1001) {
+        if (
+          res.error_msg === '需要登录' ||
+          res.error_msg === '未登录' ||
+          res.error_code === 1001 ||
+          res.err_code === 1001
+        ) {
           if (!debug) {
             try {
               if (window?.goTemplateData.inIframe) {
                 window.location.href = '/notin/page'
               }
-            } catch (error) {
-            }
+            } catch (error) {}
           } else {
             console.log('需要登录')
           }
@@ -67,7 +79,7 @@ service.interceptors.response.use(
     }
     return res
   },
-  error => {
+  (error) => {
     if (debug) {
       console.log('[debug]返回数据错误:', error)
     }

+ 2 - 3
apps/jy-pc/src/api/modules/ad.js

@@ -1,9 +1,8 @@
-
 import request from '@/api'
 import qs from 'qs'
 
 // 获取广告位图片和链接
-export function getAdList (data) {
+export function getAdList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/getAdvertisement',
@@ -13,7 +12,7 @@ export function getAdList (data) {
 }
 
 // 获工作台介绍
-export function getWhatIsWorkspace () {
+export function getWhatIsWorkspace() {
   return request({
     url: '/front/bootstrap/specification',
     method: 'get'

+ 10 - 10
apps/jy-pc/src/api/modules/authen.js

@@ -2,7 +2,7 @@ import request from '@/api'
 // import qs from 'qs'
 
 // 机构认证
-export function certification (data) {
+export function certification(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/auth',
@@ -12,7 +12,7 @@ export function certification (data) {
 }
 
 // 机构审核列表查询
-export function examineList (data) {
+export function examineList(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/examineList',
@@ -22,7 +22,7 @@ export function examineList (data) {
 }
 
 // 机构审核
-export function examine (data) {
+export function examine(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/examine',
@@ -32,7 +32,7 @@ export function examine (data) {
 }
 
 // 机构查看-初始化
-export function examineInfo (data) {
+export function examineInfo(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/info',
@@ -42,7 +42,7 @@ export function examineInfo (data) {
 }
 
 // 机构查看-初始化
-export function examineDetail (data) {
+export function examineDetail(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/examineInfo',
@@ -52,7 +52,7 @@ export function examineDetail (data) {
 }
 
 // 机构冻结与解冻
-export function examineUpdate (data) {
+export function examineUpdate(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/update',
@@ -62,7 +62,7 @@ export function examineUpdate (data) {
 }
 
 // 机构列表
-export function authenList (data) {
+export function authenList(data) {
   // data = qs.stringify(data)
   return request({
     url: '/userCenter/ent/list',
@@ -72,7 +72,7 @@ export function authenList (data) {
 }
 
 // 图片上传
-export function getUpload (data) {
+export function getUpload(data) {
   // data = qs.stringify(data)
   return request({
     url: '/front/filemanage/upload',
@@ -82,7 +82,7 @@ export function getUpload (data) {
 }
 
 // 判断企业权限
-export function getEntCheckStatus (data) {
+export function getEntCheckStatus(data) {
   return request({
     url: '/userCenter/ent/check',
     method: 'post',
@@ -91,7 +91,7 @@ export function getEntCheckStatus (data) {
 }
 
 // 根据统一社会信用代码查看企业权限
-export function statusByCode (data) {
+export function statusByCode(data) {
   return request({
     url: '/userCenter/ent/getStatusByCode',
     method: 'post',

+ 1 - 1
apps/jy-pc/src/api/modules/bigmember.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 获取用户身份信息
-export function getUserInfo () {
+export function getUserInfo() {
   return request({
     url: '/bigmember/use/isAdd',
     method: 'get'

+ 7 - 7
apps/jy-pc/src/api/modules/entbase.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 获取我当前选中企业信息
-export function getMyEntInfo (data) {
+export function getMyEntInfo(data) {
   return request({
     url: '/entbase/ent/info',
     method: 'post',
@@ -11,7 +11,7 @@ export function getMyEntInfo (data) {
 }
 
 // 获取企业信息(所有)
-export function getEntInfo () {
+export function getEntInfo() {
   return request({
     url: '/entbase/ent/entinfo',
     method: 'get'
@@ -19,7 +19,7 @@ export function getEntInfo () {
 }
 
 // 获取当前账号下的企业列表
-export function getEntList () {
+export function getEntList() {
   return request({
     url: '/entbase/ent/myents',
     method: 'get'
@@ -27,7 +27,7 @@ export function getEntList () {
 }
 
 // 切换企业
-export function selectEnt (data) {
+export function selectEnt(data) {
   data = qs.stringify(data)
   return request({
     url: '/entbase/ent/selectent',
@@ -37,7 +37,7 @@ export function selectEnt (data) {
 }
 
 // 获取是否绑定手机号
-export function getBoundPhone () {
+export function getBoundPhone() {
   return request({
     url: '/entbase/phone/bound',
     method: 'get'
@@ -45,7 +45,7 @@ export function getBoundPhone () {
 }
 
 // 默认选中一个企业
-export function selectedDefaultEnt () {
+export function selectedDefaultEnt() {
   return request({
     url: '/entbase/ent/mySelectent',
     method: 'get'
@@ -53,7 +53,7 @@ export function selectedDefaultEnt () {
 }
 
 // 获取当前选择的企业
-export function mySelectent (data) {
+export function mySelectent(data) {
   data = qs.stringify(data)
   return request({
     url: '/entbase/ent/mySelectent',

+ 1 - 1
apps/jy-pc/src/api/modules/entniche.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 查询是否购买
-export function entNicheWhetherbuy () {
+export function entNicheWhetherbuy() {
   return request({
     url: '/entnicheNew/buy/whetherbuy',
     method: 'POST'

+ 4 - 5
apps/jy-pc/src/api/modules/front.js

@@ -1,30 +1,29 @@
-
 import request from '@/api'
 import qs from 'qs'
 
 // 获取打赏文字内容
-export function getRewardText () {
+export function getRewardText() {
   return request({
     url: '/front/rewardText'
   })
 }
 
 // 获取登录状态
-export function getLoginStatus () {
+export function getLoginStatus() {
   return request({
     url: '/front/hasSign'
   })
 }
 
 // 获取拟在建搜索筛选条件
-export function getNzjConditions () {
+export function getNzjConditions() {
   return request({
     url: '/front/project/nzj/conditions'
   })
 }
 
 // 拟在建搜索列表
-export function getNzjList (data) {
+export function getNzjList(data) {
   data = qs.stringify(data)
   return request({
     url: '/front/project/nzj/search',

+ 12 - 12
apps/jy-pc/src/api/modules/jyinfo.js

@@ -2,7 +2,7 @@ import request from '@/api'
 // import qs from 'qs'
 
 // 获取省市列表
-export function getArea () {
+export function getArea() {
   return request({
     url: '/jyinfo/getArea',
     method: 'post'
@@ -10,7 +10,7 @@ export function getArea () {
 }
 
 // 信息发布(招标信息、采购信息)
-export function publishBiddingInfo (data) {
+export function publishBiddingInfo(data) {
   return request({
     url: '/jyinfo/publish/biddingInfo',
     method: 'post',
@@ -20,7 +20,7 @@ export function publishBiddingInfo (data) {
 }
 
 // 供应信息检索
-export function supplySearch (data) {
+export function supplySearch(data) {
   return request({
     url: '/jyinfo/supplySearch',
     method: 'post',
@@ -29,7 +29,7 @@ export function supplySearch (data) {
 }
 
 // 信息发布(供应信息)
-export function publishSupplyInfo (data) {
+export function publishSupplyInfo(data) {
   return request({
     url: '/jyinfo/publish/supplyInfo',
     method: 'post',
@@ -39,7 +39,7 @@ export function publishSupplyInfo (data) {
 }
 
 // 已信息发布数量
-export function publishStatus () {
+export function publishStatus() {
   return request({
     url: '/jyinfo/publishStatus',
     method: 'post',
@@ -48,7 +48,7 @@ export function publishStatus () {
 }
 
 // 关联项目联想
-export function pushedRelated (data) {
+export function pushedRelated(data) {
   return request({
     url: '/jyinfo/pushedRelated',
     method: 'post',
@@ -58,7 +58,7 @@ export function pushedRelated (data) {
 }
 
 // 我的发布列表
-export function myPublishList (data) {
+export function myPublishList(data) {
   return request({
     url: '/jyinfo/myPublishList',
     method: 'post',
@@ -68,7 +68,7 @@ export function myPublishList (data) {
 }
 
 // 我发布的信息详情
-export function myPublishDetail (data) {
+export function myPublishDetail(data) {
   return request({
     url: '/jyinfo/myPublishDetail',
     method: 'post',
@@ -78,7 +78,7 @@ export function myPublishDetail (data) {
 }
 
 // 信息审核状态查询
-export function reviewStatus (data) {
+export function reviewStatus(data) {
   return request({
     url: '/jyinfo/reviewStatus',
     method: 'post',
@@ -88,7 +88,7 @@ export function reviewStatus (data) {
 }
 
 // 删除我发布的信息
-export function delMyPublish (data) {
+export function delMyPublish(data) {
   return request({
     url: '/jyinfo/delMyPublish',
     method: 'post',
@@ -98,7 +98,7 @@ export function delMyPublish (data) {
 }
 
 // 附件上传
-export function infoFileUpload (data) {
+export function infoFileUpload(data) {
   return request({
     url: '/jyinfo/infoFile/upload',
     method: 'post',
@@ -110,7 +110,7 @@ export function infoFileUpload (data) {
 }
 
 // 供应信息详情
-export function supplyInfoDetail (data) {
+export function supplyInfoDetail(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyinfo/supplyInfoDetail',

+ 5 - 5
apps/jy-pc/src/api/modules/pay.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 企业联想
-export function getEntAssociation (data) {
+export function getEntAssociation(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/user/company/association',
@@ -12,7 +12,7 @@ export function getEntAssociation (data) {
 }
 
 // 用户身份信息
-export function getAccountInfo () {
+export function getAccountInfo() {
   return request({
     url: '/jypay/user/getAccountInfo',
     method: 'get'
@@ -20,7 +20,7 @@ export function getAccountInfo () {
 }
 
 // 附件下载
-export function getConsumePack (data) {
+export function getConsumePack(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/resourcePack/consumePack',
@@ -30,7 +30,7 @@ export function getConsumePack (data) {
 }
 
 // 权益码兑换
-export function equityExchange (data) {
+export function equityExchange(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/equityCode/exchange',
@@ -40,7 +40,7 @@ export function equityExchange (data) {
 }
 
 // 权益码兑换列表
-export function equityList (data) {
+export function equityList(data) {
   return request({
     url: '/jypay/equityCode/list',
     method: 'post',

+ 4 - 4
apps/jy-pc/src/api/modules/proposed.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 import qs from 'qs'
 // 获取回显信息
-export function domainUserauthinfo (data) {
+export function domainUserauthinfo(data) {
   return request({
     url: '/salesLeads/retainedCapital',
     method: 'get',
@@ -9,7 +9,7 @@ export function domainUserauthinfo (data) {
   })
 }
 // 公司联想
-export function association (data) {
+export function association(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/user/company/association',
@@ -18,7 +18,7 @@ export function association (data) {
   })
 }
 // 提交
-export function domainUsersave (data) {
+export function domainUsersave(data) {
   return request({
     url: '/salesLeads/collectInfo',
     method: 'post',
@@ -26,7 +26,7 @@ export function domainUsersave (data) {
   })
 }
 // 详情
-export function details (data) {
+export function details(data) {
   return request({
     url: '/front/project/nzj/details',
     method: 'get',

+ 3 - 3
apps/jy-pc/src/api/modules/public.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 短信校验
-export function checkCaptcha (data) {
+export function checkCaptcha(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/checkCaptcha',
@@ -12,7 +12,7 @@ export function checkCaptcha (data) {
 }
 
 // 发短信
-export function captcha (data) {
+export function captcha(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/captcha',
@@ -22,7 +22,7 @@ export function captcha (data) {
 }
 
 // 附件下载
-export function supplyInfo (data) {
+export function supplyInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/attachment/supplyInfo',

+ 2 - 2
apps/jy-pc/src/api/modules/publicapply.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 import qs from 'qs'
 // 获取身份列表
-export function identityList (data) {
+export function identityList(data) {
   return request({
     url: '/publicapply/identity/list',
     method: 'post',
@@ -9,7 +9,7 @@ export function identityList (data) {
   })
 }
 // 切换身份
-export function identitySwitch (data) {
+export function identitySwitch(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/identity/switch',

+ 1 - 1
apps/jy-pc/src/api/modules/resourceCenter.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 获取供应信息总量及余额
-export function getSupplySurplus (data) {
+export function getSupplySurplus(data) {
   return request({
     url: '/resourceCenter/surplus',
     method: 'post',

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
apps/jy-pc/src/assets/fonts/app/iconfont.js


+ 3 - 1
apps/jy-pc/src/assets/style/element.theme.scss

@@ -61,4 +61,6 @@ $--background-color-base: $gray_1 !default;
 /* 改变 icon 字体路径变量,必需 */
 $--font-path: '~element-ui/lib/theme-chalk/fonts';
 
-@import "~element-ui/packages/theme-chalk/src/index";
+//@import "~element-ui/packages/theme-chalk/src/index";
+//
+@import "element-ui/packages/theme-chalk/src/index";

+ 62 - 51
apps/jy-pc/src/assets/tinymce/ax_wordlimit/plugin.js

@@ -1,55 +1,66 @@
-tinymce.PluginManager.add('ax_wordlimit', function(editor) {
-    var pluginName='字数限制';
-    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
-    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');
-    var ax_wordlimit_type = editor.getParam('ax_wordlimit_type', 'letter' );
-    var ax_wordlimit_num = editor.getParam('ax_wordlimit_num', false );
-    var ax_wordlimit_delay = editor.getParam('ax_wordlimit_delay', 500 );
-    var ax_wordlimit_callback = editor.getParam('ax_wordlimit_callback', function(){} );
-    var ax_wordlimit_event = editor.getParam('ax_wordlimit_event', 'SetContent Undo Redo Keyup' );
-    var onsign=1;
-    //统计方法1:计算总字符数
-    var sumLetter = function(){
-        var html = editor.getContent();
-        var re1 = new RegExp("<.+?>","g");
-        var txt = html.replace(re1,'');
-        txt = txt.replace(/\n/g,'');
-        txt = txt.replace(/&nbsp;/g,' ');
-        var num=txt.length;
-        return {txt:txt,num:num}
+tinymce.PluginManager.add('ax_wordlimit', function (editor) {
+  let pluginName = '字数限制'
+  let global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools')
+  let global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay')
+  let ax_wordlimit_type = editor.getParam('ax_wordlimit_type', 'letter')
+  let ax_wordlimit_num = editor.getParam('ax_wordlimit_num', false)
+  let ax_wordlimit_delay = editor.getParam('ax_wordlimit_delay', 500)
+  let ax_wordlimit_callback = editor.getParam(
+    'ax_wordlimit_callback',
+    function () {}
+  )
+  let ax_wordlimit_event = editor.getParam(
+    'ax_wordlimit_event',
+    'SetContent Undo Redo Keyup'
+  )
+  let onsign = 1
+  //统计方法1:计算总字符数
+  let sumLetter = function () {
+    let html = editor.getContent()
+    let re1 = new RegExp('<.+?>', 'g')
+    let txt = html.replace(re1, '')
+    txt = txt.replace(/\n/g, '')
+    txt = txt.replace(/&nbsp;/g, ' ')
+    let num = txt.length
+    return { txt: txt, num: num }
+  }
+  let onAct = function () {
+    if (onsign) {
+      onsign = 0
+      //此处预留更多统计方法
+      switch (ax_wordlimit_type) {
+        case 'letter':
+        default:
+          var res = sumLetter()
+      }
+      if (res.num > ax_wordlimit_num) {
+        ax_wordlimit_callback(editor, res.txt, ax_wordlimit_num)
+      }
+      setTimeout(function () {
+        onsign = 1
+      }, ax_wordlimit_delay)
     }
-    var onAct = function(){
-        if(onsign){
-            onsign=0;
-            //此处预留更多统计方法
-            switch(ax_wordlimit_type){
-                case 'letter':
-                default:
-                    var res = sumLetter();
-            }
-            if( res.num > ax_wordlimit_num ){
-                ax_wordlimit_callback(editor, res.txt, ax_wordlimit_num);
-            }
-            setTimeout(function(){onsign=1}, ax_wordlimit_delay);
-        }
-        
+  }
+  let setup = function () {
+    if (ax_wordlimit_num > 0) {
+      global$2.setEditorTimeout(
+        editor,
+        function () {
+          let doth = editor.on(ax_wordlimit_event, onAct)
+        },
+        300
+      )
     }
-    var setup = function(){
-        if( ax_wordlimit_num>0 ){
-            global$2.setEditorTimeout(editor, function(){
-                var doth = editor.on(ax_wordlimit_event, onAct);
-            }, 300);
-        }
-    };
+  }
 
-    setup();
+  setup()
 
-    return {
-        getMetadata: function () {
-            return  {
-                name: pluginName,
-                url: "http://tinymce.ax-z.cn/more-plugins/ax_wordlimit.php",
-            };
-        }
-    };
-});
+  return {
+    getMetadata: function () {
+      return {
+        name: pluginName,
+        url: 'http://tinymce.ax-z.cn/more-plugins/ax_wordlimit.php'
+      }
+    }
+  }
+})

+ 62 - 51
apps/jy-pc/src/assets/tinymce/ax_wordlimit/plugin.min.js

@@ -1,55 +1,66 @@
-tinymce.PluginManager.add('ax_wordlimit', function(editor) {
-    var pluginName='字数限制';
-    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
-    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');
-    var ax_wordlimit_type = editor.getParam('ax_wordlimit_type', 'letter' );
-    var ax_wordlimit_num = editor.getParam('ax_wordlimit_num', false );
-    var ax_wordlimit_delay = editor.getParam('ax_wordlimit_delay', 500 );
-    var ax_wordlimit_callback = editor.getParam('ax_wordlimit_callback', function(){} );
-    var ax_wordlimit_event = editor.getParam('ax_wordlimit_event', 'SetContent Undo Redo Keyup' );
-    var onsign=1;
-    //统计方法1:计算总字符数
-    var sumLetter = function(){
-        var html = editor.getContent();
-        var re1 = new RegExp("<.+?>","g");
-        var txt = html.replace(re1,'');
-        txt = txt.replace(/\n/g,'');
-        txt = txt.replace(/&nbsp;/g,' ');
-        var num=txt.length;
-        return {txt:txt,num:num}
+tinymce.PluginManager.add('ax_wordlimit', function (editor) {
+  let pluginName = '字数限制'
+  let global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools')
+  let global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay')
+  let ax_wordlimit_type = editor.getParam('ax_wordlimit_type', 'letter')
+  let ax_wordlimit_num = editor.getParam('ax_wordlimit_num', false)
+  let ax_wordlimit_delay = editor.getParam('ax_wordlimit_delay', 500)
+  let ax_wordlimit_callback = editor.getParam(
+    'ax_wordlimit_callback',
+    function () {}
+  )
+  let ax_wordlimit_event = editor.getParam(
+    'ax_wordlimit_event',
+    'SetContent Undo Redo Keyup'
+  )
+  let onsign = 1
+  //统计方法1:计算总字符数
+  let sumLetter = function () {
+    let html = editor.getContent()
+    let re1 = new RegExp('<.+?>', 'g')
+    let txt = html.replace(re1, '')
+    txt = txt.replace(/\n/g, '')
+    txt = txt.replace(/&nbsp;/g, ' ')
+    let num = txt.length
+    return { txt: txt, num: num }
+  }
+  let onAct = function () {
+    if (onsign) {
+      onsign = 0
+      //此处预留更多统计方法
+      switch (ax_wordlimit_type) {
+        case 'letter':
+        default:
+          var res = sumLetter()
+      }
+      if (res.num > ax_wordlimit_num) {
+        ax_wordlimit_callback(editor, res.txt, ax_wordlimit_num)
+      }
+      setTimeout(function () {
+        onsign = 1
+      }, ax_wordlimit_delay)
     }
-    var onAct = function(){
-        if(onsign){
-            onsign=0;
-            //此处预留更多统计方法
-            switch(ax_wordlimit_type){
-                case 'letter':
-                default:
-                    var res = sumLetter();
-            }
-            if( res.num > ax_wordlimit_num ){
-                ax_wordlimit_callback(editor, res.txt, ax_wordlimit_num);
-            }
-            setTimeout(function(){onsign=1}, ax_wordlimit_delay);
-        }
-        
+  }
+  let setup = function () {
+    if (ax_wordlimit_num > 0) {
+      global$2.setEditorTimeout(
+        editor,
+        function () {
+          let doth = editor.on(ax_wordlimit_event, onAct)
+        },
+        300
+      )
     }
-    var setup = function(){
-        if( ax_wordlimit_num>0 ){
-            global$2.setEditorTimeout(editor, function(){
-                var doth = editor.on(ax_wordlimit_event, onAct);
-            }, 300);
-        }
-    };
+  }
 
-    setup();
+  setup()
 
-    return {
-        getMetadata: function () {
-            return  {
-                name: pluginName,
-                url: "http://tinymce.ax-z.cn/more-plugins/ax_wordlimit.php",
-            };
-        }
-    };
-});
+  return {
+    getMetadata: function () {
+      return {
+        name: pluginName,
+        url: 'http://tinymce.ax-z.cn/more-plugins/ax_wordlimit.php'
+      }
+    }
+  }
+})

+ 145 - 129
apps/jy-pc/src/components/article-item/ArticleItem.vue

@@ -3,7 +3,11 @@
     <div class="article-item-header">
       <slot name="prefix"></slot>
     </div>
-    <div class="article-item-content" :class="{ line: !calcDetail, 'tags-bottom': tagsPosition === 'bottom' }" @click.stop.prevent="onClick">
+    <div
+      class="article-item-content"
+      :class="{ line: !calcDetail, 'tags-bottom': tagsPosition === 'bottom' }"
+      @click.stop.prevent="onClick"
+    >
       <div class="a-i-c-top visited-hd">
         <div class="ellipsis" v-html="calcTitle"></div>
         <div class="tags" v-if="tagsPosition === 'bottom'">
@@ -11,19 +15,25 @@
             class="tag"
             :class="[tag.className]"
             :key="index"
-            v-for="(tag, index) in tagList">
+            v-for="(tag, index) in tagList"
+          >
             {{ tag.value }}
           </span>
         </div>
       </div>
-      <div class="a-i-c-center ellipsis-3" v-if="calcDetail" v-html="calcDetail"></div>
+      <div
+        class="a-i-c-center ellipsis-3"
+        v-if="calcDetail"
+        v-html="calcDetail"
+      ></div>
       <div class="a-i-c-bottom">
         <div class="tags" v-if="tagsPosition === 'right'">
           <span
             class="tag"
             :class="[tag.className]"
             :key="index"
-            v-for="(tag, index) in tagList">
+            v-for="(tag, index) in tagList"
+          >
             {{ tag.value }}
           </span>
         </div>
@@ -70,7 +80,7 @@ export default {
     },
     matchKeys: {
       type: Array,
-      default () {
+      default() {
         return [
           // 'xxx',
           // 'yyy'
@@ -79,7 +89,7 @@ export default {
     },
     tagList: {
       type: Array,
-      default () {
+      default() {
         return [
           // {
           //   value: '河南',
@@ -90,174 +100,180 @@ export default {
     }
   },
   computed: {
-    calcBudget () {
+    calcBudget() {
       if (this.article.budget) {
         return moneyUnit(this.article.budget)
       } else {
         return this.article.budget
       }
     },
-    calcTitle () {
-      const hightLightedTitle = replaceKeyword(this.title, this.matchKeys, ['<span class="highlight-text">', '</span>'])
+    calcTitle() {
+      const hightLightedTitle = replaceKeyword(this.title, this.matchKeys, [
+        '<span class="highlight-text">',
+        '</span>'
+      ])
       if (this.index) {
         return `${this.index}. ${hightLightedTitle}`
       } else {
         return hightLightedTitle
       }
     },
-    calcDetail () {
-      const hightLightedSubTitle = replaceKeyword(this.detail, this.matchKeys, ['<span class="highlight-text">', '</span>'])
+    calcDetail() {
+      const hightLightedSubTitle = replaceKeyword(this.detail, this.matchKeys, [
+        '<span class="highlight-text">',
+        '</span>'
+      ])
       return hightLightedSubTitle
     }
   },
   methods: {
     dateFromNow,
-    onClick () {
+    onClick() {
       this.$emit('onClick')
     }
   }
 }
 </script>
 <style lang="scss" scoped>
-  $border-color: #ECECEC;
-  $deeppink: #FF878D;
+$border-color: #ececec;
+$deeppink: #ff878d;
 
-  .visited {
-    .visited-hd,
-    td {
-      color: #999!important;
-    }
-    .hover:hover {
-      color: $main!important;
+.visited {
+  .visited-hd,
+  td {
+    color: #999 !important;
+  }
+  .hover:hover {
+    color: $main !important;
+  }
+  .visited-ft {
+    color: #9b9ca3 !important;
+  }
+}
+
+.article-item {
+  &-container {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 18px 36px;
+    width: 100%;
+    border-bottom: 1px solid $border-color;
+    cursor: pointer;
+
+    &:first-of-type,
+    &:border-top {
+      border-top: 1px solid $border-color;
     }
-    .visited-ft {
-      color: #9B9CA3!important;
+
+    &:hover {
+      background-color: #f5f6f7;
+      box-shadow: inset 0px -1px 0px $border_color_3;
     }
   }
 
-  .article-item {
-    &-container {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      padding: 18px 36px;
-      width: 100%;
-      border-bottom: 1px solid $border-color;
-      cursor: pointer;
-
-      &:first-of-type,
-      &:border-top {
-        border-top: 1px solid $border-color;
+  &-content {
+    flex: 1;
+    min-height: 22px;
+    .a-i-c {
+      &-top {
+        max-width: 1080px;
+        font-size: 16px;
+        line-height: 24px;
+        color: #1d1d1d;
+        .tags {
+          margin-top: 8px;
+          justify-content: flex-start;
+        }
       }
-
-      &:hover {
-        background-color: #F5F6F7;
-        box-shadow: inset 0px -1px 0px $border_color_3;
+      &-center {
+        margin: 12px 0;
+        font-size: 14px;
+        line-height: 22px;
+        color: #686868;
+      }
+      &-bottom {
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
       }
     }
 
-    &-content {
-      flex: 1;
-      min-height: 22px;
+    &.line {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
       .a-i-c {
         &-top {
-          max-width: 1080px;
-          font-size: 16px;
-          line-height: 24px;
-          color: #1d1d1d;
-          .tags{
-            margin-top: 8px;
-            justify-content: flex-start;
-          }
-        }
-        &-center {
-          margin: 12px 0;
-          font-size: 14px;
-          line-height: 22px;
-          color: #686868;
+          max-width: 700px;
         }
         &-bottom {
-          display: flex;
-          align-items: center;
-          justify-content: flex-end;
-        }
-      }
-
-      &.line {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        .a-i-c {
-          &-top {
-            max-width: 700px;
-          }
-          &-bottom {
-            width: unset;
-          }
+          width: unset;
         }
       }
-      &.tags-bottom{
-        height: auto;
-        align-items: flex-start;
-      }
+    }
+    &.tags-bottom {
+      height: auto;
+      align-items: flex-start;
+    }
 
-      .tags,
-      .time-container {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-      }
+    .tags,
+    .time-container {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+    }
 
-      .tag {
-        &:not(:last-of-type) {
-          margin-right: 8px;
-        }
+    .tag {
+      &:not(:last-of-type) {
+        margin-right: 8px;
       }
     }
   }
+}
 
-  .tag {
-    display: flex;
-    align-items: center;
-    padding: 1px 6px;
-    margin-right: 14px;
-    font-size: 13px;
-    line-height: 20px;
-    white-space: nowrap;
-    border: 1px solid transparent;
-    border-radius: 3px;
+.tag {
+  display: flex;
+  align-items: center;
+  padding: 1px 6px;
+  margin-right: 14px;
+  font-size: 13px;
+  line-height: 20px;
+  white-space: nowrap;
+  border: 1px solid transparent;
+  border-radius: 3px;
 
-    &.grey {
-      color: #686868;
-      border-color: #ececec;
-      background-color: #F5F5FB;
-    }
-    &.blue {
-      color: $white;
-      background-color: $main;
-      border-color: $main;
-    }
-    &.orange {
-      color: $white;
-      background-color: $orange;
-      border-color: $orange;
-    }
-    &.green {
-      color: $white;
-      background-color: $green;
-      border-color: $green;
-    }
-    &.deeppink {
-      color: $white;
-      background-color: $deeppink;
-      border-color: $deeppink;
-    }
+  &.grey {
+    color: #686868;
+    border-color: #ececec;
+    background-color: #f5f5fb;
   }
-
-  .time-text {
-    margin-left: 6px;
-    font-size: 14px;
-    color: #797a7e;
-    line-height: 24px;
+  &.blue {
+    color: $white;
+    background-color: $main;
+    border-color: $main;
   }
+  &.orange {
+    color: $white;
+    background-color: $orange;
+    border-color: $orange;
+  }
+  &.green {
+    color: $white;
+    background-color: $green;
+    border-color: $green;
+  }
+  &.deeppink {
+    color: $white;
+    background-color: $deeppink;
+    border-color: $deeppink;
+  }
+}
+
+.time-text {
+  margin-left: 6px;
+  font-size: 14px;
+  color: #797a7e;
+  line-height: 24px;
+}
 </style>

+ 166 - 85
apps/jy-pc/src/components/collect-info/CollectInfo.vue

@@ -3,31 +3,59 @@
     <div class="user-data-dialog" v-if="showForm">
       <div class="mask"></div>
       <div class="dialog-container">
-        <div class="dialog-header fs18" v-if="dialogTitleTop" v-text="dialogTitleTop"></div>
-        <div class="dialog-header mt-4" v-if="dialogTitle" v-html="dialogTitle"></div>
+        <div
+          class="dialog-header fs18"
+          v-if="dialogTitleTop"
+          v-text="dialogTitleTop"
+        ></div>
+        <div
+          class="dialog-header mt-4"
+          v-if="dialogTitle"
+          v-html="dialogTitle"
+        ></div>
         <div class="dialog-content">
-          <el-form class="user-form" :model="form" :rules="rules" ref="ruleForm">
+          <el-form
+            class="user-form"
+            :model="form"
+            :rules="rules"
+            ref="ruleForm"
+          >
             <!-- 基本信息 -->
             <div class="basic clearfix">
               <div class="form-title">基本信息</div>
               <div class="form-main clearfix">
                 <div class="short-control fl">
                   <el-form-item label="姓名 :" prop="name">
-                    <el-input v-model.trim="form.name" class="data-short-input item-input" placeholder="请输入姓名"
-                      @focus="nameFocus" required>
+                    <el-input
+                      v-model.trim="form.name"
+                      class="data-short-input item-input"
+                      placeholder="请输入姓名"
+                      @focus="nameFocus"
+                      required
+                    >
                     </el-input>
                   </el-form-item>
                 </div>
                 <div class="short-control fr">
                   <el-form-item label="手机号 :" prop="phone">
-                    <el-input v-model.trim="form.phone" maxlength="11" @input="inputPhone"
-                      class="data-short-input item-input" placeholder="请输入手机号" @focus="phoneFocus"></el-input>
+                    <el-input
+                      v-model.trim="form.phone"
+                      maxlength="11"
+                      @input="inputPhone"
+                      class="data-short-input item-input"
+                      placeholder="请输入手机号"
+                      @focus="phoneFocus"
+                    ></el-input>
                   </el-form-item>
                 </div>
                 <div class="short-control fl" v-if="moduleShow.email">
                   <el-form-item label="邮箱 :" prop="mail">
-                    <el-input v-model.trim="form.mail" class="data-short-input item-input" placeholder="请输入邮箱"
-                      @focus="mailFocus"></el-input>
+                    <el-input
+                      v-model.trim="form.mail"
+                      class="data-short-input item-input"
+                      placeholder="请输入邮箱"
+                      @focus="mailFocus"
+                    ></el-input>
                   </el-form-item>
                 </div>
                 <!-- <div class="short-control fr" style="display:none;">
@@ -55,15 +83,25 @@
             <div class="company clearfix">
               <div class="form-title">公司信息</div>
               <div class="form-main">
-                <div class="long-control" style="position: relative;">
+                <div class="long-control" style="position: relative">
                   <el-form-item label="公司名称 :" prop="companyName">
-                    <el-input v-model.trim="form.companyName" class="data-long-input item-input company-name"
-                      @focus="companyFocus" @input="searchCompany" placeholder="请输入公司名称">
+                    <el-input
+                      v-model.trim="form.companyName"
+                      class="data-long-input item-input company-name"
+                      @focus="companyFocus"
+                      @input="searchCompany"
+                      placeholder="请输入公司名称"
+                    >
                     </el-input>
                   </el-form-item>
                   <div class="company-result" v-if="showSearchResult">
-                    <div class="company-list" v-for="item in companyList" :key="item" @click="selectCompany(item)"
-                      v-html="item"></div>
+                    <div
+                      class="company-list"
+                      v-for="item in companyList"
+                      :key="item"
+                      @click="selectCompany(item)"
+                      v-html="item"
+                    ></div>
                   </div>
                 </div>
                 <!-- <div class="long-control" v-if="moduleShow.companyType">
@@ -81,19 +119,39 @@
                 </div> -->
                 <div class="long-control">
                   <el-form-item label="职位 :" prop="job">
-                    <el-select popper-class="custom-select" v-model="form.job" placeholder="请选择职位" class="data-short-input item-input job-input" clearable>
-                      <el-option v-for="item in jobData" :key="item.value" :label="item.label" :value="item.value">
+                    <el-select
+                      popper-class="custom-select"
+                      v-model="form.job"
+                      placeholder="请选择职位"
+                      class="data-short-input item-input job-input"
+                      clearable
+                    >
+                      <el-option
+                        v-for="item in jobData"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      >
                       </el-option>
                     </el-select>
                     <!-- <el-input v-if="showOtherJob" v-model.trim="form.otherJob" class="data-short-input item-input job-name-iput"
                       @focus="otherFocus" placeholder="请输入职位名称">
                     </el-input> -->
                     <el-select
-                      style="margin-left:12px;"
+                      style="margin-left: 12px"
                       v-if="showBranch"
                       popper-class="custom-select"
-                      v-model="form.branch" placeholder="请选择部门" class="data-short-input item-input job-input" clearable>
-                      <el-option v-for="item in branchData" :key="item.value" :label="item.label" :value="item.value">
+                      v-model="form.branch"
+                      placeholder="请选择部门"
+                      class="data-short-input item-input job-input"
+                      clearable
+                    >
+                      <el-option
+                        v-for="item in branchData"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      >
                       </el-option>
                     </el-select>
                   </el-form-item>
@@ -119,31 +177,54 @@
               </div>
             </div>
             <div class="agree-service" v-if="moduleShow.agree">
-              <el-checkbox v-model="form.agreeChecked">&nbsp;我同意剑鱼标讯将业务范围及合作需求提供给潜在合作伙伴搜索、查看</el-checkbox>
+              <el-checkbox v-model="form.agreeChecked"
+                >&nbsp;我同意剑鱼标讯将业务范围及合作需求提供给潜在合作伙伴搜索、查看</el-checkbox
+              >
             </div>
             <div class="dialog-footer">
-              <el-button class="cancel-btn" @click="cancelForm">暂不提供</el-button>
-              <el-button class="submit-btn" @click="submitForm('ruleForm')">提交</el-button>
+              <el-button class="cancel-btn" @click="cancelForm"
+                >暂不提供</el-button
+              >
+              <el-button class="submit-btn" @click="submitForm('ruleForm')"
+                >提交</el-button
+              >
             </div>
           </el-form>
         </div>
       </div>
     </div>
-    <div id="success-dialog" style="display: none;" v-show="showSuccess">
+    <div id="success-dialog" style="display: none" v-show="showSuccess">
       <div class="mask"></div>
       <div class="success-dialog-container">
         <div class="success-title">提交成功</div>
-        <div class="success-content">{{successText}}</div>
+        <div class="success-content">{{ successText }}</div>
         <div class="success-footer">
-          <button type="button" class="custom-btn go-know" @click="knowHandle">我知道了</button>
+          <button type="button" class="custom-btn go-know" @click="knowHandle">
+            我知道了
+          </button>
         </div>
       </div>
     </div>
   </div>
 </template>
 <script>
-import { industryJson, jobJson, companyScaleJson, branchJson } from '@/assets/js/selector.js'
-import { Form, FormItem, Button, CheckboxGroup, Checkbox, Select, Input, Option, Cascader } from 'element-ui'
+import {
+  industryJson,
+  jobJson,
+  companyScaleJson,
+  branchJson
+} from '@/assets/js/selector.js'
+import {
+  Form,
+  FormItem,
+  Button,
+  CheckboxGroup,
+  Checkbox,
+  Select,
+  Input,
+  Option,
+  Cascader
+} from 'element-ui'
 import { mapState } from 'vuex'
 import { debounce } from '@/utils/'
 /**
@@ -152,7 +233,7 @@ import { debounce } from '@/utils/'
  * @param {Object} target - 待校验object
  * @returns {boolean} - 是否通过
  */
-function checkRequiredKeys (keys, target) {
+function checkRequiredKeys(keys, target) {
   try {
     // 职位/部门特殊处理, 满足时移除部门校验
     if (keys.indexOf('branch') !== -1 && keys.indexOf('position') !== -1) {
@@ -161,8 +242,8 @@ function checkRequiredKeys (keys, target) {
       }
     }
     return !keys.some(function (k) {
-      var tempValue = target[k]
-      var result = false
+      let tempValue = target[k]
+      let result = false
       if (typeof tempValue === 'number') {
         tempValue = tempValue.toString()
       }
@@ -695,17 +776,17 @@ export default {
 </script>
 <style lang="scss">
 /* element-ui reset */
-.custom-cascader{
-  margin-top: 0px!important;
-  border: 1px solid #2CB7CA;
-  .el-cascader-panel{
+.custom-cascader {
+  margin-top: 0px !important;
+  border: 1px solid #2cb7ca;
+  .el-cascader-panel {
     height: 300px;
   }
-  .popper__arrow{
+  .popper__arrow {
     display: none;
   }
-  .el-cascader__dropdown{
-    border: 1px solid #2CB7CA;
+  .el-cascader__dropdown {
+    border: 1px solid #2cb7ca;
   }
   .el-cascader-panel {
     min-width: 240px;
@@ -727,15 +808,15 @@ export default {
     flex: 1;
   }
   .el-cascader__dropdown {
-    border-color: #2CB7CA;
+    border-color: #2cb7ca;
   }
 }
-.user-form{
-  .el-checkbox-group{
+.user-form {
+  .el-checkbox-group {
     white-space: nowrap;
   }
-  .company-type>.el-form-item__label,
-  .company-type>.el-form-item__content {
+  .company-type > .el-form-item__label,
+  .company-type > .el-form-item__content {
     line-height: 22px;
   }
   .el-form-item {
@@ -758,39 +839,39 @@ export default {
     line-height: 36px;
   }
   .el-checkbox__input.is-focus {
-    border-color: #2CB7CA;
+    border-color: #2cb7ca;
   }
   .el-checkbox {
     margin-right: 12px;
   }
   .el-checkbox__label {
     padding-left: 3px;
-    color: #1D1D1D;
+    color: #1d1d1d;
   }
-  .el-checkbox__input.is-checked+.el-checkbox__label {
-    color: #1D1D1D;
+  .el-checkbox__input.is-checked + .el-checkbox__label {
+    color: #1d1d1d;
   }
   .el-checkbox__input.is-checked .el-checkbox__inner,
   .el-checkbox__input.is-indeterminate .el-checkbox__inner {
-    background-color: #2CB7CA;
-    border-color: #2CB7CA;
+    background-color: #2cb7ca;
+    border-color: #2cb7ca;
   }
   .el-checkbox__inner:hover {
-    border-color: #DCDFE6;
+    border-color: #dcdfe6;
   }
   .el-cascader-node.in-active-path,
   .el-cascader-node.is-active,
   .el-cascader-node.is-selectable.in-checked-path,
   .el-select-dropdown__item.selected {
-    color: #2CB7CA;
+    color: #2cb7ca;
   }
   .cancel-btn:focus,
   .cancel-btn:hover {
-    background: #FFF;
-    border: 1px solid #DCDFE6;
+    background: #fff;
+    border: 1px solid #dcdfe6;
     color: #606266;
   }
-  .el-textarea{
+  .el-textarea {
     width: calc(100% - 90px);
   }
   .el-textarea__inner {
@@ -798,49 +879,49 @@ export default {
   }
   .el-input.is-active .el-input__inner,
   .el-input__inner:focus {
-    border-color: #2CB7CA;
+    border-color: #2cb7ca;
   }
   .el-select .el-input.is-focus .el-input__inner,
   .el-select .el-input__inner:focus {
-    border-color: #2CB7CA;
+    border-color: #2cb7ca;
   }
   .el-cascader .el-input .el-input__inner:focus,
   .el-cascader .el-input.is-focus .el-input__inner {
-    border-color: #2CB7CA;
+    border-color: #2cb7ca;
   }
 
   li.el-cascader-node,
-  .el-select-dropdown__item{
+  .el-select-dropdown__item {
     float: none;
   }
-  .job-input{
-    width: calc(50% - 90px)!important;
+  .job-input {
+    width: calc(50% - 90px) !important;
   }
-  .job-name-iput{
-    width: calc(50% - 90px)!important;
+  .job-name-iput {
+    width: calc(50% - 90px) !important;
     margin-left: 12px;
   }
 }
-.custom-select{
-  margin-top: 0!important;
-  border: 1px solid #2CB7CA;
-  .el-select-dropdown__wrap{
+.custom-select {
+  margin-top: 0 !important;
+  border: 1px solid #2cb7ca;
+  .el-select-dropdown__wrap {
     max-height: 220px;
   }
-  .popper__arrow{
+  .popper__arrow {
     display: none;
   }
-  .el-popper[x-placement^=bottom] {
+  .el-popper[x-placement^='bottom'] {
     margin-top: 0;
   }
-  .el-popper[x-placement^=bottom] .popper__arrow {
+  .el-popper[x-placement^='bottom'] .popper__arrow {
     display: none;
   }
-  .el-select-dropdown__item.selected{
-    color: #2CB7CA!important;
+  .el-select-dropdown__item.selected {
+    color: #2cb7ca !important;
   }
 }
-.collect-info{
+.collect-info {
   .mask {
     position: fixed;
     width: 100%;
@@ -849,7 +930,7 @@ export default {
     left: 0;
     top: 0;
     bottom: 0;
-    background: rgba(0, 0, 0, .5);
+    background: rgba(0, 0, 0, 0.5);
     z-index: 1031;
   }
   /* 滚动条样式 */
@@ -879,13 +960,13 @@ export default {
     padding: 32px;
     background: #fff;
     border-radius: 8px;
-    transform: translate(-50%,-50%);
+    transform: translate(-50%, -50%);
     z-index: 2000;
     box-sizing: border-box;
     overflow-y: auto;
   }
   .dialog-header {
-    color: #1D1D1D;
+    color: #1d1d1d;
     font-size: 16px;
     line-height: 28px;
     text-align: center;
@@ -902,7 +983,7 @@ export default {
   .form-title {
     font-size: 14px;
     line-height: 22px;
-    color: #2CB7CA;
+    color: #2cb7ca;
   }
   .form-main {
     margin: 10px 0 14px;
@@ -923,7 +1004,7 @@ export default {
     left: 88px;
     height: auto;
     background-color: #fff;
-    border: 1px solid #2CB7CA;
+    border: 1px solid #2cb7ca;
     z-index: 100;
     border-radius: 4px;
   }
@@ -932,14 +1013,14 @@ export default {
     height: 30px;
     line-height: 30px;
     font-size: 14px;
-    color: #1D1D1D;
+    color: #1d1d1d;
     cursor: pointer;
     text-overflow: ellipsis;
     overflow: hidden;
     white-space: nowrap;
   }
   .company-list:hover {
-    background: #ECECEC;
+    background: #ececec;
   }
   .data-short-input {
     width: calc(100% - 90px);
@@ -957,7 +1038,7 @@ export default {
     text-align: center;
   }
   .agree-service .el-checkbox__label,
-  .agree-service .el-checkbox__input.is-checked+.el-checkbox__label {
+  .agree-service .el-checkbox__input.is-checked + .el-checkbox__label {
     color: #686868;
   }
   .dialog-footer {
@@ -977,14 +1058,14 @@ export default {
     padding: 0;
     color: #fff;
     line-height: 36px;
-    background: #2CB7CA;
+    background: #2cb7ca;
     border-radius: 6px;
-    border: 1px solid #2CB7CA;
+    border: 1px solid #2cb7ca;
   }
   .submit-btn:hover {
     color: #fff;
-    border-color: #2CB7CA;
-    background: #2CB7CA;
+    border-color: #2cb7ca;
+    background: #2cb7ca;
   }
   .success-dialog-container {
     position: fixed;
@@ -1032,8 +1113,8 @@ export default {
     opacity: 0.5;
     cursor: not-allowed;
   }
-  .custom-cascader{
-    li{
+  .custom-cascader {
+    li {
       float: none;
     }
   }

+ 23 - 19
apps/jy-pc/src/components/dialog/Dialog.vue

@@ -15,8 +15,12 @@
         <slot name="content"></slot>
       </div>
       <div class="dialog-footer">
-        <el-button v-if="showCancelBtn" @click="onCancel">{{cancelBtnText}}</el-button>
-        <el-button :disabled="disabled" type="primary" @click="onConfirm">{{confirmBtnText}}</el-button>
+        <el-button v-if="showCancelBtn" @click="onCancel">{{
+          cancelBtnText
+        }}</el-button>
+        <el-button :disabled="disabled" type="primary" @click="onConfirm">{{
+          confirmBtnText
+        }}</el-button>
       </div>
       <div class="dialog-label" v-if="customclass.indexOf('file') === -1">
         <slot name="label"></slot>
@@ -80,10 +84,10 @@ export default {
     }
   },
   methods: {
-    onCancel () {
+    onCancel() {
       this.$emit('onCancel')
     },
-    onConfirm () {
+    onConfirm() {
       this.$emit('onConfirm', this.confirmBtnText)
     }
   }
@@ -91,52 +95,52 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-::v-deep{
-  .jy-custom-dialog{
+::v-deep {
+  .jy-custom-dialog {
     padding: 32px;
     border-radius: 8px;
-    .el-dialog__header{
+    .el-dialog__header {
       padding: 0;
-      color: #1D1D1D;
+      color: #1d1d1d;
       line-height: 28px;
       font-size: 18px;
-      .el-dialog__title{
-        color: #1D1D1D;
+      .el-dialog__title {
+        color: #1d1d1d;
       }
     }
-    .el-dialog__body{
+    .el-dialog__body {
       padding: 0;
     }
-    .dialog-content{
+    .dialog-content {
       margin-top: 20px;
       font-size: 14px;
       line-height: 22px;
       text-align: center;
       color: #686868;
     }
-    .dialog-footer{
+    .dialog-footer {
       margin-top: 20px;
       text-align: center;
-      .el-button{
+      .el-button {
         padding: 0;
         width: 132px;
         height: 36px;
         font-size: 16px;
       }
-      .el-button + .el-button{
+      .el-button + .el-button {
         margin-left: 52px;
       }
     }
-    .dialog-label{
+    .dialog-label {
       margin-top: 20px;
       font-size: 14px;
       line-height: 22px;
       color: #686868;
       text-align: center;
     }
-    &.file-down-dialog{
-      width: 380px!important;
-      .dialog-content{
+    &.file-down-dialog {
+      width: 380px !important;
+      .dialog-content {
         text-align: center;
       }
     }

+ 16 - 6
apps/jy-pc/src/components/dialog/WorkspaceButtonGroup.vue

@@ -3,12 +3,22 @@
     <button class="page-back-btn" @click="goBack">返回</button>
     <div class="into-work-space" @click="goWorkSpace">
       <span>进入工作台</span>
-      <el-tooltip popper-class="tooltip-help-class" effect="dark" placement="bottom">
-        <img class="tooltip-help-btn" src='@/assets/image/icon/info-icon-white.png' width="15" height="15" alt="" />
+      <el-tooltip
+        popper-class="tooltip-help-class"
+        effect="dark"
+        placement="bottom"
+      >
+        <img
+          class="tooltip-help-btn"
+          src="@/assets/image/icon/info-icon-white.png"
+          width="15"
+          height="15"
+          alt=""
+        />
         <template slot="content">
           <div class="tooltip-slot-content">
             工作台:
-            <br/>
+            <br />
             {{ workspaceDescText }}
           </div>
         </template>
@@ -28,16 +38,16 @@ export default {
   props: {
     goWorkSpaceCustom: Function
   },
-  data () {
+  data() {
     return {
       isInIframe: false,
       workspaceDescText: ''
     }
   },
-  created () {
+  created() {
     this.getWhatIsWorkspace()
   },
-  mounted () {
+  mounted() {
     /* eslint-disable */
     this.isInIframe = window.goTemplateData?.inIframe
   },

+ 35 - 18
apps/jy-pc/src/components/editor/Editor.vue

@@ -4,7 +4,8 @@
       v-model="content"
       ref="tinymceVue"
       :init="init"
-      :disabled="disabled">
+      :disabled="disabled"
+    >
     </tinymceVue>
   </div>
 </template>
@@ -45,7 +46,7 @@ import 'tinymce/plugins/anchor'
 import 'tinymce/plugins/insertdatetime'
 import 'tinymce/plugins/advlist'
 import 'tinymce/plugins/lists' // 列表插件
-import 'tinymce/plugins/wordcount'// 字数统计插件
+import 'tinymce/plugins/wordcount' // 字数统计插件
 import 'tinymce/plugins/imagetools'
 import 'tinymce/plugins/textpattern'
 import 'tinymce/plugins/emoticons'
@@ -65,7 +66,7 @@ import '@/assets/tinymce/ax_wordlimit/plugin'
 // import 'tinymce/plugins/importword' // 导入word
 // import 'tinymce/plugins/kityformula-editor' // 插入公式
 
-const baseUrl = `${process.env.VUE_APP_BASE_URL}`
+const baseUrl = `${import.meta.env.VITE_APP_BASE_URL}`
 
 export default {
   components: {
@@ -90,7 +91,8 @@ export default {
     },
     plugins: {
       type: [String, Array],
-      default: 'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave autoresize ax_wordlimit'
+      default:
+        'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave autoresize ax_wordlimit'
     },
     menubar: {
       type: String,
@@ -98,24 +100,35 @@ export default {
     },
     toolbar: {
       type: [String, Array],
-      default: 'code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | styleselect formatselect fontselect fontsizeselect lineheight | bullist numlist | blockquote subscript superscript removeformat | table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen'
+      default:
+        'code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | styleselect formatselect fontselect fontsizeselect lineheight | bullist numlist | blockquote subscript superscript removeformat | table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen'
     },
     maxLength: {
       type: [Number, Boolean],
       default: false
     }
   },
-  data () {
+  data() {
     return {
       init: {
-        language_url: `${this.baseUrl}/tinymce/langs/zh_CN.js`.replace(/\/{2,}/g, '/'),
+        language_url: `${this.baseUrl}/tinymce/langs/zh_CN.js`.replace(
+          /\/{2,}/g,
+          '/'
+        ),
         language: 'zh_CN',
-        skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide`.replace(/\/{2,}/g, '/'),
+        skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide`.replace(
+          /\/{2,}/g,
+          '/'
+        ),
         convert_urls: false,
         height: 300,
         min_height: 400,
         // content_css(为编辑区指定css文件)
-        content_css: `${this.baseUrl}/tinymce/skins/content/default/content.css`.replace(/\/{2,}/g, '/'),
+        content_css:
+          `${this.baseUrl}/tinymce/skins/content/default/content.css`.replace(
+            /\/{2,}/g,
+            '/'
+          ),
         // (指定需加载的插件)
         plugins: this.plugins,
         toolbar_mode: 'wrap',
@@ -142,7 +155,12 @@ export default {
         // 为内容模板插件提供预置模板
         templates: [
           { title: '模板1', description: '介绍文字1', content: '模板内容' },
-          { title: '模板2', description: '介绍文字2', content: '<div class="mceTmpl"><span class="cdate">CDATE</span>,<span class="mdate">MDATE</span>,我的内容</div>' }
+          {
+            title: '模板2',
+            description: '介绍文字2',
+            content:
+              '<div class="mceTmpl"><span class="cdate">CDATE</span>,<span class="mdate">MDATE</span>,我的内容</div>'
+          }
         ],
         // 字数限制
         ax_wordlimit_num: this.maxLength,
@@ -154,18 +172,18 @@ export default {
       content: this.value
     }
   },
-  mounted () {
+  mounted() {
     tinymce.init({})
   },
   methods: {
-    getContentRef () {
+    getContentRef() {
       return this.$refs.tinymceVue
     },
     // 可以添加一些自己的自定义事件,如清空内容
-    clear () {
+    clear() {
       this.content = ''
     },
-    wordLimitCallback (editor, txt, num) {
+    wordLimitCallback(editor, txt, num) {
       // console.log(editor, txt, num)
       if (txt) {
         this.content = txt.slice(0, num)
@@ -178,18 +196,17 @@ export default {
     }
   },
   watch: {
-    value (newValue) {
+    value(newValue) {
       this.content = newValue
     },
-    content (newValue) {
+    content(newValue) {
       this.$emit('input', newValue)
     }
   }
 }
-
 </script>
 <style lang="scss" scoped>
-.tinymce-container{
+.tinymce-container {
   position: relative;
 }
 </style>

+ 47 - 42
apps/jy-pc/src/components/empty/Empty.vue

@@ -12,8 +12,13 @@
 
 <script>
 import { Image } from 'element-ui'
+
+function getImageUrl(filePath) {
+  return new URL(`./assets/${name}`, import.meta.url).href
+}
+
 export default {
-  name: 'empty',
+  name: 'custom-empty',
   components: {
     [Image.name]: Image
   },
@@ -24,9 +29,9 @@ export default {
     },
     images: {
       type: String,
-      default () {
+      default() {
         // return require('@/assets/images/empty.png')
-        return require('@/assets/image/public/jy-back.png')
+        return getImageUrl('image/public/jy-back.png')
       }
     }
   }
@@ -34,52 +39,52 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .empty-container {
+.empty-container {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  flex: 1;
+  padding: 16px;
+  box-sizing: border-box;
+  &.mtb60 {
+    margin: 60px auto;
+  }
+
+  .empty-content-position {
     display: flex;
-    flex-direction: column;
     align-items: center;
+    flex-direction: column;
     justify-content: center;
-    flex: 1;
-    padding: 16px;
-    box-sizing: border-box;
-    &.mtb60 {
-      margin: 60px auto;
-    }
+  }
 
-    .empty-content-position {
-      display: flex;
-      align-items: center;
-      flex-direction: column;
-      justify-content: center;
-    }
+  .mt50 {
+    margin-top: -50px;
+  }
 
-    .mt50 {
-      margin-top: -50px;
+  .empty-main {
+    @extend .empty-content-position;
+    font-family: Microsoft YaHei, Microsoft YaHei-Regular;
+    margin-top: 13px;
+    font-size: 14px;
+    font-weight: 400;
+    color: #999999;
+    line-height: 22px;
+    // 默认文字按钮组合样式
+    span + button {
+      margin-top: 32px;
     }
-
-    .empty-main {
-      @extend .empty-content-position;
-      font-family: Microsoft YaHei, Microsoft YaHei-Regular;
-      margin-top: 13px;
-      font-size: 14px;
-      font-weight: 400;
-      color: #999999;
-      line-height: 22px;
-      // 默认文字按钮组合样式
-      span + button {
-        margin-top: 32px;
-      }
-      ::v-deep.el-icon-plus {
-        font-weight: bold;
-      }
-      .el-button [class*=el-icon-]+span {
-        margin-left: 9px;
-      }
+    ::v-deep.el-icon-plus {
+      font-weight: bold;
     }
-
-    .el-image {
-      width: 200px;
-      height: 200px;
+    .el-button [class*='el-icon-'] + span {
+      margin-left: 9px;
     }
   }
+
+  .el-image {
+    width: 200px;
+    height: 200px;
+  }
+}
 </style>

+ 10 - 14
apps/jy-pc/src/components/layout/ContentLayOut.vue

@@ -7,10 +7,7 @@
       <slot name="right">
         <slot name="right-top"></slot>
         <div class="ad-list">
-          <div
-            class="ad-item-container"
-            v-for="item in adList"
-            :key="item.id">
+          <div class="ad-item-container" v-for="item in adList" :key="item.id">
             <a :href="item.s_link" target="_blank" :id="item.id">
               <img :src="item.s_pic" />
             </a>
@@ -30,7 +27,7 @@ export default {
   props: {
     adCodeList: {
       type: Array,
-      default () {
+      default() {
         return [
           // 'jy-pc-bigmember-project-content-right', // 项目详情页右侧广告位code
           // 'jy-pc-bigmember-entportrayal-content-right', // 企业情报详情页右侧广告位code
@@ -45,14 +42,14 @@ export default {
     }
   },
   computed: {
-    contentCenter () {
+    contentCenter() {
       return this.adList.length === 0 && this.contentWithState === 'center'
     },
-    adShow () {
+    adShow() {
       return this.adList.length === 0 && this.contentWithState
     }
   },
-  data () {
+  data() {
     return {
       adList: [
         // {
@@ -62,17 +59,17 @@ export default {
       ]
     }
   },
-  created () {
+  created() {
     if (Array.isArray(this.adCodeList) && this.adCodeList.length !== 0) {
       this.getAdvertisementList()
     }
   },
   methods: {
     getRandomString,
-    getAdvertisementList () {
+    getAdvertisementList() {
       this.adCodeList.forEach(this.getAdList)
     },
-    async getAdList (code) {
+    async getAdList(code) {
       if (!code) {
         return console.warn('请传入adCodeList参数')
       }
@@ -80,7 +77,7 @@ export default {
       const { data } = await getAdList({ code })
 
       if (Array.isArray(data)) {
-        this.adList = data.map(a => {
+        this.adList = data.map((a) => {
           return {
             ...a,
             id: this.getRandomString()
@@ -107,7 +104,7 @@ export default {
   }
   .content-main {
     flex: 1;
-    transition: .1s;
+    transition: 0.1s;
   }
   .content-right {
     width: 200px;
@@ -133,5 +130,4 @@ export default {
     }
   }
 }
-
 </style>

+ 16 - 10
apps/jy-pc/src/components/result/Result.vue

@@ -9,7 +9,13 @@
         <div class="sub-title" v-html="subTitle"></div>
       </template>
       <template slot="extra">
-        <el-button @click="onClick" v-show="showBtn" type="primary" size="medium">{{btnText}}</el-button>
+        <el-button
+          @click="onClick"
+          v-show="showBtn"
+          type="primary"
+          size="medium"
+          >{{ btnText }}</el-button
+        >
       </template>
     </el-result>
   </div>
@@ -46,7 +52,7 @@ export default {
     [Button.name]: Button
   },
   methods: {
-    onClick () {
+    onClick() {
       this.$emit('onClick')
     }
   }
@@ -54,27 +60,27 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.result{
-  .sub-title{
+.result {
+  .sub-title {
     color: #888888;
     line-height: 22px;
     font-size: 14px;
   }
-  .j-icon{
+  .j-icon {
     width: 48px;
     height: 48px;
   }
-  ::v-deep{
-    .el-button{
+  ::v-deep {
+    .el-button {
       font-size: 16px;
     }
-    .el-result__title{
-      p{
+    .el-result__title {
+      p {
         font-size: 18px;
         color: #1d1d1d;
       }
     }
-    .el-result__extra{
+    .el-result__extra {
       margin-top: 20px;
     }
   }

+ 18 - 8
apps/jy-pc/src/components/reward/Reward.vue

@@ -2,17 +2,27 @@
   <div class="user-reward">
     <div class="user-reward-text">{{ rewardText }}</div>
     <div class="user-reward-action">
-      <button type="button" class="user-reward-button" @click="openRewardDialog(true)">打赏</button>
+      <button
+        type="button"
+        class="user-reward-button"
+        @click="openRewardDialog(true)"
+      >
+        打赏
+      </button>
     </div>
     <el-dialog
       :visible.sync="rewardDialog"
       custom-class="v-reward-dialog"
       :show-close="false"
       title="请微信扫码"
-      top="30vh">
+      top="30vh"
+    >
       <el-image :src="rewardImgSrc"></el-image>
       <div class="close-position">
-        <span class="j-icon icon-reward-close" @click="openRewardDialog(false)"></span>
+        <span
+          class="j-icon icon-reward-close"
+          @click="openRewardDialog(false)"
+        ></span>
       </div>
     </el-dialog>
   </div>
@@ -28,7 +38,7 @@ export default {
       default: ''
     }
   },
-  data () {
+  data() {
     return {
       rewardDialog: false,
       rewardText: '',
@@ -36,18 +46,18 @@ export default {
     }
   },
   computed: {
-    rewardImgSrc () {
+    rewardImgSrc() {
       return `${this.rewardImgSrcBase}${this.id}`
     }
   },
-  created () {
+  created() {
     this.getRewardText()
   },
   methods: {
-    async getRewardText () {
+    async getRewardText() {
       this.rewardText = await getRewardText()
     },
-    openRewardDialog (f) {
+    openRewardDialog(f) {
       this.rewardDialog = f
     }
   }

+ 26 - 11
apps/jy-pc/src/components/search-input/SearchInput.vue

@@ -5,13 +5,18 @@
       :placeholder="placeholder"
       :value="value"
       :clearable="clearable"
-      @focus="preSearch.focus=true"
-      @blur="preSearch.focus=false"
+      @focus="preSearch.focus = true"
+      @blur="preSearch.focus = false"
       @input="input"
-      @keyup.enter.native="onSearch">
+      @keyup.enter.native="onSearch"
+    >
       <template slot="prefix">
         <div class="input-prefix-icon">
-          <img src="@/assets/image/icon/icon-issued-search.png" width="20" height="20">
+          <img
+            src="@/assets/image/icon/icon-issued-search.png"
+            width="20"
+            height="20"
+          />
         </div>
       </template>
       <template slot="append">
@@ -19,7 +24,13 @@
       </template>
     </el-input>
     <slot name="suffix"></slot>
-    <div class="pre-search-list" style="display: none;" v-show="preSearchListShow" @mouseout="preSearch.hover=false" @mouseover="preSearch.hover=true">
+    <div
+      class="pre-search-list"
+      style="display: none"
+      v-show="preSearchListShow"
+      @mouseout="preSearch.hover = false"
+      @mouseover="preSearch.hover = true"
+    >
       <slot name="preSearchContent"></slot>
     </div>
   </div>
@@ -50,7 +61,7 @@ export default {
     prop: 'value',
     event: 'input'
   },
-  data () {
+  data() {
     return {
       preSearch: {
         hover: false,
@@ -60,14 +71,18 @@ export default {
   },
   computed: {
     preSearchListShow: function () {
-      return this.value.trim().length >= 2 && this.perSearchEnabled && (this.preSearch.focus || this.preSearch.hover)
+      return (
+        this.value.trim().length >= 2 &&
+        this.perSearchEnabled &&
+        (this.preSearch.focus || this.preSearch.hover)
+      )
     }
   },
   methods: {
-    input (e) {
+    input(e) {
       this.$emit('input', e)
     },
-    onSearch () {
+    onSearch() {
       this.$emit('onSearch')
     }
   }
@@ -132,7 +147,7 @@ export default {
   top: 52px;
   width: 640px;
   background: #fff;
-  box-shadow: 0 0 20px rgb(0,0,0,0.1);
+  box-shadow: 0 0 20px rgb(0, 0, 0, 0.1);
   border-radius: 8px;
   overflow: hidden;
   .pre-search-item {
@@ -142,7 +157,7 @@ export default {
     line-height: 24px;
     color: #686868;
     box-sizing: border-box;
-    transition: all .3s;
+    transition: all 0.3s;
     cursor: pointer;
     &:hover {
       padding: 12px 30px;

+ 18 - 16
apps/jy-pc/src/components/selector/AreaSelector.vue

@@ -3,7 +3,8 @@
     class="area-selector"
     :cardType="selectorType"
     @onConfirm="onConfirm"
-    @onCancel="onCancel">
+    @onCancel="onCancel"
+  >
     <div slot="header" :class="{ 's-header': selectorType === 'line' }">
       <slot name="header">选择区域</slot>
     </div>
@@ -39,15 +40,18 @@ export default {
       type: Boolean,
       default: false
     },
-    singleChoice: { // 是否单选? 只有在selectorType=line下才会生效
+    singleChoice: {
+      // 是否单选? 只有在selectorType=line下才会生效
       // type: Boolean,
       default: false
     },
-    showSearchInput: { // 是否显示搜索 只有在selectorType=card下才会生效
+    showSearchInput: {
+      // 是否显示搜索 只有在selectorType=card下才会生效
       type: Boolean,
       default: true
     },
-    showSelectResult: { // 是否显示选择结果 只有在selectorType=card下才会生效
+    showSelectResult: {
+      // 是否显示选择结果 只有在selectorType=card下才会生效
       type: Boolean,
       default: false
     },
@@ -55,39 +59,37 @@ export default {
     // 刚进入页面需要被选中的城市数据
     initCityMap: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
   },
-  created () {},
+  created() {},
   methods: {
-    initList (map = {}) {
+    initList(map = {}) {
       return this.$refs.content.initIndexBarAndAreaMap(map)
     },
-    setState (data) {
+    setState(data) {
       return this.$refs.content.setState(data)
     },
-    getState () {
+    getState() {
       return this.$refs.content.getState()
     },
-    getContentRef () {
+    getContentRef() {
       return this.$refs.content
     },
-    onCancel () {
+    onCancel() {
       this.$emit('onCancel')
     },
-    onConfirm () {
+    onConfirm() {
       const selectedCity = this.getState()
       this.$emit('onConfirm', selectedCity)
     },
-    onChange (selected) {
+    onChange(selected) {
       this.$emit('onChange', selected)
     }
   }
 }
 </script>
 
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 310 - 224
apps/jy-pc/src/components/selector/AreaSelectorContent.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="selector-content" v-if="selectorType === 'card'" key="s-content">
     <div class="search-container" v-if="showSearchInput">
-      <el-input v-model.trim="searchContent" placeholder="搜索" prefix-icon="el-icon-search"></el-input>
+      <el-input
+        v-model.trim="searchContent"
+        placeholder="搜索"
+        prefix-icon="el-icon-search"
+      ></el-input>
     </div>
     <div class="result-container" v-if="showSelectResult">
       <div class="result-label">已选择:</div>
@@ -11,10 +15,24 @@
       </div>
     </div>
     <div class="select-list scrollbar" ref="selectList">
-      <div v-for="(item, key) in provinceListMap" :key="key" class="select-group-container">
-        <div class="index-anchor" :id="key" :data-index="key" v-if="key !== '#'">{{ key }}</div>
-        <el-collapse-transition v-for="(province, ii) in item" :key="ii*2">
-          <div class="select-group tab-content global" v-if="province.name == '全国'">
+      <div
+        v-for="(item, key) in provinceListMap"
+        :key="key"
+        class="select-group-container"
+      >
+        <div
+          class="index-anchor"
+          :id="key"
+          :data-index="key"
+          v-if="key !== '#'"
+        >
+          {{ key }}
+        </div>
+        <el-collapse-transition v-for="(province, ii) in item" :key="ii * 2">
+          <div
+            class="select-group tab-content global"
+            v-if="province.name == '全国'"
+          >
             <button
               class="j-button-item global"
               :class="{
@@ -22,29 +40,41 @@
                 [province.id]: true
               }"
               @click="changeCityState(province, '#')"
-            >{{ province.name }}</button>
+            >
+              {{ province.name }}
+            </button>
           </div>
           <div class="select-group" v-else>
             <div class="tab" :class="province.id">
               <div class="tab-name-container" @click="clickCheckbox(province)">
-                <div class="j-icon checkbox" :class="province.selectedState"></div>
+                <div
+                  class="j-icon checkbox"
+                  :class="province.selectedState"
+                ></div>
                 <span class="tab-name">{{ province.name }}</span>
               </div>
-              <span style="flex: 1; height: 100%;" @click="changeExpandState($event, province)"></span>
+              <span
+                style="flex: 1; height: 100%"
+                @click="changeExpandState($event, province)"
+              ></span>
               <span
                 v-if="province.canExpanded"
-                @click="changeExpandState($event, province)">
+                @click="changeExpandState($event, province)"
+              >
                 <i
                   class="el-icon-arrow-down"
                   :class="{
                     rotate180: province.expanded
-                  }"></i>
+                  }"
+                ></i>
               </span>
             </div>
             <el-collapse-transition>
               <div v-show="province.expanded" class="tab-content">
                 <div class="content-list">
-                  <button v-for="(city, iii) in province.children" :key="iii*3"
+                  <button
+                    v-for="(city, iii) in province.children"
+                    :key="iii * 3"
                     class="j-button-item"
                     :class="{
                       active: city.selected,
@@ -52,7 +82,9 @@
                     }"
                     :disabled="!city.canSelected"
                     @click="changeCityState(province, city)"
-                    >{{ city.city }}</button>
+                  >
+                    {{ city.city }}
+                  </button>
                 </div>
               </div>
             </el-collapse-transition>
@@ -61,7 +93,11 @@
       </div>
     </div>
   </div>
-  <div class="selector-content" v-else-if="selectorType === 'line'" key="s-content">
+  <div
+    class="selector-content"
+    v-else-if="selectorType === 'line'"
+    key="s-content"
+  >
     <div class="selected-list" v-if="!onlyProvince">
       <el-tag
         type="plain"
@@ -69,10 +105,17 @@
         v-for="tag in selectedTagList"
         :key="tag"
         @close="tagClose(tag)"
-      >{{ tag }}</el-tag>
+        >{{ tag }}</el-tag
+      >
     </div>
     <div class="select-list" ref="selectList">
-      <div class="index-item" :data-index="key" :ref="'index-item-' + key" v-for="(item, key) in provinceListMap" :key="key">
+      <div
+        class="index-item"
+        :data-index="key"
+        :ref="'index-item-' + key"
+        v-for="(item, key) in provinceListMap"
+        :key="key"
+      >
         <span class="index-bar" v-if="key !== '#'">{{ key }}</span>
         <div
           class="j-button-item"
@@ -83,9 +126,11 @@
             active: provinceButtonActive(province),
             country: province.name === '全国'
           }"
-          :key="ii*2"
+          :key="ii * 2"
           @click="changeExpandStateForLine($event, province)"
-        >{{ province.name }}</div>
+        >
+          {{ province.name }}
+        </div>
       </div>
       <div class="city-list" ref="cityList" v-show="expandedCitiesShow">
         <div class="city-list-content">
@@ -95,7 +140,9 @@
               active: expandedProvince.selectedState === 'checked'
             }"
             @click="clickProvinceInCityListForLine(expandedProvince)"
-          >{{ expandedProvince.name }}</div>
+          >
+            {{ expandedProvince.name }}
+          </div>
           <div
             class="city-item city"
             :class="{
@@ -104,7 +151,9 @@
             v-for="(city, iii) in expandedProvince.children"
             :key="iii"
             @click="changeCityStateForLine(expandedProvince, city)"
-          >{{ city.city }}</div>
+          >
+            {{ city.city }}
+          </div>
         </div>
         <div class="city-list-footer">
           <button class="confirm" @click="confirmCitySelected">确定</button>
@@ -135,15 +184,18 @@ export default {
       type: Boolean,
       default: false
     },
-    singleChoice: { // 是否单选? 只有在selectorType=line下才会生效
+    singleChoice: {
+      // 是否单选? 只有在selectorType=line下才会生效
       type: Boolean,
       default: false
     },
-    showSearchInput: { // 是否显示搜索 只有在selectorType=card下才会生效
+    showSearchInput: {
+      // 是否显示搜索 只有在selectorType=card下才会生效
       type: Boolean,
       default: true
     },
-    showSelectResult: { // 是否显示选择结果 只有在selectorType=card下才会生效
+    showSelectResult: {
+      // 是否显示选择结果 只有在selectorType=card下才会生效
       type: Boolean,
       default: false
     },
@@ -151,7 +203,7 @@ export default {
     // 刚进入页面需要被选中的城市数据
     initCityMap: {
       type: Object,
-      default () {
+      default() {
         return {
           // '北京': [],
           // '安徽': [],
@@ -175,7 +227,7 @@ export default {
       }
     }
   },
-  data () {
+  data() {
     return {
       searchContent: '',
       // 省份与字母IndexBar对照表
@@ -213,11 +265,11 @@ export default {
     }
   },
   computed: {
-    expandedCitiesShow () {
+    expandedCitiesShow() {
       if (!this.expandedProvince) return false
       return this.expandedProvince.children.length
     },
-    selectedCount () {
+    selectedCount() {
       const { selected, zh } = this.getCityCount()
 
       // 整理detail
@@ -241,7 +293,7 @@ export default {
     }
   },
   watch: {
-    initCityMap (newVal, oldVal) {
+    initCityMap(newVal, oldVal) {
       this.setState(newVal)
     },
     searchContent: debounce(function (newVal, oldVal) {
@@ -254,37 +306,42 @@ export default {
         }
         this.$nextTick(() => {
           const wrapper = document.querySelector('.area-selector.s-card')
-          this.$refs.selectList.scrollTop = wrapper.querySelector(`.${id}`).offsetTop
+          this.$refs.selectList.scrollTop = wrapper.querySelector(
+            `.${id}`
+          ).offsetTop
           // document.querySelector(`.${id}`).scrollIntoView() // 兼容性有问题
         })
       }
     }, 300)
   },
-  created () {
+  created() {
     this.initIndexBarAndAreaMap()
     this.setState(this.initCityMap)
   },
   methods: {
-    getAllItem () {
-      var p = {}
+    getAllItem() {
+      let p = {}
       if (this.provinceListMap['#']) {
         p = this.provinceListMap['#'][0]
       }
       return p
     },
     // 整理城市数据列表(并初始化indexBar数据)
-    initIndexBarAndAreaMap (provinceMap = {}) {
+    initIndexBarAndAreaMap(provinceMap = {}) {
       // 整理数据得到indexListMap(),同时获得indexList
       const provinceListMap = {}
       const indexList = []
-      const pMap = Object.keys(provinceMap).length === 0 ? this.provinceListMapExp : provinceMap
+      const pMap =
+        Object.keys(provinceMap).length === 0
+          ? this.provinceListMapExp
+          : provinceMap
       if (Object.keys(provinceMap).length !== 0) {
         this.provinceListMapExp = provinceMap
       }
       for (const key in pMap) {
         const areaArr = []
         indexList.push(key)
-        pMap[key].forEach(pName => {
+        pMap[key].forEach((pName) => {
           const provinceExp = JSON.parse(JSON.stringify(this.provinceExp))
 
           provinceExp.name = pName
@@ -302,7 +359,7 @@ export default {
                 provinceExp.children = []
                 provinceExp.canExpanded = false
               } else {
-                cities.city.forEach(c => {
+                cities.city.forEach((c) => {
                   // 将市区重组成一个新的对象
                   return provinceExp.children.push({
                     city: c.name,
@@ -335,11 +392,11 @@ export default {
       this.getAllItem().selectedState = 'checked'
     },
     // 循环chinaMapJSON,找到对应省下面对应的市
-    getCitiesFromJSONMap (provinceName) {
-      return chinaMapJSON.find(item => item.name.indexOf(provinceName) !== -1)
+    getCitiesFromJSONMap(provinceName) {
+      return chinaMapJSON.find((item) => item.name.indexOf(provinceName) !== -1)
     },
     // 输入字符串,找到其所在省份
-    getProvinceWithString (s = '') {
+    getProvinceWithString(s = '') {
       // 找是否有省份相同的
       const findP = [] // 匹配到的省份数组
       const findC = [] // 匹配到的市数组
@@ -350,8 +407,11 @@ export default {
             if (item[i].name.includes(s)) {
               findP.push(item[i])
             }
-            if (Array.isArray(item[i].children) && item[i].children.length !== 0) {
-              item[i].children.forEach(city => {
+            if (
+              Array.isArray(item[i].children) &&
+              item[i].children.length !== 0
+            ) {
+              item[i].children.forEach((city) => {
                 if (city.city.includes(s)) {
                   findP.push(item[i])
                   findC.push(city)
@@ -367,16 +427,16 @@ export default {
       }
     },
     // 控制城市盒子展开和收起(card)
-    changeExpandState (e, province) {
+    changeExpandState(e, province) {
       if (!province.canExpanded) return
       province.expanded = !province.expanded
     },
     // 控制城市盒子展开和收起(line)
-    changeExpandStateForLine (e, province) {
+    changeExpandStateForLine(e, province) {
       if (province.name === this.expandedProvince.name) return
       // 循环,将其他全部置为false
       for (const key in this.provinceListMap) {
-        this.provinceListMap[key].forEach(item => {
+        this.provinceListMap[key].forEach((item) => {
           item.expanded = false
         })
       }
@@ -411,7 +471,7 @@ export default {
         this.moveTheCityContainer(e)
       }
     },
-    moveTheCityContainer (e) {
+    moveTheCityContainer(e) {
       const selectList = this.$refs.selectList
       const cityList = this.$refs.cityList
       const { lineFirstDom, clickLine } = this.getDomInfo(e.target)
@@ -429,15 +489,16 @@ export default {
     // 3. 获取行间距差值
     // 4. 当前点击的哪一行
     // 5. 点击按钮前cityList在哪一行
-    getDomInfo (dom) {
+    getDomInfo(dom) {
       if (this.selectorType !== 'line') return
       const indexDOMList = [] // 所有索引项dom数组(索引项下有每个省份的按钮)
       const indexTopList = [] // 每个元素距离顶部高度数组
       const tolerance = [] // 行间距差值
-      const lineFirstDom = [ // 每行的第一个dom
+      const lineFirstDom = [
+        // 每行的第一个dom
         ...this.$refs[`index-item-${this.indexList[0]}`]
       ]
-      this.indexList.forEach(item => {
+      this.indexList.forEach((item) => {
         const ref = this.$refs[`index-item-${item}`]
         if (ref && ref[0]) {
           indexDOMList.push(ref[0])
@@ -453,7 +514,8 @@ export default {
 
       // 求平均值,谁的值大于平均值,就在哪一行
       let insetedLine = 0
-      const avg = tolerance.reduce((prev, item) => prev + item) / tolerance.length
+      const avg =
+        tolerance.reduce((prev, item) => prev + item) / tolerance.length
       for (let j = 0; j < tolerance.length; j++) {
         if (tolerance[j] > avg) {
           insetedLine = j + 1
@@ -461,9 +523,13 @@ export default {
       }
 
       // clickDOMIndex: 点击dom在indexDOMList的索引
-      const clickDOMIndex = indexDOMList.findIndex(item => item === dom.parentNode) // dom是点击的按钮
+      const clickDOMIndex = indexDOMList.findIndex(
+        (item) => item === dom.parentNode
+      ) // dom是点击的按钮
       const indexTopSet = Array.from(new Set(indexTopList))
-      const clickLine = indexTopSet.findIndex(item => item === indexTopList[clickDOMIndex]) + 1
+      const clickLine =
+        indexTopSet.findIndex((item) => item === indexTopList[clickDOMIndex]) +
+        1
 
       return {
         lineFirstDom, // 每行的第一个dom
@@ -476,7 +542,7 @@ export default {
     },
     // 城市选择按钮点击事件(card)
     // 根据城市的选择情况判断省份的选择情况
-    changeCityState (province, city) {
+    changeCityState(province, city) {
       if (city === '#') {
         return this.setState()
       }
@@ -488,7 +554,7 @@ export default {
       let count = 0
       const cityLength = province.children.length
       if (cityLength) {
-        province.children.forEach(v => {
+        province.children.forEach((v) => {
           // 前提是可点击的
           if (v.canSelected && v.selected) {
             count++
@@ -519,7 +585,7 @@ export default {
     },
     // 城市选择按钮点击事件(card)
     // 根据城市的选择情况判断省份的选择情况
-    changeCityStateForLine (province, city) {
+    changeCityStateForLine(province, city) {
       if (this.singleChoice) {
         this.setState()
       }
@@ -529,14 +595,14 @@ export default {
 
       if (this.singleChoice) {
         // 单选情况下,需要先将其他选项取消掉
-        province.children.forEach(item => (item.selected = false))
+        province.children.forEach((item) => (item.selected = false))
       }
       city.selected = !city.selected
       // 判断省份的选择状态
       let count = 0
       const cityLength = province.children.length
       if (cityLength) {
-        province.children.forEach(v => {
+        province.children.forEach((v) => {
           // 前提是可点击的
           if (v.canSelected && v.selected) {
             count++
@@ -546,21 +612,21 @@ export default {
       if (count === cityLength) {
         // line状态下 ,城市全部选中,则只选中省份即可
         province.selectedState = 'checked'
-        province.children.forEach(item => (item.selected = false))
+        province.children.forEach((item) => (item.selected = false))
       }
     },
     // 省份checkbox点击事件(card)
-    clickCheckbox (province) {
+    clickCheckbox(province) {
       const state = province.selectedState
       if (state === 'checkeddisabled' || state === 'nonedisabled') return
 
       // 全国置为空
       this.getAllItem().selectedState = ''
       if (state === '' || state === 'half') {
-        province.children.forEach(v => (v.selected = true))
+        province.children.forEach((v) => (v.selected = true))
         province.selectedState = 'checked'
       } else {
-        province.children.forEach(v => (v.selected = false))
+        province.children.forEach((v) => (v.selected = false))
         province.selectedState = ''
       }
 
@@ -571,13 +637,13 @@ export default {
       }
     },
     // 省份点击事件(城市列表中的省份按钮)(line)
-    clickProvinceInCityListForLine (province) {
+    clickProvinceInCityListForLine(province) {
       if (this.singleChoice) {
         this.setState()
         this.getAllItem().selectedState = ''
       }
       const state = province.selectedState
-      province.children.forEach(v => (v.selected = false))
+      province.children.forEach((v) => (v.selected = false))
       if (state === 'checked') {
         province.selectedState = ''
       } else {
@@ -586,10 +652,10 @@ export default {
     },
     // 检查是否所有省份按钮被全选中
     // 全部被全选->返回true
-    checkAllProvinceState () {
+    checkAllProvinceState() {
       const stateArr = []
       for (const key in this.provinceListMap) {
-        this.provinceListMap[key].forEach(item => {
+        this.provinceListMap[key].forEach((item) => {
           if (item.name !== '全国') {
             if (item.selectedState === '') {
               stateArr.push('unchecked')
@@ -622,25 +688,25 @@ export default {
         noSelected: counter.unchecked === stateArr.length
       }
     },
-    setAllNoSelected () {
+    setAllNoSelected() {
       for (const key in this.provinceListMap) {
-        this.provinceListMap[key].forEach(item => {
+        this.provinceListMap[key].forEach((item) => {
           item.selectedState = ''
-          item.children.forEach(iitem => {
+          item.children.forEach((iitem) => {
             iitem.selected = false
           })
         })
       }
     },
     // 初始化选中城市数据(card/line共用)
-    setState (data = {}) {
+    setState(data = {}) {
       // 设置全国
       if (!data || Object.keys(data).length === 0) {
         // 其他全部设置不选中,全国设置选中
         for (const key in this.provinceListMap) {
-          this.provinceListMap[key].forEach(item => {
+          this.provinceListMap[key].forEach((item) => {
             item.selectedState = ''
-            item.children.forEach(iitem => {
+            item.children.forEach((iitem) => {
               iitem.selected = false
             })
             if (item.name === '全国') {
@@ -653,7 +719,7 @@ export default {
         this.setState()
         // 设置某几个省份被选中
         for (const key in this.provinceListMap) {
-          this.provinceListMap[key].forEach(item => {
+          this.provinceListMap[key].forEach((item) => {
             const selectCityArr = data[item.name]
             if (Array.isArray(selectCityArr)) {
               if (selectCityArr.length === 0) {
@@ -661,7 +727,7 @@ export default {
                 if (this.selectorType === 'line') {
                   // line状态下,全省被选中,则其下城市不需要被选中
                 } else {
-                  item.children.forEach(iitem => {
+                  item.children.forEach((iitem) => {
                     iitem.selected = true
                   })
                 }
@@ -669,7 +735,7 @@ export default {
                 item.selectedState = 'checked'
               } else {
                 // 省份中的某些市被选中
-                item.children.forEach(iitem => {
+                item.children.forEach((iitem) => {
                   if (selectCityArr.indexOf(iitem.city) !== -1) {
                     iitem.selected = true
                   }
@@ -687,7 +753,7 @@ export default {
       this.getSelectedTagList(data)
     },
     // 获取当前选中城市数据
-    getState () {
+    getState() {
       const counter = {}
       // 判断是否全国被选中
       if (this.getAllItem().selectedState === 'checked') {
@@ -697,11 +763,11 @@ export default {
       // 全国没有被选中,排除循环全国
       for (const key in this.provinceListMap) {
         if (key === '#') continue
-        this.provinceListMap[key].forEach(item => {
+        this.provinceListMap[key].forEach((item) => {
           // 当前省份下被选中的城市数量
           const selectedCityArr = []
           const cityTotalCount = item.children.length
-          item.children.forEach(iitem => {
+          item.children.forEach((iitem) => {
             if (iitem.selected && iitem.canSelected) {
               selectedCityArr.push(iitem.city)
             }
@@ -717,7 +783,10 @@ export default {
             }
           } else {
             // 计算出当前省份下的城市是否被全选了
-            if (cityTotalCount === selectedCityArr.length && item.selectedState === 'checked') {
+            if (
+              cityTotalCount === selectedCityArr.length &&
+              item.selectedState === 'checked'
+            ) {
               // 城市被全选
               counter[item.name] = []
             } else {
@@ -730,30 +799,34 @@ export default {
       }
       return counter
     },
-    provinceButtonActive (province) {
+    provinceButtonActive(province) {
       if (this.onlyProvince) {
         return province.selectedState === 'checked'
       } else {
         return province.selectedState === 'checked' && province.name === '全国'
       }
     },
-    confirmCitySelected () {
+    confirmCitySelected() {
       // 统计时候有城市被选中了
       const cityLength = this.expandedProvince.children.length
       let count = 0
       if (cityLength) {
-        const selectedCityArr = this.expandedProvince.children.filter(v => {
+        const selectedCityArr = this.expandedProvince.children.filter((v) => {
           return v.canSelected && v.selected
         })
         count = selectedCityArr.length
       }
-      if (this.expandedProvince.selectedState !== 'checked' && cityLength !== 0 && count === 0) {
+      if (
+        this.expandedProvince.selectedState !== 'checked' &&
+        cityLength !== 0 &&
+        count === 0
+      ) {
         return
       }
       // 替换赋值
       for (const key in this.provinceListMap) {
         if (key === '#') continue
-        const res = this.provinceListMap[key].find(item => {
+        const res = this.provinceListMap[key].find((item) => {
           if (item.name === this.expandedProvince.name) {
             Object.assign(item, this.expandedProvince)
             this.getAllItem().selectedState = ''
@@ -769,13 +842,13 @@ export default {
       this.cancelCitySelected()
       this.$emit('onChange', this.selectedCity)
     },
-    cancelCitySelected () {
+    cancelCitySelected() {
       const selected = this.getState()
       if (selected) {
         this.setState(selected)
       }
       for (const key in this.provinceListMap) {
-        this.provinceListMap[key].forEach(item => {
+        this.provinceListMap[key].forEach((item) => {
           item.expanded = false
         })
       }
@@ -783,7 +856,7 @@ export default {
         children: []
       }
     },
-    getSelectedTagList (v) {
+    getSelectedTagList(v) {
       const privinceArr = []
       let cityArr = []
       for (const key in v) {
@@ -798,7 +871,7 @@ export default {
       }
       this.selectedTagList = privinceArr.concat(cityArr)
     },
-    tagClose (name) {
+    tagClose(name) {
       this.cancelCitySelected()
       if (name === '全国') {
         this.selectedTagList = []
@@ -820,7 +893,7 @@ export default {
       this.confirmCitySelected()
     },
     // 统计城市分布数量
-    getCityCount () {
+    getCityCount() {
       const selectedCount = {
         // 全国被选中时,country为1
         country: 1,
@@ -852,8 +925,14 @@ export default {
 
       const tipText = {
         p: selectedCount.province === 0 ? '' : selectedCount.province + '个省',
-        c: selectedCount.city.totalCount === 0 ? '' : selectedCount.city.totalCount + '个市',
-        s: selectedCount.city.pCount === 1 ? '' : '(分布在' + selectedCount.city.pCount + '个省内)',
+        c:
+          selectedCount.city.totalCount === 0
+            ? ''
+            : selectedCount.city.totalCount + '个市',
+        s:
+          selectedCount.city.pCount === 1
+            ? ''
+            : '(分布在' + selectedCount.city.pCount + '个省内)',
         text: ''
       }
 
@@ -861,10 +940,16 @@ export default {
         tipText.text = '全国'
       } else {
         let dot = ''
-        if (selectedCount.city.totalCount !== 0 && selectedCount.province !== 0) {
+        if (
+          selectedCount.city.totalCount !== 0 &&
+          selectedCount.province !== 0
+        ) {
           dot = '、'
         }
-        if (selectedCount.city.totalCount === 0 || selectedCount.city.totalCount === 1) {
+        if (
+          selectedCount.city.totalCount === 0 ||
+          selectedCount.city.totalCount === 1
+        ) {
           tipText.s = ''
         }
         tipText.text = tipText.p + dot + tipText.c + tipText.s
@@ -881,167 +966,168 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .s-card {
-    .j-icon {
-      &.checkbox {
-        width: 18px;
-        height: 18px;
-      }
+.s-card {
+  .j-icon {
+    &.checkbox {
+      width: 18px;
+      height: 18px;
     }
-    .j-button-item{
-      &.global{
-        padding: 0 8px!important;
-        line-height: normal!important;
-      }
+  }
+  .j-button-item {
+    &.global {
+      padding: 0 8px !important;
+      line-height: normal !important;
     }
+  }
 
-    .result-container {
+  .result-container {
+    display: flex;
+    justify-content: space-between;
+    padding: 20px;
+    font-size: 14px;
+    line-height: 22px;
+    .result-label {
+      color: #686868;
+    }
+    .result-content {
+      flex: 1;
+    }
+    .content-count {
+      color: #1d1d1d;
+    }
+    .content-detail {
+      color: $color_main;
+    }
+  }
+
+  .select-group {
+    font-size: 14px;
+    &.global {
+      padding: 0 18px;
+    }
+    .tab {
       display: flex;
+      align-items: center;
       justify-content: space-between;
-      padding: 20px;
-      font-size: 14px;
-      line-height: 22px;
-      .result-label {
-        color: #686868;
-      }
-      .result-content {
-        flex: 1;
-      }
-      .content-count {
-        color: #1D1D1D;
-      }
-      .content-detail {
-        color: $color_main;
-      }
+      padding: 0 18px;
+      height: 40px;
+      border-bottom: 1px solid $border_color_3;
+      cursor: pointer;
     }
-
-    .select-group {
-      font-size: 14px;
-      &.global {
-        padding: 0 18px;
-      }
-      .tab {
-        display: flex;
-        align-items: center;
-        justify-content: space-between;
-        padding: 0 18px;
-        height: 40px;
-        border-bottom: 1px solid $border_color_3;
-        cursor: pointer;
+    .tab-name-container {
+      display: flex;
+      align-items: center;
+      .tab-name {
+        margin-left: 10px;
+        font-weight: bold;
       }
-      .tab-name-container {
+    }
+    .tab-content {
+      padding: 0 18px;
+      .content-list {
         display: flex;
-        align-items: center;
-        .tab-name {
-          margin-left: 10px;
-          font-weight: bold;
-        }
-      }
-      .tab-content {
-        padding: 0 18px;
-        .content-list {
-          display: flex;
-          flex-wrap: wrap;
-          padding: 2px 0;
-        }
+        flex-wrap: wrap;
+        padding: 2px 0;
       }
     }
   }
+}
 
-  .s-line {
-    .el-tag--plain {
+.s-line {
+  .el-tag--plain {
+    color: $color_main;
+    border-color: $color_main;
+    .el-tag__close {
       color: $color_main;
-      border-color: $color_main;
-      .el-tag__close {
-        color: $color_main;
+      &:hover {
+        color: $white;
+        background-color: $color_main;
+      }
+    }
+  }
+  .s-header {
+    line-height: 30px;
+  }
+  .el-tag {
+    margin: 4px 6px;
+    height: 30px;
+  }
+  .selector-content {
+    .selected-list {
+    }
+    .select-list {
+      position: relative;
+      display: flex;
+      flex-wrap: wrap;
+      .index-item {
+        .index-bar {
+          margin-left: 10px;
+          margin-right: 5px;
+          color: #999;
+        }
+      }
+      .j-button-item {
+        display: inline-block;
         &:hover {
+          color: $color_main;
+        }
+        &.active {
           color: $white;
           background-color: $color_main;
         }
+        &.expand {
+          background-color: $gray_1;
+          border: 1px solid #e0e0e0;
+          border-bottom-color: transparent;
+          border-bottom-left-radius: 0;
+          border-bottom-right-radius: 0;
+          position: relative;
+          z-index: 2;
+          // transform: translateZ(0px);
+        }
       }
     }
-    .s-header {
-      line-height: 30px;
-    }
-    .el-tag {
-      margin: 4px 6px;
-      height: 30px;
-    }
-    .selector-content {
-      .selected-list {}
-      .select-list {
-        position: relative;
-        display: flex;
-        flex-wrap: wrap;
-        .index-item {
-          .index-bar {
-            margin-left: 10px;
-            margin-right: 5px;
-            color: #999;
-          }
-        }
-        .j-button-item {
-          display: inline-block;
-          &:hover {
-            color: $color_main;
-          }
-          &.active {
-            color: $white;
-            background-color: $color_main;
-          }
-          &.expand {
-            background-color: $gray_1;
-            border: 1px solid #e0e0e0;
-            border-bottom-color: transparent;
-            border-bottom-left-radius: 0;
-            border-bottom-right-radius: 0;
-            position: relative;
-            z-index: 2;
-            // transform: translateZ(0px);
-          }
+    .city-list {
+      margin-top: -7px;
+      padding: 12px 20px;
+      width: 100%;
+      background-color: $gray_1;
+      border-radius: 4px;
+      border: 1px solid #e0e0e0;
+      .city-item {
+        display: inline-block;
+        margin: 0 4px 4px;
+        padding: 4px 8px;
+        border-radius: 4px;
+        cursor: pointer;
+        &.active {
+          color: $white;
+          background-color: $color_main;
         }
       }
-      .city-list {
-        margin-top: -7px;
-        padding: 12px 20px;
-        width: 100%;
-        background-color: $gray_1;
-        border-radius: 4px;
-        border: 1px solid #E0E0E0;
-        .city-item {
-          display: inline-block;
-          margin: 0 4px 4px;
-          padding: 4px 8px;
-          border-radius: 4px;
+      .city-list-footer {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-top: 12px;
+        button {
+          padding: 4px 16px;
+          font-size: 14px;
+          line-height: 18px;
+          color: #1d1d1d;
+          background-color: $white;
           cursor: pointer;
-          &.active {
+          border-radius: 4px;
+          border: 1px solid #e0e0e0;
+          &.confirm {
+            margin-right: 15px;
             color: $white;
             background-color: $color_main;
-          }
-        }
-        .city-list-footer {
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          margin-top: 12px;
-          button {
-            padding: 4px 16px;
-            font-size: 14px;
-            line-height: 18px;
-            color: #1D1D1D;
-            background-color: $white;
-            cursor: pointer;
-            border-radius: 4px;
-            border: 1px solid #E0E0E0;
-            &.confirm {
-              margin-right: 15px;
-              color: $white;
-              background-color: $color_main;
-              border-color: $color_main;
-            }
+            border-color: $color_main;
           }
         }
       }
     }
   }
+}
 </style>

+ 10 - 12
apps/jy-pc/src/components/selector/IndustrySelector.vue

@@ -44,39 +44,37 @@ export default {
     },
     initIndustry: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
   },
-  data () {
+  data() {
     return {}
   },
-  created () {},
+  created() {},
   methods: {
-    setState (data) {
+    setState(data) {
       return this.$refs.content.setState(data)
     },
-    getState () {
+    getState() {
       return this.$refs.content.getState()
     },
-    getContentRef () {
+    getContentRef() {
       return this.$refs.content
     },
-    onCancel () {
+    onCancel() {
       this.$emit('onCancel')
     },
-    onConfirm () {
+    onConfirm() {
       const selected = this.getState()
       this.$emit('onConfirm', selected)
     },
-    onChange (selected) {
+    onChange(selected) {
       this.$emit('onChange', selected)
     }
   }
 }
 </script>
 
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 143 - 105
apps/jy-pc/src/components/selector/IndustrySelectorContent.vue

@@ -1,7 +1,15 @@
 <template>
-  <div class="selector-content" v-if="selectorType === 'card'" key="selector-content">
+  <div
+    class="selector-content"
+    v-if="selectorType === 'card'"
+    key="selector-content"
+  >
     <div class="search-container">
-      <el-input v-model.trim="searchContent" placeholder="搜索" prefix-icon="el-icon-search"></el-input>
+      <el-input
+        v-model.trim="searchContent"
+        placeholder="搜索"
+        prefix-icon="el-icon-search"
+      ></el-input>
     </div>
     <div class="select-list scrollbar" ref="selectList">
       <div
@@ -18,36 +26,55 @@
               [item.id]: true
             }"
             @click="changeIndustryState(item)"
-          >{{ item.name }}</button>
+          >
+            {{ item.name }}
+          </button>
         </div>
         <div class="select-group-main">
           <button
             type="button"
-            v-for="(iitem, iindex) in item.children" :key="999-iindex"
+            v-for="(iitem, iindex) in item.children"
+            :key="999 - iindex"
             class="j-button-item button-level-2"
             :class="{
               active: iitem.selected,
               [iitem.id]: true
             }"
             @click="changeIndustryState(iitem)"
-            >{{ iitem.name }}</button>
+          >
+            {{ iitem.name }}
+          </button>
         </div>
       </div>
     </div>
   </div>
-  <div class="selector-content" :class="{ 'no-more': !showMore }" key="selector-content" v-else-if="selectorType === 'line'">
-    <span class="action-button show-more" v-if="showmoreBtn" @click="showMore = !showMore">
+  <div
+    class="selector-content"
+    :class="{ 'no-more': !showMore }"
+    key="selector-content"
+    v-else-if="selectorType === 'line'"
+  >
+    <span
+      class="action-button show-more"
+      v-if="showmoreBtn"
+      @click="showMore = !showMore"
+    >
       <span class="action-text">{{ showMore ? '收起' : '更多' }}</span>
-      <span class="el-icon-arrow-down" :class="showMore ? 'rotate180' : ''"></span>
+      <span
+        class="el-icon-arrow-down"
+        :class="showMore ? 'rotate180' : ''"
+      ></span>
     </span>
-    <div class="select-group-container" >
-      <div class="select-group-header"
+    <div class="select-group-container">
+      <div
+        class="select-group-header"
         v-show="!showMore"
-          v-for="(item, index) in industryListMap"
-          :key="index+'A'"
-          :class="{
-            'right-line': showMore
-          }">
+        v-for="(item, index) in industryListMap"
+        :key="index + 'A'"
+        :class="{
+          'right-line': showMore
+        }"
+      >
         <button
           type="button"
           class="j-button-item"
@@ -56,19 +83,23 @@
             [item.id]: true,
             'button-level-0': item.level === 0,
             'button-level-1': item.level === 1,
-            'all': item.level === 0,
-            'bgc': item.level === 1
+            all: item.level === 0,
+            bgc: item.level === 1
           }"
           @click="changeIndustryState(item)"
-        >{{ item.name }}</button>
+        >
+          {{ item.name }}
+        </button>
       </div>
-      <div class="select-group-header"
+      <div
+        class="select-group-header"
         v-show="showMore"
-          v-for="(item, index) in getIndustryListMap"
-          :key="index+'B'"
-          :class="{
-            'right-line': showMore
-          }">
+        v-for="(item, index) in getIndustryListMap"
+        :key="index + 'B'"
+        :class="{
+          'right-line': showMore
+        }"
+      >
         <button
           type="button"
           class="j-button-item"
@@ -77,11 +108,13 @@
             [item.id]: true,
             'button-level-0': item.level === 0,
             'button-level-1': item.level === 1,
-            'all': item.level === 0,
-            'bgc': item.level === 1
+            all: item.level === 0,
+            bgc: item.level === 1
           }"
           @click="changeIndustryState(item)"
-        >{{ item.name }}</button>
+        >
+          {{ item.name }}
+        </button>
       </div>
     </div>
   </div>
@@ -89,7 +122,10 @@
 
 <script>
 import { Input, Icon } from 'element-ui'
-import { industryListMapExp, buyerclassListMapExp } from '@/assets/js/selector.js'
+import {
+  industryListMapExp,
+  buyerclassListMapExp
+} from '@/assets/js/selector.js'
 import { debounce, getRandomString } from '@/utils/'
 
 export default {
@@ -112,14 +148,14 @@ export default {
     dataType: {
       type: String,
       default: 'industry',
-      validator (value) {
+      validator(value) {
         // 行业/采购单位类型
         return ['industry', 'buyerType'].includes(value)
       }
     },
     initIndustry: {
       type: Object,
-      default () {
+      default() {
         return {
           // '建筑工程': [
           //     '勘察设计',
@@ -137,7 +173,7 @@ export default {
       }
     }
   },
-  data () {
+  data() {
     let map = industryListMapExp
     if (this.dataType === 'buyerType') {
       map = buyerclassListMapExp
@@ -166,7 +202,7 @@ export default {
     }
   },
   watch: {
-    initIndustry (newVal, oldVal) {
+    initIndustry(newVal, oldVal) {
       this.setState(newVal)
     },
     searchContent: debounce(function (newVal, oldVal) {
@@ -175,20 +211,22 @@ export default {
       if (id) {
         this.$nextTick(() => {
           const wrapper = document.querySelector('.industry-selector.s-card')
-          this.$refs.selectList.scrollTop = wrapper.querySelector(`.${id}`).offsetTop
+          this.$refs.selectList.scrollTop = wrapper.querySelector(
+            `.${id}`
+          ).offsetTop
         })
       }
     }, 300)
   },
   computed: {
-    getIndustryListMap () {
+    getIndustryListMap() {
       const tempArr = []
-      this.industryListMap.forEach(v => {
+      this.industryListMap.forEach((v) => {
         const tempNode = v
         tempNode.zindex = 1
         tempArr.push(tempNode)
         // eslint-disable-next-line no-unused-expressions
-        tempNode?.children.forEach(s => {
+        tempNode?.children.forEach((s) => {
           const tempS = s
           tempS.zindex = 2
           tempArr.push(tempS)
@@ -197,13 +235,13 @@ export default {
       return tempArr
     }
   },
-  mounted () {
+  mounted() {
     this.initIndustryMap()
     this.setState(this.initIndustry)
   },
   methods: {
     // 整理数据列表
-    initIndustryMap (map) {
+    initIndustryMap(map) {
       const industryListMap = []
       const initMapExp = map || this.industryListMapExp
 
@@ -222,7 +260,7 @@ export default {
         level1.id = `lv1-${getRandomString(8).toLowerCase()}`
 
         const level2Arr = []
-        initMapExp[key].forEach(item => {
+        initMapExp[key].forEach((item) => {
           const level2 = JSON.parse(JSON.stringify(this.industryExp))
           level2.name = item
           level2.level = 2
@@ -236,7 +274,7 @@ export default {
 
       this.industryListMap = industryListMap
     },
-    getAllButton () {
+    getAllButton() {
       const first = this.industryListMap[0]
       if (first && first.level === 0) {
         return first
@@ -245,7 +283,7 @@ export default {
       }
     },
     // 按钮点击事件
-    changeIndustryState (item) {
+    changeIndustryState(item) {
       // 循环所有数据,判断并改变状态
       const allButton = this.getAllButton()
       switch (item.level) {
@@ -258,7 +296,7 @@ export default {
 
           allButton.selected = false
           // 二级子按钮状态跟随一级按钮
-          item.children.forEach(level2 => {
+          item.children.forEach((level2) => {
             level2.selected = item.selected
           })
           break
@@ -267,10 +305,10 @@ export default {
           item.selected = !item.selected
 
           // 找到当前点击的父级元素
-          this.industryListMap.forEach(level1 => {
+          this.industryListMap.forEach((level1) => {
             const selectedStateArr = []
             if (item.level !== 0) {
-              level1.children.forEach(level2 => {
+              level1.children.forEach((level2) => {
                 selectedStateArr.push(level2.selected)
               })
               if (selectedStateArr.indexOf(false) === -1) {
@@ -301,17 +339,17 @@ export default {
       }
     },
     // 检查是否全部选中了/全部不选中
-    checkAllSelectedState () {
+    checkAllSelectedState() {
       // 一级标签选中状态(如果一级标签全部被选中,则说明,全部按钮被选中)
       const level1StateArr = []
       // 所有标签选中状态
       const allSelectedArr = []
 
-      this.industryListMap.forEach(level1 => {
+      this.industryListMap.forEach((level1) => {
         if (level1.level !== 0) {
           level1StateArr.push(level1.selected)
           allSelectedArr.push(level1.selected)
-          level1.children.forEach(level2 => {
+          level1.children.forEach((level2) => {
             allSelectedArr.push(level2.selected)
           })
         }
@@ -328,7 +366,7 @@ export default {
      * 初始化页面选中状态
      * @param { Array | undefined } data 要恢复的数据
      */
-    setState (data) {
+    setState(data) {
       if (Array.isArray(data)) {
         return this.setBuyerclassState(data)
       }
@@ -336,9 +374,9 @@ export default {
       // 设置全部按钮
       if (!data || Object.keys(data).length === 0) {
         // 其他全部设置不选中,全部按钮设置选中
-        this.industryListMap.forEach(item => {
+        this.industryListMap.forEach((item) => {
           item.selected = false
-          item.children.forEach(iitem => {
+          item.children.forEach((iitem) => {
             iitem.selected = false
           })
         })
@@ -348,7 +386,7 @@ export default {
         this.setState()
         allButton.selected = false
 
-        this.industryListMap.forEach(item => {
+        this.industryListMap.forEach((item) => {
           if (data[item.name]) {
             // 如果恢复数组长度等于页面二级标签长度,则一级标签点亮
             if (data[item.name].length === item.children.length) {
@@ -363,22 +401,22 @@ export default {
         })
       }
     },
-    setBuyerclassState (data) {
-      this.getIndustryListMap.forEach(item => {
+    setBuyerclassState(data) {
+      this.getIndustryListMap.forEach((item) => {
         if (data.includes(item.name)) {
           this.changeIndustryState(item)
         }
       })
     },
     // 获取选中的数据
-    getState () {
+    getState() {
       const map = {}
 
-      this.industryListMap.forEach(item => {
+      this.industryListMap.forEach((item) => {
         const mapArr = []
 
         if (item.level !== 0) {
-          item.children.forEach(iitem => {
+          item.children.forEach((iitem) => {
             if (iitem.selected) {
               mapArr.push(iitem.name)
             }
@@ -393,15 +431,15 @@ export default {
       return map
     },
     // 搜索找到其level1级id
-    getIndexWithString (s = '') {
+    getIndexWithString(s = '') {
       if (!s) return
       let giveId = ''
-      this.industryListMap.find(level1 => {
+      this.industryListMap.find((level1) => {
         if (level1.name.includes(s)) {
           giveId = level1.id
           return level1.id
         } else {
-          return level1.children.find(level2 => {
+          return level1.children.find((level2) => {
             if (level2.name.includes(s)) {
               giveId = level1.id
               return level2
@@ -411,7 +449,7 @@ export default {
       })
       return giveId
     },
-    onChange () {
+    onChange() {
       const selected = this.getState()
       this.$emit('onChange', selected)
     }
@@ -420,59 +458,59 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .s-card {
-    .button-level-1 {
-      color: inherit;
-      font-weight: bold;
-    }
-    .button-level-2 {
-      margin: 5px;
+.s-card {
+  .button-level-1 {
+    color: inherit;
+    font-weight: bold;
+  }
+  .button-level-2 {
+    margin: 5px;
+  }
+  .select-group-container {
+    padding: 6px 20px;
+    &:not(:last-of-type) {
+      border-bottom: 1px solid rgba(0, 0, 0, 0.05);
     }
-    .select-group-container {
-      padding: 6px 20px;
-      &:not(:last-of-type) {
-        border-bottom: 1px solid rgba(0,0,0,.05);
-      }
-      .select-group-main {
-        display: flex;
-        flex-wrap: wrap;
-      }
+    .select-group-main {
+      display: flex;
+      flex-wrap: wrap;
     }
   }
+}
 
-  .s-line {
-    .button-level-1 {
-      color: $color_main;
+.s-line {
+  .button-level-1 {
+    color: $color_main;
+  }
+  .selector-content {
+    display: flex;
+    flex-wrap: wrap;
+    padding-right: 45px;
+    &.no-more {
+      flex: 1;
+      height: 38px;
+      overflow: hidden;
     }
-    .selector-content {
-      display: flex;
-      flex-wrap: wrap;
-      padding-right: 45px;
-      &.no-more {
-        flex: 1;
-        height: 38px;
-        overflow: hidden;
-      }
+  }
+  .select-group-container {
+    position: relative;
+    display: flex;
+    flex-wrap: wrap;
+    &.right-line::after {
+      content: '';
+      position: absolute;
+      right: -1px;
+      top: 50%;
+      width: 1px;
+      height: 16px;
+      background-color: #e3e4e6;
+      margin-top: -8px;
+      // transform: translate(0, -50%);
     }
-    .select-group-container {
-      position: relative;
+    .select-group-main {
       display: flex;
       flex-wrap: wrap;
-      &.right-line::after {
-        content: '';
-        position: absolute;
-        right: -1px;
-        top: 50%;
-        width: 1px;
-        height: 16px;
-        background-color: #E3E4E6;
-        margin-top: -8px;
-        // transform: translate(0, -50%);
-      }
-      .select-group-main {
-        display: flex;
-        flex-wrap: wrap;
-      }
     }
   }
+}
 </style>

+ 198 - 179
apps/jy-pc/src/components/selector/SelectorCard.vue

@@ -3,10 +3,13 @@
     class="selector-card"
     :class="{
       's-card': cardType === 'card',
-      's-line': cardType === 'line',
+      's-line': cardType === 'line'
     }"
+  >
+    <div
+      class="selector-card-header"
+      :class="{ 's-header': cardType === 'line' }"
     >
-    <div class="selector-card-header" :class="{ 's-header': cardType === 'line' }">
       <slot name="header"></slot>
     </div>
     <div class="selector-card-content scrollbar">
@@ -14,8 +17,19 @@
     </div>
     <div class="selector-card-footer">
       <slot name="footer">
-        <el-button v-if="cardType === 'card'" type="primary" class="confirm" @click="onConfirm">{{ confirmText }}</el-button>
-        <el-button v-if="cardType === 'card'" class="cancel" @click="onCancel">{{ cancelText }}</el-button>
+        <el-button
+          v-if="cardType === 'card'"
+          type="primary"
+          class="confirm"
+          @click="onConfirm"
+          >{{ confirmText }}</el-button
+        >
+        <el-button
+          v-if="cardType === 'card'"
+          class="cancel"
+          @click="onCancel"
+          >{{ cancelText }}</el-button
+        >
       </slot>
     </div>
   </div>
@@ -28,7 +42,7 @@ export default {
     cardType: {
       type: String,
       default: 'card',
-      validator (value) {
+      validator(value) {
         return ['card', 'line'].indexOf(value) !== -1
       }
     },
@@ -42,10 +56,10 @@ export default {
     }
   },
   methods: {
-    onCancel () {
+    onCancel() {
       this.$emit('onCancel')
     },
-    onConfirm () {
+    onConfirm() {
       this.$emit('onConfirm')
     }
   }
@@ -53,207 +67,212 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .selector-card {
+.selector-card {
+  display: flex;
+  color: #1d1d1d;
+  background-color: $white;
+  .selector-card-content {
+    position: relative;
     display: flex;
-    color: #1d1d1d;
-    background-color: $white;
-    .selector-card-content {
-      position: relative;
-      display: flex;
-      flex: 1;
+    flex: 1;
 
-      &::v-deep {
-        .fw-bold {
-          font-weight: bold;
+    &::v-deep {
+      .fw-bold {
+        font-weight: bold;
+      }
+      // 子组件按钮公共样式
+      .j-button-item {
+        display: flex;
+        align-items: center;
+        margin: 6px 5px;
+        padding: 2px 6px;
+        line-height: 20px;
+        border-radius: 4px;
+        font-size: 14px;
+        text-align: center;
+        background-color: $white;
+        border: 1px solid $border_color_3;
+        cursor: pointer;
+        &.global {
+          // s-card中的全部按钮使用
+          padding: 6px 8px;
+          height: 24px;
+          line-height: 24px;
+          font-weight: 700;
+          color: inherit;
+          border-color: $border_color_3;
         }
-        // 子组件按钮公共样式
-        .j-button-item {
-          display: flex;
-          align-items: center;
-          margin: 6px 5px;
-          padding: 2px 6px;
-          line-height: 20px;
-          border-radius: 4px;
-          font-size: 14px;
-          text-align: center;
-          background-color: $white;
-          border: 1px solid $border_color_3;
-          cursor: pointer;
-          &.global { // s-card中的全部按钮使用
-            padding: 6px 8px;
-            height: 24px;
-            line-height: 24px;
-            font-weight: 700;
-            color: inherit;
-            border-color: $border_color_3;
-          }
-          &.all { // s-line中的全部按钮使用
-            font-weight: 700;
-            border-color: transparent;
-          }
-          &.hover:hover {
-            color: $color_main;
+        &.all {
+          // s-line中的全部按钮使用
+          font-weight: 700;
+          border-color: transparent;
+        }
+        &.hover:hover {
+          color: $color_main;
+        }
+        // 选中状态
+        &.active {
+          // 默认蓝色边框蓝色字体
+          color: $color_main;
+          border-color: $color_main;
+          &.bgc {
+            // 默认蓝色背景白色字体
+            color: $white;
+            background-color: $color_main;
           }
-          // 选中状态
-          &.active { // 默认蓝色边框蓝色字体
-            color: $color_main;
-            border-color: $color_main;
-            &.bgc { // 默认蓝色背景白色字体
-              color: $white;
-              background-color: $color_main;
-            }
-            &.bgc-opacity { // 默认蓝色边框蓝色字体蓝色半透明背景
-              background-color: $color_main_background;
-            }
+          &.bgc-opacity {
+            // 默认蓝色边框蓝色字体蓝色半透明背景
+            background-color: $color_main_background;
           }
         }
+      }
 
-        [class^=el-icon-] {
-          transition: transform 0.2s ease;
-        }
-        .rotate180 {
-          transform: rotate(180deg);
-        }
+      [class^='el-icon-'] {
+        transition: transform 0.2s ease;
+      }
+      .rotate180 {
+        transform: rotate(180deg);
       }
     }
   }
+}
 
-  .selector-card.s-card {
-    width: 460px;
-    height: 582px;
-    flex-direction: column;
-    align-items: center;
-    justify-content: space-between;
-    box-shadow: 0 0 28px rgb(0 0 0 / 16%);
-    border-radius: 5px;
+.selector-card.s-card {
+  width: 460px;
+  height: 582px;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-between;
+  box-shadow: 0 0 28px rgb(0 0 0 / 16%);
+  border-radius: 5px;
 
-    .selector-card-header,
-    .selector-card-content,
-    .selector-card-footer {
-      width: 100%;
-    }
+  .selector-card-header,
+  .selector-card-content,
+  .selector-card-footer {
+    width: 100%;
+  }
 
-    .selector-card-header {
-      padding-top: 30px;
-      margin: 0 0 40px;
-      font-size: 20px;
-      line-height: 26px;
-      text-align: center;
-      background: linear-gradient(180deg,#e0e0e0, #fff);
-      border-radius: 5px 5px 0 0;
-    }
-    .selector-card-content {
-      align-items: center;
-      overflow: hidden;
-    }
-    .selector-card-footer {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      padding-top: 20px;
-      padding-bottom: 40px;
-      .confirm,
-      .cancel {
-        padding: 10px 50px;
-        margin: 0 20px;
-      }
+  .selector-card-header {
+    padding-top: 30px;
+    margin: 0 0 40px;
+    font-size: 20px;
+    line-height: 26px;
+    text-align: center;
+    background: linear-gradient(180deg, #e0e0e0, #fff);
+    border-radius: 5px 5px 0 0;
+  }
+  .selector-card-content {
+    align-items: center;
+    overflow: hidden;
+  }
+  .selector-card-footer {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding-top: 20px;
+    padding-bottom: 40px;
+    .confirm,
+    .cancel {
+      padding: 10px 50px;
+      margin: 0 20px;
     }
+  }
 
-    &::v-deep {
-      .j-button-item {
-        color: #606266;
-      }
+  &::v-deep {
+    .j-button-item {
+      color: #606266;
+    }
 
-      .search-container {
-        margin: 20px auto;
-        width: 360px;
-        // 输入框公共样式
-        .el-input__inner {
-          padding-left: 42px;
-          background-color: #f7f7f7;
-          border-radius: 22px;
-        }
-        .el-input__prefix {
-          display: flex;
-          align-items: center;
-          justify-content: center;
-        }
-        .el-icon-search {
-          margin-left: 6px;
-          font-size: 18px;
-        }
+    .search-container {
+      margin: 20px auto;
+      width: 360px;
+      // 输入框公共样式
+      .el-input__inner {
+        padding-left: 42px;
+        background-color: #f7f7f7;
+        border-radius: 22px;
       }
-
-      // 子组件卡片布局样式
-      .selector-content {
+      .el-input__prefix {
         display: flex;
-        flex-direction: column;
-        margin: 0 auto;
-        width: 400px;
-        height: 100%;
-        border-radius: 5px;
-        border: 1px solid $border_color_3;
+        align-items: center;
+        justify-content: center;
       }
-
-      // 搜索框下的列表
-      .select-list {
-        position: relative;
-        flex: 1;
-        overflow-y: scroll;
+      .el-icon-search {
+        margin-left: 6px;
+        font-size: 18px;
       }
+    }
 
-      // indexBar样式
-      .index-anchor {
-        margin-top: 10px;
-        padding: 0 20px;
-        height: 30px;
-        line-height: 30px;
-        background-color: #f5f5fb;
-        text-align: left;
-      }
+    // 子组件卡片布局样式
+    .selector-content {
+      display: flex;
+      flex-direction: column;
+      margin: 0 auto;
+      width: 400px;
+      height: 100%;
+      border-radius: 5px;
+      border: 1px solid $border_color_3;
     }
-  }
 
-  .selector-card.s-line {
-    padding: 12px 40px;
-    .s-header {
-      line-height: 36px;
+    // 搜索框下的列表
+    .select-list {
+      position: relative;
+      flex: 1;
+      overflow-y: scroll;
     }
-    .selector-card-header {
-      margin-right: 10px;
-      min-width: 100px;
+
+    // indexBar样式
+    .index-anchor {
+      margin-top: 10px;
+      padding: 0 20px;
+      height: 30px;
+      line-height: 30px;
+      background-color: #f5f5fb;
+      text-align: left;
     }
-    .selector-card-content {
-      min-height: 38px;
-      display: flex;
-      align-items: center;
-      ::v-deep {
-        .pd-6 {
-          padding: 0 6px;
-        }
+  }
+}
+
+.selector-card.s-line {
+  padding: 12px 40px;
+  .s-header {
+    line-height: 36px;
+  }
+  .selector-card-header {
+    margin-right: 10px;
+    min-width: 100px;
+  }
+  .selector-card-content {
+    min-height: 38px;
+    display: flex;
+    align-items: center;
+    ::v-deep {
+      .pd-6 {
+        padding: 0 6px;
       }
     }
-    .selector-content {
-      position: relative;
+  }
+  .selector-content {
+    position: relative;
+  }
+  ::v-deep {
+    .j-button-item {
+      border-color: transparent;
     }
-    ::v-deep{
-      .j-button-item {
-        border-color: transparent;
-      }
-      .action-button.show-more {
-        display: flex;
-        align-items: center;
-        position: absolute;
-        top: 8px;
-        right: 0;
-        font-size: 12px;
-        line-height: 20px;
-        color: #686868;
-        cursor: pointer;
-        .action-text {
-          margin-right: 4px;
-        }
+    .action-button.show-more {
+      display: flex;
+      align-items: center;
+      position: absolute;
+      top: 8px;
+      right: 0;
+      font-size: 12px;
+      line-height: 20px;
+      color: #686868;
+      cursor: pointer;
+      .action-text {
+        margin-right: 4px;
       }
     }
   }
+}
 </style>

+ 10 - 12
apps/jy-pc/src/components/selector/TimeSelector.vue

@@ -35,7 +35,7 @@ export default {
     },
     selectorKeys: {
       type: Array,
-      default () {
+      default() {
         return ['all', 'today', 'lately7', 'lately30', 'lately90']
       }
     },
@@ -45,34 +45,32 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {}
   },
-  created () {},
+  created() {},
   methods: {
-    setState (data) {
+    setState(data) {
       return this.$refs.content.setState(data)
     },
-    getState () {
+    getState() {
       return this.$refs.content.getState()
     },
-    getContentRef () {
+    getContentRef() {
       return this.$refs.content
     },
-    onCancel () {
+    onCancel() {
       this.$emit('onCancel')
     },
-    onConfirm () {
+    onConfirm() {
       const state = this.getState()
       this.$emit('onConfirm', state)
     },
-    onChange (state) {
+    onChange(state) {
       this.$emit('onChange', state)
     }
   }
 }
 </script>
 
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 120 - 95
apps/jy-pc/src/components/selector/TimeSelectorContent.vue

@@ -2,7 +2,11 @@
   <div class="selector-content" v-if="selectorType === 'card'" key="s-content">
     暂不提供时间选择的card组件
   </div>
-  <div class="selector-content" v-else-if="selectorType === 'line'" key="s-content">
+  <div
+    class="selector-content"
+    v-else-if="selectorType === 'line'"
+    key="s-content"
+  >
     <div class="select-group-container">
       <div
         v-for="(item, index) in timeSelectList"
@@ -12,9 +16,15 @@
           active: item.selected
         }"
         @click="clickTimeButton(item)"
-      >{{ item.name }}</div>
+      >
+        {{ item.name }}
+      </div>
     </div>
-    <div class="date-time-container" v-if="showExact" :class="{ active: state.exact === 'exact' }">
+    <div
+      class="date-time-container"
+      v-if="showExact"
+      :class="{ active: state.exact === 'exact' }"
+    >
       <el-date-picker
         v-model="dateTimePickerState.start"
         class="date-time-item left"
@@ -25,7 +35,8 @@
         :format="dateTimePickerConf.format"
         :placeholder="dateTimePickerState.startPlaceHolder"
         :picker-options="startPickerOptions"
-        @change="startDatePickerChange">
+        @change="startDatePickerChange"
+      >
       </el-date-picker>
       <el-date-picker
         v-model="dateTimePickerState.end"
@@ -37,7 +48,8 @@
         :format="dateTimePickerConf.format"
         :placeholder="dateTimePickerState.endPlaceHolder"
         :picker-options="endPickerOptions"
-        @change="endDatePickerChange">
+        @change="endDatePickerChange"
+      >
       </el-date-picker>
     </div>
   </div>
@@ -104,9 +116,11 @@ export default {
     },
     selectorKeys: {
       type: Array,
-      default () {
+      default() {
         const defaultValue = ['all', 'today', 'lately7', 'lately30', 'lately90']
-        return allTimeSelectList.filter(t => defaultValue.includes(t.value)).map(t => t.value)
+        return allTimeSelectList
+          .filter((t) => defaultValue.includes(t.value))
+          .map((t) => t.value)
       }
     },
     defaultSelectedKey: {
@@ -118,7 +132,7 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {
       debug: false,
       timeSelectList: [],
@@ -136,7 +150,7 @@ export default {
         endPlaceHolder: '' // 结束日期
       },
       startPickerOptions: {
-        disabledDate: time => {
+        disabledDate: (time) => {
           const { end } = this.dateTimePickerState
           if (end) {
             return time.getTime() > +new Date(end)
@@ -144,7 +158,7 @@ export default {
         }
       },
       endPickerOptions: {
-        disabledDate: time => {
+        disabledDate: (time) => {
           const { start } = this.dateTimePickerState
           if (start) {
             return time.getTime() < +new Date(start)
@@ -154,17 +168,17 @@ export default {
     }
   },
   computed: {
-    state () {
+    state() {
       return this.getState()
     }
   },
-  created () {
+  created() {
     this.initTimeSelectList(this.selectorKeys)
   },
   methods: {
     dateFormatter,
-    initTimeSelectList (keyList = []) {
-      this.timeSelectList = allTimeSelectList.filter(t => {
+    initTimeSelectList(keyList = []) {
+      this.timeSelectList = allTimeSelectList.filter((t) => {
         const exist = keyList.includes(t.value)
         if (exist) {
           t.selected = false
@@ -185,14 +199,14 @@ export default {
         }
       }
     },
-    calcLastTime () {
+    calcLastTime() {
       const renameList = [
         'thisYear', // 今年全年
         'sinceLastYear', // 去年至今
         'sinceYearBeforeLast' // 前年至今
       ]
       const thisYear = new Date().getFullYear()
-      this.timeSelectList.forEach(item => {
+      this.timeSelectList.forEach((item) => {
         if (renameList.includes(item.value)) {
           if (item.value === renameList[0]) {
             item.name = `${thisYear}年全年`
@@ -204,7 +218,7 @@ export default {
         }
       })
     },
-    setState (data) {
+    setState(data) {
       // {
       //   start: 1620230400000, // 2021-5-6
       //   end: 1620489600000, // 2021-5-9
@@ -233,7 +247,7 @@ export default {
           case 'exact': {
             if (!data.start || !data.end) break
             if (data.start < data.end) {
-              this.timeSelectList.forEach(v => (v.selected = false))
+              this.timeSelectList.forEach((v) => (v.selected = false))
               this.dateTimePickerState.start = new Date(data.start)
               this.dateTimePickerState.end = new Date(data.end)
             }
@@ -245,7 +259,7 @@ export default {
         }
       }
     },
-    getState () {
+    getState() {
       // timeState.exact: all/lately7/lately30/lastYear/exact5种状态
       // 为true时候表示精确筛选,从时间选择器中获取值(其他为根据当前时间计算出的值)
       const timeState = {
@@ -259,7 +273,7 @@ export default {
         day7: 60 * 60 * 1000 * 24 * 7,
         day30: 60 * 60 * 1000 * 24 * 30
       }
-      const selectButton = this.timeSelectList.find(item => item.selected)
+      const selectButton = this.timeSelectList.find((item) => item.selected)
       if (selectButton) {
         timeState.exact = selectButton.value
         Object.assign(timeState, this.calcNotExactTime(timeState.exact))
@@ -270,12 +284,13 @@ export default {
         }
         if (this.dateTimePickerState.end) {
           // 结束时间为当天23:59:59
-          timeState.end = this.dateTimePickerState.end.getTime() + (durations.day1 - 1000)
+          timeState.end =
+            this.dateTimePickerState.end.getTime() + (durations.day1 - 1000)
         }
       }
       return timeState
     },
-    onChange () {
+    onChange() {
       const state = this.getState()
       if (this.debug) {
         state.startFormatted = this.dateFormatter(state.start)
@@ -288,19 +303,19 @@ export default {
       }
       this.$emit('onChange', state)
     },
-    setTimeSelectListState (value, callback) {
-      this.timeSelectList.forEach(item => {
+    setTimeSelectListState(value, callback) {
+      this.timeSelectList.forEach((item) => {
         item.selected = item.value === value
         callback && callback(item)
       })
     },
-    clearDateTimePicker () {
+    clearDateTimePicker() {
       this.dateTimePickerState.start = ''
       this.dateTimePickerState.end = ''
     },
     // 计算lately7/lately30/lastYear等的开始和结束时间
     // endTime传入一个时间戳
-    calcNotExactTime (exact = 'lately7', endTime = Date.now()) {
+    calcNotExactTime(exact = 'lately7', endTime = Date.now()) {
       const t = {
         start: 0,
         end: +new Date(endTime)
@@ -323,7 +338,7 @@ export default {
           break
         }
         case 'lately3': {
-          t.start = t.end - (durations.day1 * 3)
+          t.start = t.end - durations.day1 * 3
           break
         }
         case 'lately7': {
@@ -334,34 +349,40 @@ export default {
           t.start = t.end - durations.day30
           break
         }
-        case 'lately90': { // 近90天
-          t.start = t.end - (durations.day30 * 3)
+        case 'lately90': {
+          // 近90天
+          t.start = t.end - durations.day30 * 3
           break
         }
-        case 'lately180': { // 180天
-          t.start = t.end - (durations.day30 * 6)
+        case 'lately180': {
+          // 180天
+          t.start = t.end - durations.day30 * 6
           break
         }
-        case 'thisYear': { // 今年全年
+        case 'thisYear': {
+          // 今年全年
           const year = new Date(t.end).getFullYear()
           t.start = +new Date(`${year}`)
           t.end = +new Date(`${year + 1}`) - durations.hour1 * 8 - 1
           break
         }
-        case 'lastYear': { // 去年全年
+        case 'lastYear': {
+          // 去年全年
           const year = new Date(t.end).getFullYear()
           const lastYear = year - 1
           t.start = +new Date(`${lastYear}`)
           t.end = +new Date(`${year}`) - durations.hour1 * 8 - 1
           break
         }
-        case 'sinceLastYear': { // 去年至今
+        case 'sinceLastYear': {
+          // 去年至今
           const year = new Date(t.end).getFullYear()
           const lastYear = year - 1
           t.start = +new Date(`${lastYear}`)
           break
         }
-        case 'sinceYearBeforeLast': { // 前年至今
+        case 'sinceYearBeforeLast': {
+          // 前年至今
           const year = new Date(t.end).getFullYear()
           t.start = +new Date(`${year - 2}`)
           break
@@ -374,29 +395,33 @@ export default {
       }
       return t
     },
-    clickTimeButton (item) {
+    clickTimeButton(item) {
       if (item.selected) return
-      this.timeSelectList.forEach(v => (v.selected = false))
+      this.timeSelectList.forEach((v) => (v.selected = false))
       item.selected = true
 
       this.onChange()
     },
-    startDatePickerChange (start) {
+    startDatePickerChange(start) {
       const { end } = this.dateTimePickerState
-      if (start && end) { // start和end都有值
+      if (start && end) {
+        // start和end都有值
         this.setTimeSelectListState()
         this.onChange()
-      } else if (!start && !end) { // start和end都没值
+      } else if (!start && !end) {
+        // start和end都没值
         this.setTimeSelectListState(this.defaultSelectedKey)
         this.onChange()
       }
     },
-    endDatePickerChange (end) {
+    endDatePickerChange(end) {
       const { start } = this.dateTimePickerState
-      if (start && end) { // start和end都有值
+      if (start && end) {
+        // start和end都有值
         this.setTimeSelectListState()
         this.onChange()
-      } else if (!start && !end) { // start和end都没值
+      } else if (!start && !end) {
+        // start和end都没值
         this.setTimeSelectListState(this.defaultSelectedKey)
         this.onChange()
       }
@@ -406,64 +431,64 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .selector-content,
-  .select-group-container {
-    display: flex;
-    align-items: center;
-  }
-  .selector-content {
-    flex-wrap: wrap;
+.selector-content,
+.select-group-container {
+  display: flex;
+  align-items: center;
+}
+.selector-content {
+  flex-wrap: wrap;
+}
+.select-group-container {
+  margin-right: 24px;
+}
+.date-time-container {
+  display: flex;
+  padding: 6px;
+  background-color: #f4f5f7;
+  border-radius: 4px;
+  &.active {
+    background-color: #2cb7ca;
+    .date-time-item {
+      &.left::after {
+        background-color: #e0e0e0;
+      }
+    }
   }
-  .select-group-container {
-    margin-right: 24px;
+  .clear-icon {
+    display: none;
   }
-  .date-time-container {
-    display: flex;
-    padding: 6px;
-    background-color: #F4F5F7;
-    border-radius: 4px;
-    &.active {
-      background-color: #2CB7CA;
-      .date-time-item {
-        &.left::after {
-          background-color: #e0e0e0;
-        }
+  .date-time-item {
+    position: relative;
+    width: 160px;
+    height: 28px;
+    line-height: 28px;
+    text-align: center;
+    &.left {
+      margin-right: 30px;
+      &::after {
+        content: '';
+        position: absolute;
+        width: 12px;
+        height: 2px;
+        top: 50%;
+        right: -10px;
+        transform: translate(100%, -50%);
+        background-color: #1d1d1d;
       }
     }
-    .clear-icon {
-      display: none;
-    }
-    .date-time-item {
-      position: relative;
-      width: 160px;
-      height: 28px;
-      line-height: 28px;
-      text-align: center;
-      &.left {
-        margin-right: 30px;
-        &::after {
-          content: '';
-          position: absolute;
-          width: 12px;
-          height: 2px;
-          top: 50%;
-          right: -10px;
-          transform: translate(100%,-50%);
-          background-color: #1d1d1d;
-        }
+    ::v-deep {
+      .el-input__inner {
+        padding: 0;
+        height: 100%;
+        text-align: center;
+        cursor: pointer;
       }
-      ::v-deep {
-        .el-input__inner {
-          padding: 0;
-          height: 100%;
-          text-align: center;
-          cursor: pointer;
-        }
-        .el-input__suffix {
-          display: flex;
-          align-items: center;
-        }
+      .el-input__suffix {
+        display: flex;
+        align-items: center;
       }
     }
   }
+}
 </style>

+ 11 - 15
apps/jy-pc/src/components/steps/StepItem.vue

@@ -1,9 +1,6 @@
 <template>
-  <div
-    class="step-item"
-    :class="status"
-  >
-    {{title}}
+  <div class="step-item" :class="status">
+    {{ title }}
   </div>
 </template>
 <script>
@@ -60,32 +57,31 @@ export default {
     top: 0;
   }
   &.wait {
-    background: #F5F5FB;
+    background: #f5f5fb;
     color: #999999;
     &::after {
-      border-left: 20px solid #F5F5FB;
+      border-left: 20px solid #f5f5fb;
     }
   }
   &.finish {
     background: rgba(44, 183, 202, 0.1);
-    color: #2CB7CA;
-    &::after{
+    color: #2cb7ca;
+    &::after {
       border-left: 20px solid rgba(44, 183, 202, 0.1);
     }
   }
-  &.process{
-    background: #2CB7CA;
-    color: #FFFFFF;
+  &.process {
+    background: #2cb7ca;
+    color: #ffffff;
     &::after {
-      border-left: 20px solid #2CB7CA;
+      border-left: 20px solid #2cb7ca;
     }
   }
   &:last-child {
     border-radius: 2px;
-    &::after{
+    &::after {
       display: none;
     }
   }
 }
-
 </style>

+ 1 - 1
apps/jy-pc/src/components/toast/CustomToast.vue

@@ -10,7 +10,7 @@
 
 <script>
 export default {
-  name: 'toast'
+  name: 'custom-toast'
 }
 </script>
 

+ 19 - 13
apps/jy-pc/src/store/user.js

@@ -14,33 +14,39 @@ export default {
     loginStatus: {}
   }),
   mutations: {
-    setUserInfo (state, info) {
+    setUserInfo(state, info) {
       state.info = info
       localStorage.setItem('bigmember-login-clear-info', JSON.stringify(info))
     },
-    setAccountInfo (state, info) {
+    setAccountInfo(state, info) {
       state.accountInfo = info
     },
-    setLoginStatus (state, info) {
+    setLoginStatus(state, info) {
       state.loginStatus = info
     },
-    refreshVisited (state) {
+    refreshVisited(state) {
       const expiresTime = 3 * 24 * 60 * 60 * 1000
       const now = Date.now()
       const list = JSON.parse(localStorage.getItem('visited-path-list')) || []
-      state.visitedList = list.filter(item => {
+      state.visitedList = list.filter((item) => {
         return now - item.timestamp <= expiresTime
       })
-      localStorage.setItem('visited-path-list', JSON.stringify(state.visitedList))
+      localStorage.setItem(
+        'visited-path-list',
+        JSON.stringify(state.visitedList)
+      )
     },
     // 访问添加 visitedList
-    addVisited (state, list) {
+    addVisited(state, list) {
       state.visitedList = list
-      localStorage.setItem('visited-path-list', JSON.stringify(state.visitedList))
+      localStorage.setItem(
+        'visited-path-list',
+        JSON.stringify(state.visitedList)
+      )
     }
   },
   actions: {
-    async getUserInfo ({ commit, state }, payload) {
+    async getUserInfo({ commit, state }, payload) {
       try {
         const { data, error_code: code } = await getUserInfo()
         if (code === 0 && data) {
@@ -51,7 +57,7 @@ export default {
         return {}
       }
     },
-    async getAccountInfo ({ commit, state }, payload) {
+    async getAccountInfo({ commit, state }, payload) {
       try {
         const { data, error_code: code, error } = await getAccountInfo()
         if (code === 0 && data) {
@@ -64,7 +70,7 @@ export default {
         return {}
       }
     },
-    async getLoginStatus ({ commit, state }, payload) {
+    async getLoginStatus({ commit, state }, payload) {
       try {
         const { data, error_code: code, error } = await getLoginStatus()
         if (code === 0 && data) {
@@ -79,7 +85,7 @@ export default {
     }
   },
   getters: {
-  // 是否大会员
-    bigmember: state => state.info.memberStatus > 0
+    // 是否大会员
+    bigmember: (state) => state.info.memberStatus > 0
   }
 }

+ 16 - 12
apps/jy-pc/src/utils/index.js

@@ -4,21 +4,25 @@ import Vue from 'vue'
 export * from './utils'
 
 // TODO 临时处理内部跳转,部分页面需打开 in-web 剑鱼环境下,部分需要打开 in-app 工作台环境下
-export function openSelfLink (route, mode = false) {
+export function openSelfLink(route, mode = false) {
   if (mode) {
     const hasPrefix = Object.hasOwnProperty.call(route, 'prefix')
-    tryCallHooks({
-      fn: (result) => {
-        Vue.prototype.$BRACE.methods.open({
-          route: {
-            link: result
-          }
-        })
+    tryCallHooks(
+      {
+        fn: (result) => {
+          Vue.prototype.$BRACE.methods.open({
+            route: {
+              link: result
+            }
+          })
+        },
+        spareFn: (result) => {
+          location.href = result
+        }
       },
-      spareFn: (result) => {
-        location.href = result
-      }
-    }, (hasPrefix ? route.prefix : '/page_workDesktop/work-bench/app/web-pc') + route.link)
+      (hasPrefix ? route.prefix : '/page_workDesktop/work-bench/app/web-pc') +
+        route.link
+    )
   } else {
     window.open('/swordfish/page_web_pc' + route.route.fullPath)
   }

+ 11 - 6
apps/jy-pc/src/utils/math.js

@@ -5,15 +5,20 @@
  * @returns Number
  */
 export const accMul = (arg1, arg2) => {
-  var m = 0
-  var s1 = arg1.toString()
-  var s2 = arg2.toString()
+  let m = 0
+  let s1 = arg1.toString()
+  let s2 = arg2.toString()
   try {
     m += s1.split('.')[1].length
   } catch (e) {}
   try {
     m += s2.split('.')[1].length
-  } catch (e) {
-  }
-  return parseInt(Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m).toString() * 100) / Math.pow(10, 2)
+  } catch (e) {}
+  return (
+    parseInt(
+      ((Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /
+        Math.pow(10, m).toString()) *
+        100
+    ) / Math.pow(10, 2)
+  )
 }

+ 8 - 8
apps/jy-pc/src/utils/mixins/visited.js

@@ -1,7 +1,7 @@
 import { mapState } from 'vuex'
 
 class VisitedPathItem {
-  constructor (path, search) {
+  constructor(path, search) {
     this.path = path
     this.search = search
     this.timestamp = Date.now()
@@ -11,19 +11,19 @@ class VisitedPathItem {
 export const mixinVisited = {
   computed: {
     ...mapState({
-      visitedList: state => state.user.visitedList
+      visitedList: (state) => state.user.visitedList
     })
   },
-  created () {
+  created() {
     this.$store.commit('user/refreshVisited')
   },
   methods: {
-    createPathItem (path, search) {
+    createPathItem(path, search) {
       return new VisitedPathItem(path, search)
     },
     // 从判断 path 是否访问过
     // 参数path为 VisitedPathItem new 出来的实例
-    pathVisitedIndex (path) {
+    pathVisitedIndex(path) {
       const list = this.visitedList
       let sameIndex = -1
       if (list) {
@@ -37,18 +37,18 @@ export const mixinVisited = {
       }
       return sameIndex
     },
-    comparePath (basePath, newPath) {
+    comparePath(basePath, newPath) {
       const pathSame = basePath.path === newPath.path
       const searchSame = basePath.search === newPath.search
 
       return pathSame && searchSame
     },
-    pathVisited (path) {
+    pathVisited(path) {
       return this.pathVisitedIndex(path) !== -1
     },
     // 保存一条历史
     // 参数path为 VisitedPathItem new出来的实例
-    pathVisiting (path) {
+    pathVisiting(path) {
       if (!path) return
       // 判断是否重复
       const index = this.pathVisitedIndex(path)

+ 10 - 6
apps/jy-pc/src/utils/toast/index.js

@@ -1,18 +1,18 @@
 import vue from 'vue'
-import toastComponent from '@/components/toast/Toast.vue'
+import toastComponent from '@/components/toast/CustomToast.vue'
 const ToastConstructor = vue.extend(toastComponent)
 
 let ToastHistory = {}
 
 // 定义弹出组件的函数 接收2个参数, 要显示的文本 和 显示时间
-function showToast (text, duration = 2000) {
+function showToast(text, duration = 2000) {
   if (ToastHistory.el) {
     ToastHistory.destory()
   }
   // 实例化一个 toast.vue
   const toastDom = new ToastConstructor({
     el: document.createElement('div'),
-    data () {
+    data() {
       return {
         text: text,
         showWrap: true,
@@ -27,9 +27,13 @@ function showToast (text, duration = 2000) {
     document.body.appendChild(toastDom.$el)
   }
   // 提前 250ms 执行淡出动画(因为我们再css里面设置的隐藏动画持续是250ms)
-  const tFn1 = setTimeout(() => { toastDom.showContent = false }, duration - 250)
+  const tFn1 = setTimeout(() => {
+    toastDom.showContent = false
+  }, duration - 250)
   // 过了 duration 时间后隐藏整个组件
-  const tFn2 = setTimeout(() => { toastDom.showWrap = false }, duration)
+  const tFn2 = setTimeout(() => {
+    toastDom.showWrap = false
+  }, duration)
   ToastHistory = {
     el: toastDom.$el,
     destory: () => {
@@ -41,7 +45,7 @@ function showToast (text, duration = 2000) {
 }
 
 // 注册为全局组件的函数
-function registryToast () {
+function registryToast() {
   vue.prototype.$toast = showToast
 }
 

+ 68 - 38
apps/jy-pc/src/utils/utils.js

@@ -1,9 +1,9 @@
 // 判断是否是微信浏览器
-export function isWeiXinBrowser () {
+export function isWeiXinBrowser() {
   return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1
 }
 // 在安卓或者ios中
-export function androidOrIOS () {
+export function androidOrIOS() {
   const u = navigator.userAgent.toLowerCase()
   let agent = ''
   if (/iphone|ipod|ipad|ios/.test(u)) {
@@ -15,20 +15,20 @@ export function androidOrIOS () {
 }
 
 /*
-* 时间格式化函数(将时间格式化为,2019年08月12日,2019-08-12,2019/08/12的形式)
-*   pattern参数(想要什么格式的数据就传入什么格式的数据)
-*     · 'yyyy-MM-dd'  ---> 输出如2019-09-20
-*     · 'yyyy-MM-dd HH:mm'  --->  输出如2019-09-20 18:20
-*     · 'yyyy-MM-dd HH:mm:ss'  --->  输出如2019-09-20 06:20:23
-*     · 'yyyy/MM/dd'  --->  输出如2019/09/20
-*     · 'yyyy年MM月dd日'  --->  输出如2019年09月20日
-*     · 'yyyy年MM月dd日 HH时mm分'  --->  输出如2019年09月20日 18时20分
-*     · 'yyyy年MM月dd日 HH时mm分ss秒'  --->  输出如2019年09月20日 18时20分23秒
-*     · 'yyyy年MM月dd日 HH时mm分ss秒 EE'  --->  输出如2019年09月20日 18时20分23秒 周二
-*     · 'yyyy年MM月dd日 HH时mm分ss秒 EEE'  --->  输出如2019年09月20日 18时20分23秒 星期二
-*  参考: https://www.cnblogs.com/mr-wuxiansheng/p/6296646.html
-*/
-export function dateFormatter (date, fmt = 'yyyy-MM-dd HH:mm:ss') {
+ * 时间格式化函数(将时间格式化为,2019年08月12日,2019-08-12,2019/08/12的形式)
+ *   pattern参数(想要什么格式的数据就传入什么格式的数据)
+ *     · 'yyyy-MM-dd'  ---> 输出如2019-09-20
+ *     · 'yyyy-MM-dd HH:mm'  --->  输出如2019-09-20 18:20
+ *     · 'yyyy-MM-dd HH:mm:ss'  --->  输出如2019-09-20 06:20:23
+ *     · 'yyyy/MM/dd'  --->  输出如2019/09/20
+ *     · 'yyyy年MM月dd日'  --->  输出如2019年09月20日
+ *     · 'yyyy年MM月dd日 HH时mm分'  --->  输出如2019年09月20日 18时20分
+ *     · 'yyyy年MM月dd日 HH时mm分ss秒'  --->  输出如2019年09月20日 18时20分23秒
+ *     · 'yyyy年MM月dd日 HH时mm分ss秒 EE'  --->  输出如2019年09月20日 18时20分23秒 周二
+ *     · 'yyyy年MM月dd日 HH时mm分ss秒 EEE'  --->  输出如2019年09月20日 18时20分23秒 星期二
+ *  参考: https://www.cnblogs.com/mr-wuxiansheng/p/6296646.html
+ */
+export function dateFormatter(date, fmt = 'yyyy-MM-dd HH:mm:ss') {
   // 将传入的date转为时间对象
   if (!date) return ''
   date = new Date(date)
@@ -49,14 +49,24 @@ export function dateFormatter (date, fmt = 'yyyy-MM-dd HH:mm:ss') {
   const week = ['日', '一', '二', '三', '四', '五', '六']
 
   if (/(y+)/.test(fmt)) {
-    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+    fmt = fmt.replace(
+      RegExp.$1,
+      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+    )
   }
   if (/(E+)/.test(fmt)) {
-    fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '星期' : '周') : '') + week[date.getDay()])
+    fmt = fmt.replace(
+      RegExp.$1,
+      (RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? '星期' : '周') : '') +
+        week[date.getDay()]
+    )
   }
   for (const k in o) {
     if (new RegExp('(' + k + ')').test(fmt)) {
-      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
+      fmt = fmt.replace(
+        RegExp.$1,
+        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
+      )
     }
   }
   return fmt
@@ -64,18 +74,18 @@ export function dateFormatter (date, fmt = 'yyyy-MM-dd HH:mm:ss') {
 
 // 金额处理
 // 分转元
-export function fen2Yuan (v) {
+export function fen2Yuan(v) {
   return v / 100
 }
 // 元转分
-export function yuan2Fen (v) {
-  return v * 10000 / 100
+export function yuan2Fen(v) {
+  return (v * 10000) / 100
 }
 
 // 金额大写,链接:https://juejin.im/post/5a2a7a5051882535cd4abfce
 // upDigit(1682) result:"人民币壹仟陆佰捌拾贰元整"
 // upDigit(-1693) result:"欠壹仟陆佰玖拾叁元整"
-export function upPrice (n) {
+export function upPrice(n) {
   const fraction = ['角', '分', '厘']
   const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
   const unit = [
@@ -87,7 +97,9 @@ export function upPrice (n) {
   n = Math.abs(n)
   let s = ''
   for (let i = 0; i < fraction.length; i++) {
-    s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '')
+    s += (
+      digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]
+    ).replace(/零./, '')
   }
   s = s || '整'
   n = Math.floor(n)
@@ -100,7 +112,13 @@ export function upPrice (n) {
     s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s
     // s = p + unit[0][i] + s;
   }
-  return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整')
+  return (
+    head +
+    s
+      .replace(/(零.)*零元/, '元')
+      .replace(/(零.)+/g, '零')
+      .replace(/^整$/, '零元整')
+  )
 }
 
 // 金额3位逗号分隔  ------------>
@@ -109,7 +127,7 @@ export function upPrice (n) {
  * @param n 保留几位小数(不传或者传-1 --> 如果为整数,则不保留小数。如果为浮点数,则保留两位小数)
  * @param comma 是否小数点前每3位添加逗号
  */
-export function newFormat (s = 0, n = -1, comma = false) {
+export function newFormat(s = 0, n = -1, comma = false) {
   n = n === -1 ? 0 : n
   if (n > 20 || n < -1) {
     n = 2
@@ -122,7 +140,7 @@ export function newFormat (s = 0, n = -1, comma = false) {
     maximumFractionDigits: n
   })
 }
-export function formatPrice (s, n = -1, comma = false) {
+export function formatPrice(s, n = -1, comma = false) {
   // 如果不传s或者s为空,则直接返回0
   if (!s) return 0
 
@@ -154,7 +172,7 @@ export function formatPrice (s, n = -1, comma = false) {
   if (comma) {
     let t = ''
     for (let i = 0; i < left.length; i++) {
-      t += left[i] + ((i + 1) % 3 === 0 && (i + 1) !== left.length ? ',' : '')
+      t += left[i] + ((i + 1) % 3 === 0 && i + 1 !== left.length ? ',' : '')
     }
     return t.split('').reverse().join('') + point + right
   }
@@ -186,7 +204,7 @@ export const debounce = (func, delay = 200, immediate) => {
 
 // 时间戳转换 多少秒、多少分、多少小时前、多少天前  超出10天显示年月日
 // 传入一个时间戳
-export function dateFromNow (originTime, useOld = false) {
+export function dateFromNow(originTime, useOld = false) {
   if (!originTime) return
   // 原始时间 - 传入的时间戳
   const originTimeStamp = +new Date(originTime)
@@ -212,7 +230,9 @@ export function dateFromNow (originTime, useOld = false) {
   // 10天前
   const tenDaysAgo = diffTimeStampAbsS > days11
   // 是否是当天
-  const isCurrentDay = dateFormatter(originTimeStamp, 'yyyy.MM.dd') === dateFormatter(nowTimeStamp, 'yyyy.MM.dd')
+  const isCurrentDay =
+    dateFormatter(originTimeStamp, 'yyyy.MM.dd') ===
+    dateFormatter(nowTimeStamp, 'yyyy.MM.dd')
 
   let condition = !isCurrentDay
   if (useOld) {
@@ -241,10 +261,10 @@ export function dateFromNow (originTime, useOld = false) {
 }
 
 // 金额类型转换
-export function moneyUnit (m, type = 'string', lv = 0) {
+export function moneyUnit(m, type = 'string', lv = 0) {
   const mUnit = {
     levelArr: ['元', '万', '亿', '万亿'],
-    test (num, type, lv) {
+    test(num, type, lv) {
       if (num === 0) {
         if (type === 'string') {
           return '0元'
@@ -269,7 +289,10 @@ export function moneyUnit (m, type = 'string', lv = 0) {
         return this.test(num, type, lv + 1)
       } else {
         if (type === 'string') {
-          return String(Math.floor(result * 100) / 100).replace('.00', '') + this.levelArr[lv]
+          return (
+            String(Math.floor(result * 100) / 100).replace('.00', '') +
+            this.levelArr[lv]
+          )
         }
         if (type === 'lv') {
           return this.levelArr[lv]
@@ -283,7 +306,7 @@ export function moneyUnit (m, type = 'string', lv = 0) {
       }
     },
     // 需要传入固定的lv(此时lv为 levelArr 中的一个)
-    transfer (num, lvString) {
+    transfer(num, lvString) {
       const index = this.levelArr.indexOf(lvString)
       if (index === -1 || index === 0) {
         return num
@@ -323,7 +346,7 @@ export function moneyUnit (m, type = 'string', lv = 0) {
  *   注意:此时newChar为一个长度为2的数组,数组中为高亮标签的起始标签和结束标签
  *
  */
-export function replaceKeyword (value, oldChar, newChar) {
+export function replaceKeyword(value, oldChar, newChar) {
   if (!oldChar || !newChar) return value
   // oldChar的字符串数组,用来循环替换
   let oldCharArr = []
@@ -342,7 +365,8 @@ export function replaceKeyword (value, oldChar, newChar) {
       // 去空格之后为空字符串,则直接跳过当前替换
       if (item.replace(/\s+/g, '')) {
         let oc = item
-        oc = oc.replace(/\$/g, '\\$')
+        oc = oc
+          .replace(/\$/g, '\\$')
           .replace(/\(/g, '\\(')
           .replace(/\)/g, '\\)')
           .replace(/\*/g, '\\*')
@@ -361,11 +385,17 @@ export function replaceKeyword (value, oldChar, newChar) {
         if (Array.isArray(newChar)) {
           // 批量高亮
           const tempV = value
-          value = value.replace(new RegExp('(' + oc + ')', 'gmi'), newChar[0] + oc + newChar[1])
+          value = value.replace(
+            new RegExp('(' + oc + ')', 'gmi'),
+            newChar[0] + oc + newChar[1]
+          )
           if (value === tempV && oc.indexOf('+') !== -1) {
             const splitReg = oc.split('\\+') || []
             splitReg.forEach(function (v) {
-              value = value.replace(new RegExp('(' + v + ')', 'gmi'), newChar[0] + v + newChar[1])
+              value = value.replace(
+                new RegExp('(' + v + ')', 'gmi'),
+                newChar[0] + v + newChar[1]
+              )
             })
           }
         } else {

+ 2 - 4
apps/jy-pc/src/views/404.vue

@@ -11,11 +11,9 @@ export default {
   components: {
     Empty
   },
-  data () {
+  data() {
     return {}
   }
 }
 </script>
-<style lang="scss" scoped>
-
-</style>
+<style lang="scss" scoped></style>

+ 79 - 45
apps/jy-pc/src/views/authen/Index.vue

@@ -1,20 +1,36 @@
 <template>
   <div class="authen-index v-w1200" v-loading="loading">
     <div class="authen-nav">
-      <div class="authen-header">
-        机构认证
-      </div>
+      <div class="authen-header">机构认证</div>
       <div class="authen-main">
         <div class="authen-tip">
-          <span class="ex-status" v-if="exStatus.text!==''" :class="[exStatus.className]">{{exStatus.text}}</span>
-          <span class="ex-text">{{exStatus.tip}}</span>
-          <span class="ex-edit-info" v-if="entInfo.authStatus===1" @click="setStatus">
-            <span class="iconfont icon-tianxie editimg" v-show="editStatus"></span>
-            <span class="edittext">{{editStatus?'编辑' : '取消编辑'}}</span>
+          <span
+            class="ex-status"
+            v-if="exStatus.text !== ''"
+            :class="[exStatus.className]"
+            >{{ exStatus.text }}</span
+          >
+          <span class="ex-text">{{ exStatus.tip }}</span>
+          <span
+            class="ex-edit-info"
+            v-if="entInfo.authStatus === 1"
+            @click="setStatus"
+          >
+            <span
+              class="iconfont icon-tianxie editimg"
+              v-show="editStatus"
+            ></span>
+            <span class="edittext">{{ editStatus ? '编辑' : '取消编辑' }}</span>
           </span>
         </div>
         <!-- 编辑修改 -->
-        <addEditCom @submit="submit" :bindphone="phone" :type='getModifyStatus' :detail="entInfo" v-if="!editStatus"></addEditCom>
+        <addEditCom
+          @submit="submit"
+          :bindphone="phone"
+          :type="getModifyStatus"
+          :detail="entInfo"
+          v-if="!editStatus"
+        ></addEditCom>
         <!-- 查看状态 -->
         <viewCom :detail="entInfo" v-else></viewCom>
       </div>
@@ -33,7 +49,7 @@ export default {
     addEditCom,
     viewCom
   },
-  data () {
+  data() {
     return {
       loading: false,
       editStatus: false,
@@ -47,12 +63,12 @@ export default {
       }
     }
   },
-  created () {
+  created() {
     this.getEntBase()
   },
   methods: {
-    getEntBase () {
-      mySelectent().then(res => {
+    getEntBase() {
+      mySelectent().then((res) => {
         this.loading = true
         console.log(res)
         if (res.error_code === 0) {
@@ -65,8 +81,8 @@ export default {
       })
     },
     // 获取绑定手机号
-    getPhone () {
-      getBoundPhone().then(res => {
+    getPhone() {
+      getBoundPhone().then((res) => {
         if (res.error_code === 0) {
           this.phone = res.data.phone
           this.getInfo(res.data.phone)
@@ -75,11 +91,15 @@ export default {
         }
       })
     },
-    getInfo (phone) {
-      examineInfo().then(res => {
+    getInfo(phone) {
+      examineInfo().then((res) => {
         this.loading = false
         if (res.error_code === 0) {
-          if ((res.data.authStatus <= 0 && res.data.authType === 0) || (res.data.authStatus <= 0 && res.data.authType === 3) || res.data.authStatus === -2) {
+          if (
+            (res.data.authStatus <= 0 && res.data.authType === 0) ||
+            (res.data.authStatus <= 0 && res.data.authType === 3) ||
+            res.data.authStatus === -2
+          ) {
             this.editStatus = false
           } else {
             this.editStatus = true
@@ -117,49 +137,64 @@ export default {
       })
     },
     // 判断审核状态
-    getExamineStatus (data) {
+    getExamineStatus(data) {
       if (!data.authReason) {
         data.authReason = '企业信息有误'
       }
       if (data.authStatus === -2) {
         this.exStatus.className = 'red'
         this.exStatus.text = '已过期'
-        this.exStatus.tip = '机构认证已过期(包含认证公函),请完善信息后重新提交认证申请。'
+        this.exStatus.tip =
+          '机构认证已过期(包含认证公函),请完善信息后重新提交认证申请。'
       } else if (data.authStatus === -1) {
         this.exStatus.className = 'red'
         this.exStatus.text = '未通过'
-        this.exStatus.tip = '机构认证审核不通过,原因:' + data.authReason + ',请完善信息后再次提交机构认证申请'
+        this.exStatus.tip =
+          '机构认证审核不通过,原因:' +
+          data.authReason +
+          ',请完善信息后再次提交机构认证申请'
       } else {
         switch (data.authType) {
           case 0:
-            this.exStatus.tip = '请完善以下信息后,提交机构认证申请,平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
+            this.exStatus.tip =
+              '请完善以下信息后,提交机构认证申请,平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
             break
           case 1:
             this.exStatus.className = 'orange'
             this.exStatus.text = '审核中'
-            this.exStatus.tip = '提交时间:' + data.submitTime.substring(0, 10) + ',平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
+            this.exStatus.tip =
+              '提交时间:' +
+              data.submitTime.substring(0, 10) +
+              ',平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
             break
           case 2:
             this.exStatus.className = 'green'
             this.exStatus.text = '审核通过'
-            this.exStatus.tip = '有效期至:' + data.validTime.substring(0, 10) + ',机构信息如若存在调整,可点击“编辑”重新提交认证申请。'
+            this.exStatus.tip =
+              '有效期至:' +
+              data.validTime.substring(0, 10) +
+              ',机构信息如若存在调整,可点击“编辑”重新提交认证申请。'
             break
           case 3:
             this.exStatus.className = 'red'
             this.exStatus.text = '未通过'
-            this.exStatus.tip = '机构认证审核不通过,原因:' + data.authReason + ',请完善信息后再次提交机构认证申请'
+            this.exStatus.tip =
+              '机构认证审核不通过,原因:' +
+              data.authReason +
+              ',请完善信息后再次提交机构认证申请'
             break
           default:
-            this.exStatus.tip = '请完善以下信息后,提交机构认证申请,平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
+            this.exStatus.tip =
+              '请完善以下信息后,提交机构认证申请,平台方将在3个工作日内完成审核,如有问题请联系400-108-6670。'
             break
         }
       }
     },
-    submit () {
+    submit() {
       this.editStatus = true
       this.getInfo(this.phone)
     },
-    setStatus () {
+    setStatus() {
       this.editStatus = !this.editStatus
       if (this.editStatus) {
         this.getModifyStatus = 'edit'
@@ -170,7 +205,6 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-
 .in-app {
   .authen-index {
     padding-top: unset;
@@ -190,24 +224,24 @@ export default {
   }
 }
 
-.authen-index{
+.authen-index {
   padding: 48px 0 108px;
   ::v-deep {
-    .title-common{
+    .title-common {
       height: 40px;
       font-size: 14px;
       font-weight: bold;
-      color: #2CB7CA;
+      color: #2cb7ca;
       line-height: 40px;
     }
   }
-  .authen-nav{
+  .authen-nav {
     display: flex;
     flex-direction: column;
     align-items: center;
     justify-content: space-between;
     margin-bottom: 20px;
-    .authen-header{
+    .authen-header {
       display: flex;
       justify-content: flex-start;
       align-items: center;
@@ -216,17 +250,17 @@ export default {
       height: 21px;
       font-size: 16px;
       font-weight: 400;
-      color: #1D1D1D;
+      color: #1d1d1d;
     }
-    .authen-main{
+    .authen-main {
       padding: 40px;
       width: 100%;
       background: #fff;
-      .authen-tip{
+      .authen-tip {
         position: relative;
         width: 100%;
         height: 28px;
-        .ex-status{
+        .ex-status {
           margin-right: 20px;
           padding: 3px 8px;
           width: 56px;
@@ -246,27 +280,27 @@ export default {
             background-color: $color_red_background;
           }
         }
-        .ex-text{
+        .ex-text {
           font-size: 14px;
           font-weight: 400;
-          color: #FF9F40;
+          color: #ff9f40;
           line-height: 21px;
         }
-        .ex-edit-info{
+        .ex-edit-info {
           position: absolute;
           right: 0;
           top: 0;
           display: flex;
           align-items: center;
           padding: 7px 11px;
-          background: #F5FEFF;
+          background: #f5feff;
           border-radius: 6px 6px 6px 6px;
           opacity: 1;
-          border: 1px solid #2CB7CA;
-          color: #2CB7CA;
+          border: 1px solid #2cb7ca;
+          color: #2cb7ca;
           font-size: 14px;
           cursor: pointer;
-          .editimg{
+          .editimg {
             margin-right: 4px;
             font-size: 20px;
           }

+ 270 - 128
apps/jy-pc/src/views/authen/components/addEditCom.vue

@@ -2,18 +2,41 @@
   <div class="add-main">
     <div class="mechan-info" v-loading="loading">
       <div class="mechan-title title-common">机构基本信息</div>
-      <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="mechan-model">
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="100px"
+        class="mechan-model"
+      >
         <el-form-item label="机构类型:">
           <el-checkbox-group @change="setCompanyType" v-model="checkList">
-            <el-checkbox v-for="(item, index) in modelList" :key="index" :label="item"></el-checkbox>
+            <el-checkbox
+              v-for="(item, index) in modelList"
+              :key="index"
+              :label="item"
+            ></el-checkbox>
           </el-checkbox-group>
         </el-form-item>
         <el-form-item label="统一社会 信用代码:" prop="creditCode">
-          <el-input maxlength="18" @blur="setBlurModel" @input="setModel" class="credit" placeholder="请输入18位统一社会信用代码" v-model="ruleForm.creditCode"></el-input>
-          <span class="creditTip" v-show="creditTip!==''">{{creditTip}}</span>
+          <el-input
+            maxlength="18"
+            @blur="setBlurModel"
+            @input="setModel"
+            class="credit"
+            placeholder="请输入18位统一社会信用代码"
+            v-model="ruleForm.creditCode"
+          ></el-input>
+          <span class="creditTip" v-show="creditTip !== ''">{{
+            creditTip
+          }}</span>
         </el-form-item>
         <el-form-item label="机构名称:">
-          <el-input class="credit" placeholder="请输入您的机构全称" v-model="ruleForm.name"></el-input>
+          <el-input
+            class="credit"
+            placeholder="请输入您的机构全称"
+            v-model="ruleForm.name"
+          ></el-input>
         </el-form-item>
         <el-form-item label="机构性质:" prop="companyType">
           <el-radio-group v-model="ruleForm.companyType">
@@ -22,38 +45,113 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="所属地区:" prop="province">
-          <el-select popper-class="popperSelect" class="select-area province region-select" v-model="province" placeholder="选择省" clearable  @change="provinceChange">
-            <el-option class="select-list" v-for="p in regionData" :key="p.code" :label="p.name" :value="p.name"></el-option>
+          <el-select
+            popper-class="popperSelect"
+            class="select-area province region-select"
+            v-model="province"
+            placeholder="选择省"
+            clearable
+            @change="provinceChange"
+          >
+            <el-option
+              class="select-list"
+              v-for="p in regionData"
+              :key="p.code"
+              :label="p.name"
+              :value="p.name"
+            ></el-option>
           </el-select>
-          <el-select @change="getCityCode" popper-class="popperSelect"  class="select-area city region-select" v-model="city" placeholder="选择市" clearable v-if="province">
-            <el-option class="select-list"  v-for="c in cityData" :key="c.code" :label="c.name" :value="c.code"></el-option>
+          <el-select
+            @change="getCityCode"
+            popper-class="popperSelect"
+            class="select-area city region-select"
+            v-model="city"
+            placeholder="选择市"
+            clearable
+            v-if="province"
+          >
+            <el-option
+              class="select-list"
+              v-for="c in cityData"
+              :key="c.code"
+              :label="c.name"
+              :value="c.code"
+            ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item v-show="ruleForm.companyType !== 1" class="el-upload-com" style="height:254px;margin-bottom:40px" label="营业执照:">
-          <uploadCom @remove="remove" :imageurl="ruleForm.business" @imgUrl="getImgInfo" type="business"></uploadCom>
+        <el-form-item
+          v-show="ruleForm.companyType !== 1"
+          class="el-upload-com"
+          style="height: 254px; margin-bottom: 40px"
+          label="营业执照:"
+        >
+          <uploadCom
+            @remove="remove"
+            :imageurl="ruleForm.business"
+            @imgUrl="getImgInfo"
+            type="business"
+          ></uploadCom>
         </el-form-item>
-        <el-form-item class="el-upload-com letter-com" style="height:254px" label="认证公函:">
-          <uploadCom @remove="remove" :imageurl="ruleForm.officialLetter" @imgUrl="getImgInfo" type="officialLetter"></uploadCom>
+        <el-form-item
+          class="el-upload-com letter-com"
+          style="height: 254px"
+          label="认证公函:"
+        >
+          <uploadCom
+            @remove="remove"
+            :imageurl="ruleForm.officialLetter"
+            @imgUrl="getImgInfo"
+            type="officialLetter"
+          ></uploadCom>
           <div class="authen-file">
-            下载填写<span class="letter-file" @click="downLoadOff">《认证公函》</span>,填写完整后加盖红色公章,上传清晰的公函扫描件。
+            下载填写<span class="letter-file" @click="downLoadOff"
+              >《认证公函》</span
+            >,填写完整后加盖红色公章,上传清晰的公函扫描件。
           </div>
         </el-form-item>
         <div class="title-common">
-         <span>联系信息</span>
-         <span style="font-weight:400">(用于信息核实)</span>
+          <span>联系信息</span>
+          <span style="font-weight: 400">(用于信息核实)</span>
         </div>
         <el-form-item label="联系人:" prop="contactPerson">
-          <el-input class="credit" v-model="ruleForm.contactPerson" placeholder="请输入姓名"></el-input>
+          <el-input
+            class="credit"
+            v-model="ruleForm.contactPerson"
+            placeholder="请输入姓名"
+          ></el-input>
         </el-form-item>
         <el-form-item label="手机号:" prop="contactPhone">
-          <el-input class="credit" @input="iptPhoneVal" v-model="ruleForm.contactPhone" placeholder="请输入联系人手机号" maxlength="11"></el-input>
+          <el-input
+            class="credit"
+            @input="iptPhoneVal"
+            v-model="ruleForm.contactPhone"
+            placeholder="请输入联系人手机号"
+            maxlength="11"
+          ></el-input>
         </el-form-item>
         <el-form-item label="验证码:" v-if="codeShow" prop="rulecode">
-          <el-input class="select-area" @blur="getRuleCode" maxlength="6" v-model="rulecode" placeholder="请输入短信验证码"></el-input>
-          <span v-show="sendAuthCode" @click="getAuthCode" class="getcode">获取验证码</span>
-          <span v-show="!sendAuthCode" class="auth_text"> <span class="auth_text_blue">{{auth_time}} </span> 秒之后重新发送验证码</span>
+          <el-input
+            class="select-area"
+            @blur="getRuleCode"
+            maxlength="6"
+            v-model="rulecode"
+            placeholder="请输入短信验证码"
+          ></el-input>
+          <span v-show="sendAuthCode" @click="getAuthCode" class="getcode"
+            >获取验证码</span
+          >
+          <span v-show="!sendAuthCode" class="auth_text">
+            <span class="auth_text_blue">{{ auth_time }} </span>
+            秒之后重新发送验证码</span
+          >
         </el-form-item>
-        <el-button type="primary" :disabled="submitDisabled" class="submitBtn" @click="submitForm('ruleForm')">提交认证申请</el-button>
+        <el-button
+          type="primary"
+          :disabled="submitDisabled"
+          class="submitBtn"
+          @click="submitForm('ruleForm')"
+          >提交认证申请</el-button
+        >
       </el-form>
     </div>
   </div>
@@ -79,25 +177,25 @@ export default {
   props: {
     detail: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
     type: {
       type: String,
-      default () {
+      default() {
         return ''
       }
     },
     bindphone: {
       type: String,
-      default () {
+      default() {
         return ''
       }
     }
   },
-  data () {
-    var validatorPhone = (rule, value, callback) => {
+  data() {
+    let validatorPhone = (rule, value, callback) => {
       const status = /^1[3456789]\d{9}$/.test(value)
       if (value === '') {
         return callback(new Error('请输入联系人手机号'))
@@ -109,7 +207,7 @@ export default {
         }
       }
     }
-    var validatorCredit = (rule, value, callback) => {
+    let validatorCredit = (rule, value, callback) => {
       this.ruleForm.creditCode = this.ruleForm.creditCode.replace(/\s+/g, '')
       value = value.replace(/\s+/g, '')
       const status = /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(value)
@@ -127,7 +225,7 @@ export default {
         }
       }
     }
-    var validatorCode = (rule, value, callback) => {
+    let validatorCode = (rule, value, callback) => {
       if (value === '') {
         return callback(new Error('请输入短信验证码'))
       } else {
@@ -172,21 +270,15 @@ export default {
         '其他'
       ],
       rules: {
-        creditCode: [
-          { validator: validatorCredit, trigger: 'blur' }
-        ],
-        contactPhone: [
-          { validator: validatorPhone, trigger: 'blur' }
-        ],
-        rulecode: [
-          { validator: validatorCode, trigger: 'blur' }
-        ],
+        creditCode: [{ validator: validatorCredit, trigger: 'blur' }],
+        contactPhone: [{ validator: validatorPhone, trigger: 'blur' }],
+        rulecode: [{ validator: validatorCode, trigger: 'blur' }],
         province: [{ message: '请选择省', trigger: 'change' }]
       }
     }
   },
   computed: {
-    submitDisabled () {
+    submitDisabled() {
       const name = this.ruleForm.name
       const creditCode = this.ruleForm.creditCode
       const contactPhone = this.ruleForm.contactPhone
@@ -196,15 +288,38 @@ export default {
       const business = this.ruleForm.business
       const organizationType = this.checkList.length
       const officialLetter = this.ruleForm.officialLetter
-      const creditCodeRule = /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(this.ruleForm.creditCode)
+      const creditCodeRule = /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(
+        this.ruleForm.creditCode
+      )
       let status
       if (this.creditCodeStatus) {
         return true
       } else {
         if (this.codeShow) {
-          status = creditCode && (organizationType !== 0 && !!this.checkList.length) && officialLetter && contactPhone && contactPerson && name && areaNumber && creditCodeRule && phoneRule && this.ruleCodeError
+          status =
+            creditCode &&
+            organizationType !== 0 &&
+            !!this.checkList.length &&
+            officialLetter &&
+            contactPhone &&
+            contactPerson &&
+            name &&
+            areaNumber &&
+            creditCodeRule &&
+            phoneRule &&
+            this.ruleCodeError
         } else {
-          status = creditCode && (organizationType !== 0 && !!this.checkList.length) && officialLetter && contactPhone && contactPerson && name && areaNumber && creditCodeRule && phoneRule
+          status =
+            creditCode &&
+            organizationType !== 0 &&
+            !!this.checkList.length &&
+            officialLetter &&
+            contactPhone &&
+            contactPerson &&
+            name &&
+            areaNumber &&
+            creditCodeRule &&
+            phoneRule
         }
         if (this.ruleForm.companyType === 1) {
           return !status
@@ -216,7 +331,7 @@ export default {
   },
   watch: {
     detail: {
-      handler (newval, oldval) {
+      handler(newval, oldval) {
         const arr = Object.keys(newval)
         if (arr.length !== 0) {
           this.getAreaFn()
@@ -225,7 +340,7 @@ export default {
       immediate: true
     },
     bindphone: {
-      handler (newval, oldval) {
+      handler(newval, oldval) {
         this.setPhoneCode(newval)
       },
       immediate: true
@@ -233,7 +348,7 @@ export default {
   },
   inject: ['reload'],
   methods: {
-    getInitData () {
+    getInitData() {
       Object.assign(this.ruleForm, this.detail)
       // 省市
       if (this.detail.areaNumber) {
@@ -251,15 +366,15 @@ export default {
       } else {
         arr.push(this.detail.organizationType)
       }
-      arr.forEach(val => {
+      arr.forEach((val) => {
         this.checkList.push(this.modelList[val - 1])
       })
       // 手机号
       this.setPhoneCode(this.detail.contactPhone)
     },
     // 获取已经验证过的手机号
-    setPhoneCode (newval) {
-      const flag = this.phoneList.findIndex(p => p === newval)
+    setPhoneCode(newval) {
+      const flag = this.phoneList.findIndex((p) => p === newval)
       console.log(flag)
       if (flag < 0) {
         this.phoneList.push(newval)
@@ -267,9 +382,9 @@ export default {
       console.log(this.phoneList)
     },
     // 倒计时
-    getAuthCode () {
+    getAuthCode() {
       if (!/^1[3456789]\d{9}$/.test(this.ruleForm.contactPhone)) return
-      captcha({ phoneNum: this.ruleForm.contactPhone }).then(res => {
+      captcha({ phoneNum: this.ruleForm.contactPhone }).then((res) => {
         if (res.error_code === 0) {
           if (res.data.status) {
             this.sendAuthCode = false
@@ -288,9 +403,12 @@ export default {
       })
     },
     // 校验验证码
-    getRuleCode () {
+    getRuleCode() {
       if (!this.ruleCodeError) {
-        checkCaptcha({ phoneNum: this.ruleForm.contactPhone, code: this.rulecode }).then(res => {
+        checkCaptcha({
+          phoneNum: this.ruleForm.contactPhone,
+          code: this.rulecode
+        }).then((res) => {
           if (res.error_code === 0) {
             this.ruleCodeError = res.data.status
             if (!res.data.status) {
@@ -305,24 +423,26 @@ export default {
         })
       }
     },
-    downLoadOff () {
-      window.open('https://www.jianyu360.cn/shareFile/%E5%89%91%E9%B1%BC%E6%A0%87%E8%AE%AF%E6%9C%BA%E6%9E%84%E8%AE%A4%E8%AF%81%E7%94%B3%E8%AF%B7%E5%85%AC%E5%87%BD.docx')
+    downLoadOff() {
+      window.open(
+        'https://www.jianyu360.cn/shareFile/%E5%89%91%E9%B1%BC%E6%A0%87%E8%AE%AF%E6%9C%BA%E6%9E%84%E8%AE%A4%E8%AF%81%E7%94%B3%E8%AF%B7%E5%85%AC%E5%87%BD.docx'
+      )
     },
     // 获取上传图片信息
-    getImgInfo (data) {
+    getImgInfo(data) {
       data = JSON.parse(data)
       this.ruleForm[data.type] = window.location.origin + data.imginfo.url
       // this.ruleForm[data.type] = 'https://jybx-webtest.jydev.jianyu360.com' + data.imginfo.url
     },
     // 删除已上传图片
-    remove (data) {
+    remove(data) {
       this.ruleForm[data] = ''
     },
     // 获取省市
-    async getAreaFn () {
+    async getAreaFn() {
       const { data } = await getArea()
       if (data) {
-        const arr = data.filter(v => {
+        const arr = data.filter((v) => {
           return v.name !== '全国'
         })
         this.regionData = arr
@@ -330,7 +450,7 @@ export default {
       }
     },
     // 统一社会信用代码输入
-    setModel (val) {
+    setModel(val) {
       const one = this.ruleForm.creditCode.slice(0, 1)
       const two = this.ruleForm.creditCode.slice(1, 2)
       if (one === '9' && two === '1') {
@@ -339,11 +459,17 @@ export default {
         this.ruleForm.companyType = 1
       }
     },
-    setBlurModel () {
-      statusByCode({ code: this.ruleForm.creditCode, phone: this.bindphone }).then(res => {
+    setBlurModel() {
+      statusByCode({
+        code: this.ruleForm.creditCode,
+        phone: this.bindphone
+      }).then((res) => {
         console.log(res)
         if (res.error_code === 0) {
-          const creditCodeRule = /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(this.ruleForm.creditCode)
+          const creditCodeRule =
+            /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g.test(
+              this.ruleForm.creditCode
+            )
           switch (res.data.authStatus) {
             case 1:
               if (!res.data.isInEnt) {
@@ -376,13 +502,13 @@ export default {
         }
       })
     },
-    setCompanyType () {
+    setCompanyType() {
       if (this.checkList[0] === undefined) {
         this.checkList.splice(0, 1)
       }
       const arr = []
       this.modelList.forEach((m, i) => {
-        this.checkList.forEach(c => {
+        this.checkList.forEach((c) => {
           if (m === c) {
             arr.push(i + 1)
           }
@@ -391,15 +517,15 @@ export default {
       this.ruleForm.organizationType = arr.join(',')
     },
     // 选择省市
-    provinceChange (val, bool) {
+    provinceChange(val, bool) {
       if (!bool) {
         this.city = ''
       }
       const provinces = this.regionData
       const arr = []
-      provinces.forEach(v => {
+      provinces.forEach((v) => {
         if (val === v.name) {
-          v.citys.forEach(s => {
+          v.citys.forEach((s) => {
             arr.push(s)
           })
         }
@@ -407,8 +533,8 @@ export default {
       this.cityData = arr
     },
     // 手机号输入
-    iptPhoneVal (val) {
-      const flag = this.phoneList.findIndex(p => p === val)
+    iptPhoneVal(val) {
+      const flag = this.phoneList.findIndex((p) => p === val)
       if (flag < 0) {
         this.ruleCodeError = false
         this.codeShow = true
@@ -419,12 +545,13 @@ export default {
       }
     },
     // 选择省市代码
-    getCityCode () {
+    getCityCode() {
       this.ruleForm.areaNumber = this.city
     },
     // 切换企业
-    setSelectEnt (id) { // p278弃用
-      selectEnt({ id: id }).then(res => {
+    setSelectEnt(id) {
+      // p278弃用
+      selectEnt({ id: id }).then((res) => {
         if (res.error_code === 0) {
           if (res.data.status === 1) {
             this.$emit('submit')
@@ -432,14 +559,16 @@ export default {
         }
       })
     },
-    async setIdentityswitch (id) { // 切换身份
+    async setIdentityswitch(id) {
+      // 切换身份
       const { data } = await identityList() // 获取身份列表
       let personage = false
       let token = ''
       if (data) {
-        data.forEach(e => {
-          if (e.positionType === 0 && e.checked === 1) { // 当前为个人版
-            personage = true                                                                  
+        data.forEach((e) => {
+          if (e.positionType === 0 && e.checked === 1) {
+            // 当前为个人版
+            personage = true
           }
           if (e.entId === id) {
             token = e.token
@@ -460,17 +589,27 @@ export default {
       }
     },
     // 提交
-    submitForm (formName) {
+    submitForm(formName) {
       this.loading = true
-      let { name, creditCode, organizationType, areaNumber, companyType, business, officialLetter, contactPerson, contactPhone } = this.ruleForm
+      let {
+        name,
+        creditCode,
+        organizationType,
+        areaNumber,
+        companyType,
+        business,
+        officialLetter,
+        contactPerson,
+        contactPhone
+      } = this.ruleForm
       // 区域代码转换
       if (areaNumber.indexOf('_') !== -1) {
         const province = areaNumber.split('_')[0]
         const city = areaNumber.split('_')[1]
         const provinces = this.regionData
-        provinces.forEach(v => {
+        provinces.forEach((v) => {
           if (province === v.name) {
-            v.citys.forEach(s => {
+            v.citys.forEach((s) => {
               if (s.name === city) {
                 areaNumber = s.code
               }
@@ -493,22 +632,24 @@ export default {
         authName: contactPerson, // 联系人
         authPhone: contactPhone // 手机号
       }
-      certification(params).then(res => {
-        this.loading = false
-        if (res.error_code === 0) {
-          if (res.data.status === 1) {
-            // this.setSelectEnt(res.data.entId)// p278弃用
-            this.$toast(res.error_msg)
-            this.setIdentityswitch(res.data.entId)
+      certification(params)
+        .then((res) => {
+          this.loading = false
+          if (res.error_code === 0) {
+            if (res.data.status === 1) {
+              // this.setSelectEnt(res.data.entId)// p278弃用
+              this.$toast(res.error_msg)
+              this.setIdentityswitch(res.data.entId)
+            } else {
+              this.$toast(res.error_msg)
+            }
           } else {
             this.$toast(res.error_msg)
           }
-        } else {
-          this.$toast(res.error_msg)
-        }
-      }).catch(() => {
-        this.loading = false
-      })
+        })
+        .catch(() => {
+          this.loading = false
+        })
     }
   }
 }
@@ -516,50 +657,51 @@ export default {
 
 <style lang="scss" scoped>
 .el-popper li,
-li.el-select-dropdown__item{
-  float: none!important;
+li.el-select-dropdown__item {
+  float: none !important;
 }
-.add-main{
+.add-main {
   margin-top: 8px;
-  .region-select{
+  .region-select {
     width: 290px;
-    &:first-child{
+    &:first-child {
       margin-right: 20px;
     }
   }
-  .mechan-model{
+  .mechan-model {
     display: flex;
     flex-direction: column;
     align-items: flex-start;
     justify-content: center;
-    ::v-deep{
-      .el-form-item{
+    ::v-deep {
+      .el-form-item {
         display: flex;
         align-items: center;
         margin-bottom: 10px;
         height: 48px;
-        .el-form-item__label{
+        .el-form-item__label {
           display: flex;
           flex: 1;
           flex-wrap: wrap;
           text-align: left;
           padding-right: 1px;
-          width: 71px!important;
+          width: 71px !important;
           font-size: 14px;
           line-height: 22px;
         }
-        .el-checkbox-group{
+        .el-checkbox-group {
           display: flex;
           width: 100%;
-          .el-checkbox{
+          .el-checkbox {
             margin-right: 15px;
           }
         }
-        .el-form-item__content{
-          margin-left: 20px!important;
+        .el-form-item__content {
+          margin-left: 20px !important;
         }
-        &.is-error, &.is-success {
-          .el-form-item__error{
+        &.is-error,
+        &.is-success {
+          .el-form-item__error {
             width: fit-content;
             top: 10px;
             right: 0;
@@ -569,26 +711,26 @@ li.el-select-dropdown__item{
         }
       }
     }
-    .creditTip{
+    .creditTip {
       margin-left: 20px;
       font-size: 14px;
       font-weight: 400;
-      color: #FF3A20;
+      color: #ff3a20;
     }
-    .credit{
+    .credit {
       width: 600px;
       // height: 36px;
       border-radius: 4px 4px 4px 4px;
       opacity: 1;
-      border: 1px solid #E0E0E0;
+      border: 1px solid #e0e0e0;
       line-height: 36px;
-      ::v-deep .el-input__inner{
+      ::v-deep .el-input__inner {
         height: 100%;
         border: none;
         line-height: 36px;
       }
     }
-    .getcode{
+    .getcode {
       margin-left: 20px;
       font-size: 14px;
       font-weight: 400;
@@ -597,36 +739,36 @@ li.el-select-dropdown__item{
       cursor: pointer;
       text-decoration: underline;
     }
-    .auth_text{
+    .auth_text {
       margin-left: 20px;
       font-size: 12px;
       color: #686868;
     }
-    .select-area{
+    .select-area {
       width: 290px;
       border-radius: 4px 4px 4px 4px;
-      border: 1px solid #E0E0E0;
+      border: 1px solid #e0e0e0;
       line-height: 36px;
       ::v-deep {
-        .el-input__inner{
+        .el-input__inner {
           height: 100%;
           border: none;
         }
         .el-input.el-input--suffix {
           height: 100%;
-          .el-input__inner{
+          .el-input__inner {
             height: 100%;
             border: none;
           }
         }
       }
-      &.city{
+      &.city {
         margin-left: 20px;
       }
     }
     .el-form-item.el-upload-com {
       align-items: flex-start;
-      .authen-file{
+      .authen-file {
         margin-left: 20px;
         font-size: 12px;
         font-family: Microsoft YaHei-Regular, Microsoft YaHei;
@@ -639,16 +781,16 @@ li.el-select-dropdown__item{
           cursor: pointer;
         }
       }
-      &.letter-com{
-        ::v-deep{
-          .el-form-item__content{
+      &.letter-com {
+        ::v-deep {
+          .el-form-item__content {
             display: flex;
             align-items: flex-end;
           }
         }
       }
     }
-    .submitBtn{
+    .submitBtn {
       margin-top: 36px;
       width: 180px;
       height: 46px;
@@ -657,9 +799,9 @@ li.el-select-dropdown__item{
       opacity: 1;
       font-size: 16px;
       font-weight: 400;
-      color: #FFFFFF;
+      color: #ffffff;
       line-height: 24px;
-      &.is-disabled{
+      &.is-disabled {
         color: #fff;
         background-color: #96dbe5;
         border-color: #96dbe5;

+ 148 - 126
apps/jy-pc/src/views/authen/components/upload.vue

@@ -1,21 +1,26 @@
 <template>
-  <div v-loading="loading" class="upload" :class="type=='business'?'up-yyzz':'up-rzgh'">
+  <div
+    v-loading="loading"
+    class="upload"
+    :class="type == 'business' ? 'up-yyzz' : 'up-rzgh'"
+  >
     <el-upload
       ref="uploadRef"
       :limit="1"
-      :class="{disabled:uploadDisabled, haveimg:imageurl!==''}"
+      :class="{ disabled: uploadDisabled, haveimg: imageurl !== '' }"
       action="/front/filemanage/upload"
       list-type="picture-card"
       :multiple="false"
       accept="image/jpeg, image/jpg, image/png"
-      :data="{type: type}"
+      :data="{ type: type }"
       :on-exceed="handleExceed"
       :on-preview="handlePictureCardPreview"
       :file-list="fileListArr"
       :on-progress="handProgress"
       :before-upload="beforeUpload"
       :on-success="onSuccess"
-      :on-remove="handleRemove">
+      :on-remove="handleRemove"
+    >
       <div class="imgModel">
         <div class="el-upload__text">
           <el-button class="btn-upload">上传图片</el-button>
@@ -25,10 +30,18 @@
       </div>
     </el-upload>
     <el-image
-      v-show="dialogVisible && imageurl!==''"
+      v-show="dialogVisible && imageurl !== ''"
       :src="imageurl"
-      style="width:184px;height:224px;position:absolute;top:15px;left:19px;opacity:0.1"
-      :preview-src-list="[imageurl]">
+      style="
+        width: 184px;
+        height: 224px;
+        position: absolute;
+        top: 15px;
+        left: 19px;
+        opacity: 0.1;
+      "
+      :preview-src-list="[imageurl]"
+    >
     </el-image>
   </div>
 </template>
@@ -46,7 +59,7 @@ export default {
   props: {
     type: {
       type: String,
-      default () {
+      default() {
         return ''
       }
     },
@@ -56,13 +69,13 @@ export default {
     }
   },
   computed: {
-    uploadDisabled () {
+    uploadDisabled() {
       return this.fileList.length > 0
     }
   },
   watch: {
     imageurl: {
-      handler (newval, oldval) {
+      handler(newval, oldval) {
         if (newval) {
           this.fileListArr = [
             {
@@ -75,7 +88,7 @@ export default {
       immediate: true
     }
   },
-  data () {
+  data() {
     return {
       loading: false,
       dialogVisible: true,
@@ -85,7 +98,7 @@ export default {
     }
   },
   methods: {
-    onSuccess (res, file, fileList) {
+    onSuccess(res, file, fileList) {
       this.loading = false
       console.log(res, file, fileList)
       this.dialogVisible = true
@@ -100,7 +113,7 @@ export default {
       this.fileList = fileList
     },
     // 图片删除
-    handleRemove (file, fileList) {
+    handleRemove(file, fileList) {
       console.log(file, fileList)
       this.dialogVisible = false
       this.fileList = []
@@ -108,16 +121,20 @@ export default {
       this.$emit('remove', this.type)
     },
     // 图片查看
-    handlePictureCardPreview (file) {
+    handlePictureCardPreview(file) {
       console.log(file)
       this.dialogVisible = true
     },
     // 图片限制
-    handleExceed (files, fileList) {
-      this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+    handleExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      )
     },
     // 图片上传时
-    handProgress (event, file, fileList) {
+    handProgress(event, file, fileList) {
       console.log(file)
       this.loading = true
       setTimeout(() => {
@@ -125,12 +142,16 @@ export default {
       }, 6000)
     },
     // 图片上传前
-    beforeUpload (file) {
+    beforeUpload(file) {
       console.log(file)
       return new Promise((resolve, reject) => {
         let isJPG = false
         const isLt2M = file.size / 1024 / 1024 < 2
-        if (file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg') {
+        if (
+          file.type === 'image/jpeg' ||
+          file.type === 'image/png' ||
+          file.type === 'image/jpg'
+        ) {
           isJPG = true
         } else {
           isJPG = false
@@ -151,123 +172,124 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .upload {
-    position: relative;
-    width: 222px;
-    height: 254px;
-    cursor: pointer;
-    ::v-deep {
-      .el-icon-close-tip {
-        display: none;
-      }
-      .el-upload__input {
-        display: none;
-      }
-      .el-upload-list--picture-card .el-praogress {
-        display: none;
-      }
-      .el-upload--picture-card {
-        position: absolute;
-        top: 0;
-        left: 0;
-        width: 222px;
-        height: 254px;
-        background: url('~@/assets/image/authen/yyzz.png') no-repeat;
-        background-size: contain;
-        border: none;
-        .imgModel{
-          width: 100%;
-          height: 100%;
-          .el-upload__text{
-            display: flex;
-            flex-direction: column;
-            justify-content: center;
-            align-items: center;
-            height: 100%;
-            .text-span{
-              height: 18px;
-              color: #1D1D1D;
-              line-height: 18px;
-              font-size: 12px;
-            }
-          }
-          .btn-upload{
-            display: flex;
-            justify-content: center;
-            align-items: center;
-            margin-bottom: 12px;
-            width: 88px;
-            height: 32px;
-            background: #2ABED1;
-            border-radius: 16px 16px 16px 16px;
-            opacity: 0.9;
-            font-size: 15px;
-            font-weight: 500;
-            color: #F7F9FA;
-            border: none;
-          }
-        }
-      }
-      // .el-upload-list__item.is-uploading{
-      //   display: none;
-      // }
-      .el-upload-list__item-status-label,
-      .el-upload-list__item-actions
-      {
-        display: none;
-      }
-      .el-upload-list__item.is-ready, .el-upload-list__item.is-uploading.el-list-move {
-        display: none;
-      }
-      .el-upload-list__item {
-        position: absolute;
-        top: 0;
-        left: 0;
+.upload {
+  position: relative;
+  width: 222px;
+  height: 254px;
+  cursor: pointer;
+  ::v-deep {
+    .el-icon-close-tip {
+      display: none;
+    }
+    .el-upload__input {
+      display: none;
+    }
+    .el-upload-list--picture-card .el-praogress {
+      display: none;
+    }
+    .el-upload--picture-card {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 222px;
+      height: 254px;
+      background: url('~@/assets/image/authen/yyzz.png') no-repeat;
+      background-size: contain;
+      border: none;
+      .imgModel {
         width: 100%;
         height: 100%;
-        border: unset;
-        transition: unset;
-      }
-      .el-upload-list__item.is-success {
-        padding: 15px 19px;
-        width: 222px;
-        height: 254px;
-        background: url('~@/assets/image/authen/yyzz.png') no-repeat;
-        background-size: contain;
-        border: none;
-        .el-icon-close{
+        .el-upload__text {
           display: flex;
-          width: 24px;
-          height: 24px;
-          background: url('~@/assets/image/icon/icon-delete-gray.png') no-repeat;
-          background-size: contain;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+          height: 100%;
+          .text-span {
+            height: 18px;
+            color: #1d1d1d;
+            line-height: 18px;
+            font-size: 12px;
+          }
         }
-        .el-icon-close::before {
-            content: none;
+        .btn-upload {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          margin-bottom: 12px;
+          width: 88px;
+          height: 32px;
+          background: #2abed1;
+          border-radius: 16px 16px 16px 16px;
+          opacity: 0.9;
+          font-size: 15px;
+          font-weight: 500;
+          color: #f7f9fa;
+          border: none;
         }
       }
-      .disabled .el-upload--picture-card, .haveimg .el-upload--picture-card {
-        display: none;
-      }
     }
-  }
-  .upload.up-rzgh {
-    ::v-deep {
-      .el-upload--picture-card {
-        width: 222px;
-        height: 254px;
-        background: url('~@/assets/image/authen/rzgh.png') no-repeat;
+    // .el-upload-list__item.is-uploading{
+    //   display: none;
+    // }
+    .el-upload-list__item-status-label,
+    .el-upload-list__item-actions {
+      display: none;
+    }
+    .el-upload-list__item.is-ready,
+    .el-upload-list__item.is-uploading.el-list-move {
+      display: none;
+    }
+    .el-upload-list__item {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      border: unset;
+      transition: unset;
+    }
+    .el-upload-list__item.is-success {
+      padding: 15px 19px;
+      width: 222px;
+      height: 254px;
+      background: url('~@/assets/image/authen/yyzz.png') no-repeat;
+      background-size: contain;
+      border: none;
+      .el-icon-close {
+        display: flex;
+        width: 24px;
+        height: 24px;
+        background: url('~@/assets/image/icon/icon-delete-gray.png') no-repeat;
         background-size: contain;
-        border: none;
       }
-      .el-upload-list__item.is-success {
-        padding: 15px 19px;
-        width: 222px;
-        height: 254px;
-        background: url('~@/assets/image/authen/rzgh.png') no-repeat;
-        background-size: contain;
-        border: none;
+      .el-icon-close::before {
+        content: none;
       }
     }
+    .disabled .el-upload--picture-card,
+    .haveimg .el-upload--picture-card {
+      display: none;
+    }
+  }
+}
+.upload.up-rzgh {
+  ::v-deep {
+    .el-upload--picture-card {
+      width: 222px;
+      height: 254px;
+      background: url('~@/assets/image/authen/rzgh.png') no-repeat;
+      background-size: contain;
+      border: none;
+    }
+    .el-upload-list__item.is-success {
+      padding: 15px 19px;
+      width: 222px;
+      height: 254px;
+      background: url('~@/assets/image/authen/rzgh.png') no-repeat;
+      background-size: contain;
+      border: none;
+    }
   }
+}
 </style>

+ 62 - 44
apps/jy-pc/src/views/authen/components/viewCom.vue

@@ -2,54 +2,72 @@
   <div class="add-main">
     <div class="mechan-info">
       <div class="mechan-title title-common">机构基本信息</div>
-      <el-form :model="ruleForm" ref="ruleForm" label-width="100px" class="mechan-model">
+      <el-form
+        :model="ruleForm"
+        ref="ruleForm"
+        label-width="100px"
+        class="mechan-model"
+      >
         <el-form-item label="机构类型:">
-          <span>{{modelText || '--'}}</span>
+          <span>{{ modelText || '--' }}</span>
         </el-form-item>
         <el-form-item label="统一社会信用代码:">
-          <span>{{detail.creditCode}}</span>
+          <span>{{ detail.creditCode }}</span>
         </el-form-item>
         <el-form-item label="机构名称:">
-          <span>{{detail.name || '--'}}</span>
+          <span>{{ detail.name || '--' }}</span>
         </el-form-item>
         <el-form-item label="机构性质:">
-          <span>{{detail.companyType==0?'企业':'党政机关事业单位及其他'}}</span>
+          <span>{{
+            detail.companyType == 0 ? '企业' : '党政机关事业单位及其他'
+          }}</span>
         </el-form-item>
         <el-form-item label="所属地区:">
-          <span>{{province  || '--'}}</span> <span>{{city  || '--'}}</span>
+          <span>{{ province || '--' }}</span> <span>{{ city || '--' }}</span>
         </el-form-item>
-        <el-form-item v-if="detail.companyType==0" class="el-upload-com" style="height:254px" label="营业执照:">
+        <el-form-item
+          v-if="detail.companyType == 0"
+          class="el-upload-com"
+          style="height: 254px"
+          label="营业执照:"
+        >
           <div class="el-view-upload yyzz">
             <el-image
               v-if="detail.business"
               class="el-view-img"
               :src="detail.business"
-              :preview-src-list="[detail.business]">
+              :preview-src-list="[detail.business]"
+            >
             </el-image>
             <!-- <img class="el-view-img" v-if="detail.business" :src="detail.business" alt="" srcset=""> -->
           </div>
         </el-form-item>
-        <el-form-item class="el-upload-com" style="height:254px" label="认证公函:">
+        <el-form-item
+          class="el-upload-com"
+          style="height: 254px"
+          label="认证公函:"
+        >
           <div class="el-view-upload rzgh">
             <el-image
               v-if="detail.officialLetter"
               class="el-view-img"
               :src="detail.officialLetter"
-              :preview-src-list="[detail.officialLetter]">
+              :preview-src-list="[detail.officialLetter]"
+            >
             </el-image>
             <!-- <img class="el-view-img" v-if="detail.officialLetter" :src="detail.officialLetter" alt="" srcset=""> -->
             <!-- <img :src="detail.officialLetter" alt="" srcset=""> -->
           </div>
         </el-form-item>
-        <div class="title-common" style="color: #1D1D1D;">
-         <span>联系信息</span>
-         <span style="font-weight:400">(用于信息核实)</span>
+        <div class="title-common" style="color: #1d1d1d">
+          <span>联系信息</span>
+          <span style="font-weight: 400">(用于信息核实)</span>
         </div>
         <el-form-item label="联系人:">
-          <span>{{detail.contactPerson  || '--'}}</span>
+          <span>{{ detail.contactPerson || '--' }}</span>
         </el-form-item>
         <el-form-item label="手机号:">
-          <span>{{detail.contactPhone  || '--'}}</span>
+          <span>{{ detail.contactPhone || '--' }}</span>
         </el-form-item>
       </el-form>
     </div>
@@ -69,12 +87,12 @@ export default {
   props: {
     detail: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
   },
-  data () {
+  data() {
     return {
       ruleForm: {},
       province: '',
@@ -94,7 +112,7 @@ export default {
   },
   watch: {
     detail: {
-      handler (newval, oldval) {
+      handler(newval, oldval) {
         if (newval.areaNumber) {
           if (newval.areaNumber.indexOf('_') !== -1) {
             this.province = newval.areaNumber.split('_')[0]
@@ -104,7 +122,7 @@ export default {
         const modelArr = []
         if (newval.organizationType.indexOf(',') !== -1) {
           const arr = newval.organizationType.split(',')
-          arr.forEach(a => {
+          arr.forEach((a) => {
             this.modelList.forEach((m, i) => {
               if (a === i + '') {
                 modelArr.push(m)
@@ -119,9 +137,9 @@ export default {
       immediate: true
     }
   },
-  mounted () {},
+  mounted() {},
   methods: {
-    submitForm (formName) {
+    submitForm(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
           alert('submit!')
@@ -136,101 +154,101 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.add-main{
+.add-main {
   margin-top: 8px;
-  .mechan-model{
+  .mechan-model {
     display: flex;
     flex-direction: column;
     align-items: flex-start;
     justify-content: center;
-    ::v-deep{
-      .el-form-item{
+    ::v-deep {
+      .el-form-item {
         display: flex;
         align-items: center;
         margin-bottom: 14px;
         height: 22px;
-        .el-form-item__label{
+        .el-form-item__label {
           display: flex;
           flex: 1;
           flex-wrap: wrap;
           text-align: left;
           padding-right: 1px;
-          width: auto!important;
+          width: auto !important;
           font-size: 14px;
           line-height: 22px;
         }
-        .el-checkbox-group{
+        .el-checkbox-group {
           display: flex;
           width: 100%;
-          .el-checkbox{
+          .el-checkbox {
             margin-right: 15px;
           }
         }
-        .el-form-item__content{
-          margin-left: 20px!important;
+        .el-form-item__content {
+          margin-left: 20px !important;
         }
       }
     }
-    .getcode{
+    .getcode {
       margin-left: 20px;
       font-size: 14px;
       font-weight: 400;
-      color: #2CB7CA;
+      color: #2cb7ca;
       line-height: 40px;
       cursor: pointer;
       text-decoration: underline;
     }
-    .select-area{
+    .select-area {
       width: 290px;
       height: 36px;
       border-radius: 4px 4px 4px 4px;
-      border: 1px solid #E0E0E0;
+      border: 1px solid #e0e0e0;
       line-height: 36px;
       ::v-deep {
-        .el-input__inner{
+        .el-input__inner {
           height: 100%;
           border: none;
         }
         .el-input.el-input--suffix {
           height: 100%;
-          .el-input__inner{
+          .el-input__inner {
             height: 100%;
             border: none;
           }
         }
       }
-      &.city{
+      &.city {
         margin-left: 20px;
       }
     }
     .el-form-item.el-upload-com {
       align-items: flex-start;
-      .el-view-upload{
+      .el-view-upload {
         padding: 15px 19px;
         width: 222px;
         height: 254px;
         background: url('~@/assets/image/authen/yyzz.png') no-repeat;
         background-size: contain;
-        &.rzgh{
+        &.rzgh {
           background: url('~@/assets/image/authen/rzgh.png') no-repeat;
           background-size: contain;
         }
-        .el-view-img{
+        .el-view-img {
           width: 100%;
           height: 100%;
         }
       }
     }
-    .submitBtn{
+    .submitBtn {
       margin-top: 36px;
       width: 180px;
       height: 46px;
-      background: #2CB7CA;
+      background: #2cb7ca;
       border-radius: 6px 6px 6px 6px;
       opacity: 1;
       font-size: 16px;
       font-weight: 400;
-      color: #FFFFFF;
+      color: #ffffff;
       line-height: 24px;
     }
   }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 359 - 215
apps/jy-pc/src/views/demand-detail/Detail.vue


+ 64 - 44
apps/jy-pc/src/views/equity/Exchange.vue

@@ -5,19 +5,39 @@
       <div class="exchange-handle">
         <div class="ex-tips" v-if="showTips">
           <i class="j-icon icon-orange-phone"></i>
-          <span>兑换权益与当前用户权益不对等,无法兑换。请直接联系吕经理:<a class="tel" href="tel:15136295365">151 3629 5365</a>。</span>
+          <span
+            >兑换权益与当前用户权益不对等,无法兑换。请直接联系吕经理:<a
+              class="tel"
+              href="tel:15136295365"
+              >151 3629 5365</a
+            >。</span
+          >
         </div>
         <div class="ex-input">
           <span class="ex-input-label">兑换码</span>
-          <el-input :class="{'error-input': showTips}" v-model="code" placeholder="请输入兑换码" clearable @input="onInput"></el-input>
-          <span class="status-text error-status" v-show="errorStatus"><i class="j-icon icon-error-status"></i>{{errorMsg}}</span>
-          <span class="status-text success-status" v-show="successStatus"><i class="j-icon icon-success-status"></i>恭喜兑换成功</span>
+          <el-input
+            :class="{ 'error-input': showTips }"
+            v-model="code"
+            placeholder="请输入兑换码"
+            clearable
+            @input="onInput"
+          ></el-input>
+          <span class="status-text error-status" v-show="errorStatus"
+            ><i class="j-icon icon-error-status"></i>{{ errorMsg }}</span
+          >
+          <span class="status-text success-status" v-show="successStatus"
+            ><i class="j-icon icon-success-status"></i>恭喜兑换成功</span
+          >
         </div>
-        <el-button class="ex-btn" type="primary" @click="onExchange">立即兑换</el-button>
+        <el-button class="ex-btn" type="primary" @click="onExchange"
+          >立即兑换</el-button
+        >
         <div class="ex-desc">
           <p>说明</p>
           <p>1.输入兑换码即可兑换;</p>
-          <p>2.如遇到问题请联系剑鱼标讯客服;若兑换码来源为从【淘宝/天猫/京东/拼多多】平台内的店铺购买商品获得,请联系对应店铺内的客服进行办理。</p>
+          <p>
+            2.如遇到问题请联系剑鱼标讯客服;若兑换码来源为从【淘宝/天猫/京东/拼多多】平台内的店铺购买商品获得,请联系对应店铺内的客服进行办理。
+          </p>
         </div>
       </div>
       <div class="exchange-list">
@@ -54,7 +74,7 @@ export default {
     [Input.name]: Input,
     Empty
   },
-  data () {
+  data() {
     return {
       code: '',
       list: [],
@@ -64,17 +84,17 @@ export default {
       errorStatus: false
     }
   },
-  created () {
+  created() {
     this.getList()
   },
   methods: {
-    async getList () {
+    async getList() {
       const { data } = await equityList()
       if (data) {
         this.list = data?.records || []
       }
     },
-    async onExchange () {
+    async onExchange() {
       if (!this.code) return
       const { success, errMsg } = await equityExchange({
         code: this.code
@@ -99,11 +119,11 @@ export default {
         }
       }
     },
-    formatDate (val) {
+    formatDate(val) {
       if (!val) return '-'
       return val.replace(/-/g, '.')
     },
-    onInput (val) {
+    onInput(val) {
       if (!val) {
         this.successStatus = false
         this.errorStatus = false
@@ -115,21 +135,21 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.equity-exchange{
-  %bg{
+.equity-exchange {
+  %bg {
     border-radius: 8px;
     background: $white;
   }
-  %flex{
+  %flex {
     display: flex;
     align-items: center;
   }
-  %title{
+  %title {
     font-size: 16px;
     line-height: 24px;
     color: #1d1d1d;
   }
-  %item{
+  %item {
     display: inline-block;
     padding: 0 16px;
     width: 33.33%;
@@ -140,110 +160,110 @@ export default {
     line-height: 36px;
     color: #1d1d1d;
   }
-  .exchange-handle{
+  .exchange-handle {
     @extend %bg;
     padding: 16px 16px 32px;
   }
-  .ex-tips{
+  .ex-tips {
     @extend %flex;
     justify-content: center;
     height: 32px;
     background: rgba(255, 159, 64, 0.08);
     border-radius: 8px;
-    color: #F56500;
+    color: #f56500;
     font-size: 14px;
     line-height: 22px;
-    .tel{
+    .tel {
       color: $main;
       text-decoration: underline;
     }
-    .icon-orange-phone{
+    .icon-orange-phone {
       width: 20px;
       height: 20px;
       margin-right: 8px;
     }
   }
-  .ex-input{
+  .ex-input {
     @extend %flex;
     padding: 16px 0;
-    .ex-input-label{
+    .ex-input-label {
       padding: 0 22px 0 24px;
       flex-shrink: 0;
       font-size: 14px;
       line-height: 22px;
       color: #1d1d1d;
     }
-    .status-text{
+    .status-text {
       @extend %flex;
       margin-left: 18px;
       flex-shrink: 0;
       font-size: 14px;
       line-height: 22px;
-      i{
+      i {
         margin-right: 8px;
       }
-      &.error-status{
-        color: #FE737A;
+      &.error-status {
+        color: #fe737a;
       }
-      &.success-status{
+      &.success-status {
         color: $main;
       }
     }
     ::v-deep {
-      .el-input{
+      .el-input {
         width: 590px;
       }
-      .error-input .el-input__inner:focus{
-        border-color: #F56500!important;
+      .error-input .el-input__inner:focus {
+        border-color: #f56500 !important;
       }
     }
   }
-  .ex-btn{
+  .ex-btn {
     margin: 16px 0 16px 88px;
     width: 180px;
     height: 46px;
     font-size: 16px;
   }
-  .ex-desc{
+  .ex-desc {
     margin-left: 88px;
-    p{
+    p {
       color: #888888;
       font-size: 12px;
       line-height: 16px;
     }
   }
-  .exchange-list{
+  .exchange-list {
     @extend %bg;
     margin-top: 24px;
     padding: 24px 40px;
   }
-  .list-title{
+  .list-title {
     @extend %title;
     width: 100%;
   }
-  .list-table{
+  .list-table {
     width: 100%;
     margin-top: 12px;
-    .t-thead{
+    .t-thead {
       height: 40px;
       line-height: 40px;
-      background: #F7F9FC;
+      background: #f7f9fc;
       border-radius: 4px;
-      span{
+      span {
         @extend %item;
         font-size: 14px;
         color: #686868;
       }
     }
-    .t-body{
+    .t-body {
       margin-top: 12px;
     }
-    .t-list{
+    .t-list {
       padding: 12px 0;
       font-size: 16px;
       color: #1d1d1d;
       box-shadow: inset 0px -1px 0px rgba(0, 0, 0, 0.05);
-      span{
+      span {
         @extend %item;
         font-size: 16px;
         color: #1d1d1d;

+ 202 - 89
apps/jy-pc/src/views/issued-detail/Detail.vue

@@ -2,36 +2,45 @@
   <div class="issued-detail v-w1200" v-loading="loading">
     <div class="detail-breadcrumb">
       <el-breadcrumb separator-class="el-icon-arrow-right">
-      <el-breadcrumb-item @click="goMyIssuedPage">我的发布</el-breadcrumb-item>
-      <el-breadcrumb-item>发布详情</el-breadcrumb-item>
-    </el-breadcrumb>
+        <el-breadcrumb-item @click="goMyIssuedPage"
+          >我的发布</el-breadcrumb-item
+        >
+        <el-breadcrumb-item>发布详情</el-breadcrumb-item>
+      </el-breadcrumb>
     </div>
     <div class="detail-container">
       <div class="d-main">
         <div class="info-title">
-          <span class="title-status" :class="getClass(info.reviewStatus)">{{getStatus(info.reviewStatus)}}</span>
-          <h3 class="title-h">{{info.title}}</h3>
+          <span class="title-status" :class="getClass(info.reviewStatus)">{{
+            getStatus(info.reviewStatus)
+          }}</span>
+          <h3 class="title-h">{{ info.title }}</h3>
         </div>
         <div class="info-content">
           <div class="c-item">
             <div class="item-label">信息类型:</div>
-            <div class="item-value">{{getType(info.msgType)}}</div>
+            <div class="item-value">{{ getType(info.msgType) }}</div>
           </div>
           <div class="c-item" v-if="info.msgType != 5 && info.msgType != 3">
             <div class="item-label">关联公告:</div>
             <div class="item-value" v-if="info.relatedId">
               <!-- <router-link class="href" :to="{path: '/issued/detail/'+ info.relatedId, query: { msgType: info.msgType }}">{{info.relatedTitle}}</router-link> -->
-              <a class="href" href="javascript:;" @click="openRouter(info.relatedId)">{{info.relatedTitle}}</a>
+              <a
+                class="href"
+                href="javascript:;"
+                @click="openRouter(info.relatedId)"
+                >{{ info.relatedTitle }}</a
+              >
             </div>
             <div class="item-value" v-else>--</div>
           </div>
           <div class="c-item" v-if="info.msgType != 5 && info.msgType != 3">
             <div class="item-label">项目编号:</div>
-            <div class="item-value">{{info.code || '--'}}</div>
+            <div class="item-value">{{ info.code || '--' }}</div>
           </div>
           <div class="c-item" v-if="info.msgType != 3">
             <div class="item-label">项目地区:</div>
-            <div class="item-value">{{info.province}} {{info.city}}</div>
+            <div class="item-value">{{ info.province }} {{ info.city }}</div>
           </div>
           <!-- <div class="c-item" v-if="info.industry && info.industry.length > 0">
             <div class="item-label">项目行业:</div>
@@ -40,36 +49,78 @@
           </div> -->
           <div class="c-item" v-if="info.msgType != 3">
             <div class="item-label">采购单位:</div>
-            <div class="item-value">{{info.buyer || '--'}}</div>
+            <div class="item-value">{{ info.buyer || '--' }}</div>
           </div>
           <div class="c-item" v-if="info.msgType != 5 && info.msgType != 3">
             <div class="item-label">预算金额:</div>
-            <div class="item-value" v-if="info.budget==='0' || info.budget">{{(info.budget / 10000).fixed(2)}}万元</div>
+            <div class="item-value" v-if="info.budget === '0' || info.budget">
+              {{ (info.budget / 10000).fixed(2) }}万元
+            </div>
             <div class="item-value" v-else>--</div>
           </div>
-          <div class="c-item" v-if="info.msgType != 2 && info.msgType != 3 && info.msgType != 4 && info.msgType != 5 && info.msgType != 6">
+          <div
+            class="c-item"
+            v-if="
+              info.msgType != 2 &&
+              info.msgType != 3 &&
+              info.msgType != 4 &&
+              info.msgType != 5 &&
+              info.msgType != 6
+            "
+          >
             <div class="item-label">中标单位:</div>
-            <div class="item-value">{{info.winner || '--'}}</div>
+            <div class="item-value">{{ info.winner || '--' }}</div>
           </div>
-          <div class="c-item" v-if="info.msgType != 2 && info.msgType != 3 && info.msgType != 4 && info.msgType != 5 && info.msgType != 6">
+          <div
+            class="c-item"
+            v-if="
+              info.msgType != 2 &&
+              info.msgType != 3 &&
+              info.msgType != 4 &&
+              info.msgType != 5 &&
+              info.msgType != 6
+            "
+          >
             <div class="item-label">中标金额:</div>
-            <div class="item-value" v-if="info.amount==='0' || info.amount">{{(info.amount / 10000).fixed(2)}}万元</div>
+            <div class="item-value" v-if="info.amount === '0' || info.amount">
+              {{ (info.amount / 10000).fixed(2) }}万元
+            </div>
             <div class="item-value" v-else>--</div>
           </div>
-          <div v-if="info.jyPublishingMedia!==0 && info.jyPublishingMedia" class="c-item c-item-agreetext">我{{info.jyPublishingMedia===1?'同意':'不同意'}}将 “剑鱼标讯” 作为项目发布媒体</div>
+          <div
+            v-if="info.jyPublishingMedia !== 0 && info.jyPublishingMedia"
+            class="c-item c-item-agreetext"
+          >
+            我{{ info.jyPublishingMedia === 1 ? '同意' : '不同意' }}将
+            “剑鱼标讯” 作为项目发布媒体
+          </div>
           <div class="c-item">
             <div class="item-label">信息正文:</div>
             <div class="item-value" v-html="info.detail"></div>
           </div>
           <div class="c-item" v-if="info.msgType == 3">
             <div class="item-label">有效期至:</div>
-            <div class="item-value">{{info.validityTime || '--'}}</div>
+            <div class="item-value">{{ info.validityTime || '--' }}</div>
           </div>
           <div class="c-item">
             <div class="item-label">附件:</div>
-            <div class="item-value" v-if="info.attach && Object.keys(info.attach).length > 0">
-              <div v-for="(at,i) in info.attach" :key="i">
-                <a class="href" :href="at.ossurl + '/' + at.fid + '?response-content-type=application/octet-stream'" download target="_blank">{{at.filename}}</a>
+            <div
+              class="item-value"
+              v-if="info.attach && Object.keys(info.attach).length > 0"
+            >
+              <div v-for="(at, i) in info.attach" :key="i">
+                <a
+                  class="href"
+                  :href="
+                    at.ossurl +
+                    '/' +
+                    at.fid +
+                    '?response-content-type=application/octet-stream'
+                  "
+                  download
+                  target="_blank"
+                  >{{ at.filename }}</a
+                >
               </div>
             </div>
             <div v-else class="item-value">--</div>
@@ -82,16 +133,27 @@
           <div>
             <div class="c-item">
               <div class="item-label">联系人:</div>
-              <div class="item-value">{{info.contactName || '--'}}</div>
+              <div class="item-value">{{ info.contactName || '--' }}</div>
             </div>
             <div class="c-item">
               <div class="item-label">联系电话:</div>
-              <div class="item-value">{{info.contactPhone || '--'}}</div>
+              <div class="item-value">{{ info.contactPhone || '--' }}</div>
             </div>
-            <p class="concat-tips" v-if="info.contactOvert && info.contactOvert!=0">我<span v-if="info.contactOvert == 1">同意</span><span v-else>不同意</span>公开联系方式</p>
-            <div class="c-item agency-item" v-show="getMsgType && info.recommendedService">
+            <p
+              class="concat-tips"
+              v-if="info.contactOvert && info.contactOvert != 0"
+            >
+              我<span v-if="info.contactOvert == 1">同意</span
+              ><span v-else>不同意</span>公开联系方式
+            </p>
+            <div
+              class="c-item agency-item"
+              v-show="getMsgType && info.recommendedService"
+            >
               <div class="item-label item-tips">供应商推荐服务:</div>
-              <div class="item-value item-tips">{{info.recommendedService===1?'我需要':'我不需要'}}</div>
+              <div class="item-value item-tips">
+                {{ info.recommendedService === 1 ? '我需要' : '我不需要' }}
+              </div>
             </div>
           </div>
         </div>
@@ -99,19 +161,27 @@
       <div class="d-footer">
         <div class="c-item">
           <div class="item-label">申请日期:</div>
-          <div class="item-value">{{info.createTime || '--'}}</div>
+          <div class="item-value">{{ info.createTime || '--' }}</div>
         </div>
         <div class="c-item">
           <div class="item-label">申请状态:</div>
-          <div class="item-value" :class="[info.reviewStatus == 1 ? 'color-yellow' : '', info.reviewStatus == 3 ? 'color-red' : '']">{{getStatus(info.reviewStatus)}}</div>
+          <div
+            class="item-value"
+            :class="[
+              info.reviewStatus == 1 ? 'color-yellow' : '',
+              info.reviewStatus == 3 ? 'color-red' : ''
+            ]"
+          >
+            {{ getStatus(info.reviewStatus) }}
+          </div>
         </div>
         <div class="c-item" v-if="info.reviewStatus == 3">
           <div class="item-label">原因:</div>
-          <div class="item-value">{{info.reviewDetail || '--'}}</div>
+          <div class="item-value">{{ info.reviewDetail || '--' }}</div>
         </div>
-        <div class="c-item" style="margin:0;" v-if="info.reviewTime">
+        <div class="c-item" style="margin: 0" v-if="info.reviewTime">
           <div class="item-label">审核时间:</div>
-          <div class="item-value">{{info.reviewTime}}</div>
+          <div class="item-value">{{ info.reviewTime }}</div>
         </div>
       </div>
     </div>
@@ -123,17 +193,17 @@ import { myPublishDetail } from '@/api/modules/jyinfo'
 import { moneyUnit, dateFormatter, openSelfLink } from '@/utils/'
 export default {
   name: 'issued-detail',
-  data () {
+  data() {
     return {
       loading: true,
       info: {}
     }
   },
-  created () {
+  created() {
     this.getDetail()
   },
   computed: {
-    getMsgType () {
+    getMsgType() {
       // 采购意向、招标预告、招标公告、采购信息显示供应商推荐
       const msg = Number(this.$route.query.msgType)
       return msg === 2 || msg === 4 || msg === 5 || msg === 6
@@ -142,12 +212,15 @@ export default {
   methods: {
     moneyUnit,
     dateFormatter,
-    goMyIssuedPage () {
-      openSelfLink({
-        link: '/issued/my'
-      }, true)
+    goMyIssuedPage() {
+      openSelfLink(
+        {
+          link: '/issued/my'
+        },
+        true
+      )
     },
-    getClass (id) {
+    getClass(id) {
       if (!id) return
       let oClass = ''
       id = Number(id)
@@ -164,7 +237,7 @@ export default {
       }
       return oClass
     },
-    getStatus (id) {
+    getStatus(id) {
       let oName = ''
       id = Number(id)
       switch (id) {
@@ -180,7 +253,7 @@ export default {
       }
       return oName
     },
-    getType (type) {
+    getType(type) {
       if (!type) return
       let name = ''
       switch (type) {
@@ -208,20 +281,48 @@ export default {
       }
       return name
     },
-    async getDetail () {
+    async getDetail() {
       const params = {
         msgId: this.$route.params.id,
         type: 0,
         msgType: Number(this.$route.query.msgType)
       }
-      const { error_msg: msg, data, err_msg: errMsg } = await myPublishDetail(params)
-      if ((errMsg && errMsg.indexOf('未认证') > -1) || (msg && msg.indexOf('未认证') > -1)) {
+      const {
+        error_msg: msg,
+        data,
+        err_msg: errMsg
+      } = await myPublishDetail(params)
+      if (
+        (errMsg && errMsg.indexOf('未认证') > -1) ||
+        (msg && msg.indexOf('未认证') > -1)
+      ) {
         this.$router.replace('/issued/info')
         return
       }
       if (data) {
         this.loading = false
-        const { title, msgType, province, city, industry, detail, code, buyer, budget, amount, winner, InfoDetailReview, infoDetailContact, InfoDetailRelated, attach, publishTime, validityTime, createTime, jyPublishingMedia, recommendedService } = data
+        const {
+          title,
+          msgType,
+          province,
+          city,
+          industry,
+          detail,
+          code,
+          buyer,
+          budget,
+          amount,
+          winner,
+          InfoDetailReview,
+          infoDetailContact,
+          InfoDetailRelated,
+          attach,
+          publishTime,
+          validityTime,
+          createTime,
+          jyPublishingMedia,
+          recommendedService
+        } = data
         if (industry) {
           industry.forEach((v, i) => {
             if (!v) {
@@ -244,12 +345,24 @@ export default {
         this.info.winner = winner
         this.info.jyPublishingMedia = jyPublishingMedia
         this.info.recommendedService = recommendedService
-        this.info.publishTime = this.dateFormatter(new Date(publishTime?.replaceAll('-', '/')).getTime(), 'yyyy-MM-dd')
-        this.info.createTime = this.dateFormatter(new Date(createTime?.replaceAll('-', '/')).getTime(), 'yyyy-MM-dd')
-        this.info.validityTime = this.dateFormatter(new Date(validityTime?.replaceAll('-', '/')).getTime(), 'yyyy-MM-dd')
+        this.info.publishTime = this.dateFormatter(
+          new Date(publishTime?.replaceAll('-', '/')).getTime(),
+          'yyyy-MM-dd'
+        )
+        this.info.createTime = this.dateFormatter(
+          new Date(createTime?.replaceAll('-', '/')).getTime(),
+          'yyyy-MM-dd'
+        )
+        this.info.validityTime = this.dateFormatter(
+          new Date(validityTime?.replaceAll('-', '/')).getTime(),
+          'yyyy-MM-dd'
+        )
         this.info.reviewStatus = InfoDetailReview?.status
         this.info.reviewDetail = InfoDetailReview?.detail
-        this.info.reviewTime = this.dateFormatter(new Date(InfoDetailReview?.time?.replaceAll('-', '/')).getTime(), 'yyyy-MM-dd')
+        this.info.reviewTime = this.dateFormatter(
+          new Date(InfoDetailReview?.time?.replaceAll('-', '/')).getTime(),
+          'yyyy-MM-dd'
+        )
         this.info.contactName = infoDetailContact?.name
         this.info.contactPhone = infoDetailContact?.phone
         this.info.contactOvert = infoDetailContact?.overt
@@ -259,7 +372,7 @@ export default {
         this.$toast(msg || errMsg)
       }
     },
-    openRouter (id) {
+    openRouter(id) {
       const routeData = this.$router.resolve({
         path: '/issued/detail/' + id,
         query: {
@@ -280,25 +393,25 @@ export default {
     overflow: hidden;
   }
 }
-.issued-detail{
+.issued-detail {
   padding: 36px 0 47px;
-  .detail-container{
+  .detail-container {
     margin-top: 20px;
-    .d-main{
+    .d-main {
       padding: 33px 40px;
       background: #fff;
     }
-    .d-footer{
+    .d-footer {
       margin-top: 20px;
       padding: 40px;
       background: #fff;
     }
-    .info-title{
+    .info-title {
       display: flex;
       align-items: center;
       padding-bottom: 27px;
-      border-bottom: 1px solid #E0E0E0;
-      .title-status{
+      border-bottom: 1px solid #e0e0e0;
+      .title-status {
         min-width: 58px;
         margin-right: 10px;
         padding: 3px 8px;
@@ -306,98 +419,98 @@ export default {
         line-height: 22px;
         border-radius: 4px;
       }
-      .title-h{
+      .title-h {
         font-size: 18px;
-        color: #1D1D1D;
+        color: #1d1d1d;
         font-weight: bold;
       }
     }
-    .info-content{
+    .info-content {
       margin: 20px 0;
     }
-    .info-concat{
-      .concat-title{
+    .info-concat {
+      .concat-title {
         margin-bottom: 10px;
         font-size: 14px;
-        color:#1D1D1D;
+        color: #1d1d1d;
         line-height: 40px;
         font-weight: bold;
       }
-      .concat-tips{
+      .concat-tips {
         margin-top: 3px;
         font-size: 14px;
         color: #888888;
         line-height: 22px;
       }
     }
-    .c-item{
+    .c-item {
       display: flex;
       margin-bottom: 10px;
       font-size: 14px;
-      &.agency-item{
+      &.agency-item {
         margin-top: 10px;
       }
-      .item-label{
+      .item-label {
         min-width: 80px;
         color: #686868;
         line-height: 22px;
-        &.item-tips{
+        &.item-tips {
           color: #888888;
         }
       }
-      .item-value{
+      .item-value {
         line-height: 22px;
         flex: 1;
-        color: #1D1D1D;
-        &.item-tips{
+        color: #1d1d1d;
+        &.item-tips {
           color: #888888;
         }
       }
-      .href{
+      .href {
         color: $color_main;
         text-decoration: underline;
         cursor: pointer;
         font-size: 14px;
       }
-      &.c-item-agreetext{
+      &.c-item-agreetext {
         font-size: 14px;
         font-weight: 400;
-        color: #2CB7CA;
+        color: #2cb7ca;
       }
     }
-    .color-yellow{
-      color: $color_yellow!important;
+    .color-yellow {
+      color: $color_yellow !important;
     }
-    .color-red{
-      color: $color_red!important;
+    .color-red {
+      color: $color_red !important;
     }
-    .success{
+    .success {
       background: rgba(11, 217, 145, 0.1);
-      color: #0BD991;
+      color: #0bd991;
     }
-    .error{
+    .error {
       background: rgba(255, 58, 32, 0.1);
-      color: #FF3A20;
+      color: #ff3a20;
     }
-    .warn{
+    .warn {
       background: rgba(255, 159, 64, 0.1);
-      color: #FF9F40;
+      color: #ff9f40;
     }
   }
-  ::v-deep{
-    .el-breadcrumb__inner.is-link{
+  ::v-deep {
+    .el-breadcrumb__inner.is-link {
       color: #686868;
       font-weight: normal;
-      &:hover{
+      &:hover {
         color: $color_main;
       }
     }
-    .el-breadcrumb__item:last-child{
-      .el-breadcrumb__inner{
+    .el-breadcrumb__item:last-child {
+      .el-breadcrumb__inner {
         color: $color_main;
       }
     }
-    .el-breadcrumb__separator[class*=icon]{
+    .el-breadcrumb__separator[class*='icon'] {
       margin: 0;
     }
   }

+ 93 - 50
apps/jy-pc/src/views/issued/Index.vue

@@ -3,8 +3,20 @@
     <div>
       <div class="issued-nav">
         <div class="tab-link">
-          <router-link class="link-to" active-class="active-class" to="/issued/info" replace>信息发布</router-link>
-          <router-link class="link-to" active-class="active-class" to="/issued/my" replace>我的发布</router-link>
+          <router-link
+            class="link-to"
+            active-class="active-class"
+            to="/issued/info"
+            replace
+            >信息发布</router-link
+          >
+          <router-link
+            class="link-to"
+            active-class="active-class"
+            to="/issued/my"
+            replace
+            >我的发布</router-link
+          >
         </div>
         <!-- p278移除企业切换 -->
         <!-- <div class="tab-ent">
@@ -29,7 +41,12 @@
           <div name="content" v-html="dialog.content"></div>
         </div>
         <div slot="label">
-          <slot name="label">如有问题,可拨打客服电话 400-108-6670 或在线 <em class='light-text open-customer' @click="openCustomer">联系客服</em></slot>
+          <slot name="label"
+            >如有问题,可拨打客服电话 400-108-6670 或在线
+            <em class="light-text open-customer" @click="openCustomer"
+              >联系客服</em
+            ></slot
+          >
         </div>
       </IssuedDialog>
     </div>
@@ -38,7 +55,14 @@
 
 <script>
 // import SwitchEnt from '@/views/issued/components/SwitchEnt' // p278移除企业切换
-import { getMyEntInfo, getEntInfo, getEntList, selectEnt, getBoundPhone, selectedDefaultEnt } from '@/api/modules/entbase'
+import {
+  getMyEntInfo,
+  getEntInfo,
+  getEntList,
+  selectEnt,
+  getBoundPhone,
+  selectedDefaultEnt
+} from '@/api/modules/entbase'
 import { getEntCheckStatus } from '@/api/modules/authen'
 import { identityList } from '@/api/modules/publicapply'
 import IssuedDialog from '@/components/dialog/Dialog'
@@ -50,7 +74,7 @@ export default {
     // SwitchEnt,
     IssuedDialog
   },
-  data () {
+  data() {
     return {
       // 是否限免(前期由前端控制是否限免,后期改成接口控制)
       isLimited: true,
@@ -82,19 +106,22 @@ export default {
   inject: ['reload'],
   computed: {
     ...mapState({
-      userInfo: state => state.user.info
+      userInfo: (state) => state.user.info
     })
   },
-  created () {
+  created() {
     this.getBoundPhoneFn()
   },
   methods: {
     // 判断有无上一页
-    actionHistory () {
-      openSelfLink({
-        link: '/page_workDesktop/',
-        prefix: ''
-      }, true)
+    actionHistory() {
+      openSelfLink(
+        {
+          link: '/page_workDesktop/',
+          prefix: ''
+        },
+        true
+      )
       // @date 2022-08-30 工作桌面版本调整为全部前往工作台首页
       // const len = history.length
       // const referrer = document.referrer
@@ -111,55 +138,66 @@ export default {
       // }
     },
     // dialog确定按钮触发事件
-    onConfirmDialogBtn (data) {
+    onConfirmDialogBtn(data) {
       this.dialog.showDialog = false
       if (data === '我知道了') {
         this.actionHistory()
       } else if (data.indexOf('认证') > -1) {
-        openSelfLink({
-          link: '/authen/index'
-        }, true)
+        openSelfLink(
+          {
+            link: '/authen/index'
+          },
+          true
+        )
       } else if (data.indexOf('去开通') > -1) {
-        openSelfLink({
-          link: '/page_big_pc/free/svip/buy',
-          prefix: ''
-        }, true)
+        openSelfLink(
+          {
+            link: '/page_big_pc/free/svip/buy',
+            prefix: ''
+          },
+          true
+        )
       }
     },
     // dialog取消按钮触发事件
-    onCancelDialogBtn () {
+    onCancelDialogBtn() {
       this.dialog.showDialog = false
       this.actionHistory()
       // this.dialog.showDialog = false
     },
     // dialog组件参数
-    setDialogProps (status) {
+    setDialogProps(status) {
       this.dialog.showDialog = true
       switch (status) {
         case 0:
           this.dialog.confirmBtnText = '前往认证'
           this.dialog.showCancelBtn = true
-          this.dialog.content = '按照国家相关法律规定,在互联网平台发布信息需要经过实名认证,请您前往完成认证后,再进行信息发布。'
+          this.dialog.content =
+            '按照国家相关法律规定,在互联网平台发布信息需要经过实名认证,请您前往完成认证后,再进行信息发布。'
           break
         case -1:
           this.dialog.confirmBtnText = '重新认证'
           this.dialog.showCancelBtn = true
-          this.dialog.content = '您发起的机构认证“审核不通过”,无法进行信息发布。可修改机构认证信息,重新发起认证。'
+          this.dialog.content =
+            '您发起的机构认证“审核不通过”,无法进行信息发布。可修改机构认证信息,重新发起认证。'
           break
         case -2:
           this.dialog.confirmBtnText = '重新认证'
           this.dialog.showCancelBtn = true
-          this.dialog.content = '您发起的机构认证“已过期”,请重新发起机构认证后,再进行信息发布。'
+          this.dialog.content =
+            '您发起的机构认证“已过期”,请重新发起机构认证后,再进行信息发布。'
           break
         case 3:
           this.dialog.confirmBtnText = '我知道了'
           this.dialog.showCancelBtn = false
-          this.dialog.content = '您发起的机构认证正在“审核中”,请耐心等待,<br>审核通过后即可进行信息发布。'
+          this.dialog.content =
+            '您发起的机构认证正在“审核中”,请耐心等待,<br>审核通过后即可进行信息发布。'
           break
         case 4:
           this.dialog.confirmBtnText = '我知道了'
           this.dialog.showCancelBtn = false
-          this.dialog.content = '当前身份为“个人版”,不支持信息发布,请将身份切换至<br>企业/组织,并完成机构认证后,再进行信息发布。'
+          this.dialog.content =
+            '当前身份为“个人版”,不支持信息发布,请将身份切换至<br>企业/组织,并完成机构认证后,再进行信息发布。'
           break
         case 100: // 100为自定义状态
           this.dialog.confirmBtnText = '去开通'
@@ -172,7 +210,7 @@ export default {
       }
     },
     // 获取是否绑定手机号
-    async getBoundPhoneFn () {
+    async getBoundPhoneFn() {
       const { data } = await getBoundPhone()
       // 绑定过手机号才执行查询企业相关信息
       if (data) {
@@ -187,11 +225,11 @@ export default {
       }
     },
     // 默认选择一个企业
-    async selectedDefaultFn () {
+    async selectedDefaultFn() {
       await selectedDefaultEnt()
     },
     // 查询企业认证状态
-    async getEntCheckStatusFn () {
+    async getEntCheckStatusFn() {
       const { vipStatus, memberStatus } = this.userInfo
       if (!this.isLimited && vipStatus <= 0 && memberStatus <= 0) {
         this.setDialogProps(100)
@@ -213,17 +251,17 @@ export default {
       }
     },
     // 切换企业
-    switchEntFn (data) {
+    switchEntFn(data) {
       selectEnt({
         id: data.id
-      }).then(res => {
+      }).then((res) => {
         if (res.data && res.data.status > 0) {
           // window.location.reload()
           this.reload()
         }
       })
     },
-    async getEntInfoFn () {
+    async getEntInfoFn() {
       this.loading = true
       const res = await identityList()
       if (res.data) {
@@ -231,18 +269,22 @@ export default {
         const list = res.data
         let personage = false
         let hasOrganization = false
-        list.forEach(e => {
-          if (e.positionType === 0 && e.checked === 1) { // 当前为个人版
+        list.forEach((e) => {
+          if (e.positionType === 0 && e.checked === 1) {
+            // 当前为个人版
             personage = true
           }
           if (e.positionType === 1) {
             hasOrganization = true // 存在机构身份
           }
         })
-        if (personage) { // 当前选中为个人版
-          if (hasOrganization) { // 存在机构身份
+        if (personage) {
+          // 当前选中为个人版
+          if (hasOrganization) {
+            // 存在机构身份
             this.setDialogProps(4)
-          } else { // 不存在
+          } else {
+            // 不存在
             this.setDialogProps(0)
           }
           return
@@ -267,7 +309,8 @@ export default {
         }
       }
     },
-    async getEntListFn () { // p278移除企业切换
+    async getEntListFn() {
+      // p278移除企业切换
       const { data } = await getEntList()
       if (data) {
         this.entList = data.ents.filter((item) => {
@@ -276,14 +319,14 @@ export default {
       }
     },
     // 查询当前企业所在地区
-    async getEntRegion (entId) {
+    async getEntRegion(entId) {
       const { data } = await getMyEntInfo({ entId: entId })
       if (data) {
         this.entInfo.province = data?.province
         this.entInfo.city = data?.city
       }
     },
-    openCustomer () {
+    openCustomer() {
       this.contactCustomer(this)
       /* eslint-disable */
       // this.$nextTick(() => {
@@ -309,19 +352,19 @@ export default {
     @extend .sub-card-container;
   }
 }
-.issued-index{
+.issued-index {
   padding: 48px 0 108px;
-  .light-text{
+  .light-text {
     text-decoration: underline;
     cursor: pointer;
   }
-  .issued-nav{
+  .issued-nav {
     display: flex;
     align-items: center;
     justify-content: space-between;
     margin-bottom: 20px;
   }
-  .link-to{
+  .link-to {
     display: inline-block;
     width: 105px;
     font-size: 16px;
@@ -329,7 +372,7 @@ export default {
     text-align: center;
     line-height: 35px;
   }
-  .active-class{
+  .active-class {
     width: 108px;
     height: 36px;
     background: url('~@/assets/image/public/tooltip.png') no-repeat center;
@@ -339,17 +382,17 @@ export default {
 }
 </style>
 <style lang="scss">
-.service-info{
+.service-info {
   margin-bottom: 20px;
   padding: 14px 0;
-  background: #F7F9FC;
+  background: #f7f9fc;
   border-radius: 8px;
   font-size: 13px;
-  .service-title{
+  .service-title {
     margin-bottom: 12px;
   }
 }
-.black-text{
+.black-text {
   color: #1d1d1d;
 }
 </style>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 427 - 149
apps/jy-pc/src/views/issued/components/IssuedForm.vue


+ 61 - 47
apps/jy-pc/src/views/issued/components/IssuedTable.vue

@@ -1,9 +1,6 @@
 <template>
   <div class="table-components">
-    <el-table
-      :data="list"
-      style="width: 100%"
-    >
+    <el-table :data="list" style="width: 100%">
       <el-table-column
         class-name="base-column"
         align="center"
@@ -12,19 +9,20 @@
         label="信息类型"
       >
         <template slot-scope="scope">
-          <div>{{getMsyType(scope.row.msgType)}}</div>
+          <div>{{ getMsyType(scope.row.msgType) }}</div>
         </template>
       </el-table-column>
-      <el-table-column
-        prop="title"
-        label="信息标题"
-      >
+      <el-table-column prop="title" label="信息标题">
         <template slot-scope="scope">
-          <div class="ellipsis-2 finish-title" v-if="scope.row.reviewStatus == 2" @click="goDetail(scope.row, 'title')">
-            {{scope.row.title}}
+          <div
+            class="ellipsis-2 finish-title"
+            v-if="scope.row.reviewStatus == 2"
+            @click="goDetail(scope.row, 'title')"
+          >
+            {{ scope.row.title }}
           </div>
           <div class="ellipsis-2 base-title" v-else>
-            {{scope.row.title}}
+            {{ scope.row.title }}
           </div>
         </template>
       </el-table-column>
@@ -36,7 +34,14 @@
         label="申请日期"
       >
         <template slot-scope="scope">
-          <div>{{dateFormatter(new Date(scope.row.createTime).getTime(), 'yyyy-MM-dd')}}</div>
+          <div>
+            {{
+              dateFormatter(
+                new Date(scope.row.createTime).getTime(),
+                'yyyy-MM-dd'
+              )
+            }}
+          </div>
         </template>
       </el-table-column>
       <el-table-column
@@ -46,20 +51,29 @@
         label="申请状态"
       >
         <template slot-scope="scope">
-          <div :class="{'finish-status': scope.row.reviewStatus == 2, 'warn-status' : scope.row.reviewStatus == 3, 'wait-status': scope.row.reviewStatus == 1}">
-            {{getMsgStatus(scope.row.reviewStatus)}}
+          <div
+            :class="{
+              'finish-status': scope.row.reviewStatus == 2,
+              'warn-status': scope.row.reviewStatus == 3,
+              'wait-status': scope.row.reviewStatus == 1
+            }"
+          >
+            {{ getMsgStatus(scope.row.reviewStatus) }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column
-        width="100"
-        align="center"
-        label="操作"
-      >
+      <el-table-column width="100" align="center" label="操作">
         <template slot-scope="scope">
           <div class="table-btn-cell">
-            <el-button type="text" size="medium" @click="goDetail(scope.row, 'button')">查看</el-button>
-            <el-button type="text" size="medium" @click="deleteFn(scope.row)">删除</el-button>
+            <el-button
+              type="text"
+              size="medium"
+              @click="goDetail(scope.row, 'button')"
+              >查看</el-button
+            >
+            <el-button type="text" size="medium" @click="deleteFn(scope.row)"
+              >删除</el-button
+            >
           </div>
         </template>
       </el-table-column>
@@ -89,21 +103,21 @@ export default {
   props: {
     list: {
       type: Array,
-      default () {
+      default() {
         return []
       },
       required: true
     },
     page: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
   },
   methods: {
     dateFormatter,
-    getMsyType (type) {
+    getMsyType(type) {
       let str = ''
       switch (type) {
         case 1:
@@ -130,7 +144,7 @@ export default {
       }
       return str
     },
-    getMsgStatus (type) {
+    getMsgStatus(type) {
       let str = ''
       switch (type) {
         case 1:
@@ -145,19 +159,19 @@ export default {
       }
       return str
     },
-    handleCurrentChange (currentPage) {
+    handleCurrentChange(currentPage) {
       this.$emit('changePage', currentPage)
     },
-    onSizeChange (size) {
+    onSizeChange(size) {
       this.$emit('sizePage', size)
     },
-    goDetail (item, type) {
+    goDetail(item, type) {
       this.$emit('link', {
         item,
         type
       })
     },
-    deleteFn (data) {
+    deleteFn(data) {
       this.$emit('delete', data)
     }
   }
@@ -165,45 +179,45 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.table-components{
-  .base-title{
-    color: #1D1D1D;
+.table-components {
+  .base-title {
+    color: #1d1d1d;
   }
-  .finish-title{
+  .finish-title {
     color: $color_main;
     cursor: pointer;
   }
-  .wait-status{
+  .wait-status {
     color: $color_yellow;
   }
-  .warn-status{
+  .warn-status {
     color: $color_red;
   }
-  .finish-status{
+  .finish-status {
     color: #686868;
   }
   .tab-pagination {
     padding-top: 20px;
     text-align: right;
   }
-  ::v-deep{
-    .el-table{
-      thead{
+  ::v-deep {
+    .el-table {
+      thead {
         tr,
-        th.el-table__cell{
-          background: #F7F9FC;
+        th.el-table__cell {
+          background: #f7f9fc;
           font-size: 14px;
-          color: #1D1D1D;
+          color: #1d1d1d;
         }
       }
-      tbody{
-        .base-column{
-          .cell{
+      tbody {
+        .base-column {
+          .cell {
             color: #999;
           }
         }
       }
-      .table-btn-cell{
+      .table-btn-cell {
         white-space: nowrap;
       }
     }

+ 28 - 19
apps/jy-pc/src/views/issued/components/SwitchEnt.vue

@@ -1,8 +1,10 @@
 <template>
   <div class="switch-ent">
     <div class="ent-info">
-      <span class="ent-name">{{info.ent_name}}</span>
-      <span class="ent-status already" v-if="info.ent_auth_status > 0">已认证</span>
+      <span class="ent-name">{{ info.ent_name }}</span>
+      <span class="ent-status already" v-if="info.ent_auth_status > 0"
+        >已认证</span
+      >
       <span class="ent-status did-not" v-else>未认证</span>
     </div>
     <el-popover
@@ -11,7 +13,14 @@
       placement="bottom-end"
       trigger="click"
     >
-      <p class="p-cont" v-for="(item, index) in list" :key="index" @click="popperFn(item)">{{item.name}}</p>
+      <p
+        class="p-cont"
+        v-for="(item, index) in list"
+        :key="index"
+        @click="popperFn(item)"
+      >
+        {{ item.name }}
+      </p>
       <div slot="reference" class="switch-dom" v-show="list && list.length > 1">
         <i class="j-icon icon-switch-light"></i>
         <i class="word">切换企业</i>
@@ -26,25 +35,25 @@ export default {
   props: {
     info: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
     list: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     }
   },
   components: {},
-  data () {
+  data() {
     return {
       isPop: false
     }
   },
   methods: {
-    popperFn (data) {
+    popperFn(data) {
       this.isPop = false
       if (data.id === this.info.ent_id) {
         return
@@ -56,11 +65,11 @@ export default {
 </script>
 
 <style lang="scss">
-.com-popper{
+.com-popper {
   max-height: 300px;
   padding: 8px 0;
   overflow-y: auto;
-  .p-cont{
+  .p-cont {
     padding: 5px 16px;
     font-size: 14px;
     line-height: 22px;
@@ -70,19 +79,19 @@ export default {
 }
 </style>
 <style lang="scss" scoped>
-.switch-ent{
+.switch-ent {
   display: flex;
   align-items: center;
-  .ent-info{
+  .ent-info {
     display: flex;
     align-items: center;
     margin-right: 8px;
   }
-  .ent-name{
-    color: #1D1D1D;
+  .ent-name {
+    color: #1d1d1d;
     font-size: 20px;
   }
-  .ent-status{
+  .ent-status {
     padding: 3px 8px;
     margin-left: 8px;
     font-size: 13px;
@@ -90,25 +99,25 @@ export default {
     border: 0.5px solid transparent;
     box-sizing: border-box;
     border-radius: 14px;
-    &.already{
+    &.already {
       border-color: $color_main;
       color: $color_main;
     }
-    &.did-not{
+    &.did-not {
       border-color: $color_yellow;
       color: $color_yellow;
     }
   }
-  .switch-dom{
+  .switch-dom {
     display: flex;
     align-items: center;
     cursor: pointer;
-    .icon-switch-light{
+    .icon-switch-light {
       width: 18px;
       height: 18px;
       margin-right: 4px;
     }
-    .word{
+    .word {
       font-size: 14px;
       color: #686868;
     }

+ 40 - 26
apps/jy-pc/src/views/issued/info/InfoIssued.vue

@@ -18,9 +18,18 @@
       </div>
       <div class="step-container">
         <div class="step-first" v-if="activeStep == 1">
-          <div class="message">信息发布不定期限时免费!供应信息每个认证机构每月可发布 <em class="light-count">{{publish.total}}</em> 条(当月余额: <em class="light-count">{{publish.surplus}}</em> 条),每月1号上月余额清零重新计算;其余信息不限量!</div>
+          <div class="message">
+            信息发布不定期限时免费!供应信息每个认证机构每月可发布
+            <em class="light-count">{{ publish.total }}</em> 条(当月余额:
+            <em class="light-count">{{ publish.surplus }}</em>
+            条),每月1号上月余额清零重新计算;其余信息不限量!
+          </div>
           <div class="issued-form">
-            <IssuedForm :entInfo="entInfo" :surplus="publish.surplus" @onSubmit="onSubmitCallback"></IssuedForm>
+            <IssuedForm
+              :entInfo="entInfo"
+              :surplus="publish.surplus"
+              @onSubmit="onSubmitCallback"
+            ></IssuedForm>
           </div>
         </div>
         <div class="step-second" v-else-if="activeStep == 2">
@@ -63,7 +72,9 @@
       confirmBtnText="我知道了"
       @onConfirm="onConfirmDialogBtn"
     >
-      <div slot="content">对不起,您本月可发布信息条数已达上限,<br>如需增加条数请联系客服</div>
+      <div slot="content">
+        对不起,您本月可发布信息条数已达上限,<br />如需增加条数请联系客服
+      </div>
     </Dialog>
   </div>
 </template>
@@ -85,7 +96,7 @@ export default {
     IssuedForm,
     Dialog
   },
-  data () {
+  data() {
     return {
       stepList: [
         {
@@ -116,7 +127,7 @@ export default {
     }
   },
   computed: {
-    computedStepList () {
+    computedStepList() {
       const list = this.stepList
       list.forEach((v, i) => {
         i = i + 1
@@ -131,26 +142,29 @@ export default {
       return list
     }
   },
-  beforeRouteLeave (to, from, next) {
+  beforeRouteLeave(to, from, next) {
     window.clearInterval(this.timer)
     next()
   },
-  created () {
+  created() {
     this.getSupplySurplus()
   },
-  mounted () {
+  mounted() {
     window.openCustomer = this.openCustomer
   },
   methods: {
-    onConfirmDialogBtn () {
+    onConfirmDialogBtn() {
       this.surplusDialog = false
     },
-    checkIssuedList () {
-      openSelfLink({
-        link: '/issued/my'
-      }, true)
+    checkIssuedList() {
+      openSelfLink(
+        {
+          link: '/issued/my'
+        },
+        true
+      )
     },
-    checkIssuedDetail () {
+    checkIssuedDetail() {
       const routeData = this.$router.resolve({
         path: '/issued/detail/' + this.bid.msgId,
         query: {
@@ -159,7 +173,7 @@ export default {
       })
       openSelfLink(routeData)
     },
-    async getSupplySurplus () {
+    async getSupplySurplus() {
       // const params = {
       //   functionCode: 'xxfb_gyxx_add'
       // }
@@ -172,7 +186,7 @@ export default {
         // }
       }
     },
-    onSubmitCallback (data) {
+    onSubmitCallback(data) {
       if (data && Object.keys(data).length > 0) {
         this.bid.msgType = data.msgType
         this.bid.msgId = data.msgId
@@ -187,7 +201,7 @@ export default {
         }, 10000)
       }
     },
-    async getReviewStatus (type, id) {
+    async getReviewStatus(type, id) {
       if (this.activeStep !== 2) return
       const params = {
         type: Number(type),
@@ -201,7 +215,7 @@ export default {
         }
       }
     },
-    openCustomer () {
+    openCustomer() {
       this.contactCustomer(this)
     }
   }
@@ -209,14 +223,14 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.info-issued{
+.info-issued {
   padding: 40px;
   background: #fff;
-  .step-nav{
+  .step-nav {
     display: flex;
     align-items: center;
     justify-content: space-between;
-    .call-phone{
+    .call-phone {
       flex-shrink: 0;
       display: flex;
       flex-direction: column;
@@ -224,20 +238,20 @@ export default {
       color: #686868;
       text-align: center;
     }
-    .icon-call-phone{
+    .icon-call-phone {
       width: 16px;
       height: 16px;
       margin-right: 6px;
     }
   }
-  .step-first{
-    .message{
+  .step-first {
+    .message {
       margin-top: 24px;
       padding: 9px 24px;
-      background: #F7F9FC;
+      background: #f7f9fc;
       border-radius: 4px;
       font-size: $font-size-base;
-      .light-count{
+      .light-count {
         color: $color_red;
         font-weight: 600;
       }

+ 87 - 64
apps/jy-pc/src/views/issued/my/MyIssued.vue

@@ -1,7 +1,13 @@
 <template>
   <div class="my-issued">
     <div class="filter-nav">
-       <el-select class="filter-select" v-model="filter.selectVal" clearable placeholder="请选择信息类型" @change="changeSelect">
+      <el-select
+        class="filter-select"
+        v-model="filter.selectVal"
+        clearable
+        placeholder="请选择信息类型"
+        @change="changeSelect"
+      >
         <el-option
           v-for="item in options"
           :key="item.value"
@@ -11,9 +17,7 @@
         </el-option>
       </el-select>
       <div class="input-container">
-         <el-input
-          placeholder="请输入信息标题关键词"
-          v-model="filter.inputVal">
+        <el-input placeholder="请输入信息标题关键词" v-model="filter.inputVal">
           <i slot="suffix" class="el-input__icon j-icon icon-search-gray"></i>
         </el-input>
         <el-button type="text" size="small" @click="searchFn">搜索</el-button>
@@ -21,10 +25,22 @@
     </div>
     <div class="table-container">
       <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane :label="'全部(' + count.amount + ')'" name=" "></el-tab-pane>
-        <el-tab-pane :label="'审核通过('+ count.approved +')'" name="2"></el-tab-pane>
-        <el-tab-pane :label="'审核中(' + count.inReview + ')'" name="1"></el-tab-pane>
-        <el-tab-pane :label="'审核不通过(' + count.auditFailed + ')'" name="3"></el-tab-pane>
+        <el-tab-pane
+          :label="'全部(' + count.amount + ')'"
+          name=" "
+        ></el-tab-pane>
+        <el-tab-pane
+          :label="'审核通过(' + count.approved + ')'"
+          name="2"
+        ></el-tab-pane>
+        <el-tab-pane
+          :label="'审核中(' + count.inReview + ')'"
+          name="1"
+        ></el-tab-pane>
+        <el-tab-pane
+          :label="'审核不通过(' + count.auditFailed + ')'"
+          name="3"
+        ></el-tab-pane>
       </el-tabs>
       <TableComponent
         v-if="allData && allData.length > 0"
@@ -55,7 +71,7 @@ export default {
     TableComponent,
     Empty
   },
-  data () {
+  data() {
     return {
       options: [
         {
@@ -106,26 +122,26 @@ export default {
       }
     }
   },
-  created () {
+  created() {
     this.getList()
   },
   methods: {
-    handleClick () {
+    handleClick() {
       this.pageInfo.pageNum = 1
       this.getList()
     },
-    changeSelect (val) {
+    changeSelect(val) {
       this.pageInfo.pageNum = 1
       this.getList()
     },
-    clearSelect () {
+    clearSelect() {
       this.filter.selectVal = ''
     },
-    searchFn () {
+    searchFn() {
       this.pageInfo.pageNum = 1
       this.getList()
     },
-    async getList () {
+    async getList() {
       const params = {
         match: this.filter.inputVal,
         msgType: Number(this.filter.selectVal),
@@ -152,7 +168,7 @@ export default {
         this.count.inReview = 0
       }
     },
-    goDetailFn (data) {
+    goDetailFn(data) {
       console.log(data)
       const { item, type } = data
       if (type === 'title') {
@@ -176,44 +192,51 @@ export default {
         openSelfLink(routeData)
       }
     },
-    msgBoxConfirm (id, content, msgType) {
-      this.$messageBox.confirm(content, {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        center: true,
-        lockScroll: false,
-        showClose: false,
-        dangerouslyUseHTMLString: true,
-        customClass: 'custom-msg-box'
-      }).then(() => {
-        const params = {
-          msgId: id,
-          type: 1,
-          msgType: Number(msgType)
-        }
-        delMyPublish(params).then(res => {
-          if (res.error_code === 0) {
-            this.$toast('删除成功')
-            this.getList()
-          } else {
-            this.$toast('删除失败')
+    msgBoxConfirm(id, content, msgType) {
+      this.$messageBox
+        .confirm(content, {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          center: true,
+          lockScroll: false,
+          showClose: false,
+          dangerouslyUseHTMLString: true,
+          customClass: 'custom-msg-box'
+        })
+        .then(() => {
+          const params = {
+            msgId: id,
+            type: 1,
+            msgType: Number(msgType)
           }
+          delMyPublish(params).then((res) => {
+            if (res.error_code === 0) {
+              this.$toast('删除成功')
+              this.getList()
+            } else {
+              this.$toast('删除失败')
+            }
+          })
         })
-      }).catch(() => {})
+        .catch(() => {})
     },
-    deleteFn (item) {
+    deleteFn(item) {
       const { id, reviewStatus, msgType } = item
       if (reviewStatus === 2) {
-        this.msgBoxConfirm(id, '删除后其他用户将无法搜索到此条信息,<br>确定删除该条信息吗?', msgType)
+        this.msgBoxConfirm(
+          id,
+          '删除后其他用户将无法搜索到此条信息,<br>确定删除该条信息吗?',
+          msgType
+        )
       } else {
         this.msgBoxConfirm(id, '确定删除该条信息吗?', msgType)
       }
     },
-    changePageFn (data) {
+    changePageFn(data) {
       this.pageInfo.pageNum = data
       this.getList()
     },
-    changeSizeFn (size) {
+    changeSizeFn(size) {
       this.pageInfo.pageNum = 1
       this.pageInfo.pageSize = size
       this.getList()
@@ -223,38 +246,38 @@ export default {
 </script>
 
 <style lang="scss">
-.custom-msg-box{
+.custom-msg-box {
   width: 464px;
   padding: 32px;
   border-radius: 8px;
   box-sizing: border-box;
-  .el-message-box__header{
+  .el-message-box__header {
     display: none;
   }
-  .el-message-box__content{
+  .el-message-box__content {
     padding: 0 0 20px;
   }
-  .el-message-box__btns{
+  .el-message-box__btns {
     padding: 0;
     display: flex;
     justify-content: center;
   }
-  .el-button{
+  .el-button {
     width: 132px;
     border-radius: 6px;
     margin: 0;
     font-size: 16px;
     &.el-button--default,
     &.el-button--default:hover,
-    &.el-button--default:focus{
+    &.el-button--default:focus {
       background: transparent;
-      border: 1px solid #E0E0E0;
+      border: 1px solid #e0e0e0;
       color: #686868;
       order: 2;
     }
     &.el-button--primary,
     &.el-button--primary:hover,
-    &.el-button--primary:focus{
+    &.el-button--primary:focus {
       margin-right: 50px;
       background: $color_main;
       color: #fff;
@@ -265,45 +288,45 @@ export default {
 }
 </style>
 <style lang="scss" scoped>
-.my-issued{
+.my-issued {
   padding: 40px 40px 32px;
   background: #fff;
-  .filter-nav{
+  .filter-nav {
     display: flex;
     align-items: center;
   }
-  .table-container{
+  .table-container {
     margin-top: 30px;
   }
-  ::v-deep{
-    .filter-nav{
+  ::v-deep {
+    .filter-nav {
       .el-select,
-      .input-container{
-        .el-input__inner{
+      .input-container {
+        .el-input__inner {
           height: 36px;
           line-height: 36px;
         }
       }
-      .filter-select{
+      .filter-select {
         width: 290px;
       }
     }
-    .input-container{
+    .input-container {
       display: flex;
       align-items: center;
       margin-left: 20px;
-      & .el-input{
+      & .el-input {
         width: 320px;
       }
-      .el-button--text{
+      .el-button--text {
         margin-left: 10px;
         font-size: 14px;
       }
-      .icon-search-gray{
+      .icon-search-gray {
         width: 18px;
       }
     }
-    .el-tabs__item{
+    .el-tabs__item {
       padding: 0 20px;
       height: 48px;
       line-height: 48px;
@@ -312,7 +335,7 @@ export default {
       font-size: 16px;
       color: #686868;
     }
-    .el-tabs__header{
+    .el-tabs__header {
       margin: 0;
     }
   }

+ 148 - 90
apps/jy-pc/src/views/proposed-detail/Detail.vue

@@ -3,49 +3,101 @@
     <div class="proposed-detail">
       <div class="head">
         <div class="action-right-container" v-if="loginIn">
-        <WorkspaceButtonGroup></WorkspaceButtonGroup>
-      </div>
-        <h1 class="title" :class="{'mt-8': loginIn}">{{allData.projectname || '-'}}</h1>
+          <WorkspaceButtonGroup></WorkspaceButtonGroup>
+        </div>
+        <h1 class="title" :class="{ 'mt-8': loginIn }">
+          {{ allData.projectname || '-' }}
+        </h1>
         <div class="head-tags">
-          <div class="item" v-if="allData.area">{{allData.area}}</div>
+          <div class="item" v-if="allData.area">{{ allData.area }}</div>
           <div class="item" v-if="allData.nature">{{ allData.nature }}</div>
-          <div class="item" v-if="allData.project_stage">{{ allData.project_stage }}</div>
+          <div class="item" v-if="allData.project_stage">
+            {{ allData.project_stage }}
+          </div>
           <div class="item" v-if="allData.category">{{ allData.category }}</div>
         </div>
         <div class="time-box">
-          <span>更新时间: {{allData.lasttime ? dateFormatter(allData.lasttime,'yyyy-MM-dd') : '-'}}</span>
-          <span>发布日期: {{allData.firsttime  ? dateFormatter(allData.firsttime,'yyyy-MM-dd') : '-'}}</span>
+          <span
+            >更新时间:
+            {{
+              allData.lasttime
+                ? dateFormatter(allData.lasttime, 'yyyy-MM-dd')
+                : '-'
+            }}</span
+          >
+          <span
+            >发布日期:
+            {{
+              allData.firsttime
+                ? dateFormatter(allData.firsttime, 'yyyy-MM-dd')
+                : '-'
+            }}</span
+          >
         </div>
         <div class="desc-box" v-if="allData.generalSituation && !bigmember">
           <span class="tit">项目概况:</span>
-          <span
-            class="desc">{{allData.generalSituation}}</span>
+          <span class="desc">{{ allData.generalSituation }}</span>
         </div>
       </div>
-      <div class="img-box" v-if="!loginIn" @click="openLogin"><img src="@/assets/image/proposed/login.png" alt=""></div>
+      <div class="img-box" v-if="!loginIn" @click="openLogin">
+        <img src="@/assets/image/proposed/login.png" alt="" />
+      </div>
       <div class="content">
         <div class="content-tabs">
-          <div :class="{ 'tab': true, 'active': tab === index }" v-for="(item, index) in tabList" :key="index"
-            @click="tabClick(item, index)">{{ item.text }}</div>
+          <div
+            :class="{ tab: true, active: tab === index }"
+            v-for="(item, index) in tabList"
+            :key="index"
+            @click="tabClick(item, index)"
+          >
+            {{ item.text }}
+          </div>
         </div>
         <div class="tableBox">
-          <InformationSummary :data="allData" :loginIn="loginIn" v-if="tab === 0" @nologin="openLogin" @nopower="nopower">
+          <InformationSummary
+            :data="allData"
+            :loginIn="loginIn"
+            v-if="tab === 0"
+            @nologin="openLogin"
+            @nopower="nopower"
+          >
           </InformationSummary>
-          <projectDebriefing :list="follRecord" v-if="tab === 1" @descClick="descClick" @goDetail="goDetail"></projectDebriefing>
-          <ProjectPerson :list="contact" :loginIn="loginIn" v-if="tab === 2" @nologin="openLogin" @nopower="nopower">
+          <projectDebriefing
+            :list="follRecord"
+            v-if="tab === 1"
+            @descClick="descClick"
+            @goDetail="goDetail"
+          ></projectDebriefing>
+          <ProjectPerson
+            :list="contact"
+            :loginIn="loginIn"
+            v-if="tab === 2"
+            @nologin="openLogin"
+            @nopower="nopower"
+          >
           </ProjectPerson>
         </div>
       </div>
     </div>
-     <div v-if="!loginIn" slot="right-bottom" class="reg-position-bottom" @click="openLogin">
-      <img src="@/assets/image/proposed/bottom-login.png" alt="">
+    <div
+      v-if="!loginIn"
+      slot="right-bottom"
+      class="reg-position-bottom"
+      @click="openLogin"
+    >
+      <img src="@/assets/image/proposed/bottom-login.png" alt="" />
     </div>
-    <el-dialog custom-class="customclass"
+    <el-dialog
+      custom-class="customclass"
       :visible.sync="isVisible"
       :show-close="false"
     >
-     <Credentials @success="isVisible = false" @close="isVisible = false" v-if="isVisible"></Credentials>
-  </el-dialog>
+      <Credentials
+        @success="isVisible = false"
+        @close="isVisible = false"
+        v-if="isVisible"
+      ></Credentials>
+    </el-dialog>
   </Layout>
 </template>
 <script>
@@ -69,102 +121,110 @@ export default {
     Credentials,
     WorkspaceButtonGroup
   },
-  data () {
+  data() {
     return {
       isVisible: false,
       loading: false,
       loginIn: false,
       tab: 0,
-      tabList: [{ text: '项目概况' }, { text: '项目进展' }, { text: '项目联系人' }, { text: '' }],
+      tabList: [
+        { text: '项目概况' },
+        { text: '项目进展' },
+        { text: '项目联系人' },
+        { text: '' }
+      ],
       pid: '',
       allData: {},
       follRecord: [],
       contact: []
     }
   },
-  created () {
+  created() {
     this.getUserInfo()
     this.getLoginStatusEvent()
     this.initdata()
   },
-  mounted () {
-  },
-  destroyed () {
-  },
+  mounted() {},
+  destroyed() {},
   computed: {
-    ...mapGetters('user', [
-      'bigmember'
-    ])
+    ...mapGetters('user', ['bigmember'])
   },
   methods: {
-    ...mapActions('user', [
-      'getUserInfo'
-    ]),
+    ...mapActions('user', ['getUserInfo']),
     dateFromNow,
     dateFormatter,
-    tabClick (item, index) {
+    tabClick(item, index) {
       if (!item.text) {
         return
       }
       this.tab = index
     },
-    initdata () {
+    initdata() {
       this.pid = this.$route.query.pid
-      details({ pid: this.pid }).then(res => {
+      details({ pid: this.pid }).then((res) => {
         if (res.data) {
           this.allData = res.data
           this.contact = this.allData.contact || []
           this.follRecord = this.allData.follRecord || []
           try {
-            document.title = this.allData.projectname ? `${this.allData.projectname} - 剑鱼标讯` : '拟在建详情'
+            document.title = this.allData.projectname
+              ? `${this.allData.projectname} - 剑鱼标讯`
+              : '拟在建详情'
             if (this.allData.projectname) {
-              document.querySelector('meta[name="keywords"]').setAttribute('content', this.allData.projectname)
+              document
+                .querySelector('meta[name="keywords"]')
+                .setAttribute('content', this.allData.projectname)
             } else {
-              document.querySelector('meta[name="keywords"]').setAttribute('content', '拟在建详情')
+              document
+                .querySelector('meta[name="keywords"]')
+                .setAttribute('content', '拟在建详情')
             }
             if (this.allData.generalSituation) {
-              document.querySelector('meta[name="description"]').setAttribute('content', this.allData.generalSituation)
+              document
+                .querySelector('meta[name="description"]')
+                .setAttribute('content', this.allData.generalSituation)
             } else {
-              document.querySelector('meta[name="description"]').setAttribute('content', '拟在建详情')
+              document
+                .querySelector('meta[name="description"]')
+                .setAttribute('content', '拟在建详情')
             }
-          } catch (e) {
-          }
+          } catch (e) {}
         }
       })
     },
-    async getLoginStatusEvent () {
+    async getLoginStatusEvent() {
       const { result } = await getLoginStatus()
       if (result === 'ok') {
         this.loginIn = true
       }
     },
-    descClick () {
+    descClick() {
       if (this.loginIn && !this.bigmember) {
         this.isVisible = true
       }
     },
-    goDetail (item) {
+    goDetail(item) {
       if (this.loginIn && !this.bigmember) {
         this.isVisible = true
       } else if (this.loginIn && this.bigmember) {
         window.open(item.jybxhref)
       }
     },
-    openLogin () {
+    openLogin() {
       try {
         window.openLoginDig(false, 'reload')
       } catch (error) {
         console.log(error)
       }
     },
-    nopower () {
+    nopower() {
       this.isVisible = true
     }
   }
 }
 </script>
 <style lang="scss" scoped>
-.mt-8{
+.mt-8 {
   margin-top: 8px;
 }
 .proposed-detail {
@@ -197,8 +257,8 @@ export default {
         display: flex;
         justify-content: center;
         align-items: center;
-        background-color: #F5F5FB;
-        border: 1px solid #ECECEC;
+        background-color: #f5f5fb;
+        border: 1px solid #ececec;
         color: #686868;
         font-weight: 400;
         line-height: 18px;
@@ -231,20 +291,19 @@ export default {
       box-sizing: border-box;
       margin: auto;
       margin-top: 20px;
-      background: linear-gradient(180deg, #E8FFFF 0%, #FFFFFF 100%);
-      border: 1px solid #2ABED1;
+      background: linear-gradient(180deg, #e8ffff 0%, #ffffff 100%);
+      border: 1px solid #2abed1;
       font-size: 13px;
       line-height: 20px;
       border-radius: 8px;
 
       .tit {
-        color: #1D1D1D;
+        color: #1d1d1d;
       }
 
       .desc {
         color: #686868;
       }
-
     }
   }
 
@@ -272,11 +331,11 @@ export default {
         display: flex;
         justify-content: center;
         align-items: center;
-        border-bottom: 1px solid #EBEBEB;
-        border-right: 1px solid #EBEBEB;
+        border-bottom: 1px solid #ebebeb;
+        border-right: 1px solid #ebebeb;
         font-size: 16px;
         font-weight: 400;
-        color: #1D1D1D;
+        color: #1d1d1d;
         cursor: pointer;
       }
 
@@ -286,8 +345,8 @@ export default {
 
       .active {
         border-bottom: none;
-        color: #2CB7CA;
-        border-top: 3px solid #2CB7CA;
+        color: #2cb7ca;
+        border-top: 3px solid #2cb7ca;
       }
     }
 
@@ -297,42 +356,41 @@ export default {
     }
   }
 }
-::v-deep{
+::v-deep {
   .customclass {
-  background-color: rgba(0, 0, 0, 0);
-  box-shadow:none;
-  width: 800px;
-  margin-top: 5vh !important;
-  .el-dialog__header{
-    padding: 0;
-  }
-  .el-dialog__body{
+    background-color: rgba(0, 0, 0, 0);
+    box-shadow: none;
     width: 800px;
-    padding: 0;
+    margin-top: 5vh !important;
+    .el-dialog__header {
+      padding: 0;
+    }
+    .el-dialog__body {
+      width: 800px;
+      padding: 0;
+    }
   }
-
-}
 }
-.reg-position-bottom{
-    position: fixed;
-    bottom: 0;
-    left:0;
-    width: 100%;
-    cursor: pointer;
-    margin-left: 0;
-    z-index: 9;
-    display: flex;
-    justify-content: center;
-    &>img{
-      min-width: 1920px;
-      display: block;
-      object-fit: contain;
-    }
+.reg-position-bottom {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  cursor: pointer;
+  margin-left: 0;
+  z-index: 9;
+  display: flex;
+  justify-content: center;
+  & > img {
+    min-width: 1920px;
+    display: block;
+    object-fit: contain;
   }
-  .demand-detail{
+}
+.demand-detail {
   width: 100%;
-  ::v-deep{
-    .content-main{
+  ::v-deep {
+    .content-main {
       display: flex;
       flex-direction: column;
       align-items: center;

+ 315 - 172
apps/jy-pc/src/views/proposed-detail/components/Credentials.vue

@@ -3,50 +3,104 @@
     <div id="Credentials">
       <div class="container_ clearfix">
         <div class="left_Credentials">
-          <img src="@/assets/image/proposed/left-content.jpg" alt="">
+          <img src="@/assets/image/proposed/left-content.jpg" alt="" />
         </div>
         <div class="right_Credentials">
           <div class="back_color">
             <div class="bg_box"></div>
             <div class="right_box">
               <i class="el-icon-close close-icon" @click="$emit('close')"></i>
-              <img src="@/assets/image/proposed/title.png" alt="" class="title_img">
+              <img
+                src="@/assets/image/proposed/title.png"
+                alt=""
+                class="title_img"
+              />
               <p class="cred_desc">方式1:扫描二维码获得专属客户服务</p>
               <div class="qr_box">
-                <img src="https://cdn-ali2.jianyu360.com/brand/img/kefuQR.png" alt="" class="qr_img">
-                <p class="cred_desc">方式2:请填写以下表单,服务专员会尽快与您联系</p>
+                <img
+                  src="https://cdn-ali2.jianyu360.com/brand/img/kefuQR.png"
+                  alt=""
+                  class="qr_img"
+                />
+                <p class="cred_desc">
+                  方式2:请填写以下表单,服务专员会尽快与您联系
+                </p>
               </div>
               <div class="from_box">
-                <el-form class="user-form" :model="form" :rules="rules" ref="ruleForm">
+                <el-form
+                  class="user-form"
+                  :model="form"
+                  :rules="rules"
+                  ref="ruleForm"
+                >
                   <div class="basic clearfix">
                     <!-- <div class="form-title">基本信息</div> -->
                     <div class="form-main clearfix">
                       <div class="short-control">
                         <el-form-item label="姓名 :" prop="name">
-                          <el-input v-model.trim="form.name" class="data-short-input item-input" placeholder="请输入姓名"
-                            @focus="nameFocus" required>
+                          <el-input
+                            v-model.trim="form.name"
+                            class="data-short-input item-input"
+                            placeholder="请输入姓名"
+                            @focus="nameFocus"
+                            required
+                          >
                           </el-input>
-                          <span class="item-error" slot='error' slot-scope="scope">
-                            <i class="el-icon-error" style="margin-right:2px;"></i><span>{{ scope.error }}</span>
+                          <span
+                            class="item-error"
+                            slot="error"
+                            slot-scope="scope"
+                          >
+                            <i
+                              class="el-icon-error"
+                              style="margin-right: 2px"
+                            ></i
+                            ><span>{{ scope.error }}</span>
                           </span>
                         </el-form-item>
                       </div>
                       <div class="short-control">
                         <el-form-item label="手机号 :" prop="phone">
-                          <el-input v-model.trim="form.phone" maxlength="11" @input="inputPhone"
-                            class="data-short-input item-input" placeholder="请输入手机号" @focus="phoneFocus">
+                          <el-input
+                            v-model.trim="form.phone"
+                            maxlength="11"
+                            @input="inputPhone"
+                            class="data-short-input item-input"
+                            placeholder="请输入手机号"
+                            @focus="phoneFocus"
+                          >
                           </el-input>
-                          <span class="item-error" slot='error' slot-scope="scope">
-                            <i class="el-icon-error" style="margin-right:2px;"></i><span>{{ scope.error }}</span>
+                          <span
+                            class="item-error"
+                            slot="error"
+                            slot-scope="scope"
+                          >
+                            <i
+                              class="el-icon-error"
+                              style="margin-right: 2px"
+                            ></i
+                            ><span>{{ scope.error }}</span>
                           </span>
                         </el-form-item>
                       </div>
                       <div class="short-control">
                         <el-form-item label="邮箱 :" prop="mail">
-                          <el-input v-model.trim="form.mail" class="data-short-input item-input" placeholder="请输入邮箱"
-                            @focus="mailFocus"></el-input>
-                          <span class="item-error" slot='error' slot-scope="scope">
-                            <i class="el-icon-error" style="margin-right:2px;"></i><span>{{ scope.error }}</span>
+                          <el-input
+                            v-model.trim="form.mail"
+                            class="data-short-input item-input"
+                            placeholder="请输入邮箱"
+                            @focus="mailFocus"
+                          ></el-input>
+                          <span
+                            class="item-error"
+                            slot="error"
+                            slot-scope="scope"
+                          >
+                            <i
+                              class="el-icon-error"
+                              style="margin-right: 2px"
+                            ></i
+                            ><span>{{ scope.error }}</span>
                           </span>
                         </el-form-item>
                       </div>
@@ -55,38 +109,90 @@
                   <div class="company clearfix">
                     <!-- <div class="form-title">公司信息</div> -->
                     <div class="form-main">
-                      <div class="short-control company_class" style="position: relative;">
+                      <div
+                        class="short-control company_class"
+                        style="position: relative"
+                      >
                         <el-form-item label="公司名称 :" prop="companyName">
-                          <el-input v-model.trim="form.companyName" class="data-long-input item-input company-name"
-                            @focus="companyFocus" @blur="companyblur" @input="searchCompany" placeholder="请输入准确的公司名称">
+                          <el-input
+                            v-model.trim="form.companyName"
+                            class="data-long-input item-input company-name"
+                            @focus="companyFocus"
+                            @blur="companyblur"
+                            @input="searchCompany"
+                            placeholder="请输入准确的公司名称"
+                          >
                           </el-input>
-                          <span class="item-error" slot='error' slot-scope="scope">
-                            <i class="el-icon-error" style="margin-right:2px;"></i><span>{{ scope.error }}</span>
+                          <span
+                            class="item-error"
+                            slot="error"
+                            slot-scope="scope"
+                          >
+                            <i
+                              class="el-icon-error"
+                              style="margin-right: 2px"
+                            ></i
+                            ><span>{{ scope.error }}</span>
                           </span>
                         </el-form-item>
-                        <div class="company-result company_class" v-show="showSearchResult">
-                          <div class="company-list" v-for="item in companyList" :key="item" @click="selectCompany(item)"
-                            v-html="item"></div>
+                        <div
+                          class="company-result company_class"
+                          v-show="showSearchResult"
+                        >
+                          <div
+                            class="company-list"
+                            v-for="item in companyList"
+                            :key="item"
+                            @click="selectCompany(item)"
+                            v-html="item"
+                          ></div>
                         </div>
                       </div>
                       <div class="short-control">
                         <el-form-item label="职位 :" prop="job">
-                          <el-select popper-class="Credentials-custom-select" v-model="form.job" placeholder="请选择职位名称"
+                          <el-select
+                            popper-class="Credentials-custom-select"
+                            v-model="form.job"
+                            placeholder="请选择职位名称"
                             @change="changeBranch"
-                            class="data-short-input item-input job-input" clearable>
-                            <el-option v-for="item in jobData" :key="item.value" :label="item.label"
-                              :value="item.value">
+                            class="data-short-input item-input job-input"
+                            clearable
+                          >
+                            <el-option
+                              v-for="item in jobData"
+                              :key="item.value"
+                              :label="item.label"
+                              :value="item.value"
+                            >
                             </el-option>
                           </el-select>
-                          <span class="item-error" slot='error' slot-scope="scope">
-                            <i class="el-icon-error" style="margin-right:2px;"></i><span>{{ scope.error }}</span>
+                          <span
+                            class="item-error"
+                            slot="error"
+                            slot-scope="scope"
+                          >
+                            <i
+                              class="el-icon-error"
+                              style="margin-right: 2px"
+                            ></i
+                            ><span>{{ scope.error }}</span>
                           </span>
                           <div class="next_box">
-                            <el-select style="margin-left:88px; margin-top: 13px;" v-if="showBranch"
-                              popper-class="Credentials-custom-select" v-model="form.branch" placeholder="请选择部门"
-                              class="data-short-input item-input job-input" clearable>
-                              <el-option v-for="item in branchData" :key="item.value" :label="item.label"
-                                :value="item.value">
+                            <el-select
+                              style="margin-left: 88px; margin-top: 13px"
+                              v-if="showBranch"
+                              popper-class="Credentials-custom-select"
+                              v-model="form.branch"
+                              placeholder="请选择部门"
+                              class="data-short-input item-input job-input"
+                              clearable
+                            >
+                              <el-option
+                                v-for="item in branchData"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                              >
                               </el-option>
                             </el-select>
                           </div>
@@ -95,7 +201,12 @@
                     </div>
                   </div>
                   <div class="dialog-footer">
-                    <el-button class="submit-btn" @click="submitForm('ruleForm')" :loading="btnLoading">立即提交</el-button>
+                    <el-button
+                      class="submit-btn"
+                      @click="submitForm('ruleForm')"
+                      :loading="btnLoading"
+                      >立即提交</el-button
+                    >
                   </div>
                 </el-form>
               </div>
@@ -105,20 +216,22 @@
       </div>
     </div>
   </div>
-
 </template>
 <script>
 import { jobJson, branchJson } from '@/assets/js/selector.js'
 import { debounce } from '@/utils/'
-import { domainUserauthinfo, domainUsersave, association } from '@/api/modules/proposed.js'
+import {
+  domainUserauthinfo,
+  domainUsersave,
+  association
+} from '@/api/modules/proposed.js'
 
 export default {
   name: 'Credentials',
-  components: {
-  },
+  components: {},
   props: {},
-  data () {
-    var validName = (rule, value, callback) => {
+  data() {
+    let validName = (rule, value, callback) => {
       if (value === '') {
         return callback(new Error('姓名为必填项'))
       } else {
@@ -128,8 +241,8 @@ export default {
         callback()
       }
     }
-    var validPhone = (rule, value, callback) => {
-      var status = /^1[3456789]\d{9}$/.test(value)
+    let validPhone = (rule, value, callback) => {
+      let status = /^1[3456789]\d{9}$/.test(value)
       if (value === '') {
         return callback(new Error('手机号为必填项'))
       } else if (!status) {
@@ -138,8 +251,8 @@ export default {
         callback()
       }
     }
-    var validEmail = (rule, value, callback) => {
-      var status = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)
+    let validEmail = (rule, value, callback) => {
+      let status = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)
       if (value === '') {
         return callback(new Error('邮箱为必填项'))
       } else {
@@ -150,7 +263,7 @@ export default {
         }
       }
     }
-    var validCompany = (rule, value, callback) => {
+    let validCompany = (rule, value, callback) => {
       if (value === '') {
         return callback(new Error('公司名称为必填项'))
       } else {
@@ -161,11 +274,15 @@ export default {
         }
       }
     }
-    var validJob = (rule, value, callback) => {
+    let validJob = (rule, value, callback) => {
       if (value === '') {
         return callback(new Error('职位不能为空'))
       } else {
-        if ((value.indexOf('总裁') === -1 || value.indexOf('总经理') === -1) && this.showBranch && !this.form.branch) {
+        if (
+          (value.indexOf('总裁') === -1 || value.indexOf('总经理') === -1) &&
+          this.showBranch &&
+          !this.form.branch
+        ) {
           return callback(new Error('部门不能为空'))
         } else {
           callback()
@@ -182,34 +299,44 @@ export default {
         mail: '', // 邮箱
         companyName: '', // 公司名称
         job: '', // 职位值
-        branch: ''// 部门
+        branch: '' // 部门
       },
       rules: {
-        name: [{
-          required: true,
-          validator: validName,
-          trigger: 'blur'
-        }],
-        phone: [{
-          required: true,
-          validator: validPhone,
-          trigger: 'blur'
-        }],
-        mail: [{
-          required: true,
-          validator: validEmail,
-          trigger: 'blur'
-        }],
-        companyName: [{
-          required: true,
-          validator: validCompany,
-          trigger: 'blur'
-        }],
-
-        job: [{
-          required: true,
-          validator: validJob
-        }]
+        name: [
+          {
+            required: true,
+            validator: validName,
+            trigger: 'blur'
+          }
+        ],
+        phone: [
+          {
+            required: true,
+            validator: validPhone,
+            trigger: 'blur'
+          }
+        ],
+        mail: [
+          {
+            required: true,
+            validator: validEmail,
+            trigger: 'blur'
+          }
+        ],
+        companyName: [
+          {
+            required: true,
+            validator: validCompany,
+            trigger: 'blur'
+          }
+        ],
+
+        job: [
+          {
+            required: true,
+            validator: validJob
+          }
+        ]
       },
       showSearchResult: false, // 公司选择框显隐
       companyList: [],
@@ -219,7 +346,7 @@ export default {
       list_choose: false
     }
   },
-  created () {
+  created() {
     this.jobData = jobJson.map((item) => {
       return {
         value: item,
@@ -233,15 +360,14 @@ export default {
       }
     })
   },
-  mounted () {
+  mounted() {
     this.getOldInfo()
   },
   filters: {},
   computed: {
-
     showBranch: function () {
-      var zc = this.form.job.indexOf('总裁') > -1
-      var zjl = this.form.job.indexOf('总经理') > -1
+      let zc = this.form.job.indexOf('总裁') > -1
+      let zjl = this.form.job.indexOf('总经理') > -1
       return !(zc || zjl) && this.form.job
     }
   },
@@ -250,14 +376,18 @@ export default {
     /**
      * 迁移计算属性中赋值操作
      */
-    changeBranch () {
+    changeBranch() {
       // 切换到总裁或总经理之后 把之前选择的部门清空
-      if (this.form.job.indexOf('总裁') > -1 || this.form.job.indexOf('总经理') > -1) {
+      if (
+        this.form.job.indexOf('总裁') > -1 ||
+        this.form.job.indexOf('总经理') > -1
+      ) {
         this.form.branch = ''
       }
     },
-    submitForm (formName) { // 提交
-      var _this = this
+    submitForm(formName) {
+      // 提交
+      let _this = this
       this.$refs[formName].validate(function (valid) {
         if (valid) {
           _this.formAjax(_this.source)
@@ -269,27 +399,35 @@ export default {
       })
     },
     // 查询表单回显信息
-    getOldInfo () {
+    getOldInfo() {
       this.loading = true
-      domainUserauthinfo({ source: this.source }).then(res => {
-        this.loading = false
-        if (res.info) {
-          this.form.name = res.info.name || ''//  name  姓名
-          this.form.phone = res.info.phone || ''// phone 手机号
-          this.form.mail = res.info.email || ''// mail 邮箱
-          this.form.job = res.info.job || ''// job 职位值
-          this.form.branch = res.info.department || ''// branch 部门
-          this.form.companyName = res.info.company || ''// companyName公司名称
-        }
-        if (res.info.name && res.info.phone && res.info.email && res.info.job && res.info.company) {
-          this.$toast('您已留资,客户经理将在2个工作日内联系您,如有变动,请修改后继续提交。')
-        }
-      }).catch(err_ => {
-
-      })
+      domainUserauthinfo({ source: this.source })
+        .then((res) => {
+          this.loading = false
+          if (res.info) {
+            this.form.name = res.info.name || '' //  name  姓名
+            this.form.phone = res.info.phone || '' // phone 手机号
+            this.form.mail = res.info.email || '' // mail 邮箱
+            this.form.job = res.info.job || '' // job 职位值
+            this.form.branch = res.info.department || '' // branch 部门
+            this.form.companyName = res.info.company || '' // companyName公司名称
+          }
+          if (
+            res.info.name &&
+            res.info.phone &&
+            res.info.email &&
+            res.info.job &&
+            res.info.company
+          ) {
+            this.$toast(
+              '您已留资,客户经理将在2个工作日内联系您,如有变动,请修改后继续提交。'
+            )
+          }
+        })
+        .catch((err_) => {})
     },
     // 表单提交请求
-    formAjax (source) {
+    formAjax(source) {
       this.btnLoading = true
       const params = {
         name: this.form.name,
@@ -297,36 +435,44 @@ export default {
         email: this.form.mail,
         company: this.form.companyName, // 公司名称
         job: this.form.job, // 职级
-        department: this.form.job.indexOf('总裁') > -1 || this.form.job.indexOf('总经理') > -1 ? '' : this.form.branch, // 部门
+        department:
+          this.form.job.indexOf('总裁') > -1 ||
+          this.form.job.indexOf('总经理') > -1
+            ? ''
+            : this.form.branch, // 部门
         source: source
       }
-      domainUsersave(params).then(res => {
-        this.btnLoading = false
-        if (res.data) {
-          this.$emit('success')
-          this.$toast('您已留资,客户经理将在2个工作日内联系您,如有变动,请修改后继续提交。')
-        } else {
-          this.$toast(res.error_msg)
-        }
-      }).catch(err_ => {
-        this.$toast(err_)
-        this.btnLoading = false
-      })
+      domainUsersave(params)
+        .then((res) => {
+          this.btnLoading = false
+          if (res.data) {
+            this.$emit('success')
+            this.$toast(
+              '您已留资,客户经理将在2个工作日内联系您,如有变动,请修改后继续提交。'
+            )
+          } else {
+            this.$toast(res.error_msg)
+          }
+        })
+        .catch((err_) => {
+          this.$toast(err_)
+          this.btnLoading = false
+        })
     },
     // 公司名称联想
-    getResult (name) {
+    getResult(name) {
       // 名称为空或长度小于2不发请求
       if (!name || name.length < 2) {
         this.showSearchResult = false
         return
       }
-      var _this = this
+      let _this = this
       association({
         name: name,
         companyCount: 10
-      }).then(res => {
+      }).then((res) => {
         if (res.data && res.data.length > 0) {
-          var result = []
+          let result = []
           res.data.map(function (item) {
             item = _this.brightKeyword(item)
             result.push(item)
@@ -348,38 +494,38 @@ export default {
       this.getResult(val)
     }, 400),
     // 选择联想出来的公司名称
-    selectCompany (item) {
+    selectCompany(item) {
       this.list_choose = true
-      this.form.companyName = item.replace(/<.*?>/ig, '')
+      this.form.companyName = item.replace(/<.*?>/gi, '')
       this.showSearchResult = false
     },
     // 关键词高亮
-    brightKeyword (val) {
-      var name = this.form.companyName
+    brightKeyword(val) {
+      let name = this.form.companyName
       if (val.indexOf(name) !== -1) {
         return val.replace(name, `<font style='color:#2ABED1;'>${name}</font>`)
       } else {
         return val
       }
     },
-    inputPhone (val) {
+    inputPhone(val) {
       this.form.phone = val.replace(/[^\d]/g, '')
     },
-    nameFocus () {
+    nameFocus() {
       this.$refs.ruleForm.clearValidate(['name'])
     },
-    phoneFocus () {
+    phoneFocus() {
       this.$refs.ruleForm.clearValidate(['phone'])
     },
-    mailFocus () {
+    mailFocus() {
       this.$refs.ruleForm.clearValidate(['mail'])
     },
     // 公司名称获取焦点时
-    companyFocus () {
+    companyFocus() {
       this.$refs.ruleForm.clearValidate(['companyName'])
       this.list_choose = true
     },
-    companyblur () {
+    companyblur() {
       setTimeout(() => {
         if (!this.list_choose) {
           this.form.companyName = ''
@@ -387,10 +533,9 @@ export default {
         }
       }, 100)
     },
-    otherFocus () {
+    otherFocus() {
       this.$refs.ruleForm.clearValidate(['job'])
     }
-
   }
 }
 </script>
@@ -411,7 +556,7 @@ export default {
         width: 400px;
         height: 680px;
         margin: auto;
-        border-radius: 8px 0px 0px 8px ;
+        border-radius: 8px 0px 0px 8px;
       }
     }
 
@@ -426,7 +571,8 @@ export default {
         width: 100%;
         height: 100%;
         border-radius: 8px;
-        background: url('~@/assets/image/proposed/Rectangle 1160 (1).png') center center no-repeat;
+        background: url('~@/assets/image/proposed/Rectangle 1160 (1).png')
+          center center no-repeat;
         position: relative;
       }
 
@@ -438,7 +584,7 @@ export default {
         padding-top: 30px;
         position: relative;
         margin: auto;
-        .close-icon{
+        .close-icon {
           font-size: 18px;
           color: #999;
           position: absolute;
@@ -485,7 +631,6 @@ export default {
         .from_box {
           padding-left: 24px;
         }
-
       }
 
       .bg_box {
@@ -498,7 +643,6 @@ export default {
         position: absolute;
         top: 108px;
         left: 0;
-
       }
     }
 
@@ -514,7 +658,7 @@ export default {
   }
 
   .item-error {
-    color: #F56C6C;
+    color: #f56c6c;
     font-size: 12px;
     line-height: 1;
     position: absolute;
@@ -529,8 +673,8 @@ export default {
       white-space: nowrap;
     }
 
-    .company-type>.el-form-item__label,
-    .company-type>.el-form-item__content {
+    .company-type > .el-form-item__label,
+    .company-type > .el-form-item__content {
       line-height: 22px;
     }
 
@@ -558,7 +702,7 @@ export default {
     }
 
     .el-checkbox__input.is-focus {
-      border-color: #2CB7CA;
+      border-color: #2cb7ca;
     }
 
     .el-checkbox {
@@ -567,34 +711,34 @@ export default {
 
     .el-checkbox__label {
       padding-left: 3px;
-      color: #1D1D1D;
+      color: #1d1d1d;
     }
 
-    .el-checkbox__input.is-checked+.el-checkbox__label {
-      color: #1D1D1D;
+    .el-checkbox__input.is-checked + .el-checkbox__label {
+      color: #1d1d1d;
     }
 
     .el-checkbox__input.is-checked .el-checkbox__inner,
     .el-checkbox__input.is-indeterminate .el-checkbox__inner {
-      background-color: #2CB7CA;
-      border-color: #2CB7CA;
+      background-color: #2cb7ca;
+      border-color: #2cb7ca;
     }
 
     .el-checkbox__inner:hover {
-      border-color: #DCDFE6;
+      border-color: #dcdfe6;
     }
 
     .el-cascader-node.in-active-path,
     .el-cascader-node.is-active,
     .el-cascader-node.is-selectable.in-checked-path,
     .el-select-dropdown__item.selected {
-      color: #2CB7CA;
+      color: #2cb7ca;
     }
 
     .cancel-btn:focus,
     .cancel-btn:hover {
-      background: #FFF;
-      border: 1px solid #DCDFE6;
+      background: #fff;
+      border: 1px solid #dcdfe6;
       color: #606266;
     }
 
@@ -608,17 +752,17 @@ export default {
 
     .el-input.is-active .el-input__inner,
     .el-input__inner:focus {
-      border-color: #2CB7CA;
+      border-color: #2cb7ca;
     }
 
     .el-select .el-input.is-focus .el-input__inner,
     .el-select .el-input__inner:focus {
-      border-color: #2CB7CA;
+      border-color: #2cb7ca;
     }
 
     .el-cascader .el-input .el-input__inner:focus,
     .el-cascader .el-input.is-focus .el-input__inner {
-      border-color: #2CB7CA;
+      border-color: #2cb7ca;
     }
 
     li.el-cascader-node,
@@ -645,7 +789,7 @@ export default {
     left: 0;
     top: 0;
     bottom: 0;
-    background: rgba(0, 0, 0, .5);
+    background: rgba(0, 0, 0, 0.5);
     z-index: 1031;
   }
 
@@ -691,7 +835,7 @@ export default {
   }
 
   .dialog-header {
-    color: #1D1D1D;
+    color: #1d1d1d;
     font-size: 16px;
     line-height: 28px;
     text-align: center;
@@ -712,7 +856,7 @@ export default {
   .form-title {
     font-size: 16px;
     line-height: 22px;
-    color: #2CB7CA;
+    color: #2cb7ca;
   }
 
   .form-main {
@@ -738,7 +882,7 @@ export default {
     left: 88px;
     max-height: 152px;
     background-color: #fff;
-    border: 1px solid #2CB7CA;
+    border: 1px solid #2cb7ca;
     z-index: 100;
     // border-radius: 4px;
     overflow-y: auto;
@@ -746,12 +890,12 @@ export default {
 
   .company_class ::-webkit-scrollbar-track-piece {
     background-color: #fff;
-    -webkit-border-radius: 0
+    -webkit-border-radius: 0;
   }
 
   .company_class::-webkit-scrollbar {
     width: 8px;
-    height: 10px
+    height: 10px;
   }
 
   .company_class ::-webkit-scrollbar-thumb {
@@ -764,7 +908,7 @@ export default {
     filter: alpha(opacity=50);
     -moz-opacity: 0.5;
     -khtml-opacity: 0.5;
-    opacity: 0.5
+    opacity: 0.5;
   }
 
   .company-list {
@@ -772,7 +916,7 @@ export default {
     height: 30px;
     line-height: 30px;
     font-size: 14px;
-    color: #1D1D1D;
+    color: #1d1d1d;
     cursor: pointer;
     text-overflow: ellipsis;
     overflow: hidden;
@@ -780,7 +924,7 @@ export default {
   }
 
   .company-list:hover {
-    background: #ECECEC;
+    background: #ececec;
   }
 
   .data-short-input {
@@ -802,7 +946,7 @@ export default {
   }
 
   .agree-service .el-checkbox__label,
-  .agree-service .el-checkbox__input.is-checked+.el-checkbox__label {
+  .agree-service .el-checkbox__input.is-checked + .el-checkbox__label {
     color: #686868;
   }
 
@@ -826,9 +970,9 @@ export default {
     padding: 0;
     color: #fff;
     line-height: 46px;
-    background: #2CB7CA;
+    background: #2cb7ca;
     border-radius: 6px;
-    border: 1px solid #2CB7CA;
+    border: 1px solid #2cb7ca;
     font-size: 16px;
     // margin-left: 90px;
     // margin-top: 2px;
@@ -853,8 +997,8 @@ export default {
 
   .submit-btn:hover {
     color: #fff;
-    border-color: #2CB7CA;
-    background: #2CB7CA;
+    border-color: #2cb7ca;
+    background: #2cb7ca;
   }
 
   .success-dialog-container {
@@ -908,12 +1052,11 @@ export default {
     opacity: 0.5;
     cursor: not-allowed;
   }
-
 }
 
 .Credentials-custom-select {
   margin-top: 0px !important;
-  border: 1px solid #2CB7CA;
+  border: 1px solid #2cb7ca;
   border-radius: 2px;
 
   .el-select-dropdown__wrap {
@@ -924,16 +1067,16 @@ export default {
     display: none;
   }
 
-  .el-popper[x-placement^=bottom] {
+  .el-popper[x-placement^='bottom'] {
     margin-top: 0;
   }
 
-  .el-popper[x-placement^=bottom] .popper__arrow {
+  .el-popper[x-placement^='bottom'] .popper__arrow {
     display: none;
   }
 
   .el-select-dropdown__item.selected {
-    color: #2CB7CA !important;
+    color: #2cb7ca !important;
   }
 }
 </style>

+ 53 - 33
apps/jy-pc/src/views/proposed-detail/components/InformationSummary.vue

@@ -16,7 +16,7 @@
     </div>
     <div class="d-c-b-item">
       <div class="d-item-label">项目性质</div>
-      <div class="d-item-value">{{ data.nature ||  '-' }}</div>
+      <div class="d-item-value">{{ data.nature || '-' }}</div>
     </div>
     <div class="d-c-b-item-long">
       <div class="d-item-label">工程类型</div>
@@ -24,9 +24,25 @@
     </div>
     <div class="d-c-b-item">
       <div class="d-item-label">业主名称</div>
-      <div class="d-item-value" v-if="loginIn && bigmember">{{ data.owner || '-' }}</div>
-      <div class="d-item-value" style="color: #2ABED1;cursor: pointer;" @click="openLogin('nopower')" v-else-if="loginIn && !bigmember">付费展示</div>
-      <div class="d-item-value" style="color: #2ABED1;cursor: pointer;" @click="openLogin('nologin')" v-else>登录后解锁会员查看</div>
+      <div class="d-item-value" v-if="loginIn && bigmember">
+        {{ data.owner || '-' }}
+      </div>
+      <div
+        class="d-item-value"
+        style="color: #2abed1; cursor: pointer"
+        @click="openLogin('nopower')"
+        v-else-if="loginIn && !bigmember"
+      >
+        付费展示
+      </div>
+      <div
+        class="d-item-value"
+        style="color: #2abed1; cursor: pointer"
+        @click="openLogin('nologin')"
+        v-else
+      >
+        登录后解锁会员查看
+      </div>
     </div>
     <div class="d-c-b-item">
       <div class="d-item-label">业主类型</div>
@@ -34,15 +50,29 @@
     </div>
     <div class="d-c-b-item">
       <div class="d-item-label">项目投资</div>
-      <div class="d-item-value">{{ data.total_investment ? data.total_investment + '万' : '-' }}</div>
+      <div class="d-item-value">
+        {{ data.total_investment ? data.total_investment + '万' : '-' }}
+      </div>
     </div>
     <div class="d-c-b-item-sort">
       <div class="d-item-label">开工时间</div>
-      <div class="d-item-value">{{ data.project_startdate  ? dateFormatter(data.project_startdate,'yyyy年MM月') : '-' }}</div>
+      <div class="d-item-value">
+        {{
+          data.project_startdate
+            ? dateFormatter(data.project_startdate, 'yyyy年MM月')
+            : '-'
+        }}
+      </div>
     </div>
     <div class="d-c-b-item-sort">
       <div class="d-item-label">竣工时间</div>
-      <div class="d-item-value">{{ data.project_completedate ? dateFormatter(data.project_completedate,'yyyy年MM月') : '-' }}</div>
+      <div class="d-item-value">
+        {{
+          data.project_completedate
+            ? dateFormatter(data.project_completedate, 'yyyy年MM月')
+            : '-'
+        }}
+      </div>
     </div>
     <div class="d-c-b-item">
       <div class="d-item-label">建筑面积</div>
@@ -67,8 +97,7 @@ import { dateFromNow, dateFormatter } from '@/utils/utils'
 import { mapGetters } from 'vuex'
 export default {
   name: 'InformationSummary',
-  components: {
-  },
+  components: {},
   props: {
     loginIn: {
       type: Boolean,
@@ -78,28 +107,20 @@ export default {
       type: Object,
       default: () => {}
     }
-
-  },
-  data () {
-    return {
-    }
   },
-  created () {
-
-  },
-  mounted () {
-  },
-  destroyed () {
+  data() {
+    return {}
   },
+  created() {},
+  mounted() {},
+  destroyed() {},
   computed: {
-    ...mapGetters('user', [
-      'bigmember'
-    ])
+    ...mapGetters('user', ['bigmember'])
   },
   methods: {
     dateFromNow,
     dateFormatter,
-    openLogin (type) {
+    openLogin(type) {
       if (type === 'nologin') {
         this.$emit('nologin')
       } else {
@@ -114,8 +135,8 @@ export default {
   display: flex;
   width: 100%;
   flex-wrap: wrap;
-  border-top: 1px solid #EBEBEB;
-  border-left: 1px solid #EBEBEB;
+  border-top: 1px solid #ebebeb;
+  border-left: 1px solid #ebebeb;
 
   .d-c-b-item {
     display: flex;
@@ -152,7 +173,6 @@ export default {
     .d-item-value {
       align-items: start;
       padding-top: 15px;
-
     }
   }
 
@@ -164,13 +184,13 @@ export default {
     box-sizing: border-box;
     width: 89px;
     height: 100%;
-    background: #F5F5FB;
-    border-right: 1px solid #EBEBEB;
-    border-bottom: 1px solid #EBEBEB;
+    background: #f5f5fb;
+    border-right: 1px solid #ebebeb;
+    border-bottom: 1px solid #ebebeb;
     font-size: 14px;
     font-family: Microsoft YaHei-Regular, Microsoft YaHei;
     font-weight: 400;
-    color: #5C5D61;
+    color: #5c5d61;
     line-height: 18px;
   }
 
@@ -181,8 +201,8 @@ export default {
     padding: 9px;
     width: 100%;
     height: 100%;
-    border-bottom: 1px solid #EBEBEB;
-    border-right: 1px solid #EBEBEB;
+    border-bottom: 1px solid #ebebeb;
+    border-right: 1px solid #ebebeb;
     line-height: 18px;
     flex: 1;
     box-sizing: border-box;

+ 64 - 61
apps/jy-pc/src/views/proposed-detail/components/ProjectPerson.vue

@@ -1,13 +1,29 @@
 <template>
   <div id="ProjectPerson">
-    <div class="box" v-for="(item,index) in list" :key ="index">
+    <div class="box" v-for="(item, index) in list" :key="index">
       <h3 class="item-title">{{ item.identityType | typeFilter }}</h3>
       <div class="d-c-b-content">
         <div class="d-c-b-item-long">
           <div class="d-item-label">单位名称</div>
-          <div class="d-item-value" v-if="loginIn && bigmember">{{ item.endName || '-' }}</div>
-          <div class="d-item-value" style="color: #2ABED1; cursor: pointer;" @click="openLogin('nopower')" v-else-if="loginIn && !bigmember">付费展示</div>
-          <div class="d-item-value" style="color: #2ABED1; cursor: pointer;" @click="openLogin('nologin')" v-else>登录后解锁会员查看</div>
+          <div class="d-item-value" v-if="loginIn && bigmember">
+            {{ item.endName || '-' }}
+          </div>
+          <div
+            class="d-item-value"
+            style="color: #2abed1; cursor: pointer"
+            @click="openLogin('nopower')"
+            v-else-if="loginIn && !bigmember"
+          >
+            付费展示
+          </div>
+          <div
+            class="d-item-value"
+            style="color: #2abed1; cursor: pointer"
+            @click="openLogin('nologin')"
+            v-else
+          >
+            登录后解锁会员查看
+          </div>
         </div>
         <div class="d-c-b-item-long">
           <div class="d-item-label">联系人</div>
@@ -31,8 +47,7 @@ import { dateFromNow } from '@/utils/utils'
 import { mapGetters } from 'vuex'
 export default {
   name: 'ProjectPerson',
-  components: {
-  },
+  components: {},
   props: {
     loginIn: {
       type: Boolean,
@@ -42,27 +57,18 @@ export default {
       type: Array,
       default: () => []
     }
-
   },
-  data () {
-    return {
-
-    }
-  },
-  created () {
-
-  },
-  mounted () {
-  },
-  destroyed () {
+  data() {
+    return {}
   },
+  created() {},
+  mounted() {},
+  destroyed() {},
   computed: {
-    ...mapGetters('user', [
-      'bigmember'
-    ])
+    ...mapGetters('user', ['bigmember'])
   },
   filters: {
-    typeFilter (val) {
+    typeFilter(val) {
       switch (val) {
         case '1':
           return '业主单位'
@@ -77,7 +83,7 @@ export default {
   },
   methods: {
     dateFromNow,
-    openLogin (type) {
+    openLogin(type) {
       if (type === 'nologin') {
         this.$emit('nologin')
       } else {
@@ -88,16 +94,15 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-#ProjectPerson{
-    // min-height: 424px;
-    // max-height: 450px;
-    // overflow-y: auto;
-    // height: 469px;
-    padding-top: 1px;
-  .box{
-
+#ProjectPerson {
+  // min-height: 424px;
+  // max-height: 450px;
+  // overflow-y: auto;
+  // height: 469px;
+  padding-top: 1px;
+  .box {
   }
-  .empty{
+  .empty {
     width: 254px;
     height: 150px;
     background-size: 100% 100%;
@@ -114,15 +119,14 @@ export default {
   letter-spacing: 0em;
   // text-align: right;
   color: #999;
-
 }
 
 .d-c-b-content {
   display: flex;
   width: 100%;
   flex-wrap: wrap;
-  border-top: 1px solid #EBEBEB;
-  border-left: 1px solid #EBEBEB;
+  border-top: 1px solid #ebebeb;
+  border-left: 1px solid #ebebeb;
   margin-top: 10px;
   margin-bottom: 20px;
 
@@ -161,7 +165,6 @@ export default {
     .d-item-value {
       align-items: start;
       padding-top: 15px;
-
     }
   }
 
@@ -173,13 +176,13 @@ export default {
     box-sizing: border-box;
     width: 89px;
     height: 100%;
-    background: #F5F5FB;
-    border-right: 1px solid #EBEBEB;
-    border-bottom: 1px solid #EBEBEB;
+    background: #f5f5fb;
+    border-right: 1px solid #ebebeb;
+    border-bottom: 1px solid #ebebeb;
     font-size: 14px;
     font-family: Microsoft YaHei-Regular, Microsoft YaHei;
     font-weight: 400;
-    color: #5C5D61;
+    color: #5c5d61;
     line-height: 18px;
   }
 
@@ -190,8 +193,8 @@ export default {
     padding: 9px;
     width: 100%;
     height: 100%;
-    border-bottom: 1px solid #EBEBEB;
-    border-right: 1px solid #EBEBEB;
+    border-bottom: 1px solid #ebebeb;
+    border-right: 1px solid #ebebeb;
     line-height: 18px;
     flex: 1;
     box-sizing: border-box;
@@ -200,25 +203,25 @@ export default {
   }
 }
 ::-webkit-scrollbar-track-piece {
-    background-color: #fff;
-    -webkit-border-radius: 0
-  }
+  background-color: #fff;
+  -webkit-border-radius: 0;
+}
 
- ::-webkit-scrollbar {
-    width: 8px;
-    height: 10px
-  }
+::-webkit-scrollbar {
+  width: 8px;
+  height: 10px;
+}
 
-  ::-webkit-scrollbar-thumb {
-    height: 30px;
-    background-color: #e0e0e0;
-    -webkit-border-radius: 6px;
-    outline: 2px solid #fff;
-    outline-offset: -2px;
-    border: 2px solid #fff;
-    filter: alpha(opacity=50);
-    -moz-opacity: 0.5;
-    -khtml-opacity: 0.5;
-    opacity: 0.5
-  }
+::-webkit-scrollbar-thumb {
+  height: 30px;
+  background-color: #e0e0e0;
+  -webkit-border-radius: 6px;
+  outline: 2px solid #fff;
+  outline-offset: -2px;
+  border: 2px solid #fff;
+  filter: alpha(opacity=50);
+  -moz-opacity: 0.5;
+  -khtml-opacity: 0.5;
+  opacity: 0.5;
+}
 </style>

+ 58 - 35
apps/jy-pc/src/views/proposed-detail/components/projectDebriefing.vue

@@ -1,30 +1,65 @@
 <template>
   <div id="projectDebriefing">
     <el-table :data="list" border style="width: 100%">
-      <el-table-column class-name="base-column" align="center" width="108" prop="publishtime" label="日期">
+      <el-table-column
+        class-name="base-column"
+        align="center"
+        width="108"
+        prop="publishtime"
+        label="日期"
+      >
         <template slot-scope="scope">
-          <div>{{ scope.row.publishtime ? dateFormatter(scope.row.publishtime, 'yyyy-MM-dd') : '-' }}</div>
+          <div>
+            {{
+              scope.row.publishtime
+                ? dateFormatter(scope.row.publishtime, 'yyyy-MM-dd')
+                : '-'
+            }}
+          </div>
         </template>
       </el-table-column>
-      <el-table-column class-name="base-column" align="center" width="88" prop="follow" label="进展">
+      <el-table-column
+        class-name="base-column"
+        align="center"
+        width="88"
+        prop="follow"
+        label="进展"
+      >
         <template slot-scope="scope">
           <div>{{ scope.row.follow || '-' }}</div>
         </template>
       </el-table-column>
-      <el-table-column class-name="base-column" align="center" width="88" prop="project_stage" label="进展阶段">
+      <el-table-column
+        class-name="base-column"
+        align="center"
+        width="88"
+        prop="project_stage"
+        label="进展阶段"
+      >
         <template slot-scope="scope">
           <div>{{ scope.row.project_stage }}</div>
         </template>
       </el-table-column>
-      <el-table-column class-name="base-column" header-align="center" align="left" width="529" prop="title" label="进展备注">
+      <el-table-column
+        class-name="base-column"
+        header-align="center"
+        align="left"
+        width="529"
+        prop="title"
+        label="进展备注"
+      >
         <template slot-scope="scope">
-          <div class="desc" @click="descClick">{{ scope.row.title || '-' }}</div>
+          <div class="desc" @click="descClick">
+            {{ scope.row.title || '-' }}
+          </div>
         </template>
       </el-table-column>
       <el-table-column width="88" align="center" label="操作">
         <template slot-scope="scope">
           <div class="table-btn-cell">
-            <el-button type="text" size="medium" @click="goDetail(scope.row)">查看</el-button>
+            <el-button type="text" size="medium" @click="goDetail(scope.row)"
+              >查看</el-button
+            >
           </div>
         </template>
       </el-table-column>
@@ -36,39 +71,29 @@ import { dateFromNow, dateFormatter } from '@/utils/utils'
 import { mapGetters } from 'vuex'
 export default {
   name: 'projectDebriefing',
-  components: {
-  },
+  components: {},
   props: {
     list: {
       type: Array,
       default: () => []
     }
-
-  },
-  data () {
-    return {
-
-    }
-  },
-  created () {
-
   },
-  mounted () {
-  },
-  destroyed () {
+  data() {
+    return {}
   },
+  created() {},
+  mounted() {},
+  destroyed() {},
   computed: {
-    ...mapGetters('user', [
-      'bigmember'
-    ])
+    ...mapGetters('user', ['bigmember'])
   },
   methods: {
     dateFromNow,
     dateFormatter,
-    goDetail (item) {
+    goDetail(item) {
       this.$emit('goDetail', item)
     },
-    descClick () {
+    descClick() {
       this.$emit('descClick')
     }
   }
@@ -82,19 +107,18 @@ export default {
 ::v-deep {
   .el-table {
     thead {
-
       tr,
       th.el-table__cell {
-        background: #F5F5FB;
+        background: #f5f5fb;
         font-size: 14px;
-        color: #1D1D1D;
+        color: #1d1d1d;
       }
     }
 
     tbody {
       .base-column {
         .cell {
-          color: #1D1D1D;
+          color: #1d1d1d;
         }
       }
     }
@@ -102,10 +126,9 @@ export default {
     .table-btn-cell {
       white-space: nowrap;
     }
-
   }
 
-  .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
+  .el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell {
     background-color: #fff;
   }
 
@@ -115,12 +138,12 @@ export default {
 
   ::-webkit-scrollbar-track-piece {
     background-color: #fff;
-    -webkit-border-radius: 0
+    -webkit-border-radius: 0;
   }
 
   ::-webkit-scrollbar {
     width: 8px;
-    height: 10px
+    height: 10px;
   }
 
   ::-webkit-scrollbar-thumb {
@@ -133,7 +156,7 @@ export default {
     filter: alpha(opacity=50);
     -moz-opacity: 0.5;
     -khtml-opacity: 0.5;
-    opacity: 0.5
+    opacity: 0.5;
   }
 }
 </style>

+ 94 - 23
apps/jy-pc/src/views/search/Issued.vue

@@ -2,20 +2,56 @@
   <div class="search-issued w">
     <div class="search-header">
       <div class="tab-header">
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(0)">招标采购公告</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(1)">企业搜索</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(2)">采购单位搜索</span>
-        <span class="tab-header-item active" @click="onTabChange(3)">供应搜索</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(4)">超前项目查询</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(5)">拟在建项目查询</span>
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(0)"
+          >招标采购公告</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(1)"
+          >企业搜索</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(2)"
+          >采购单位搜索</span
+        >
+        <span class="tab-header-item active" @click="onTabChange(3)"
+          >供应搜索</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(4)"
+          >超前项目查询</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(5)"
+          >拟在建项目查询</span
+        >
         <div class="search-tab-right" v-if="loginIn && !isInIframe">
-          <WorkspaceButtonGroup :goWorkSpaceCustom="goWorkSpace"></WorkspaceButtonGroup>
+          <WorkspaceButtonGroup
+            :goWorkSpaceCustom="goWorkSpace"
+          ></WorkspaceButtonGroup>
         </div>
       </div>
-      <SearchHeader v-model="searchContent" @onFilterChange="onFilterChange" @onSearch="doSearch" @onInput="onSearchInput">
+      <SearchHeader
+        v-model="searchContent"
+        @onFilterChange="onFilterChange"
+        @onSearch="doSearch"
+        @onInput="onSearchInput"
+      >
         <div slot="input-suffix" class="aaa">
           <el-badge value="限免" type="danger" class="publish-button">
-            <el-button type="primary" round @click="goToPublish">{{ loginIn ? '信息发布' : '免费发布信息' }}</el-button>
+            <el-button type="primary" round @click="goToPublish">{{
+              loginIn ? '信息发布' : '免费发布信息'
+            }}</el-button>
           </el-badge>
         </div>
       </SearchHeader>
@@ -24,41 +60,70 @@
       <div class="search-filters v-w1200" v-show="filterShow">
         <SelectorCard cardType="line">
           <div slot="header">搜索范围:</div>
-          <el-checkbox-group class="pd-6" v-model="filters.searchType" @change="onSearchTypeChange">
+          <el-checkbox-group
+            class="pd-6"
+            v-model="filters.searchType"
+            @change="onSearchTypeChange"
+          >
             <el-checkbox
               v-for="item in conf.searchTypeList"
               :key="item.value"
-              :label="item.value">{{ item.label }}</el-checkbox>
+              :label="item.value"
+              >{{ item.label }}</el-checkbox
+            >
           </el-checkbox-group>
         </SelectorCard>
         <AreaSelector
           ref="areaSelector"
           selectorType="line"
           @onChange="areaChange"
-          :initCityMap="filters.area">
+          :initCityMap="filters.area"
+        >
           <div slot="header">选择区域:</div>
         </AreaSelector>
         <TimeSelector
           ref="timeSelector"
-          :selectorKeys="['all', 'today', 'lately3', 'lately7', 'lately30', 'lately90']"
+          :selectorKeys="[
+            'all',
+            'today',
+            'lately3',
+            'lately7',
+            'lately30',
+            'lately90'
+          ]"
           @onChange="timeChange"
-          selectorType="line">
+          selectorType="line"
+        >
           <div slot="header">发布时间:</div>
         </TimeSelector>
         <SelectorCard cardType="line">
           <div slot="header">信息状态:</div>
-          <el-radio-group class="j-radio-group" v-model="filters.issueState" @change="onIssueStateChange">
+          <el-radio-group
+            class="j-radio-group"
+            v-model="filters.issueState"
+            @change="onIssueStateChange"
+          >
             <el-radio-button
               class="j-radio-button"
               v-for="state in conf.issueStateList"
               :key="state.value"
-              :label="state.value">{{ state.label }}</el-radio-button>
+              :label="state.value"
+              >{{ state.label }}</el-radio-button
+            >
           </el-radio-group>
         </SelectorCard>
       </div>
       <div class="search-list">
-        <InfoListLayout class="v-w1200" title="最新供应信息" v-show="listState.loaded">
-          <div class="article-list" v-loading="listState.loading" v-show="listState.list.length !== 0 && listState.loaded">
+        <InfoListLayout
+          class="v-w1200"
+          title="最新供应信息"
+          v-show="listState.loaded"
+        >
+          <div
+            class="article-list"
+            v-loading="listState.loading"
+            v-show="listState.list.length !== 0 && listState.loaded"
+          >
             <ArticleItem
               v-for="item in listState.list"
               :key="item.id"
@@ -72,8 +137,14 @@
               @onClick="goToDetail(item)"
             />
           </div>
-          <Empty v-show="listState.list.length === 0 && listState.loaded">暂无数据</Empty>
-          <div slot="footer" class="el-pagination-container" v-if="listState.total > 0">
+          <Empty v-show="listState.list.length === 0 && listState.loaded"
+            >暂无数据</Empty
+          >
+          <div
+            slot="footer"
+            class="el-pagination-container"
+            v-if="listState.total > 0"
+          >
             <el-pagination
               popper-class="pagination-custom-select"
               background
@@ -122,7 +193,7 @@ export default {
     ArticleItem,
     Empty
   },
-  data () {
+  data() {
     return {
       conf: {
         searchTypeList: [
@@ -179,7 +250,7 @@ export default {
       isInIframe: false
     }
   },
-  created () {
+  created() {
     this.getLoginStatusEvent()
     // 进入工作台将筛选条件回显
     let supplyData = sessionStorage.getItem('supplyData')
@@ -192,7 +263,7 @@ export default {
       this.filterShow = filterShow
     }
   },
-  mounted () {
+  mounted() {
     const supplyData = sessionStorage.getItem('supplyData')
     if (supplyData) {
       // 回显地区和时间

+ 3 - 2
apps/jy-pc/src/views/search/components/InfoListLayout.vue

@@ -36,7 +36,8 @@ export default {
 </script>
 <style lang="scss" scoped>
 .info-list {
-  &-layout {}
+  &-layout {
+  }
 
   &-header {
     display: flex;
@@ -44,7 +45,7 @@ export default {
     justify-content: space-between;
     padding: 0 16px;
     height: 52px;
-    border-bottom: 1px solid #EBEBEB;
+    border-bottom: 1px solid #ebebeb;
     // border-radius: $border_radius_2;
     .i-l-h {
       &-left {

+ 59 - 35
apps/jy-pc/src/views/search/components/SearchHeader.vue

@@ -7,28 +7,42 @@
           :value="searchContent"
           @input="onInput"
           @onSearch="onSearch"
-          clearable>
-          <div slot="suffix" class="filter-button no-select" @click="changeFilterState">
+          clearable
+        >
+          <div
+            slot="suffix"
+            class="filter-button no-select"
+            @click="changeFilterState"
+          >
             <span class="filter-button-text">筛选</span>
-            <span class="el-icon-arrow-up" :class="filterShow ? '' : 'rotate180'"></span>
+            <span
+              class="el-icon-arrow-up"
+              :class="filterShow ? '' : 'rotate180'"
+            ></span>
           </div>
         </SearchInput>
         <slot name="input-suffix"></slot>
-        <div class="search-right-wx" @mouseover="rightQrShow=true" @mouseleave="rightQrShow=false">
+        <div
+          class="search-right-wx"
+          @mouseover="rightQrShow = true"
+          @mouseleave="rightQrShow = false"
+        >
           <img src="@/assets/image/search/sea-right-wx.png" />
           <div class="search-right-wx-inner" v-show="rightQrShow">
             <div class="wx-inner-title">扫码关注剑鱼标讯</div>
             <div class="wx-inner-ewm">
-              <img id="keyImg" src="/front/share/RV8="/>
+              <img id="keyImg" src="/front/share/RV8=" />
+            </div>
+            <div class="wx-inner-bottom">
+              微信扫一扫<br />随时随地掌握招标信息
             </div>
-            <div class="wx-inner-bottom">微信扫一扫<br>随时随地掌握招标信息</div>
           </div>
         </div>
       </div>
-      <div class="search-header-bottom" style="display: none;">
+      <div class="search-header-bottom" style="display: none">
         <el-tabs v-model="tabActive">
           <el-tab-pane
-            v-for="pane in tabPaneList.filter(i => i.show)"
+            v-for="pane in tabPaneList.filter((i) => i.show)"
             :key="pane.name"
             :label="pane.label"
             :name="pane.name"
@@ -66,7 +80,7 @@ export default {
     prop: 'searchContent',
     event: 'onInput'
   },
-  data () {
+  data() {
     return {
       tabActive: '',
       placeholder: '',
@@ -115,7 +129,11 @@ export default {
   },
   computed: {
     preSearchListShow: function () {
-      return this.searchContent.trim().length >= 2 && this.preSearch.list.length && (this.preSearch.focus || this.preSearch.hover)
+      return (
+        this.searchContent.trim().length >= 2 &&
+        this.preSearch.list.length &&
+        (this.preSearch.focus || this.preSearch.hover)
+      )
     }
   },
   watch: {
@@ -126,7 +144,10 @@ export default {
       let result = ''
       if (newVal === 'zb') {
         if (this.searchContent) {
-          result = '/jylab/supsearch/index.html?keywords=' + this.searchContent + '&publishtime=thisyear'
+          result =
+            '/jylab/supsearch/index.html?keywords=' +
+            this.searchContent +
+            '&publishtime=thisyear'
         } else {
           result = '/jylab/supsearch/index.html'
         }
@@ -144,31 +165,34 @@ export default {
         }
       }
       if (!result) return
-      tryCallHooks({
-        fn: (result) => {
-          this.$BRACE.methods.open({
-            route: {
-              link: result,
-              appType: 'iframe'
-            }
-          })
+      tryCallHooks(
+        {
+          fn: (result) => {
+            this.$BRACE.methods.open({
+              route: {
+                link: result,
+                appType: 'iframe'
+              }
+            })
+          },
+          spareFn: (result) => {
+            location.href = result
+          }
         },
-        spareFn: (result) => {
-          location.href = result
-        }
-      }, result)
+        result
+      )
     }
   },
-  created () {
+  created() {
     this.initSearchType()
     this.getParams()
   },
   methods: {
-    initSearchType () {
+    initSearchType() {
       this.getDefaultActivePane()
       this.checkPureShow()
     },
-    getParams () {
+    getParams() {
       let { keywords } = this.$route.query
       if (keywords === 'undefined') {
         keywords = ''
@@ -179,9 +203,9 @@ export default {
         this.onSearch()
       }
     },
-    getDefaultActivePane () {
+    getDefaultActivePane() {
       const { name } = this.$route
-      const activePane = this.tabPaneList.find(pane => {
+      const activePane = this.tabPaneList.find((pane) => {
         return pane.routerName === name
       })
       if (activePane) {
@@ -190,17 +214,17 @@ export default {
         this.placeholder = activePane.placeholder
       }
     },
-    async checkPureShow () {
+    async checkPureShow() {
       const { data } = await entNicheWhetherbuy()
       if (data && data.isNew) {
-        const index = this.tabPaneList.findIndex(pane => pane.name === 'cgdw')
+        const index = this.tabPaneList.findIndex((pane) => pane.name === 'cgdw')
         this.tabPaneList[index].show = true
       }
     },
-    onInput (e) {
+    onInput(e) {
       this.$emit('onInput', e)
     },
-    onSearch () {
+    onSearch() {
       this.$emit('onSearch')
       this.setUrlQuery()
     },
@@ -309,7 +333,7 @@ export default {
   top: 52px;
   width: 640px;
   background: #fff;
-  box-shadow: 0 0 20px rgb(0,0,0,0.1);
+  box-shadow: 0 0 20px rgb(0, 0, 0, 0.1);
   border-radius: 8px;
   overflow: hidden;
   .pre-search-item {
@@ -319,7 +343,7 @@ export default {
     line-height: 24px;
     color: #686868;
     box-sizing: border-box;
-    transition: all .3s;
+    transition: all 0.3s;
     cursor: pointer;
     &:hover {
       padding: 12px 30px;
@@ -331,7 +355,7 @@ export default {
 
 .filter-button {
   margin-left: 18px;
-  color: #1D1D1D;
+  color: #1d1d1d;
   font-size: 14px;
   cursor: pointer;
   .filter-button-text {

+ 104 - 24
apps/jy-pc/src/views/search/construction.vue

@@ -2,21 +2,69 @@
   <div class="search-construction w">
     <div class="search-header">
       <div class="tab-header">
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(0)">招标采购公告</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(1)">企业搜索</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(2)">采购单位搜索</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(3)">供应搜索</span>
-        <span class="tab-header-item" v-show="!isInIframe" @click="onTabChange(4)">超前项目查询</span>
-        <span class="tab-header-item active" @click="onTabChange(5)">拟在建项目查询</span>
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(0)"
+          >招标采购公告</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(1)"
+          >企业搜索</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(2)"
+          >采购单位搜索</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(3)"
+          >供应搜索</span
+        >
+        <span
+          class="tab-header-item"
+          v-show="!isInIframe"
+          @click="onTabChange(4)"
+          >超前项目查询</span
+        >
+        <span class="tab-header-item active" @click="onTabChange(5)"
+          >拟在建项目查询</span
+        >
         <div class="search-tab-right" v-if="loginIn && !isInIframe">
-          <WorkspaceButtonGroup :goWorkSpaceCustom="goWorkSpace"></WorkspaceButtonGroup>
+          <WorkspaceButtonGroup
+            :goWorkSpaceCustom="goWorkSpace"
+          ></WorkspaceButtonGroup>
         </div>
       </div>
-      <SearchHeader :show-tab="true" class="search-header-container" v-model="searchContent" @onSearch="doSearch" @onInput="onSearchInput">
+      <SearchHeader
+        :show-tab="true"
+        class="search-header-container"
+        v-model="searchContent"
+        @onSearch="doSearch"
+        @onInput="onSearchInput"
+      >
         <div slot="input-suffix">
           <div class="filter-unit-project">
-            <div class="filter-btn" :class="{active: filters.searchSort === 0}" @click="changeFilterState('project')">按项目名称搜</div>
-            <div class="filter-btn" style="margin-left: 32px;" :class="{active: filters.searchSort === 1}" @click="changeFilterState('unit')">按单位名称搜</div>
+            <div
+              class="filter-btn"
+              :class="{ active: filters.searchSort === 0 }"
+              @click="changeFilterState('project')"
+            >
+              按项目名称搜
+            </div>
+            <div
+              class="filter-btn"
+              style="margin-left: 32px"
+              :class="{ active: filters.searchSort === 1 }"
+              @click="changeFilterState('unit')"
+            >
+              按单位名称搜
+            </div>
           </div>
         </div>
       </SearchHeader>
@@ -24,25 +72,47 @@
     <div class="search-content">
       <div class="filter-button no-select" @click="onFilterChange">
         <span class="filter-button-text">筛选条件</span>
-        <img src="@/assets/image/icon/icon-top-arrow.png" class="icon-top-arrow" :class="filterShow ? '' : 'rotate180'">
+        <img
+          src="@/assets/image/icon/icon-top-arrow.png"
+          class="icon-top-arrow"
+          :class="filterShow ? '' : 'rotate180'"
+        />
       </div>
       <div class="search-filters v-w1200" v-show="filterShow">
-        <SelectorCard cardType="line" v-for="(item, index) in filterData" :key="index">
-          <div class="filter-label" slot="header">{{ Object.keys(item)[0] }}:</div>
-          <el-checkbox-group class="j-checkbox-group" v-model="filters[Object.keys(filters)[index]]" @change="onIssueStateChange($event, index)">
-            <el-checkbox-button class="j-checkbox-button" label="全部">全部</el-checkbox-button>
+        <SelectorCard
+          cardType="line"
+          v-for="(item, index) in filterData"
+          :key="index"
+        >
+          <div class="filter-label" slot="header">
+            {{ Object.keys(item)[0] }}:
+          </div>
+          <el-checkbox-group
+            class="j-checkbox-group"
+            v-model="filters[Object.keys(filters)[index]]"
+            @change="onIssueStateChange($event, index)"
+          >
+            <el-checkbox-button class="j-checkbox-button" label="全部"
+              >全部</el-checkbox-button
+            >
             <el-checkbox-button
               class="j-checkbox-button"
               v-for="state in item[Object.keys(item)[0]]"
               :key="state"
-              :label="state">
-                {{ state }}
+              :label="state"
+            >
+              {{ state }}
             </el-checkbox-button>
           </el-checkbox-group>
         </SelectorCard>
       </div>
       <div class="search-list">
-        <InfoListLayout :show-header="false" class="v-w1200" title="最新供应信息" v-loading="listState.loading">
+        <InfoListLayout
+          :show-header="false"
+          class="v-w1200"
+          title="最新供应信息"
+          v-loading="listState.loading"
+        >
           <div class="article-list" v-show="listState.list.length > 0">
             <ArticleItem
               v-for="item in listState.list"
@@ -57,8 +127,14 @@
               @onClick="goToDetail(item)"
             />
           </div>
-          <Empty v-show="listState.list.length === 0 && !listState.loading">暂无数据</Empty>
-          <div slot="footer" class="el-pagination-container" v-if="listState.total > 0">
+          <Empty v-show="listState.list.length === 0 && !listState.loading"
+            >暂无数据</Empty
+          >
+          <div
+            slot="footer"
+            class="el-pagination-container"
+            v-if="listState.total > 0"
+          >
             <el-pagination
               popper-class="pagination-custom-select"
               background
@@ -86,7 +162,11 @@ import InfoListLayout from '@/views/search/components/InfoListLayout.vue'
 import ArticleItem from '@/components/article-item/ArticleItem.vue'
 import WorkspaceButtonGroup from '@/components/dialog/WorkspaceButtonGroup.vue'
 import Empty from '@/components/empty/Empty.vue'
-import { getLoginStatus, getNzjConditions, getNzjList } from '@/api/modules/front'
+import {
+  getLoginStatus,
+  getNzjConditions,
+  getNzjList
+} from '@/api/modules/front'
 import { mixinVisited } from '@/utils/mixins/visited'
 import { openSelfLink, dateFromNow } from '@/utils'
 import { Tooltip } from 'element-ui'
@@ -102,7 +182,7 @@ export default {
     ArticleItem,
     Empty
   },
-  data () {
+  data() {
     return {
       searchContent: '',
       filters: {
@@ -128,11 +208,11 @@ export default {
       isInIframe: false
     }
   },
-  created () {
+  created() {
     this.getLoginStatusEvent()
     this.getNzjConditionsApi()
   },
-  mounted () {
+  mounted() {
     /**
      * 初始化页面搜索框与工作台顶部搜索联动事件函数,详情见对应函数 common.js
      * 需要在 dom 初始化后调用来监听事件,Vue中需要额外在 input 对应事件额外手动触发事件

+ 30 - 10
apps/jy-pc/src/views/static/Disclaimer.vue

@@ -1,13 +1,33 @@
 <template>
   <div class="v-w1200 disclaimer">
     <h3 class="title">剑鱼标讯信息发布平台免责声明</h3>
-    <div class="preface">任何用户在使用剑鱼标讯信息发布平台之前,均应仔细阅读本声明,用户可选择不使用信息发布功能,一旦使用,即被视为对本声明全部内容的认可和接受。</div>
-    <div class="paragraph">1. 剑鱼标讯信息发布平台是一个招标采购信息及供应信息发布、获取及传播的平台。本平台非招标、采购、供应信息原始来源,任何通过本平台获取的招标、采购、供应信息所有内容,均系该平台第三方发布者制作和提供。剑鱼标讯不能对用户发布的信息的正确性进行保证。</div>
-    <div class="paragraph">2. 任何单位或个人如需要第三方发布公告信息中内容(包括资讯、资料、消息、产品或服务介绍、报价等),并欲据此进行交易或其他行为前,应慎重辨别这些内容的合法性、准确性、真实性、实用性和安全性。如因此进行交易,而引致的人身伤亡、财产毁损、名誉或商誉诽谤、版权等任何权利侵犯事件,及因该等事件所造成的损害后果,剑鱼标讯概不负责,亦不会也不能承担任何法律责任,而应由第三方网页的所有者承担。</div>
-    <div class="paragraph">3. 作为信息内容的发表者,需自行对所发表内容负责,因所发表内容引发的一切纠纷,由该信息的发表者承担全部法律及连带责任。剑鱼标讯不承担任何法律及连带责任。</div>
-    <div class="paragraph">4. 任何单位或个人如认为通过剑鱼标讯信息发布平台所得的信息内容可能涉嫌侵害其合法权益,应以书面的形式及时向剑鱼标讯反应,并提供相应身份证明、权属证明及详细的侵权情况证明,剑鱼标讯核实后会进行修改、删除等操作。</div>
-    <div class="paragraph">5.  剑鱼标讯不保证网络服务一定能满足用户的要求,也不保证网络服务不会中断,对网络服务的及时性、安全性、准确性也都不作保证。 </div>
-    <div class="paragraph">6. 对于因不可抗力或知乎不能控制的原因造成的网络服务中断或其它缺陷,剑鱼标讯不承担任何责任,但将尽力减少因此而给用户造成的损失和影响。</div>
+    <div class="preface">
+      任何用户在使用剑鱼标讯信息发布平台之前,均应仔细阅读本声明,用户可选择不使用信息发布功能,一旦使用,即被视为对本声明全部内容的认可和接受。
+    </div>
+    <div class="paragraph">
+      1.
+      剑鱼标讯信息发布平台是一个招标采购信息及供应信息发布、获取及传播的平台。本平台非招标、采购、供应信息原始来源,任何通过本平台获取的招标、采购、供应信息所有内容,均系该平台第三方发布者制作和提供。剑鱼标讯不能对用户发布的信息的正确性进行保证。
+    </div>
+    <div class="paragraph">
+      2.
+      任何单位或个人如需要第三方发布公告信息中内容(包括资讯、资料、消息、产品或服务介绍、报价等),并欲据此进行交易或其他行为前,应慎重辨别这些内容的合法性、准确性、真实性、实用性和安全性。如因此进行交易,而引致的人身伤亡、财产毁损、名誉或商誉诽谤、版权等任何权利侵犯事件,及因该等事件所造成的损害后果,剑鱼标讯概不负责,亦不会也不能承担任何法律责任,而应由第三方网页的所有者承担。
+    </div>
+    <div class="paragraph">
+      3.
+      作为信息内容的发表者,需自行对所发表内容负责,因所发表内容引发的一切纠纷,由该信息的发表者承担全部法律及连带责任。剑鱼标讯不承担任何法律及连带责任。
+    </div>
+    <div class="paragraph">
+      4.
+      任何单位或个人如认为通过剑鱼标讯信息发布平台所得的信息内容可能涉嫌侵害其合法权益,应以书面的形式及时向剑鱼标讯反应,并提供相应身份证明、权属证明及详细的侵权情况证明,剑鱼标讯核实后会进行修改、删除等操作。
+    </div>
+    <div class="paragraph">
+      5.
+      剑鱼标讯不保证网络服务一定能满足用户的要求,也不保证网络服务不会中断,对网络服务的及时性、安全性、准确性也都不作保证。
+    </div>
+    <div class="paragraph">
+      6.
+      对于因不可抗力或知乎不能控制的原因造成的网络服务中断或其它缺陷,剑鱼标讯不承担任何责任,但将尽力减少因此而给用户造成的损失和影响。
+    </div>
   </div>
 </template>
 
@@ -18,16 +38,16 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.disclaimer{
+.disclaimer {
   padding: 32px;
-  .title{
+  .title {
     padding-bottom: 20px;
     font-size: 22px;
     text-align: center;
     color: #1d1d1d;
   }
   .preface,
-  .paragraph{
+  .paragraph {
     font-size: 14px;
     text-align: justify;
     line-height: 28px;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است