RunSpiderDialog.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <el-dialog :title="dialogTitle" v-model="dialogVisible" :close-on-click-modal="false" destroy-on-close width="80%">
  3. <template #header="{ titleId, titleClass }">
  4. <div class="run-spider-css-header">
  5. <div class="header-left">
  6. <span :id="titleId" :class="titleClass">{{ dialogTitle }}</span>
  7. </div>
  8. <div class="mark-container">
  9. <el-button-group class="mark-buttons">
  10. <el-button type="primary" :icon="Link" :disabled="savaButtonDisabled" @click="handleSave">保存</el-button>
  11. </el-button-group>
  12. </div>
  13. </div>
  14. </template>
  15. <RunSpiderContent ref="runSpiderContent" @save="onContentSave" />
  16. </el-dialog>
  17. </template>
  18. <script setup>
  19. import { ref, nextTick, computed } from 'vue';
  20. import RunSpiderContent from "./RunSpider.vue"
  21. import { useStore } from 'vuex';
  22. import { USER_ROLE_ADMIN, USER_ROLE_DEVELOPER, USER_ROLE_REVIEWER } from '../../data/user'
  23. const emit = defineEmits(['save'])
  24. const props = defineProps({
  25. from: {
  26. type: String,
  27. default: ''
  28. }
  29. })
  30. const store = useStore();
  31. const formData = ref({})
  32. const dialogVisible = ref(false)
  33. const runSpiderContent = ref({})
  34. const dialogTitle = ref('调试/运行')
  35. // 用户身份标识
  36. const userRole = computed(() => store.getters.userRole)
  37. const isDeveloper = computed(() => [USER_ROLE_DEVELOPER].includes(userRole.value))
  38. const isReviewer = computed(() => [USER_ROLE_REVIEWER].includes(userRole.value))
  39. // 待完成和未通过的爬虫可以保存,其他都不可以提交(并禁用保存按钮)
  40. const canSubmitStatusArr = [0, 2]
  41. const userSubmitRolePass = computed(() => isDeveloper.value || isReviewer.value)
  42. const canSubmit = computed(() => {
  43. if (props.from === 'reviewList') {
  44. return userSubmitRolePass.value
  45. } else {
  46. return canSubmitStatusArr.includes(formData.value.state) && userSubmitRolePass.value
  47. }
  48. })
  49. const savaButtonDisabled = computed(() => !canSubmit.value)
  50. const setPageData = (e) => {
  51. nextTick(() => {
  52. formData.value = e
  53. runSpiderContent.value.setPageData(e)
  54. })
  55. }
  56. const getPageData = () => {
  57. return runSpiderContent.value.getPageData()
  58. }
  59. const handleSave = () => {
  60. runSpiderContent.value.doSaveInfo()
  61. }
  62. const onContentSave = (e) => {
  63. emit('save', e)
  64. }
  65. defineExpose({
  66. dialogVisible,
  67. setPageData,
  68. getPageData,
  69. })
  70. </script>
  71. <style scoped lang="scss">
  72. .run-spider-css-header {
  73. display: flex;
  74. }
  75. .header-left {
  76. margin-right: 12px;
  77. display: flex;
  78. align-items: center;
  79. }
  80. </style>