| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="topic-dialog"> |
| | | <div class="topicdia"> |
| | | <div style="overflow-x: hidden; overflow-y: auto; max-height: 65vh"> |
| | | <!-- ä¿®æ¹è¿éï¼ä½¿ç¨ processedTopicList è䏿¯ topicList --> |
| | | <div |
| | | v-for="(item, index) in processedTopicList" |
| | | :key="item.scriptid" |
| | | class="ttaabbcc" |
| | | > |
| | | <div class="describe"> |
| | | 第{{ index + 1 }}é¢ï¼ {{ item.scriptContent }} |
| | | <span>[{{ item.scriptType == 1 ? "åéé¢" : "å¤éé¢" }}]</span> |
| | | </div> |
| | | <div> |
| | | <el-table :data="item.details" style="width: 100%"> |
| | | <el-table-column |
| | | prop="optionText" |
| | | label="é®é¢é项" |
| | | align="center" |
| | | min-width="200" |
| | | /> |
| | | <el-table-column |
| | | prop="chosenQuantity" |
| | | label="éæ©äººæ°" |
| | | align="center" |
| | | min-width="120" |
| | | > |
| | | <template slot-scope="{ row }"> |
| | | {{ row.chosenQuantity || 0 }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="chosenPercentage" |
| | | label="æ¯ä¾" |
| | | align="center" |
| | | min-width="120" |
| | | > |
| | | <template slot-scope="{ row }"> |
| | | <span |
| | | v-if=" |
| | | row.chosenPercentage !== null && |
| | | row.chosenPercentage !== undefined |
| | | " |
| | | > |
| | | {{ (Number(row.chosenPercentage) * 100).toFixed(2) }}% |
| | | </span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å¦ææ²¡ææ°æ® --> |
| | | <div |
| | | v-if="!processedTopicList.length" |
| | | class="no-data" |
| | | style="text-align: center; padding: 50px 0" |
| | | > |
| | | <el-empty description="ææ æ°æ®"></el-empty> |
| | | </div> |
| | | |
| | | <div |
| | | slot="footer" |
| | | class="dialog-footer" |
| | | style="text-align: center; padding-top: 20px" |
| | | > |
| | | <el-button @click="handleClose">å
³ é</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "TopicDialog", |
| | | props: { |
| | | rowData: { |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | queryParams: { |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | topicList: { |
| | | type: [Array, Object], |
| | | default: () => ({}), |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | processedTopicList: [], // å¤çåçæ°æ® |
| | | }; |
| | | }, |
| | | watch: { |
| | | // çå¬ç¶ç»ä»¶ä¼ éçæ°æ®åå |
| | | topicList: { |
| | | immediate: true, |
| | | handler(newVal) { |
| | | console.log("TopicDialogæ¥æ¶å°ç¶ç»ä»¶æ°æ®:", newVal); |
| | | this.processTopicList(newVal); |
| | | }, |
| | | }, |
| | | }, |
| | | mounted() { |
| | | console.log("TopicDialog mounted, props:", this.$props); |
| | | }, |
| | | methods: { |
| | | // å¤çtopicListæ°æ® |
| | | processTopicList(data) { |
| | | console.log("å¼å§å¤çæ°æ®:", data); |
| | | |
| | | if (!data || typeof data !== "object") { |
| | | this.processedTopicList = []; |
| | | return; |
| | | } |
| | | |
| | | // å°å¯¹è±¡è½¬æ¢ä¸ºæ°ç» |
| | | const result = []; |
| | | |
| | | Object.keys(data).forEach((key) => { |
| | | const item = data[key]; |
| | | if (item && item.scriptContent) { |
| | | // æ·±æ·è´itemï¼é¿å
ä¿®æ¹åæ°æ® |
| | | const processedItem = JSON.parse(JSON.stringify(item)); |
| | | |
| | | // è¿æ»¤detailsï¼åªä¿çæéé¡¹ææ¬ç |
| | | if (processedItem.details && Array.isArray(processedItem.details)) { |
| | | processedItem.details = processedItem.details.filter( |
| | | (detail) => detail && detail.optionText |
| | | ); |
| | | } |
| | | |
| | | result.push(processedItem); |
| | | } |
| | | }); |
| | | |
| | | console.log("å¤çåçæ°æ®:", result); |
| | | this.processedTopicList = result; |
| | | }, |
| | | |
| | | // æ ¼å¼åç¾åæ¯ |
| | | formatPercent(value) { |
| | | if (value === null || value === undefined) return "-"; |
| | | const num = parseFloat(value); |
| | | if (isNaN(num)) return "-"; |
| | | return `${num.toFixed(2)}%`; // 注æï¼ä½ çæ°æ®ä¸ç¾åæ¯å·²ç»æ¯0-100çå½¢å¼ |
| | | }, |
| | | |
| | | // å
³éå¯¹è¯æ¡ |
| | | handleClose() { |
| | | this.$emit("close"); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .topic-dialog { |
| | | .topicdia { |
| | | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, |
| | | "Helvetica Neue", Arial, sans-serif; |
| | | color: #333; |
| | | } |
| | | |
| | | .ttaabbcc { |
| | | background: #fafafa; |
| | | border-radius: 6px; |
| | | padding: 16px; |
| | | margin-bottom: 20px; |
| | | border-left: 4px solid #4794c5; |
| | | } |
| | | |
| | | .describe { |
| | | font-size: 15px; |
| | | line-height: 1.6; |
| | | margin-bottom: 12px; |
| | | color: #1f2d3d; |
| | | } |
| | | |
| | | .describe span { |
| | | font-size: 13px; |
| | | color: #999; |
| | | font-style: italic; |
| | | margin-left: 8px; |
| | | } |
| | | |
| | | ::v-deep .el-table { |
| | | border-radius: 4px; |
| | | overflow: hidden; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | ::v-deep .el-table th { |
| | | background-color: #f1f5f9; |
| | | color: #333; |
| | | font-weight: 600; |
| | | } |
| | | |
| | | ::v-deep .el-table td { |
| | | border-bottom: 1px solid #f0f0f0; |
| | | padding: 12px 0; |
| | | } |
| | | } |
| | | </style> |