| | |
| | | |
| | | fetchProblemType({ cityCode, districtCode, sceneTypeId }) { |
| | | const params = `?taskTypeId=1&cityCode=${cityCode}&districtCode=${districtCode}&sceneTypeId=${sceneTypeId}`; |
| | | return $fysp.get(`problemtype/search${params}`).then((res) => res); |
| | | return $fysp.get(`problemtype/search${params}`).then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | |
| | | CompGenericWrapper: typeof import('./components/CompGenericWrapper.vue')['default'] |
| | | CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default'] |
| | | Content: typeof import('./components/core/Content.vue')['default'] |
| | | ElAffix: typeof import('element-plus/es')['ElAffix'] |
| | | ElAside: typeof import('element-plus/es')['ElAside'] |
| | | ElAvatar: typeof import('element-plus/es')['ElAvatar'] |
| | | ElBadge: typeof import('element-plus/es')['ElBadge'] |
| | | ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] |
| | | ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] |
| | | ElButton: typeof import('element-plus/es')['ElButton'] |
| | | ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] |
| | | ElCalendar: typeof import('element-plus/es')['ElCalendar'] |
| | | ElCard: typeof import('element-plus/es')['ElCard'] |
| | | ElCascader: typeof import('element-plus/es')['ElCascader'] |
| | | ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] |
| | | ElCol: typeof import('element-plus/es')['ElCol'] |
| | | ElCollapse: typeof import('element-plus/es')['ElCollapse'] |
| | | ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] |
| | | ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] |
| | | ElContainer: typeof import('element-plus/es')['ElContainer'] |
| | | ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] |
| | | ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] |
| | | ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] |
| | | ElDialog: typeof import('element-plus/es')['ElDialog'] |
| | | ElDivider: typeof import('element-plus/es')['ElDivider'] |
| | | ElDrawer: typeof import('element-plus/es')['ElDrawer'] |
| | | ElDropdown: typeof import('element-plus/es')['ElDropdown'] |
| | | ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] |
| | | ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] |
| | | ElEmpty: typeof import('element-plus/es')['ElEmpty'] |
| | | ElForm: typeof import('element-plus/es')['ElForm'] |
| | | ElFormItem: typeof import('element-plus/es')['ElFormItem'] |
| | |
| | | ElImage: typeof import('element-plus/es')['ElImage'] |
| | | ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] |
| | | ElInput: typeof import('element-plus/es')['ElInput'] |
| | | ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] |
| | | ElLink: typeof import('element-plus/es')['ElLink'] |
| | | ElMain: typeof import('element-plus/es')['ElMain'] |
| | | ElMenu: typeof import('element-plus/es')['ElMenu'] |
| | | ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] |
| | | ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup'] |
| | | ElOption: typeof import('element-plus/es')['ElOption'] |
| | | ElPageHeader: typeof import('element-plus/es')['ElPageHeader'] |
| | | ElPagination: typeof import('element-plus/es')['ElPagination'] |
| | | ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm'] |
| | | ElPopover: typeof import('element-plus/es')['ElPopover'] |
| | | ElRadio: typeof import('element-plus/es')['ElRadio'] |
| | | ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] |
| | | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] |
| | | ElRow: typeof import('element-plus/es')['ElRow'] |
| | | ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] |
| | | ElSegmented: typeof import('element-plus/es')['ElSegmented'] |
| | | ElSelect: typeof import('element-plus/es')['ElSelect'] |
| | | ElSpace: typeof import('element-plus/es')['ElSpace'] |
| | | ElStep: typeof import('element-plus/es')['ElStep'] |
| | | ElSteps: typeof import('element-plus/es')['ElSteps'] |
| | | ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] |
| | | ElSwitch: typeof import('element-plus/es')['ElSwitch'] |
| | | ElTable: typeof import('element-plus/es')['ElTable'] |
| | | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] |
| | | ElTabPane: typeof import('element-plus/es')['ElTabPane'] |
| | | ElTabs: typeof import('element-plus/es')['ElTabs'] |
| | | ElTag: typeof import('element-plus/es')['ElTag'] |
| | | ElText: typeof import('element-plus/es')['ElText'] |
| | | ElTooltip: typeof import('element-plus/es')['ElTooltip'] |
| | | ElTransfer: typeof import('element-plus/es')['ElTransfer'] |
| | | ElTree: typeof import('element-plus/es')['ElTree'] |
| | | ElUpload: typeof import('element-plus/es')['ElUpload'] |
| | | Footer: typeof import('./components/core/Footer.vue')['default'] |
| | |
| | | mounted() {}, |
| | | methods: { |
| | | pictureValidate() { |
| | | if (this.changeType == 1 && this.fileList.length < 1) { |
| | | if (this.fileList.length < 1) { |
| | | ElMessage({ |
| | | message: 'è³å°ä¸ä¼ ä¸å¼ å¾ç', |
| | | type: 'error' |
| | |
| | | districtCode: this.topTask.districtcode |
| | | }; |
| | | problemApi.fetchProblemType(data).then((res) => { |
| | | this.problemTypeList = res.data; |
| | | this.problemTypeList = res; |
| | | |
| | | if (this.type == 1) { |
| | | let currProName = String(this.problem.problemname); |
| | |
| | | > |
| | | </el-descriptions> |
| | | |
| | | <el-scrollbar> |
| | | <el-scrollbar style="width: 70%;"> |
| | | <el-descriptions |
| | | title=" " |
| | | :column="2" |
| | |
| | | width: 240px; |
| | | height: 250px; |
| | | border-radius: 4px; |
| | | margin-bottom: 6px; |
| | | } |
| | | |
| | | .d-index { |
| | |
| | | .d-extra { |
| | | } |
| | | |
| | | .descriptions-label-1 { |
| | | color: whitesmoke; |
| | | background: var(--el-color-danger-light-3); |
| | | :deep(.descriptions-label-1) { |
| | | /* color: whitesmoke; */ |
| | | /* background: var(--el-color-danger-light-3); */ |
| | | } |
| | | |
| | | .descriptions-label-2 { |
| | | color: whitesmoke; |
| | | background-color: var(--el-color-success-light-3); |
| | | /* color: whitesmoke; */ |
| | | /* background-color: var(--el-color-success-light-3); */ |
| | | } |
| | | </style> |
| | | |
| | |
| | | <template> |
| | | 1 |
| | | </template> |
| | | <script></script> |
| | |
| | | <template> |
| | | 1 |
| | | </template> |
| | | <script></script> |
| | |
| | | <template> |
| | | 1 |
| | | </template> |
| | | <script></script> |
| | |
| | | v-model:value="formSearch.scenetype" |
| | | ></FYOptionScene> |
| | | <!-- æ¶é´ --> |
| | | <FYOptionTime :initValue="false" type="month" v-model:value="formSearch.time"></FYOptionTime> |
| | | <FYOptionTime |
| | | :initValue="false" |
| | | type="month" |
| | | v-model:value="formSearch.time" |
| | | ></FYOptionTime> |
| | | </template> |
| | | <template #buttons> |
| | | <!-- <el-button icon="Download" size="default" type="success" @click="download" |
| | |
| | | </template> |
| | | |
| | | <template #table-column="{ size }"> |
| | | <el-table-column fixed="left" sortable="custom" prop="sceneIndex" label="ç¼å·" width="80"> |
| | | <el-table-column |
| | | fixed="left" |
| | | sortable="custom" |
| | | prop="sceneIndex" |
| | | label="ç¼å·" |
| | | width="80" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column prop="sceneName" :show-overflow-tooltip="true" label="åç§°" width="300"> |
| | | <el-table-column |
| | | prop="sceneName" |
| | | :show-overflow-tooltip="true" |
| | | label="åç§°" |
| | | width="300" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="subTaskTime" |
| | |
| | | sortable="custom" |
| | | :formatter="timeFormat" |
| | | /> |
| | | <el-table-column prop="evaluation.resultscorebef" label="å¾å" width="90" sortable="custom" /> |
| | | <el-table-column prop="evaluation.resultscorebef" label="ç¯ä¿¡ç " width="100"> |
| | | <el-table-column |
| | | prop="evaluation.resultscorebef" |
| | | label="å¾å" |
| | | width="90" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="evaluation.resultscorebef" |
| | | label="ç¯ä¿¡ç " |
| | | width="100" |
| | | > |
| | | <template #default="{ row }"> |
| | | <span :style="`color: ${toCode(row).color};`">{{ toCode(row).name }}</span> |
| | | <span :style="`color: ${toCode(row).color};`">{{ |
| | | toCode(row).name |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | |
| | | :loading="updateLoading" |
| | | >ä¸ä¼ </el-button |
| | | > |
| | | <el-button v-show="scoreShow" size="small" type="error" @click="scoreShow = false" |
| | | <el-button |
| | | v-show="scoreShow" |
| | | size="small" |
| | | type="error" |
| | | @click="scoreShow = false" |
| | | >åæ¶</el-button |
| | | > |
| | | </template> |
| | | <template #default="{ row }"> |
| | | <el-button type="primary" size="small" @click="editRow(row)">æ¥ç</el-button> |
| | | <el-button type="primary" size="small" @click="editRow(row)" |
| | | >æ¥ç</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | |
| | | |
| | | export default { |
| | | setup() { |
| | | const { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData } = |
| | | useTablePaste({ |
| | | score1: 8, |
| | | score2: 9 |
| | | }); |
| | | return { cellClick, cellClassName, handlePaste, setTableData, addRefreshEvent, tableData }; |
| | | const { |
| | | cellClick, |
| | | cellClassName, |
| | | handlePaste, |
| | | setTableData, |
| | | addRefreshEvent, |
| | | tableData |
| | | } = useTablePaste({ |
| | | score1: 8, |
| | | score2: 9 |
| | | }); |
| | | return { |
| | | cellClick, |
| | | cellClassName, |
| | | handlePaste, |
| | | setTableData, |
| | | addRefreshEvent, |
| | | tableData |
| | | }; |
| | | }, |
| | | components: { CompReport }, |
| | | data() { |
| | |
| | | if (res.data.length > 0) { |
| | | this.evaluationRule = res.data[0]; |
| | | // è·åå
·ä½åè§å |
| | | return evaluateApi.getSubRules(this.evaluationRule.guid).then((res) => { |
| | | this.evaluationSubRule = res.data; |
| | | // æ¥æ¾å¯å¯¼å
¥å¾åçè§åid |
| | | for (const key in this.ruleName) { |
| | | const value = this.ruleName[key]; |
| | | const subrule = this.evaluationSubRule.find((v) => { |
| | | return v.itemname == value.name; |
| | | }); |
| | | value.id = subrule.guid; |
| | | } |
| | | }); |
| | | return evaluateApi |
| | | .getSubRules(this.evaluationRule.guid) |
| | | .then((res) => { |
| | | this.evaluationSubRule = res.data; |
| | | // æ¥æ¾å¯å¯¼å
¥å¾åçè§åid |
| | | for (const key in this.ruleName) { |
| | | const value = this.ruleName[key]; |
| | | const subrule = this.evaluationSubRule.find((v) => { |
| | | return v.itemname == value.name; |
| | | }); |
| | | if (subrule) { |
| | | value.id = subrule.guid; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- æ
æç«ä¸å±ä¿¡æ¯ç¼è¾ --> |
| | | <template> |
| | | <BaseSceneInfo ref="baseSceneInfo" :scene="scene" :formInfo="formInfo" :scene-type="sceneType"> |
| | | <template #form-items> |
| | | <el-form |
| | | v-show="showStyle == 'form'" |
| | | :inline="false" |
| | | :model="formObj" |
| | | ref="formRef" |
| | | :rules="rules" |
| | | label-position="right" |
| | | label-width="150px" |
| | | > |
| | | <!-- <el-form-item label="è¿è¥ç¶æ" prop="mpStatus"> |
| | | <el-select v-model="formObj.mpStatus" placeholder="è¿è¥ç¶æ"> |
| | | <el-option |
| | | v-for="s in status" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> --> |
| | | <el-form-item label="å å°é¢ç§¯" prop="mpFloorSpace"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpFloorSpace" |
| | | placeholder="å å°é¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è§åé¢ç§¯" prop="mpPlanningArea"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpPlanningArea" |
| | | placeholder="è§åé¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ä¸»åä½" prop="mpEmployerUnit"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpEmployerUnit" |
| | | placeholder="ä¸ä¸»åä½" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ä¸»åä½è系人" prop="mpEmployerContacts"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpEmployerContacts" |
| | | placeholder="ä¸ä¸»åä½è系人" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="ä¸ä¸»åä½èç³»çµè¯" |
| | | prop="mpEmployerContactsTel" |
| | | class="input-with-select" |
| | | > |
| | | <el-input |
| | | clearable |
| | | type="tel" |
| | | v-model="formObj.mpEmployerContactsTel" |
| | | placeholder="ä¸ä¸»åä½èç³»çµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦ä¸ºç»¿è²ç¯ä¿ç«å" prop="mpGreenPlant"> |
| | | <el-select |
| | | v-model="formObj.mpGreenPlant" |
| | | placeholder="æ¯å¦ä¸ºç»¿è²ç¯ä¿ç«å" |
| | | > |
| | | <el-option |
| | | v-for="s in [ |
| | | { value: false, label: 'å¦' }, |
| | | { value: true, label: 'æ¯' } |
| | | ]" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦ä¸ºææåºç«" prop="mpCivillyPlant"> |
| | | <el-select |
| | | v-model="formObj.mpCivillyPlant" |
| | | placeholder="æ¯å¦ä¸ºææåºç«" |
| | | > |
| | | <el-option |
| | | v-for="s in [ |
| | | { value: false, label: 'å¦' }, |
| | | { value: true, label: 'æ¯' } |
| | | ]" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button |
| | | :disabled="!edit" |
| | | type="primary" |
| | | @click="onSubmit" |
| | | :loading="loading" |
| | | >æäº¤</el-button |
| | | > |
| | | <el-button :disabled="!edit" @click="onReset">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | <template #description-items> |
| | | <el-descriptions |
| | | v-show="showStyle == 'descriptions'" |
| | | :column="2" |
| | | :size="fontSize" |
| | | direction="horizontal" |
| | | border |
| | | > |
| | | <template #title> |
| | | <el-text tag="h1">{{ title }}</el-text> |
| | | </template> |
| | | <template #extra> |
| | | <el-button |
| | | :size="fontSize" |
| | | type="primary" |
| | | @click="onSubmit" |
| | | :loading="loading" |
| | | >æäº¤</el-button |
| | | > |
| | | <el-button |
| | | :size="fontSize" |
| | | :disabled="!edit && !ignoreEdit" |
| | | @click="onReset" |
| | | >éç½®</el-button |
| | | > |
| | | </template> |
| | | <el-descriptions-item label="å å°é¢ç§¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.mpFloorSpace" |
| | | placeholder="å å°é¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input></el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="è§åé¢ç§¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.mpPlanningArea" |
| | | placeholder="è§åé¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input></el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="ä¸ä¸»åä½"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpEmployerUnit" |
| | | placeholder="ä¸ä¸»åä½" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ä¸ä¸»åä½è系人"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.mpEmployerContacts" |
| | | placeholder="ä¸ä¸»åä½è系人" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item |
| | | label="ä¸ä¸»åä½èç³»çµè¯" |
| | | prop="mpEmployerContactsTel" |
| | | class="input-with-select" |
| | | :span="2" |
| | | > |
| | | <el-input |
| | | clearable |
| | | type="tel" |
| | | v-model="formObj.mpEmployerContactsTel" |
| | | placeholder="ä¸ä¸»åä½èç³»çµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> |
| | | </el-input> |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="æ¯å¦ä¸ºç»¿è²ç¯ä¿ç«å"> |
| | | <el-select |
| | | v-model="formObj.mpGreenPlant" |
| | | placeholder="æ¯å¦ä¸ºç»¿è²ç¯ä¿ç«å" |
| | | > |
| | | <el-option |
| | | v-for="s in [ |
| | | { value: false, label: 'å¦' }, |
| | | { value: true, label: 'æ¯' } |
| | | ]" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦ä¸ºææåºç«"> |
| | | <el-select |
| | | v-model="formObj.mpCivillyPlant" |
| | | placeholder="æ¯å¦ä¸ºææåºç«" |
| | | > |
| | | <el-option |
| | | v-for="s in [ |
| | | { value: false, label: 'å¦' }, |
| | | { value: true, label: 'æ¯' } |
| | | ]" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ½å·¥å°å" span="2" |
| | | ><el-input |
| | | clearable |
| | | v-model="sceneObj.location" |
| | | placeholder="æ½å·¥å°å" |
| | | :size="fontSize" |
| | | /></el-descriptions-item> |
| | | <el-descriptions-item label="项ç®è´è´£äºº" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="sceneObj.contacts" |
| | | placeholder="项ç®è´è´£äºº" |
| | | /></el-descriptions-item> |
| | | <el-descriptions-item label="项ç®è´è´£äººçµè¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | type="tel" |
| | | v-model="sceneObj.contactst" |
| | | placeholder="项ç®è´è´£äººçµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> </el-input |
| | | ></el-descriptions-item> |
| | | </el-descriptions> |
| | | </template> |
| | | </BaseSceneInfo> |
| | | </template> |
| | | <script setup> |
| | | import { reactive, ref, watch, computed } from 'vue'; |
| | | import { useFormConfirm } from '@/composables/formConfirm'; |
| | | import BaseSceneInfo from './BaseSceneInfo.vue'; |
| | | const props = defineProps({ |
| | | scene: Object, |
| | | //å·¥å°é¢å¤ä¿¡æ¯ |
| | | formInfo: Object, |
| | | //åºæ¯ç±»åï¼å·¥å° |
| | | sceneType: { |
| | | type: Number, |
| | | default: 1 |
| | | }, |
| | | // å±ç¤ºæ ·å¼ formï¼è¡¨åï¼descriptionsï¼æè¿°å表 |
| | | showStyle: { |
| | | type: String, |
| | | default: 'descriptions' |
| | | // default:'form' |
| | | }, |
| | | title: String |
| | | }); |
| | | const fontSize = ref('small'); |
| | | const emit = defineEmits([ |
| | | 'onSubmit', |
| | | 'onCancel', |
| | | 'update:scene', |
| | | 'update:formInfo' |
| | | ]); |
| | | const sceneObj = ref({}); |
| | | const { formObj, formRef, edit, onSubmit, onReset } = useFormConfirm({ |
| | | submit: { |
| | | do: submit |
| | | }, |
| | | cancel: { |
| | | do: cancel |
| | | } |
| | | }); |
| | | const ignoreEdit = computed(() => props.showStyle == 'descriptions'); |
| | | |
| | | const loading = ref(false); |
| | | const status = reactive([]); |
| | | const rules = reactive({}); |
| | | |
| | | const baseSceneInfo = ref(null); |
| | | function submit() { |
| | | return baseSceneInfo.value.submit() |
| | | } |
| | | |
| | | function cancel() { |
| | | emit('onCancel'); |
| | | } |
| | | |
| | | watch( |
| | | () => props.formInfo, |
| | | (nValue) => { |
| | | if (nValue) { |
| | | formObj.value = nValue; |
| | | } |
| | | }, |
| | | { deep: false, immediate: true } |
| | | ); |
| | | |
| | | watch( |
| | | () => props.scene, |
| | | (nValue) => { |
| | | if (nValue) { |
| | | sceneObj.value = nValue; |
| | | } |
| | | }, |
| | | { deep: false, immediate: true } |
| | | ); |
| | | </script> |
| | | |
| | | <style> |
| | | /* .input-with-select .el-input-group__prepend { |
| | | background-color: var(--el-fill-color-blank); |
| | | } */ |
| | | .sub-title { |
| | | font-size: var(--el-font-size-large); |
| | | margin-bottom: 20px; |
| | | margin-left: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- ç 头ä¸å±ä¿¡æ¯ç¼è¾ --> |
| | | <template> |
| | | <BaseSceneInfo ref="baseSceneInfo" :scene="scene" :formInfo="formInfo" :scene-type="sceneType"> |
| | | <template #form-items> |
| | | <el-form |
| | | v-show="showStyle == 'form'" |
| | | :inline="false" |
| | | :model="formObj" |
| | | ref="formRef" |
| | | :rules="rules" |
| | | label-position="right" |
| | | label-width="150px" |
| | | > |
| | | <el-form-item label="ç±»å" prop="wProjectType"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wProjectType" |
| | | placeholder="ç±»å" |
| | | /> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="è¿è¥ç¶æ" prop="wStatus"> |
| | | <el-select v-model="formObj.wStatus" placeholder="è¿è¥ç¶æ"> |
| | | <el-option |
| | | v-for="s in status" |
| | | :key="s.value" |
| | | :label="s.label" |
| | | :value="s.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> --> |
| | | <el-form-item label="ä¸ä¸»åä½" prop="wEmployerUnit"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wEmployerUnit" |
| | | placeholder="ä¸ä¸»åä½" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ä¸»åä½è系人" prop="wEmployerContacts"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wEmployerContacts" |
| | | placeholder="ä¸ä¸»åä½è系人" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="ä¸ä¸»åä½èç³»çµè¯" |
| | | prop="wEmployerContactsTel" |
| | | class="input-with-select" |
| | | > |
| | | <el-input |
| | | clearable |
| | | type="tel" |
| | | v-model="formObj.wEmployerContactsTel" |
| | | placeholder="ä¸ä¸»åä½èç³»çµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç§èµåä½" prop="wRentUnit"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wRentUnit" |
| | | placeholder="ç§èµåä½" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç§èµåä½è系人" prop="wRentContacts"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wRentContacts" |
| | | placeholder="ç§èµåä½è系人" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç§èµåä½è系人çµè¯" prop="wRentContactsTel"> |
| | | <el-input |
| | | clearable |
| | | type="tel" |
| | | v-model="formObj.wRentContactsTel" |
| | | placeholder="ç§èµåä½è系人çµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button |
| | | :disabled="!edit" |
| | | type="primary" |
| | | @click="onSubmit" |
| | | :loading="loading" |
| | | >æäº¤</el-button |
| | | > |
| | | <el-button :disabled="!edit" @click="onReset">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | <template #description-items> |
| | | <el-descriptions |
| | | v-show="showStyle == 'descriptions'" |
| | | :column="2" |
| | | :size="fontSize" |
| | | direction="horizontal" |
| | | border |
| | | > |
| | | <template #title> |
| | | <el-text tag="h1">{{ title }}</el-text> |
| | | </template> |
| | | <template #extra> |
| | | <el-button |
| | | :disabled="!edit && !ignoreEdit" |
| | | :size="fontSize" |
| | | type="primary" |
| | | @click="onSubmit" |
| | | :loading="loading" |
| | | >æäº¤</el-button |
| | | > |
| | | <el-button |
| | | :size="fontSize" |
| | | :disabled="!edit && !ignoreEdit" |
| | | @click="onReset" |
| | | >éç½®</el-button |
| | | > |
| | | </template> |
| | | <el-descriptions-item label="ç±»å" :span="2" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.wProjectType" |
| | | placeholder="ç±»å" |
| | | /></el-descriptions-item> |
| | | <el-descriptions-item label="å å°é¢ç§¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.wFloorSpace" |
| | | placeholder="å å°é¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input></el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="è§åé¢ç§¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.wPlanningArea" |
| | | placeholder="è§åé¢ç§¯" |
| | | > |
| | | <template #append>ã¡</template> |
| | | </el-input></el-descriptions-item |
| | | > |
| | | <el-descriptions-item label="ä¸ä¸»åä½"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wEmployerUnit" |
| | | placeholder="ä¸ä¸»åä½" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ä¸ä¸»åä½è系人"> |
| | | <el-input |
| | | clearable |
| | | v-model="formObj.wEmployerContacts" |
| | | placeholder="ä¸ä¸»åä½è系人" |
| | | /> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item |
| | | label="ä¸ä¸»åä½èç³»çµè¯" |
| | | prop="mpEmployerContactsTel" |
| | | class="input-with-select" |
| | | :span="2" |
| | | > |
| | | <el-input |
| | | clearable |
| | | type="tel" |
| | | v-model="formObj.wEmployerContactsTel" |
| | | placeholder="ä¸ä¸»åä½èç³»çµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> |
| | | </el-input> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ½å·¥å°å" span="2" |
| | | ><el-input |
| | | clearable |
| | | v-model="sceneObj.location" |
| | | placeholder="æ½å·¥å°å" |
| | | :size="fontSize" |
| | | /></el-descriptions-item> |
| | | <el-descriptions-item label="项ç®è´è´£äºº" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="sceneObj.contacts" |
| | | placeholder="项ç®è´è´£äºº" |
| | | /></el-descriptions-item> |
| | | <el-descriptions-item label="项ç®è´è´£äººçµè¯" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | type="tel" |
| | | v-model="sceneObj.contactst" |
| | | placeholder="项ç®è´è´£äººçµè¯" |
| | | > |
| | | <template #prepend> |
| | | <el-icon><Iphone /></el-icon> |
| | | </template> </el-input |
| | | ></el-descriptions-item> |
| | | <el-descriptions-item label="ç§èµåä½" |
| | | ><el-input |
| | | :size="fontSize" |
| | | clearable |
| | | v-model="formObj.wRentUnit" |
| | | placeholder="ç§èµåä½" |
| | | /></el-descriptions-item> |
| | | </el-descriptions> |
| | | </template> |
| | | </BaseSceneInfo> |
| | | </template> |
| | | <script setup> |
| | | import { reactive, ref, watch, computed } from 'vue'; |
| | | import { useFormConfirm } from '@/composables/formConfirm'; |
| | | import BaseSceneInfo from './BaseSceneInfo.vue'; |
| | | |
| | | const props = defineProps({ |
| | | scene: Object, |
| | | //å·¥å°é¢å¤ä¿¡æ¯ |
| | | formInfo: Object, |
| | | //åºæ¯ç±»åï¼å·¥å° |
| | | sceneType: { |
| | | type: Number, |
| | | default: 1 |
| | | }, |
| | | // å±ç¤ºæ ·å¼ formï¼è¡¨åï¼descriptionsï¼æè¿°å表 |
| | | showStyle: { |
| | | type: String, |
| | | default: 'descriptions' |
| | | // default:'form' |
| | | }, |
| | | title: String |
| | | }); |
| | | const fontSize = ref('small'); |
| | | const emit = defineEmits([ |
| | | 'onSubmit', |
| | | 'onCancel', |
| | | 'update:scene', |
| | | 'update:formInfo' |
| | | ]); |
| | | |
| | | const sceneObj = ref({}); |
| | | const { formObj, formRef, edit, onSubmit, onReset } = useFormConfirm({ |
| | | submit: { |
| | | do: submit |
| | | }, |
| | | cancel: { |
| | | do: cancel |
| | | } |
| | | }); |
| | | const ignoreEdit = computed(() => props.showStyle == 'descriptions'); |
| | | |
| | | const loading = ref(false); |
| | | const status = reactive([]); |
| | | const rules = reactive({}); |
| | | |
| | | const baseSceneInfo = ref(null); |
| | | function submit() { |
| | | return baseSceneInfo.value.submit() |
| | | } |
| | | |
| | | function cancel() { |
| | | emit('onCancel'); |
| | | } |
| | | |
| | | watch( |
| | | () => props.formInfo, |
| | | (nValue) => { |
| | | if (nValue) { |
| | | formObj.value = nValue; |
| | | } |
| | | }, |
| | | { deep: false, immediate: true } |
| | | ); |
| | | |
| | | watch( |
| | | () => props.scene, |
| | | (nValue) => { |
| | | if (nValue) { |
| | | sceneObj.value = nValue; |
| | | } |
| | | }, |
| | | { deep: false, immediate: true } |
| | | ); |
| | | </script> |
| | | |
| | | <style> |
| | | /* .input-with-select .el-input-group__prepend { |
| | | background-color: var(--el-fill-color-blank); |
| | | } */ |
| | | .sub-title { |
| | | font-size: var(--el-font-size-large); |
| | | margin-bottom: 20px; |
| | | margin-left: 20px; |
| | | } |
| | | </style> |
| | |
| | | create |
| | | v-model="curSubTaskList" |
| | | :loading="subTaskLoading" |
| | | :create-loading="daytaskLoading" |
| | | height="56vh" |
| | | @add="subTaskDrawer = true" |
| | | @add="handleAddSubtask" |
| | | @submit="handleSubtaskSubmit" |
| | | ></CompSubTaskList> |
| | | </el-col> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { unref } from 'vue'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | import dayjs from 'dayjs'; |
| | | import taskApi from '@/api/fysp/taskApi'; |
| | | import CompMonitorObj from './components/CompMonitorObj.vue'; |
| | | import CompMonitorPlan from './components/CompMonitorPlan.vue'; |
| | |
| | | subTaskDrawer: false, |
| | | // å½åéæ©çæ¥ä»»å¡ |
| | | curDayTask: {}, |
| | | curDay: undefined, |
| | | daytaskLoading: false, |
| | | // å½åéæ©çæ¥ä»»å¡ä¸çåä»»å¡ |
| | | curSubTaskList: undefined, |
| | | subTaskLoading: false, |
| | | // æ»ä»»å¡æ°å¢å¼¹åºæ¡ |
| | | topTaskAddVisible: false |
| | | }; |
| | | }, |
| | | provide() { |
| | | return { |
| | | topTask: this.curTask |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | } |
| | | }); |
| | | }, |
| | | onDateChange(dayTask) { |
| | | onDateChange(dayTask, day) { |
| | | this.curDay = day; |
| | | if (dayTask) { |
| | | this.subTaskLoading = true; |
| | | // this.subTaskDrawer = true; |
| | |
| | | .finally(() => (this.subTaskLoading = false)); |
| | | } else { |
| | | this.curSubTaskList = []; |
| | | this.curDayTask = {}; |
| | | } |
| | | }, |
| | | navToTaskCreate(value) { |
| | |
| | | this.$refs.planRef |
| | | .fetchDayTasks() |
| | | .finally(() => (this.subTaskLoading = false)); |
| | | }, |
| | | handleAddSubtask() { |
| | | // 夿彿¥æ¯å¦ææ¥ä»»å¡ï¼è¥æ²¡æï¼å
å建å¨è·³è½¬åä»»å¡å建çé¢ |
| | | if (this.curDayTask.guid) { |
| | | this.subTaskDrawer = true; |
| | | } else { |
| | | const _dayTask = useCloned(this.curTask.data).cloned.value; |
| | | const taskDate = dayjs(this.curDay); |
| | | _dayTask.tsguid = _dayTask.tguid; |
| | | _dayTask.tguid = null; |
| | | _dayTask.levelnum = null; |
| | | _dayTask.name = `${taskDate.format('YYYYå¹´MMæDDæ¥')}${ |
| | | _dayTask.cityname |
| | | }${_dayTask.districtname}${_dayTask.typename}ä»»å¡`; |
| | | _dayTask.starttime = taskDate.startOf('day').toDate(); |
| | | _dayTask.endtime = taskDate.endOf('day').millisecond(0).toDate(); |
| | | _dayTask.settime = dayjs().toDate(); |
| | | _dayTask.t1stverifytime = dayjs().toDate(); |
| | | _dayTask.runingstatus = 'æªæ§è¡'; |
| | | this.daytaskLoading = true; |
| | | taskApi |
| | | .putTask(_dayTask) |
| | | .then((res) => { |
| | | this.curDayTask = { |
| | | guid: res.data.tguid, |
| | | tsGuid: res.data.tsguid, |
| | | changedTaskNum: 0, |
| | | check: true, |
| | | completeTaskNum: 0, |
| | | date: res.data.starttime, |
| | | totalTaskNum: 0 |
| | | }; |
| | | this.subTaskDrawer = true; |
| | | this.handleSubtaskSubmit(); |
| | | }) |
| | | .finally(() => (this.daytaskLoading = false)); |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | </el-row> |
| | | </template> |
| | | <script setup> |
| | | import { ref, watch, onMounted } from 'vue'; |
| | | import { ref, watch, onMounted, inject } from 'vue'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import { ElMessage, ElNotification, ElMessageBox } from 'element-plus'; |
| | |
| | | if (isDayEnable(e)) { |
| | | const day = dayjs(e).format('YYYY-MM-DD'); |
| | | const t = computeDayTask(day); |
| | | emit('dateChange', t); |
| | | emit('dateChange', t, day); |
| | | } |
| | | } |
| | | |
| | |
| | | <div v-else> |
| | | <el-empty description="æ ä»»å¡è®°å½" /> |
| | | <el-row v-if="create" justify="center"> |
| | | <el-button type="success" size="small" @click="add" |
| | | <el-button |
| | | type="success" |
| | | size="small" |
| | | :loading="createLoading" |
| | | @click="add" |
| | | >æ·»å ä»»å¡</el-button |
| | | > |
| | | </el-row> |
| | |
| | | }, |
| | | // æ¯å¦æ¾ç¤ºæ·»å ä»»å¡æé® |
| | | create: Boolean, |
| | | loading: Boolean |
| | | loading: Boolean, |
| | | createLoading:Boolean, |
| | | }); |
| | | |
| | | const dialogVisible = ref(false); |
| | |
| | | return subtaskApi.deleteSubtask(item.stguid).then(res=>{ |
| | | if (res == 1) { |
| | | const index = data.value.indexOf(item); |
| | | data.value.splice(index, 1); |
| | | data.value.splice(index, 1); |
| | | |
| | | emit('update:modelValue', data.value); |
| | | emit('remove', item); |
| | |
| | | /** |
| | | * å·¡æ¥åä»»å¡å建 |
| | | */ |
| | | import { ref, reactive, watch, computed, onMounted } from 'vue'; |
| | | import { ref, reactive, watch, computed, onMounted, inject } from 'vue'; |
| | | import { ElMessageBox, ElNotification, ElMessage } from 'element-plus'; |
| | | import taskApi from '@/api/fysp/taskApi'; |
| | | import TaskProxy from '../TaskProxy'; |
| | | |
| | | onMounted(() => { |
| | | // if (props.height) { |
| | | // scrollHeight.value = |
| | | // } |
| | | }); |
| | | // const topTask = inject('topTask'); |
| | | |
| | | const props = defineProps({ |
| | | // åä»»å¡éå |
| | |
| | | } else { |
| | | success(); |
| | | // å°ä»»å¡æ§è¡äººæ ¼å¼åå¹¶ä¼ é |
| | | const param = TaskProxy.getExecutors(v.value.executor, executors.value) |
| | | emit('submit', param) |
| | | const param = TaskProxy.getExecutors(v.value.executor, executors.value); |
| | | emit('submit', param); |
| | | } |
| | | } |
| | | |
| | | /************************* 任塿§è¡äººä¸æéæ¡ *******************************/ |
| | | // onMounted(() => { |
| | | // getExecutors(topTask.value); |
| | | // }); |
| | | |
| | | const executors = ref([]); |
| | | // æ¯å¦å
¨é |
| | | const checkAll = ref(false); |
| | |
| | | formInfo.value.executor = []; |
| | | } |
| | | } |
| | | |
| | | function getExecutors(t) { |
| | | const ids = t.executorguids.split('#'); |
| | | const userNames = t.executorusernames.split('#'); |
| | | const realNames = t.executorrealnames.split('#'); |
| | | const list = []; |
| | | ids.forEach((e, i) => { |
| | | if (i < userNames.length && i < realNames.length) { |
| | | list.push({ |
| | | label: realNames[i], |
| | | value: e, |
| | | data: { |
| | | id: e, |
| | | userName: userNames[i], |
| | | realName: realNames[i] |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | executors.value = list; |
| | | } |
| | | // watch(topTask, (nV, oV) => { |
| | | // if (nV != oV) { |
| | | // getExecutors(nV); |
| | | // } |
| | | // }); |
| | | |
| | | watch( |
| | | () => props.dayTask, |
| | | (nV, oV) => { |
| | | if (nV != oV) { |
| | | taskApi.fetchTaskById(nV.guid).then((res) => { |
| | | const ids = res.executorguids.split('#'); |
| | | const userNames = res.executorusernames.split('#'); |
| | | const realNames = res.executorrealnames.split('#'); |
| | | const list = []; |
| | | ids.forEach((e, i) => { |
| | | if (i < userNames.length && i < realNames.length) { |
| | | list.push({ |
| | | label: realNames[i], |
| | | value: e, |
| | | data: { |
| | | id: e, |
| | | userName: userNames[i], |
| | | realName: realNames[i] |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | executors.value = list; |
| | | getExecutors(res); |
| | | }); |
| | | } |
| | | }, |
| | | { immediate: true } |
| | | ); |
| | | // |
| | | |
| | | watch( |
| | | () => formInfo.value.executor, |
| | | (val) => { |
| | |
| | | } |
| | | |
| | | function genTaskName() { |
| | | let name = dayjs(formRef.value.formObj._timeArr[0]).format('YYYYå¹´MMæ'); |
| | | let name = dayjs(formRef.value.formObj._timeArr[0]).format('YYYYå¹´Mæ'); |
| | | name += locationText(formRef.value.formObj._locations); |
| | | name += formRef.value.formObj._type.text; |
| | | name += 'ä»»å¡'; |