515 lines
20 KiB
515 lines
20 KiB
<!-- 站点列表 -->
|
|
<!-- :filters="[{text: '2016-05-01', value: '2016-05-01'}, {text: '2016-05-02', value: '2016-05-02'}, {text: '2016-05-03', value: '2016-05-03'}, {text: '2016-05-04', value: '2016-05-04'}]"
|
|
:filter-method="filterHandler" -->
|
|
<template>
|
|
<div class="siteList-wrap column">
|
|
<div class="siteList-main ">
|
|
<div class="flex-between site-top">
|
|
<div class="left flex">
|
|
<h2>站点列表</h2>
|
|
<GuipButton size="medium" class="addgroupBtn" type="normal"
|
|
:btnstyle="{ width: '115px', hright: '32px' }" @click="addGroupVisiable = true">
|
|
<img src="@/assets/site/addIcon.svg" alt="">新增分组
|
|
</GuipButton>
|
|
<div style="width: 120px;">
|
|
<GuipSelectFilter v-model="selectedValue" :options="options" :searchable="true" placeholder="请选择"
|
|
:filter-method="customFilter" search-placeholder="搜索..." />
|
|
</div>
|
|
|
|
<!-- <searchable-select :styleObj="{
|
|
'width': '140px', 'height': '32px'
|
|
}" v-model="selectedValue1" :options="options1" :searchable="true" placeholder="请选择"
|
|
search-placeholder="关键词搜索" @change="handleChange" />
|
|
<el-form>
|
|
<GuipSelect width="600px" v-model="selectedValue" :options="options" defaultValue="选项1" />
|
|
</el-form>
|
|
-->
|
|
<!-- <GuipSelectFilter2
|
|
v-model="selectedValue"
|
|
:options="options1"
|
|
:searchable="true"
|
|
placeholder="请选择水果"
|
|
search-placeholder="搜索水果名称"
|
|
no-data-text="没有找到匹配的水果"
|
|
@change="handleFruitChange"
|
|
/> -->
|
|
</div>
|
|
<div class="right">
|
|
<GuipButton size="medium" @click="addSite" :btnstyle="btnstyleObj_add" type="primary">新增站点
|
|
</GuipButton>
|
|
</div>
|
|
</div>
|
|
<el-form>
|
|
<el-table :data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)"
|
|
style="width: 100%" :key="random()">
|
|
<!-- 其他列 -->
|
|
<el-table-column prop="name" label="站点简称" width="210">
|
|
<template slot-scope="scope">
|
|
<a class="name_link flex cell_render" :href="scope.row.link" target="_blank">
|
|
{{ scope.row.name }}
|
|
<img class="edit_icon" src="@/assets/site/form_link.svg" alt="">
|
|
</a>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="registerDate" label="注册时间"></el-table-column>
|
|
|
|
<!-- 价格列 -->
|
|
<el-table-column label="站点分组" prop="group">
|
|
<template slot-scope="scope">
|
|
<!-- <a class="name_link flex cell_render" :href="scope.row.link" target="_blank">
|
|
{{ scope.row.name }}
|
|
<img class="edit_icon" src="@/assets/site/form_link.svg" alt="">
|
|
</a> -->
|
|
<!-- <searchable-select slot="reference" :styleObj="{ 'width': '140px', 'height': '32px','position': 'absolute',
|
|
'z-index': '1119' }" v-model="scope.row.group"
|
|
:options="options1" :searchable="true" placeholder="请选择" search-placeholder="关键词搜索"
|
|
@change="handleChange" /> -->
|
|
<!-- <GuipSelect width="600px" v-model="scope.row.group" prop="card" :options="options"
|
|
defaultValue="选项1" /> -->
|
|
<GuipSelectFilter v-model="scope.row.group" :options="options" :searchable="true"
|
|
placeholder="请选择" :filter-method="customFilter" search-placeholder="搜索..." />
|
|
<!-- <GuipSelectFilter2
|
|
v-model="scope.row.group"
|
|
:options="options1"
|
|
:searchable="true"
|
|
placeholder="请选择水果"
|
|
search-placeholder="搜索水果名称"
|
|
no-data-text="没有找到匹配的水果"
|
|
@change="handleFruitChange"
|
|
/> -->
|
|
</template>
|
|
<!-- <template v-slot="{ row, $index }">
|
|
<el-popover v-model="row.group_popover" placement="top" trigger="manual"
|
|
:ref="`popover-${$index}`" @show="popshow">
|
|
<searchable-select slot="reference" :styleObj="{ 'width': '140px', 'height': '32px' }" v-model="selectedValue1"
|
|
:options="options1" :searchable="true" placeholder="请选择" search-placeholder="关键词搜索"
|
|
@change="handleChange" >
|
|
<span @click="handlePriceClick(row, $index, 'group')">
|
|
<div class="flex cell_render">
|
|
<span v-if="row.group" :key="random()">{{ groupList[row.group] }}</span>
|
|
<img class="edit_icon" src="@/assets/site/drop_icon.svg" alt="">
|
|
</div>
|
|
</span>
|
|
</searchable-select>
|
|
</el-popover>
|
|
</template> -->
|
|
</el-table-column>
|
|
<el-table-column prop="phoneService" label="手机服务" :filters="phoneService"
|
|
:filter-method="filterHandler">
|
|
</el-table-column>
|
|
<!-- <el-table-column prop="department" label="部门">
|
|
<template #default="{ row, $index }">
|
|
<template v-if="editingIndex === $index">
|
|
<searchable-select v-model="row.department" :options="departmentOptions"
|
|
@change="handleDepartmentChange(row, $index)" @click.native.stop />
|
|
</template>
|
|
<template v-else>
|
|
<span @click="startEditing($index)">{{ row.department }}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column> -->
|
|
<el-table-column prop="status" label="状态" width="195">
|
|
<template v-slot="{ row, $index }">
|
|
<el-popover v-model="row.status_popover" placement="top" trigger="manual"
|
|
:ref="`popover-${$index}`" @show="popshow">
|
|
<!-- 弹框内容 -->
|
|
<div class="statusList">
|
|
<p class="flex">
|
|
<img style="margin-right: 8px;" src="@/assets/site/info_filled.svg"
|
|
alt="">自有域名验证未通过
|
|
</p>
|
|
<p class="flex" style="margin: 12px 0;">
|
|
<img style="margin-right: 8px;" src="@/assets/site/info_filled.svg"
|
|
alt="">收款方式未配置
|
|
</p>
|
|
<p class="flex">
|
|
<img style="margin-right: 8px;" src="@/assets/site/info_filled.svg"
|
|
alt="">支付宝收款账号未配置
|
|
</p>
|
|
</div>
|
|
<!-- 触发弹框的按钮 -->
|
|
<span slot="reference" @click="handlePriceClick(row, $index, 'status')">
|
|
<div class="flex cell_render">
|
|
<span :class="(row.status == '0' ? 'in_services' : 'in_config')">{{
|
|
row.status == '0' ? '运行中' : '配置中' }}</span>
|
|
<img class="edit_icon" v-if="row.status == '1'"
|
|
src="@/assets/site/more_setIcon.png" alt="">
|
|
</div>
|
|
</span>
|
|
|
|
</el-popover>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column fixed="right" label="操作" width="182">
|
|
<template slot-scope="scope">
|
|
<div class="flex">
|
|
<el-button @click="handleServiceClick(scope.row)" type="text">服务列表</el-button>
|
|
<el-button @click="handleSetClick(scope.row)" type="text">站点设置</el-button>
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-pagination background @size-change='handleSizeChange' @current-change='handleCurrentChange'
|
|
:current-page="currentPage" :page-size=pageSize layout="prev, pager, next,jumper"
|
|
:total="tableData.length">
|
|
</el-pagination>
|
|
</el-form>
|
|
</div>
|
|
<GuipDialog type="normal" width="396px" :dialogVisible="addGroupVisiable" title="温馨提示" :show-close-button="false"
|
|
:show-cancel-button="true" cancelText="取消" confirmText="确定" @confirm="handleConfirmAddGroup" @cancel="handleCancelAddGroup"
|
|
@dialogVisibleChange="dialogVisibleChange">
|
|
<el-input ref="GuipInput" width="252px" v-model="groupName" label="分组名称" placeholder="请输入名称" />
|
|
</GuipDialog>
|
|
<Footer></Footer>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import Footer from '@/components/Footer.vue';
|
|
// import GuipInput from '@/components/GuipInput.vue';
|
|
import GuipButton from '@/components/GuipButton.vue';
|
|
// import GuipSelect from '@/components/GuipSelect.vue';
|
|
import GuipSelectFilter from '@/components/GuipSelectFilter.vue';
|
|
import GuipDialog from '@/components/GuipDialog.vue';
|
|
// import SearchableSelect from '@/components/GuipSelectFilter1.vue';
|
|
// import GuipSelectFilter2 from '@/components/GuipSelectFilter2.vue';
|
|
// import SearchableSelect from '@/components/GuipSelectFilter2.vue'
|
|
export default {
|
|
name: 'sitelist',
|
|
components: {
|
|
// HelloWorld
|
|
// GuipInput,
|
|
GuipDialog,
|
|
GuipSelectFilter,
|
|
// SearchableSelect,
|
|
// GuipSelectFilter2,
|
|
// SearchableSelect,
|
|
// GuipSelect,
|
|
Footer,
|
|
GuipButton
|
|
},
|
|
data() {
|
|
return {
|
|
searchText: '',
|
|
filteredOptions: this.options,
|
|
editingIndex: -1,
|
|
groupName: '',//分组名称
|
|
addGroupVisiable: false,
|
|
selectedValue: '',
|
|
fruitOptions: [
|
|
{ label: '苹果', value: 'apple' },
|
|
{ label: '香蕉', value: 'banana' },
|
|
{ label: '橙子', value: 'orange' },
|
|
{ label: '葡萄', value: 'grape' },
|
|
{ label: '西瓜', value: 'watermelon' },
|
|
{ label: '菠萝', value: 'pineapple' }
|
|
],
|
|
options: [
|
|
{ label: '选项1', value: '1' },
|
|
{ label: '选项2', value: '2' },
|
|
{ label: '选项3', value: '3' },
|
|
// 更多选项...
|
|
],
|
|
selectedValue1: '',
|
|
options1: [
|
|
{ label: '苹果', value: '1' },
|
|
{ label: '香蕉', value: '2' },
|
|
{ label: '橙子', value: '22' },
|
|
{ label: '葡萄', value: '13' },
|
|
{ label: '西瓜', value: '31' },
|
|
{ label: '菠萝', value: '32' },
|
|
{ label: '菠萝1', value: '14' },
|
|
{ label: '菠萝2', value: '15' },
|
|
{ label: '菠萝21', value: '156' },
|
|
{ label: '菠萝22', value: '24' },
|
|
],
|
|
btnstyleObj_add: {
|
|
width: '90px',
|
|
height: '30px'
|
|
},
|
|
tableData: [
|
|
{
|
|
name: '哈哈哈',
|
|
link: 'http://www.chachongz.com',
|
|
registerDate: '2025.02.18',
|
|
group: '1',
|
|
phoneService: '撒大事',
|
|
status: '1',//配置中中
|
|
},
|
|
{
|
|
name: '知网学诚教育',
|
|
link: 'http://new.checkcopy.com',
|
|
registerDate: '2025.02.18',
|
|
group: '2',
|
|
phoneService: '设计部',
|
|
status: '0',//运行中
|
|
},
|
|
],
|
|
groupList: {
|
|
1: '内部测试',
|
|
2: '查重站点'
|
|
},
|
|
phoneServicelist:
|
|
{
|
|
0: '不限',
|
|
1: ' H5',
|
|
2: '小程序',
|
|
3: '无手机服务'
|
|
|
|
},
|
|
currentPage: 1, //当前页
|
|
pageSize: 2, //每页的容量
|
|
total: 0, //列表总数
|
|
phoneService: [
|
|
{
|
|
text: '不限',
|
|
value: '0'
|
|
},
|
|
{
|
|
text: 'H5',
|
|
value: '1'
|
|
},
|
|
{
|
|
text: '小程序',
|
|
value: '2'
|
|
},
|
|
{
|
|
text: 'H5以及小程序',
|
|
value: '3'
|
|
},
|
|
]
|
|
}
|
|
},
|
|
mounted() {
|
|
const list = ['group', 'status']
|
|
list.forEach(item => {
|
|
this.tableData = this.tableData.map(item1 => {
|
|
item1[item + '_popover'] = false
|
|
return {
|
|
...item1,
|
|
}
|
|
})
|
|
})
|
|
console.log(this.tableData, '000--');
|
|
|
|
},
|
|
methods: {
|
|
// 处理搜索输入
|
|
handleSearch(keyword) {
|
|
console.log(keyword,'keyword---');
|
|
if (this.filterMethod && typeof this.filterMethod === 'function') {
|
|
// 使用自定义筛选方法
|
|
this.filteredOptions = this.filterMethod(keyword, this.options)
|
|
} else {
|
|
// 默认筛选方法
|
|
if (!keyword) {
|
|
this.filteredOptions = this.options
|
|
} else {
|
|
const lowerKeyword = keyword.toLowerCase()
|
|
this.filteredOptions = this.options.filter(item => {
|
|
const label = item[this.labelKey] || ''
|
|
return label.toString().toLowerCase().includes(lowerKeyword)
|
|
})
|
|
}
|
|
}
|
|
},
|
|
startEditing(index) {
|
|
this.editingIndex = index
|
|
// 保存原始数据以便取消编辑时恢复
|
|
this.originalData = JSON.parse(JSON.stringify(this.tableData[index]))
|
|
},
|
|
|
|
saveEditing() {
|
|
this.editingIndex = -1
|
|
this.originalData = null
|
|
this.$message.success('保存成功')
|
|
},
|
|
|
|
cancelEditing() {
|
|
if (this.originalData) {
|
|
this.$set(this.tableData, this.editingIndex, this.originalData)
|
|
}
|
|
this.editingIndex = -1
|
|
this.originalData = null
|
|
},
|
|
|
|
handleDepartmentChange(row, index) {
|
|
console.log('部门已修改:', index, row.department)
|
|
// 可以在这里添加部门变更后的逻辑
|
|
},
|
|
// 确认按钮事件
|
|
handleConfirmAddGroup() {
|
|
this.$message.success('点击了确认按钮');
|
|
this.addGroupVisiable = false;
|
|
},
|
|
// 取消按钮事件
|
|
handleCancelAddGroup() {
|
|
this.$message.warning('点击了取消按钮');
|
|
this.addGroupVisiable = false;
|
|
},
|
|
dialogVisibleChange(data) {
|
|
console.log(data, 'data098908090');
|
|
},
|
|
handleChange(value) {
|
|
console.log('选中值变化:', value)
|
|
},
|
|
popshow() {
|
|
var ariaEls = document.querySelectorAll('.el-popover')
|
|
ariaEls.forEach((item) => {
|
|
item.removeAttribute('aria-hidden')
|
|
})
|
|
|
|
ariaEls = document.querySelectorAll('.el-radio__original')
|
|
ariaEls.forEach((item) => {
|
|
item.removeAttribute('aria-hidden')
|
|
})
|
|
},
|
|
random() {
|
|
var randomNumber = Math.random();
|
|
return randomNumber
|
|
},
|
|
handleSizeChange(val) {
|
|
this.pageSize = val
|
|
},
|
|
handleCurrentChange(val) {
|
|
this.currentPage = val
|
|
},
|
|
// 列筛选
|
|
filterHandler(value, row, column) {
|
|
const property = column['property'];
|
|
return row[property] === value;
|
|
},
|
|
handleSetClick(row) {
|
|
console.log(row);
|
|
},
|
|
handleServiceClick(row) {
|
|
console.log(row);
|
|
},
|
|
addGroup() {
|
|
// 新增分组
|
|
},
|
|
addSite() {
|
|
// 新增站点
|
|
},
|
|
// 自定义搜索筛选
|
|
customFilter(keyword, options) {
|
|
if (!keyword) return options
|
|
return options.filter(item => {
|
|
// 自定义筛选逻辑
|
|
return item.label.includes(keyword) || item.value.includes(keyword)
|
|
})
|
|
},
|
|
customFilter1(keyword, options) {
|
|
if (!keyword) return options
|
|
// 自定义筛选逻辑,比如同时匹配 label 和 value
|
|
return options.filter(item => {
|
|
return (
|
|
item.label.includes(keyword) ||
|
|
item.value.toString().includes(keyword)
|
|
)
|
|
})
|
|
},
|
|
handleFruitChange(value) {
|
|
console.log('水果选择变化:', value)
|
|
},
|
|
// 气泡弹出框
|
|
handlePriceClick(row, index, type) {
|
|
// 关闭其他行的弹框
|
|
this.tableData.forEach((item, i) => {
|
|
if (i !== index) {
|
|
item[type + '_popover'] = false;
|
|
}
|
|
});
|
|
// 打开当前行的弹框
|
|
row[type + '_popover'] = true;
|
|
row['edit_' + type] = row[type]
|
|
// row.edit_price = row.price; // 初始化输入框的值
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
::v-deep .el-popover {
|
|
padding: 24px 32px !important;
|
|
}
|
|
|
|
.siteList-wrap {
|
|
padding: 12px 12px 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
box-sizing: border-box;
|
|
|
|
.in_services {
|
|
color: #0DAF49;
|
|
}
|
|
|
|
.in_config {
|
|
color: #FF4D4F;
|
|
}
|
|
|
|
.addgroupBtn {
|
|
margin: 0 12px;
|
|
|
|
img {
|
|
margin-right: 4px;
|
|
}
|
|
}
|
|
|
|
.siteList-main {
|
|
flex: 1;
|
|
padding: 32px 36px;
|
|
border-radius: 4px;
|
|
box-sizing: border-box;
|
|
width: 100%;
|
|
background: #FFFFFF;
|
|
|
|
.site-top {
|
|
margin-bottom: 32px;
|
|
|
|
.left {
|
|
|
|
h2 {
|
|
margin: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.statusList {
|
|
padding: 24px 32px;
|
|
|
|
img {
|
|
margin-right: 8px;
|
|
}
|
|
|
|
p {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
letter-spacing: 0.08em;
|
|
color: #1E2226;
|
|
}
|
|
|
|
.edit_icon {
|
|
width: 16px;
|
|
height: 16px;
|
|
display: none;
|
|
transition: all .3s;
|
|
margin-left: 8px;
|
|
}
|
|
|
|
.name_link {
|
|
text-decoration: none;
|
|
color: #1E2226;
|
|
}
|
|
|
|
.el-table__row:hover {
|
|
.edit_icon {
|
|
display: block;
|
|
transition: all .3s;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
</style>
|