| | |
| | | window.URL.revokeObjectURL(url); |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * ä¿®æ¹æå°é¡¹å¾å |
| | | */ |
| | | updateScore({itemList, subTaskId}) { |
| | | const param = `?subTaskId=${subTaskId}` |
| | | return $fysp.post(`/itemevaluation/update${param}`, itemList).then((res) => res.data); |
| | | }, |
| | | /** |
| | | * è·å¾ææè§åç¶èç¹ |
| | | */ |
| | | getAllParentRules() { |
| | | return $fysp.get("evaluationrule").then((res) => res.data); |
| | | }, |
| | | /** æ ¹æ®ç¶èç¹idè·ååè§å */ |
| | | getSubRules(id) { |
| | | const param = `?id=${id}` |
| | | return $fysp.get(`/evaluationsubrule/byRule${param}`).then((res) => res.data); |
| | | }, |
| | | /** |
| | | * æ´æ°ç¶èç¹è§å |
| | | */ |
| | | updateParentRule(data) { |
| | | return $fysp.post("evaluationrule", data).then((res) => res.data); |
| | | }, |
| | | /** |
| | | * å é¤ç¶èç¹è§å |
| | | */ |
| | | deleteParentRuleById(id) { |
| | | return $fysp.delete(`evaluationrule/${id}`).then((res) => res.data); |
| | | }, |
| | | |
| | | /** |
| | | * æ´æ°åèç¹è§å |
| | | */ |
| | | updateSubRule(data) { |
| | | return $fysp.post("evaluationsubrule", data).then((res) => res.data); |
| | | }, |
| | | /** |
| | | * å é¤åèç¹è§å |
| | | */ |
| | | deleteSubRuleById(id) { |
| | | return $fysp.delete(`evaluationsubrule/${id}`).then((res) => res.data); |
| | | }, |
| | | }; |
| | |
| | | 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'] |
| | | ElCard: typeof import('element-plus/es')['ElCard'] |
| | | ElCascader: typeof import('element-plus/es')['ElCascader'] |
| | | ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] |
| | |
| | | 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'] |
| | |
| | | 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'] |
| | | ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] |
| | | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] |
| | |
| | | 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'] |
| | | FormCol: typeof import('./components/layout/FormCol.vue')['default'] |
| | | FYBgTaskCard: typeof import('./components/bg-task/FYBgTaskCard.vue')['default'] |
| | |
| | | icon: 'List', |
| | | name: '设å¤å¹é
', |
| | | }, |
| | | { |
| | | //è¯ä¼°è§å管ç |
| | | path: '/fysp/config/evalutationRule', |
| | | icon: 'List', |
| | | name: 'è¯ä¼°è§å', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | |
| | | component: () => import('@/views/fysp/config/DeviceMatch.vue') |
| | | }, |
| | | { |
| | | //è¯ä¼°è§å管ç |
| | | name: 'fyspEvalutationRule', |
| | | path: '/fysp/config/evalutationRule', |
| | | component: () => import('@/views/fysp/config/EvalutationRule.vue') |
| | | }, |
| | | { |
| | | //è¯ä¼°æ°æ®æº |
| | | name: 'fyspEvalutationTask', |
| | | path: '/fysp/evaluation/evalutationTask', |
¶Ô±ÈÐÂÎļþ |
| | |
| | | export default { |
| | | getBase64(url, callback) { |
| | | //éè¿æé 彿°æ¥å建ç img å®ä¾ï¼å¨èµäº src å¼åå°±ä¼ç«å»ä¸è½½å¾çï¼ç¸æ¯ createElement() å建 <img> çå»äº append()ï¼ä¹å°±é¿å
äºææ¡£åä½å污æ |
| | | var Img = new Image(), |
| | | dataURL = ''; |
| | | Img.setAttribute('crossOrigin', 'Anonymous'); // è§£å³æ§å¶å°è·¨åæ¥éçé®é¢ |
| | | |
| | | if (url.startsWith("blob")) { |
| | | Img.src = url; |
| | | }else { |
| | | Img.src = url + '?v=' + Math.random(); // å¤çç¼å,fixç¼åbug,æç¼åï¼æµè§å¨ä¼æ¥é; |
| | | } |
| | | // Img.src = /^data:image/.test(url) ? url : url + '?' + new Date().getTime() + '&v=' + Math.random(); // å¤çç¼å,fixç¼åbug,æç¼åï¼æµè§å¨ä¼æ¥é; |
| | | |
| | | // Img.crossOrigin = "*"; // è§£å³æ§å¶å°è·¨åæ¥éçé®é¢ |
| | | Img.onload = function () { |
| | | //è¦å
ç¡®ä¿å¾ç宿´è·åå°ï¼è¿æ¯ä¸ªå¼æ¥äºä»¶ |
| | | var canvas = document.createElement('canvas'), //å建canvaså
ç´ |
| | | width = Img.width, //ç¡®ä¿canvasç尺寸åå¾ç䏿 · |
| | | height = Img.height; |
| | | canvas.width = width; |
| | | canvas.height = height; |
| | | canvas.setAttribute('crossOrigin', 'Anonymous'); // è§£å³æ§å¶å°è·¨åæ¥éçé®é¢ |
| | | canvas.getContext('2d').drawImage(Img, 0, 0, width, height); //å°å¾çç»å¶å°canvasä¸ |
| | | dataURL = canvas.toDataURL('image/jpeg'); //转æ¢å¾ç为dataURL |
| | | callback ? callback(dataURL) : null; //è°ç¨åè°å½æ° |
| | | }; |
| | | }, |
| | | getImageFiles(urls, callback) { |
| | | if (urls.length == 0) { |
| | | callback([]) |
| | | } |
| | | var files = []; |
| | | urls.forEach((url) => { |
| | | this.setInitImg(url, (file) => { |
| | | files.push(file); |
| | | if (files.length == urls.length) { |
| | | callback(files); |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | setInitImg(url, callback) { |
| | | let img = url; |
| | | let _ = this; |
| | | let imgRes; |
| | | this.getBase64(img, (dataURL) => { |
| | | imgRes = this.dataURLtoFile(dataURL, img); |
| | | console.log(imgRes); |
| | | callback(imgRes); |
| | | }); |
| | | }, |
| | | dataURLtoFile(dataurl, filename) { |
| | | //å°base64转æ¢ä¸ºæä»¶ï¼dataurl为base64å符串ï¼filename为æä»¶åï¼å¿
须带åç¼åï¼å¦.jpg,.pngï¼ |
| | | var arr = dataurl.split(','), |
| | | mime = arr[0].match(/:(.*?);/)[1], |
| | | bstr = atob(arr[1]), |
| | | n = bstr.length, |
| | | u8arr = new Uint8Array(n); |
| | | while (n--) { |
| | | u8arr[n] = bstr.charCodeAt(n); |
| | | } |
| | | return new File([u8arr], filename, { type: mime }); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <FYTable @search="onSearch" :pagination="false" ref="tableRef" :expandChange="expandChange"> |
| | | <template #options> |
| | | <!-- åºå¿ --> |
| | | <!-- <FYOptionLocation |
| | | :allOption="false" |
| | | :level="3" |
| | | :checkStrictly="false" |
| | | v-model:value="formSearch.locations" |
| | | ></FYOptionLocation> --> |
| | | </template> |
| | | <template #table-column> |
| | | <el-table-column align="center" type="expand"> |
| | | <template v-slot="scope"> |
| | | <el-table :data="scope.row.children" table-layout="fixed"> |
| | | <el-table-column |
| | | prop="itemname" |
| | | label="åç§°" |
| | | width="200" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | <el-table-column prop="itemdescription" label="æè¿°"></el-table-column> |
| | | <el-table-column prop="maxscore" label="æé«å"></el-table-column> |
| | | <el-table-column prop="minscore" label="æä½å"></el-table-column> |
| | | <el-table-column prop="defaultvalue" label="é»è®¤å¼"></el-table-column> |
| | | <el-table-column |
| | | prop="ertype" |
| | | label="è¯åè§åç±»å" |
| | | width="150" |
| | | :formatter="formatSubRuleType" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="extension1" |
| | | label="è¯åç±»å" |
| | | width="150" |
| | | :formatter="formatScoreMode" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="extension2" |
| | | label="å¾å模å¼" |
| | | width="150" |
| | | :formatter="formatScoreMode" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="extension3" |
| | | label="éæ©æ¨¡å¼" |
| | | width="150" |
| | | :formatter="formatScoreMode" |
| | | ></el-table-column> |
| | | <!-- <el-table-column |
| | | prop="usedanalyse" |
| | | label="æ¯å¦åæ" |
| | | width="100" |
| | | :formatter="formatBoolean" |
| | | > |
| | | </el-table-column> --> |
| | | <el-table-column |
| | | prop="remark" |
| | | label="夿³¨" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | <el-table-column v-slot="scope" prop="æä½" label="æä½" width="150"> |
| | | <el-button link type="primary" @click="editSubRule(scope.row, 1)">æ¥ç</el-button> |
| | | <el-button link type="primary" @click="editSubRule(scope.row, 2)">ä¿®æ¹</el-button> |
| | | <el-popconfirm title="确认å é¤?" @confirm="deleteSubRule(scope.row)"> |
| | | <template #reference> |
| | | <el-button link type="danger">å é¤</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | </el-table-column> |
| | | </el-table> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="rulename" |
| | | label="è§ååç§°" |
| | | width="350" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="ruletype" |
| | | label="è§åç±»å" |
| | | :formatter="formatRuleType" |
| | | ></el-table-column> |
| | | <el-table-column prop="tasktype" label="ä»»å¡ç±»å"></el-table-column> |
| | | <el-table-column prop="scensetype" label="åºæ¯ç±»å"></el-table-column> |
| | | <el-table-column prop="provincename" label="ç份åç§°"></el-table-column> |
| | | <el-table-column prop="cityname" label="åå¸åç§°"></el-table-column> |
| | | <el-table-column prop="districtname" label="åºå¿åç§°"></el-table-column> |
| | | <el-table-column |
| | | prop="suitable" |
| | | label="æ¯å¦éç¨" |
| | | :formatter="formatBoolean" |
| | | ></el-table-column> |
| | | <el-table-column prop="isuse" label="æ¯å¦å¯ç¨" :formatter="formatBoolean"></el-table-column> |
| | | <el-table-column v-slot="scope" prop="æä½" label="æä½" width="160"> |
| | | <el-button link type="primary" @click="editRule(scope.row, 1)">æ¥ç</el-button> |
| | | <el-button link type="primary" @click="editRule(scope.row, 2)">ä¿®æ¹</el-button> |
| | | <el-popconfirm title="确认å é¤?" @confirm="deleteRule(scope.row)"> |
| | | <template #reference> |
| | | <el-button link type="danger">å é¤</el-button> |
| | | </template> |
| | | </el-popconfirm> |
| | | </el-table-column> |
| | | </template> |
| | | </FYTable> |
| | | <!-- ç¶èç¹çä¿®æ¹é¡µé¢ --> |
| | | <el-dialog title="ä¿®æ¹" width="80%" v-model="evalutionRuleVisible"> |
| | | <CompEvalutionRuleUpd |
| | | v-if="evalutionRuleVisible" |
| | | :before-close="beforeEvalutionRuleDialogClose" |
| | | :evalutionRule="currEvalutionRule" |
| | | :readonly="parentReadOnly" |
| | | @updated="onEvalutionRuleUpdated" |
| | | /> |
| | | </el-dialog> |
| | | <!-- åèç¹çä¿®æ¹é¡µé¢ --> |
| | | <el-dialog title="ä¿®æ¹" width="80%" v-model="evalutionSubRuleVisible"> |
| | | <CompEvalutionSubRuleUpd |
| | | v-if="evalutionSubRuleVisible" |
| | | :before-close="beforeEvalutionSubRuleDialogClose" |
| | | :evalutionSubRule="currEvalutionSubRule" |
| | | :readonly="subReadOnly" |
| | | @updated="onEvalutionSubRuleUpdated" |
| | | /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import evaluateApi from '@/api/fysp/evaluateApi'; |
| | | import CompEvalutionRuleUpd from './components/evalution/CompEvalutionRuleUpd.vue'; |
| | | import CompEvalutionSubRuleUpd from './components/evalution/CompEvalutionSubRuleUpd.vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | export default { |
| | | watch: { |
| | | expandKeyId: { |
| | | handler(newObj, oldObj) { |
| | | console.log('expandKeyId', this.expandKeyId); |
| | | }, |
| | | deep: true |
| | | } |
| | | }, |
| | | components: { |
| | | CompEvalutionRuleUpd, |
| | | CompEvalutionSubRuleUpd |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | // è¯åè§ååèç¹ä¿®æ¹é¡µé¢ç¸å
³ |
| | | deleteSubRule(row) { |
| | | evaluateApi.deleteSubRuleById(row.guid).then((res) => { |
| | | if (res == 1) { |
| | | ElMessage({ |
| | | message: 'å 餿å', |
| | | type: 'success' |
| | | }); |
| | | this.refreshTableData(); |
| | | } |
| | | }); |
| | | }, |
| | | editSubRule(row, type) { |
| | | this.subReadOnly = (type == 1); |
| | | this.currEvalutionSubRule = row; |
| | | this.evalutionSubRuleVisible = true; |
| | | }, |
| | | onEvalutionSubRuleUpdated(isOk) { |
| | | this.beforeEvalutionSubRuleDialogClose(); |
| | | if (!isOk) { |
| | | return; |
| | | } |
| | | this.refreshTableData(); |
| | | }, |
| | | beforeEvalutionSubRuleDialogClose() { |
| | | this.evalutionSubRuleVisible = false; |
| | | }, |
| | | // è¯åè§åç¶èç¹ä¿®æ¹é¡µé¢ç¸å
³ |
| | | deleteRule(row) { |
| | | evaluateApi.deleteParentRuleById(row.guid).then((res) => { |
| | | if (res == 1) { |
| | | ElMessage({ |
| | | message: 'å 餿å', |
| | | type: 'success' |
| | | }); |
| | | this.refreshTableData(); |
| | | } |
| | | }); |
| | | }, |
| | | editRule(row, type) { |
| | | this.parentReadOnly = (type == 1); |
| | | this.currEvalutionRule = row; |
| | | this.evalutionRuleVisible = true; |
| | | }, |
| | | onEvalutionRuleUpdated(isOk) { |
| | | this.beforeEvalutionRuleDialogClose(); |
| | | if (!isOk) { |
| | | return; |
| | | } |
| | | this.refreshTableData(); |
| | | }, |
| | | beforeEvalutionRuleDialogClose() { |
| | | this.evalutionRuleVisible = false; |
| | | }, |
| | | // å·æ°åè¡¨æ°æ® |
| | | refreshTableData() { |
| | | setTimeout(() => { |
| | | this.$refs.tableRef.onSearch(); |
| | | }, 1000); |
| | | }, |
| | | |
| | | onSearch(page, func) { |
| | | evaluateApi.getAllParentRules().then((res) => { |
| | | this.expandData = []; |
| | | this.expandKeyId = []; |
| | | res.forEach((element) => { |
| | | element.hasChildren = true; |
| | | // è·ååèç¹å表 |
| | | evaluateApi.getSubRules(element.guid).then((res) => { |
| | | element.children = res.data; |
| | | }); |
| | | }); |
| | | func({ data: res }); |
| | | }); |
| | | }, |
| | | // å è½½åèç¹ |
| | | load(row) { |
| | | var topId = row.guid; |
| | | evaluateApi.getSubRules(topId).then((res) => { |
| | | return res.data; |
| | | }); |
| | | }, |
| | | // å表å±ç¤ºå
容é®å¼å¯¹çæ å°æ¹æ³ |
| | | formatBoolean(row, column, cellValue) { |
| | | if (cellValue == null || cellValue == undefined) { |
| | | return ''; |
| | | } |
| | | return cellValue ? 'æ¯' : 'å¦'; |
| | | }, |
| | | formatRuleType(row, column, cellValue) { |
| | | for (let index = 0; index < this.ruleTypes.length; index++) { |
| | | const item = this.ruleTypes[index]; |
| | | if (item.value == cellValue) { |
| | | return item.label; |
| | | } |
| | | } |
| | | return ''; |
| | | }, |
| | | formatSubRuleType(row, column, cellValue) { |
| | | for (let index = 0; index < this.subRuleTypes.length; index++) { |
| | | const item = this.subRuleTypes[index]; |
| | | if (item.value == cellValue) { |
| | | return item.label; |
| | | } |
| | | } |
| | | return ''; |
| | | }, |
| | | // åæ°æ¨¡å¼ |
| | | formatScoreMode(row, column, cellValue) { |
| | | for (let index = 0; index < this.scoreTypes.length; index++) { |
| | | const item = this.scoreTypes[index]; |
| | | if (item.value == cellValue) { |
| | | return item.label; |
| | | } |
| | | } |
| | | return ''; |
| | | }, |
| | | // å·æ°æ°æ®æ¶ä¿åè¡çå±å¼ç¶æ |
| | | saveExpandedRowsStatus() { |
| | | this.tableData.forEach((item) => { |
| | | if (item.guid == this.expandKeyId) { |
| | | this.$refs.table.toggleRowExpansion(item, true); |
| | | } |
| | | }); |
| | | }, |
| | | // æ©å±æ¯æ¬¡åªè½æå¼ä¸ä¸ª |
| | | expandChange(row, expandedRows) { |
| | | this.expandData = expandedRows; |
| | | if (expandedRows.length == 1) { |
| | | if (!this.expandKeyId) { |
| | | this.expandKeyId = row.guid; |
| | | } |
| | | this.load(row); |
| | | } else if (expandedRows.length >= 2) { |
| | | //å·²ç»å±å¼ä¸è¡ |
| | | this.expandKeyId = expandedRows[expandedRows.length - 1].guid; //è·åæåä¸ä¸ªç¹å¼çrowID |
| | | //éåè¡¨æ ¼æ°æ®ï¼å
³éå
¶ä»çå±å¼è¡ |
| | | this.tableData.map((item) => { |
| | | if (item.guid != this.expandKeyId) { |
| | | this.$refs.table.toggleRowExpansion(item, false); |
| | | } |
| | | }); |
| | | } else { |
| | | //å
³é |
| | | this.expandKeyId = undefined; |
| | | this.expandData = []; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | subReadOnly: false, |
| | | parentReadOnly: false, |
| | | // å½åå±å¼çè¡ |
| | | expandKeyId: [], |
| | | expandData: [], |
| | | // è¯åè§ååèç¹ä¿®æ¹é¡µé¢ç¸å
³ |
| | | currEvalutionSubRule: {}, |
| | | evalutionSubRuleVisible: false, |
| | | // è¯åè§åç¶èç¹ä¿®æ¹é¡µé¢ç¸å
³ |
| | | currEvalutionRule: {}, |
| | | evalutionRuleVisible: false, |
| | | |
| | | tableData: [], |
| | | ruleTypes: [ |
| | | { label: 'è§èæ§', value: '1' }, |
| | | { label: 'è¯å', value: '2' } |
| | | ], |
| | | subRuleTypes: [ |
| | | { label: 'è§èèæ ¸é¡¹', value: 1 }, |
| | | { label: 'è¯å大项', value: 2 }, |
| | | { label: 'è¯åå°é¡¹', value: 3 }, |
| | | { label: 'æå°è¯å项', value: 4 } |
| | | ], |
| | | scoreTypes: [ |
| | | { label: 'åºç¡å', value: 'basic_score' }, |
| | | { label: 'éå å', value: 'addition_score' }, |
| | | { label: 'å忍¡å¼', value: 'minus_mode' }, |
| | | { label: 'å 忍¡å¼', value: 'add_mode' }, |
| | | { label: 'å鿍¡å¼', value: 'single_mode' }, |
| | | { label: 'å¤é模å¼', value: 'multi_mode' }, |
| | | { label: '空', value: 'null' } |
| | | ], |
| | | formSearch: {} |
| | | }; |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <FYForm |
| | | :form-info="formInfo" |
| | | :rules="rules" |
| | | :showButtons="!readonly" |
| | | @submit="submit" |
| | | > |
| | | <template #form-item="{ fyFormInfo }"> |
| | | <el-form-item label="è§ååç§°" prop="rulename"> |
| | | <el-input v-model="formInfo.rulename" :disabled="readonly"></el-input> |
| | | </el-form-item> |
| | | <!-- <FYOptionScene |
| | | :allOption="false" |
| | | :type="2" |
| | | v-model:value="formInfo._scenetype" |
| | | ></FYOptionScene> --> |
| | | <el-form-item label="åºæ¯ç±»å" prop="_scenetype"> |
| | | <el-select v-model="formInfo._scenetype" placeholder="åºæ¯ç±»å" :disabled="readonly"> |
| | | <el-option v-for="s in sceneTypes" :key="s.value" :label="s.label" :value="s" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- åºå¿ --> |
| | | <FYOptionLocation |
| | | :allOption="false" |
| | | :level="3" |
| | | :initValue="false" |
| | | :checkStrictly="true" |
| | | v-model:value="formInfo._locations" |
| | | ></FYOptionLocation> |
| | | <el-form-item label="è§åç±»å" prop="ruletype"> |
| | | <el-select v-model="formInfo.ruletype" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in ruleTypeOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä»»å¡ç±»å" prop="tasktype"> |
| | | <el-select v-model="formInfo.tasktype" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in tasktypeOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦éç¨" prop="suitable"> |
| | | <el-switch v-model="formInfo.suitable" :disabled="readonly"></el-switch> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦å¯ç¨" prop="isuse"> |
| | | <el-switch v-model="formInfo.isuse" :disabled="readonly"></el-switch> |
| | | </el-form-item> |
| | | </template> |
| | | </FYForm> |
| | | </template> |
| | | <script> |
| | | import { enumScene } from '@/enum/scene'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import evaluateApi from '@/api/fysp/evaluateApi'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | export default { |
| | | props: { |
| | | readonly: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | evalutionRule: { |
| | | type: Object, |
| | | default: {} |
| | | } |
| | | }, |
| | | created() { |
| | | this.initFormInfo(); |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | // updateæ¹æ³ |
| | | updateEvalutionRule() { |
| | | return evaluateApi.updateParentRule(this.formInfo); |
| | | }, |
| | | initFormInfo() { |
| | | this.formInfo = useCloned(this.evalutionRule).cloned.value; |
| | | this.parseSceneBaseInfo(this.formInfo); |
| | | }, |
| | | parseSceneBaseInfo(param) { |
| | | const s = param; |
| | | s._scenetype = { |
| | | label: s.scensetype, |
| | | value: s.scensetypeid + '' |
| | | }; |
| | | |
| | | s._locations = { |
| | | pCode: s.provincecode, |
| | | pName: s.provincename, |
| | | cCode: s.citycode, |
| | | cName: s.cityname, |
| | | dCode: s.districtcode, |
| | | dName: s.districtname |
| | | }; |
| | | console.log('param', param); |
| | | }, |
| | | // å 餿 å
³å段 |
| | | deleteExtraField(data) { |
| | | if (!(data instanceof Object)) { |
| | | return; |
| | | } |
| | | for (let i = data.length - 1; i >= 0; i--) { |
| | | if (key.startsWith('_')) { |
| | | delete data[key]; |
| | | } |
| | | } |
| | | }, |
| | | submit(formObj, success, fail) { |
| | | // æ°æ®åå¤ |
| | | this.formInfo.scensetypeid = this.formInfo._scenetype.value; |
| | | this.formInfo.scensetype = this.formInfo._scenetype.label; |
| | | // è¡æ¿åºåä¿¡æ¯å¡«å
|
| | | const a = this.formInfo._locations; |
| | | this.formInfo.provincecode = a.pCode; |
| | | this.formInfo.provincename = a.pName; |
| | | this.formInfo.citycode = a.cCode; |
| | | this.formInfo.cityname = a.cName; |
| | | this.formInfo.districtcode = a.dCode; |
| | | this.formInfo.districtname = a.dName; |
| | | this.deleteExtraField(this.formInfo); |
| | | console.log('æ°æ®å¤çç»æ', this.formInfo); |
| | | |
| | | return new Promise((reslove, reject) => { |
| | | setTimeout(() => { |
| | | this.$emit('updated', true); |
| | | this.updateEvalutionRule().then((res) => { |
| | | if (res != 1) { |
| | | fail(); |
| | | reslove(); |
| | | } |
| | | success(); |
| | | }); |
| | | reslove(); |
| | | }, 1000); |
| | | }); |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | sceneTypes: enumScene(2, false), |
| | | formInfo: {}, |
| | | ruleTypeOptions: [ |
| | | { label: 'è§èæ§', value: '1' }, |
| | | { label: 'è¯å', value: '2' } |
| | | ], |
| | | tasktypeOptions: [ |
| | | { label: 'å·¡æ¥', value: 1 }, |
| | | { label: 'æ 人æºå·¡æ¥', value: 2 }, |
| | | { label: '夿 ¸', value: 3 }, |
| | | { label: 'æ§æ³æ¯æ', value: 4 }, |
| | | { label: 'çæµè¿ç»´', value: 5 }, |
| | | { label: 'æ²»çè¿ç»´', value: 6 }, |
| | | { label: 'æ¹é ', value: 7 }, |
| | | { label: 'æ²»ç', value: 8 }, |
| | | { label: 'å¨è¯¢', value: 9 }, |
| | | { label: 'èªå¨è¯å', value: 99 } |
| | | ] |
| | | }; |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <FYForm :form-info="formInfo" :rules="rules" :showButtons="!readonly" @submit="submit"> |
| | | <template #form-item="{ fyFormInfo }"> |
| | | <el-form-item label="åç§°" prop="itemname"> |
| | | <el-input v-model="formInfo.itemname" :disabled="readonly"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æè¿°" prop="itemdescription"> |
| | | <el-input |
| | | type="textarea" |
| | | v-model="formInfo.itemdescription" |
| | | :disabled="readonly" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æé«å" prop="maxscore"> |
| | | <el-input-number v-model="formInfo.maxscore" :disabled="readonly"></el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="æä½å" prop="minscore"> |
| | | <el-input-number v-model="formInfo.minscore" :disabled="readonly"></el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="é»è®¤å¼" prop="defaultvalue"> |
| | | <el-input-number v-model="formInfo.defaultvalue" :disabled="readonly"></el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="è¯åè§åç±»å" prop="ertype"> |
| | | <el-select v-model="formInfo.ertype" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in subRuleTypeOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | :disabled="item.disabled" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è¯åç±»å" prop="extension1"> |
| | | <el-select v-model="formInfo.extension1" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in score1Types" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å¾å模å¼" prop="extension2"> |
| | | <el-select v-model="formInfo.extension2" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in score2Types" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©æ¨¡å¼" prop="extension3"> |
| | | <el-select v-model="formInfo.extension3" placeholder="è¯·éæ©" :disabled="readonly"> |
| | | <el-option |
| | | v-for="item in score3Types" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input type="textarea" v-model="formInfo.remark" :disabled="readonly"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </FYForm> |
| | | </template> |
| | | <script> |
| | | import { ElMessage } from 'element-plus'; |
| | | import evaluateApi from '@/api/fysp/evaluateApi'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | export default { |
| | | props: { |
| | | readonly: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | evalutionSubRule: { |
| | | type: Object, |
| | | default: {} |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.formInfo = useCloned(this.evalutionSubRule).cloned.value; |
| | | }, |
| | | methods: { |
| | | updateEvalutionSubRule() { |
| | | return evaluateApi.updateSubRule(this.formInfo); |
| | | }, |
| | | submit(formObj, success, fail) { |
| | | return new Promise((reslove, reject) => { |
| | | setTimeout(() => { |
| | | this.$emit('updated', true); |
| | | this.updateEvalutionSubRule().then((res) => { |
| | | if (res != 1) { |
| | | fail(); |
| | | reslove(); |
| | | } |
| | | success(); |
| | | }); |
| | | reslove(); |
| | | }, 1000); |
| | | }); |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | rules: {}, |
| | | formInfo: {}, |
| | | subRuleTypeOptions: [ |
| | | { label: 'è§èèæ ¸é¡¹', value: 1, disabled: true }, |
| | | { label: 'è¯å大项', value: 2 }, |
| | | { label: 'è¯åå°é¡¹', value: 3 }, |
| | | { label: 'æå°è¯å项', value: 4 } |
| | | ], |
| | | score1Types: [ |
| | | { label: 'åºç¡å', value: 'basic_score' }, |
| | | { label: 'éå å', value: 'addition_score' } |
| | | ], |
| | | score2Types: [ |
| | | { label: 'å忍¡å¼', value: 'minus_mode' }, |
| | | { label: 'å 忍¡å¼', value: 'add_mode' } |
| | | ], |
| | | score3Types: [ |
| | | { label: 'å鿍¡å¼', value: 'single_mode' }, |
| | | { label: 'å¤é模å¼', value: 'multi_mode' } |
| | | ] |
| | | }; |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped></style> |
| | |
| | | <template> |
| | | <FYPageHeader title="è¯ä¼°ç»æè¯¦æ
"></FYPageHeader> |
| | | <el-row v-for="item in evaluation" :key="item.id"> |
| | | |
| | | </el-row> |
| | | <el-row v-for="item in evaluation" :key="item.id"> </el-row> |
| | | <div class="btns"> |
| | | <el-button type="primary" @click="submit" :disabled="!isUpdated">æäº¤</el-button> |
| | | </div> |
| | | <el-table |
| | | class="table-style" |
| | | :data="tableData" |
| | | ref="tableRef" |
| | | :span-method="objectSpanMethod" |
| | | table-layout="fixed" |
| | | :cell-style="cellClassName" |
| | | border |
| | | stripe |
| | | > |
| | | <el-table-column v-slot="scope" prop="one_title" label="ä¸çº§ææ " width="200"> |
| | | <!-- <el-checkbox v-model="scope.row.one_select" @change="checked => oneSelectChange(checked, scope.row)">{{ scope.row.one_title }}</el-checkbox> --> |
| | | </el-table-column> |
| | | <el-table-column prop="one_score" label="åå¼" width="55" /> |
| | | <el-table-column prop="one_maxScore" label="æå¤§åå¼" width="90" /> |
| | | <el-table-column v-slot="scope" prop="two_title" label="äºçº§ææ " width="200"> |
| | | <!-- <el-checkbox v-model="scope.row.two_select" @change="checked => twoSelectChange(checked, scope.row)">{{ scope.row.two_title }}</el-checkbox> --> |
| | | </el-table-column> |
| | | <el-table-column prop="two_score" label="åå¼" width="55" /> |
| | | <el-table-column prop="two_maxScore" label="æå¤§åå¼" width="90" /> |
| | | <el-table-column v-slot="scope" prop="three_title" label="å
·ä½é®é¢"> |
| | | <el-checkbox |
| | | v-model="scope.row.three_select" |
| | | @change="(checked) => threeSelectChange(checked, scope.row)" |
| | | >{{ scope.row.three_title }}</el-checkbox |
| | | > |
| | | </el-table-column> |
| | | <el-table-column prop="three_score" label="å项æ£å" width="90" /> |
| | | </el-table> |
| | | </template> |
| | | |
| | | <script> |
| | | import evaluateApi from '@/api/fysp/evaluateApi'; |
| | | import { useFetchData } from '@/composables/fetchData'; |
| | | |
| | | import { ElMessage } from 'element-plus'; |
| | | export default { |
| | | setup() { |
| | | const { loading, fetchData } = useFetchData(); |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | evaluation: [] |
| | | tableData: [], |
| | | evaluation: [], |
| | | subTaskId: '', |
| | | isUpdated: false |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | // // æ¤æ¶ data å·²ç»è¢« observed äº |
| | | // { immediate: true } |
| | | // ); |
| | | this.getScore(); |
| | | }, |
| | | computed: { |
| | | // 已被å¾éçitem |
| | | checkedUpdatedList() { |
| | | var list = []; |
| | | for (let index = 0; index < this.tableData.length; index++) { |
| | | const element = this.tableData[index]; |
| | | if (element.three_select) { |
| | | list.push(element.three_id); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | // è·åè¯å |
| | | getScore() { |
| | | this.fetchData(() => { |
| | | return evaluateApi.fetchItemEvaluation(this.$route.params.subTaskId).then((res) => { |
| | | this.evaluation = res; |
| | | // æ¯ä¸ä¸ªåå
æ ¼çclass |
| | | cellClassName({ row, column, rowIndex, columnIndex }) { |
| | | if (column.property === 'one_score') { |
| | | if (row.one_score < 0) { |
| | | return { color: 'red' }; |
| | | } |
| | | } else if (column.property === 'two_score') { |
| | | if (row.two_score < 0) { |
| | | return { color: 'red' }; |
| | | } |
| | | } else if (column.property === 'three_score') { |
| | | if (row.three_score < 0) { |
| | | return { color: 'red' }; |
| | | } |
| | | } |
| | | return { color: 'black' }; |
| | | }, |
| | | /** æä»· */ |
| | | submit() { |
| | | evaluateApi |
| | | .updateScore({ |
| | | subTaskId: this.subTaskId, |
| | | itemList: this.checkedUpdatedList |
| | | }) |
| | | .then((res) => { |
| | | if (res.success) { |
| | | ElMessage({ |
| | | message: res.message, |
| | | type: 'success' |
| | | }); |
| | | }else { |
| | | ElMessage({ |
| | | message: res.message, |
| | | type: 'error' |
| | | }); |
| | | } |
| | | }); |
| | | setTimeout(() => { |
| | | this.getList(); |
| | | }, 1000); |
| | | }, |
| | | /** éè¿ç¬¬ä¸çº§çidè·åä¸çº§ä»¥å顶级 */ |
| | | getSuperObjByThreeId(threeId, list, path = []) { |
| | | for (let index = 0; index < list.length; index++) { |
| | | const item = list[index]; |
| | | // å°å½å项添å å°è·¯å¾ä¸ |
| | | const currentPath = path.concat(item); |
| | | if (item.id === threeId) { |
| | | // 妿æ¾å°å¹é
ç idï¼è¿åè·¯å¾æ°ç» |
| | | return currentPath; |
| | | } |
| | | const subList = item.subList; |
| | | if (subList) { |
| | | // é彿¥æ¾åå表 |
| | | const result = this.getSuperObjByThreeId(threeId, subList, currentPath); |
| | | if (result) { |
| | | return result; // 妿æ¾å°å¹é
ç idï¼è¿åç»æ |
| | | } |
| | | } |
| | | } |
| | | return null; // å¦ææ²¡ææ¾å°å¹é
ç idï¼è¿å null |
| | | }, |
| | | /** é®é¢éæ©æ¡ */ |
| | | threeSelectChange(isSelect, row) { |
| | | this.isUpdated = true; |
| | | }, |
| | | /** ååå¹¶ */ |
| | | objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
| | | if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2) { |
| | | // 对 ä¸çº§ææ åè¿è¡åå¹¶ |
| | | let rowSpan = 1; |
| | | for (let i = rowIndex + 1; i < this.tableData.length; i++) { |
| | | if (this.tableData[i].one_id === row.one_id) { |
| | | rowSpan++; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | if (rowIndex > 0) { |
| | | if (this.tableData[rowIndex - 1].one_id === row.one_id) { |
| | | return { rowspan: 0, colspan: 0 }; |
| | | } |
| | | } |
| | | return { rowspan: rowSpan, colspan: 1 }; |
| | | } else if (columnIndex === 3 || columnIndex === 4 || columnIndex === 5) { |
| | | // 对 äºçº§ææ åè¿è¡åå¹¶ï¼ç¡®ä¿ ä¸çº§ææ 䏿 · |
| | | let rowSpan = 1; |
| | | for (let i = rowIndex + 1; i < this.tableData.length; i++) { |
| | | if (this.tableData[i].one_id === row.one_id && this.tableData[i].two_id === row.two_id) { |
| | | rowSpan++; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | if (rowIndex > 0) { |
| | | if ( |
| | | this.tableData[rowIndex - 1].one_id === row.one_id && |
| | | this.tableData[rowIndex - 1].two_id === row.two_id |
| | | ) { |
| | | return { rowspan: 0, colspan: 0 }; |
| | | } |
| | | } |
| | | return { rowspan: rowSpan, colspan: 1 }; |
| | | } |
| | | }, |
| | | /** å¯¹è±¡å±æ§æ·è´ */ |
| | | deepCopyWithPrefix(obj, target, prefix) { |
| | | // ç¡®ä¿ target æ¯ä¸ä¸ªå¯¹è±¡ |
| | | if (typeof target !== 'object' || target === null) { |
| | | target = {}; |
| | | } |
| | | |
| | | // éåå¯¹è±¡çææå±æ§ |
| | | for (const key in obj) { |
| | | if (obj.hasOwnProperty(key)) { |
| | | // ä¸ºå±æ§åå ä¸åç¼ |
| | | const newKey = prefix + key; |
| | | // 妿屿§å¼æ¯å¯¹è±¡ï¼åéå½å¤å¶ |
| | | if (typeof obj[key] === 'object' && obj[key] !== null) { |
| | | this.deepCopyWithPrefix(obj[key], (target[newKey] = {}), prefix); |
| | | } else { |
| | | // å¦åç´æ¥å¤å¶å±æ§ |
| | | target[newKey] = obj[key]; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return target; |
| | | }, |
| | | /** @param data åè¡¨æ°æ® */ |
| | | genTableData(data) { |
| | | var result = []; |
| | | if (data) { |
| | | for (let i = 0; i < data.length; i++) { |
| | | const firstLevelItem = data[i]; |
| | | var secondLevel = firstLevelItem.subList; |
| | | if (secondLevel) { |
| | | for (let j = 0; j < secondLevel.length; j++) { |
| | | const secondLevelItem = secondLevel[j]; |
| | | var thirdLevel = secondLevelItem.subList; |
| | | if (thirdLevel) { |
| | | for (let q = 0; q < thirdLevel.length; q++) { |
| | | const thirdLevelItem = thirdLevel[q]; |
| | | var item = {}; |
| | | this.deepCopyWithPrefix(firstLevelItem, item, 'one_'); |
| | | this.deepCopyWithPrefix(secondLevelItem, item, 'two_'); |
| | | this.deepCopyWithPrefix(thirdLevelItem, item, 'three_'); |
| | | result.push(item); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | }, |
| | | getList() { |
| | | this.subTaskId = this.$route.params.subTaskId; |
| | | evaluateApi.fetchItemEvaluation(this.subTaskId).then((res) => { |
| | | this.isUpdated = false; |
| | | this.tableData = this.genTableData(res.data.details); |
| | | }); |
| | | }, |
| | | onSearch(page, func) { |
| | | evaluateApi.fetchItemEvaluation(this.$route.params.subTaskId).then((res) => { |
| | | if (typeof func === 'function') { |
| | | // å¤çæ°æ® |
| | | var data = this.genTableData(res.data); |
| | | |
| | | func({ data: data }); |
| | | } |
| | | this.tableData = this.genTableData(res.data); |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped></style> |
| | | <style scoped> |
| | | .table-style { |
| | | width: 100%; |
| | | padding-bottom: 30px; |
| | | } |
| | | .btns { |
| | | padding-bottom: 10px; |
| | | padding-right: 30px; |
| | | display: flex; |
| | | flex-direction: row-reverse; |
| | | } |
| | | /* æ¹åè¡¨æ ¼å
åå
æ ¼è¾¹æ¡é¢è² */ |
| | | .el-table { |
| | | --el-table-border-color: #000000; |
| | | } |
| | | .red-cell { |
| | | background-color: red; |
| | | } |
| | | </style> |