refactor(component): 重构组件模板与样式结构
将公共样式提取至public.css,优化组件模板结构 添加图片资源与组件模板同步脚本 调整组件样式与布局,统一风格
This commit is contained in:
38
component/item-vote/item-vote.js
Normal file
38
component/item-vote/item-vote.js
Normal file
@@ -0,0 +1,38 @@
|
||||
// my-component.js
|
||||
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入,Vue 已挂载到 window)
|
||||
const { defineComponent, ref } = Vue;
|
||||
import { itemBottom } from "../item-bottom/item-bottom.js";
|
||||
import { itemHead } from "../item-head/item-head.js";
|
||||
|
||||
// 定义组件(直接使用模板)
|
||||
export const itemVote = defineComponent({
|
||||
name: "item-vote",
|
||||
props: {
|
||||
itemdata: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
let item = ref({ ...props.itemdata });
|
||||
// item.value.title = "【投41票】" + item.value.title;
|
||||
// res["timestamp"] = util.strtimeago(res.release_at, 4);
|
||||
// const data = res.data;
|
||||
// const option = data.option || [];
|
||||
// res["isvote"] = option.some((item) => item.selected == 1);
|
||||
// const time = util.handleDeadline(data.deadline);
|
||||
// res["time"] = time;
|
||||
// this.setData({
|
||||
// item: res,
|
||||
// });
|
||||
return { item };
|
||||
},
|
||||
|
||||
components: {
|
||||
itemBottom,
|
||||
itemHead,
|
||||
},
|
||||
|
||||
template: `<div class="item-box item-vote"> <item-head :itemdata="item"></item-head> <div class="title">{{ item.title }}</div> <div class="message one-line-display" v-if="item.content">{{ item.content }}</div> <div class="info flexacenter"> <template v-if="item.time"> <div class="status">进行中</div> <div class="line"></div> <div class="num">{{ item?.time.num }}</div>{{ item.time.unit }}后结束 </template> <div v-else class="status end">已结束</div> <div class="line"></div> <div class="num">{{ item?.data?.votes }}</div>人参与 </div> <div class="list" :class="{ 'voted': !item.time || item.isvote }"> <div class="list-item flexcenter " v-for="(item, index) in item?.data?.option" :key="index"> <div class="list-top flexacenter"> <img v-if="item.selected" class="list-tick" src="/img/vote-tick.svg"> <div v-else class="list-serial flexcenter">{{ index + 1 }}</div> <div class="list-text one-line-display flex1">{{ item.value }}</div> </div> <div class="list-bottom flexacenter"> <div class="list-length" :style="{ width: item.percentage + '%' }"></div>{{ item.count }} </div> </div> </div> <item-bottom :itemdata="item"></item-bottom></div>`,
|
||||
});
|
||||
29
component/item-vote/item-vote.txt
Normal file
29
component/item-vote/item-vote.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
<div class="item-box item-vote">
|
||||
<item-head :itemdata="item"></item-head>
|
||||
<div class="title">{{ item.title }}</div>
|
||||
<div class="message one-line-display" v-if="item.content">{{ item.content }}</div>
|
||||
<div class="info flexacenter">
|
||||
<template v-if="item.time">
|
||||
<div class="status">进行中</div>
|
||||
<div class="line"></div>
|
||||
<div class="num">{{ item?.time.num }}</div>{{ item.time.unit }}后结束
|
||||
</template>
|
||||
<div v-else class="status end">已结束</div>
|
||||
<div class="line"></div>
|
||||
<div class="num">{{ item?.data?.votes }}</div>人参与
|
||||
</div>
|
||||
|
||||
<div class="list" :class="{ 'voted': !item.time || item.isvote }">
|
||||
<div class="list-item flexcenter " v-for="(item, index) in item?.data?.option" :key="index">
|
||||
<div class="list-top flexacenter">
|
||||
<img v-if="item.selected" class="list-tick" src="/img/vote-tick.svg">
|
||||
<div v-else class="list-serial flexcenter">{{ index + 1 }}</div>
|
||||
<div class="list-text one-line-display flex1">{{ item.value }}</div>
|
||||
</div>
|
||||
<div class="list-bottom flexacenter">
|
||||
<div class="list-length" :style="{ width: item.percentage + '%' }"></div>{{ item.count }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<item-bottom :itemdata="item"></item-bottom>
|
||||
</div>
|
||||
Reference in New Issue
Block a user