提交 63ad166f authored 作者: 王鹏飞's avatar 王鹏飞

chore: add vite-plugin-checker; fix eslint error

上级 25ad89c0
差异被折叠。
......@@ -58,6 +58,7 @@
"typescript": "~5.6.3",
"unplugin-auto-import": "^0.18.3",
"vite": "^5.4.10",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-mkcert": "^1.17.6",
"vue-tsc": "^2.1.10"
}
......
<script setup lang="ts">
import { Delete, Edit, MoreFilled, EditPen, User, Avatar, PieChart, UserFilled, View } from '@element-plus/icons-vue'
import { Delete, MoreFilled, EditPen, User, Avatar, PieChart, UserFilled, View } from '@element-plus/icons-vue'
import { ElMessageBox, ElMessage } from 'element-plus'
import Icon from '@/components/ConnectionIcon.vue'
import { deleteConnection } from '../api'
......@@ -27,7 +27,7 @@ const emits = defineEmits([
'generateUserData',
'generateEventData',
'viewDataProgress',
'handleStudentFollow'
'handleStudentFollow',
])
// 删除
......@@ -49,7 +49,7 @@ const edit = function () {
}
const iconMap: Record<string, string> = {
'13': '99',
'14': '100'
'14': '100',
}
const generateUserData = function () {
......@@ -81,7 +81,12 @@ const handleStudentFollow = function () {
<el-icon size="20" color="#333"><Delete /></el-icon>
</div> -->
<div class="connect-item__icon">
<Icon w="40" h="40" :multiColor="true" class="svg" :name="data.type === '15' ? 'mall' : iconMap[data.type] || data.type"></Icon>
<Icon
w="40"
h="40"
:multiColor="true"
class="svg"
:name="data.type === '15' ? 'mall' : iconMap[data.type] || data.type"></Icon>
</div>
</div>
<div class="connect-item_bottom">
......
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import type { OtherFields } from '../types'
import { RemoveFilled, CirclePlusFilled } from '@element-plus/icons-vue'
......@@ -14,7 +13,7 @@ const fieldsType: any = {
2: '整数',
3: '数字',
4: '日期',
5: '时间'
5: '时间',
}
const ruleTips: any = {
......@@ -22,7 +21,7 @@ const ruleTips: any = {
2: '最大位数',
3: '小数点后位数',
4: '格式',
5: '格式'
5: '格式',
}
const add = function (item: any) {
......@@ -35,15 +34,19 @@ const remove = function (item: any, index: number) {
</script>
<template>
<el-form-item v-for="item in props.data" :label="item.name">
<el-form-item v-for="(item, index) in props.data" :label="item.name" :key="index">
<div>
<el-radio-group v-model="item.rule.type">
<el-radio :value="2">指定随机</el-radio>
<el-radio :value="1">固定</el-radio>
</el-radio-group>
<p class="specify-tips">字段类型:{{ fieldsType[item.type] }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ ruleTips[item.type] }}{{ item.format }}</p>
<p class="specify-tips">
字段类型:{{ fieldsType[item.type] }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ ruleTips[item.type] }}{{
item.format
}}
</p>
<div class="specify" v-if="item.rule.type === 2">
<div class="specify-item" v-for="(specify, index) in item.rule.rand_value">
<div class="specify-item" v-for="(specify, index) in item.rule.rand_value" :key="index">
<!-- 字符串 -->
<template v-if="parseInt(item.type) === 1">
<el-input v-model="specify.value" placeholder="请输入"></el-input>
......@@ -62,11 +65,24 @@ const remove = function (item: any, index: number) {
</template>
<!-- 日期 -->
<template v-if="parseInt(item.type) === 4">
<el-date-picker placeholder="请选择随机日期最小值" style="width: 200px" value-format="YYYY-MM-DD" v-model="specify.min" />
<el-date-picker placeholder="请选择随机日期最大值" style="width: 200px; margin-left: 15px" value-format="YYYY-MM-DD" v-model="specify.max" />
<el-date-picker
placeholder="请选择随机日期最小值"
style="width: 200px"
value-format="YYYY-MM-DD"
v-model="specify.min" />
<el-date-picker
placeholder="请选择随机日期最大值"
style="width: 200px; margin-left: 15px"
value-format="YYYY-MM-DD"
v-model="specify.max" />
</template>
<template v-if="parseInt(item.type) === 5">
<el-date-picker placeholder="请选择随机时间最小值" v-model="specify.min" style="width: 200px" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" />
<el-date-picker
placeholder="请选择随机时间最小值"
v-model="specify.min"
style="width: 200px"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" />
<el-date-picker
placeholder="请选择随机时间最大值"
v-model="specify.max"
......@@ -82,7 +98,11 @@ const remove = function (item: any, index: number) {
style="margin-left: 10px; cursor: pointer"
><CirclePlusFilled
/></el-icon>
<el-icon @click="remove(item.rule.rand_value, index)" size="20" style="margin-left: 10px; cursor: pointer" v-if="item.rule.rand_value.length > 1"
<el-icon
@click="remove(item.rule.rand_value, index)"
size="20"
style="margin-left: 10px; cursor: pointer"
v-if="item.rule.rand_value.length > 1"
><RemoveFilled
/></el-icon>
</template>
......@@ -97,7 +117,11 @@ const remove = function (item: any, index: number) {
</div>
<div v-else>
<template v-if="parseInt(item.type) === 4">
<el-date-picker placeholder="请选择固定属性值" style="width: 200px" value-format="YYYY-MM-DD" v-model="item.rule.fixed_value" />
<el-date-picker
placeholder="请选择固定属性值"
style="width: 200px"
value-format="YYYY-MM-DD"
v-model="item.rule.fixed_value" />
</template>
<template v-else-if="parseInt(item.type) === 5">
<el-date-picker
......
<script setup lang="ts">
import { studentSubmitForm, studentSubmitLog } from '../api'
import { ElMessage } from 'element-plus'
import type { StudentFollow } from '../types'
import type { FormInstance, FormRules } from 'element-plus'
import Icon from '@/components/ConnectionIcon.vue'
......@@ -34,13 +33,13 @@ const ruleForm = reactive<RuleForm>({
name: '',
mobile: '',
gender: '1',
experiment_connection_id: ''
experiment_connection_id: '',
})
const rules = reactive<FormRules<RuleForm>>({
name: [{ required: true, message: '请输入', trigger: 'blur' }],
mobile: [{ required: true, message: '请输入', trigger: 'blur' }],
gender: [{ required: true, message: '请输入', trigger: 'blur' }]
gender: [{ required: true, message: '请输入', trigger: 'blur' }],
})
const submitForm = async (formEl: FormInstance | undefined) => {
......@@ -69,7 +68,7 @@ const handleKeyUp = function (e: any) {
logs.push({ time: currentDateTime, text: textarea })
studentSubmitLog({
experiment_connection_id: props.data?.connect_id,
logs: JSON.stringify([{ time: currentDateTime, text: textarea }])
logs: JSON.stringify([{ time: currentDateTime, text: textarea }]),
}).then()
textarea = ''
setTimeout(() => {
......@@ -167,7 +166,7 @@ const sendChat = function () {
</div>
</div>
</div>
<div class="chat-view_right" v-for="item in logs">
<div class="chat-view_right" v-for="(item, index) in logs" :key="index">
<div class="view__time">{{ item.time }}</div>
<div class="view-right_content">
<div class="view-right__text">{{ item.text }}</div>
......
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import { ElMessage } from 'element-plus'
import { submitScheduleMember } from '../api'
import type { ScheduleMember } from '../types'
import type { FormInstance } from 'element-plus'
......@@ -30,7 +30,7 @@ const ruleForm = $ref<any>({
gender: 100,
mobile: 1,
create_data: '',
type_name: ''
type_name: '',
})
watchEffect(() => {
const mergeJson = function (target: any, source: any) {
......@@ -64,12 +64,12 @@ const submitForm = async (formEl: FormInstance | undefined, bl: string) => {
if (res.code === 0) {
ElMessage({
message: '保存成功',
type: 'success'
type: 'success',
})
emit('update:modelValue', false)
} else {
ElMessage({
message: res.message
message: res.message,
})
}
})
......
<script setup lang="ts">
import type { DetailsProp, ScheduleMember, ScheduleEvent, StudentFollow } from '../types'
import type { DetailsProp, ScheduleMember, StudentFollow } from '../types'
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import ListItem from '../components/ListItem.vue'
......@@ -25,7 +25,7 @@ const listOptions = computed(() => {
return {
remote: {
httpRequest: getConnectionList,
params: { created_operator: '', type: '' }
params: { created_operator: '', type: '' },
},
limit: 20,
filters: [
......@@ -34,9 +34,9 @@ const listOptions = computed(() => {
type: 'select',
prop: 'type',
placeholder: '请选择类型',
options: store.getMapValuesByKey('experiment_connection_type')
}
]
options: store.getMapValuesByKey('experiment_connection_type'),
},
],
}
})
......@@ -55,7 +55,7 @@ const createConnect = function () {
// 编辑链接
let formData = $ref<DetailsProp | undefined>()
const editConnect = function (id: string) {
getConnectionDetails({ id: id }).then(res => {
getConnectionDetails({ id: id }).then((res) => {
formData = res.data
formVisible = true
})
......@@ -93,7 +93,7 @@ const handleGenerateEventData = function (experimentId: string, id: string, even
experiment_id: experimentId,
connect_id: id,
events: events,
last_event: last_event
last_event: last_event,
}
eventDataVisible = true
}
......@@ -138,8 +138,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st
@generateUserData="handleGenerateUserData"
@generateEventData="handleGenerateEventData"
@viewDataProgress="viewDataProgress"
@handleStudentFollow="handleStudentFollow"
></ListItem>
@handleStudentFollow="handleStudentFollow"></ListItem>
<div class="connect-item" @click="createConnect" v-if="userStore.role?.id !== 1">
<div class="connect-add-button">
<el-icon><Plus /></el-icon>
......@@ -162,8 +161,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st
<StudentFollowDialog
:data="studentFollowData"
v-model="studentFollowVisible"
v-if="studentFollowVisible"
></StudentFollowDialog>
v-if="studentFollowVisible"></StudentFollowDialog>
</template>
<style lang="scss">
......
<script setup lang="ts">
import type { ExperimentInfo } from '../types'
import { getSearchCriteria, getRecordList } from '../api'
import Report from '@/modules/market/my/components/Report.vue'
// import Report from '@/modules/market/my/components/Report.vue'
const route = useRoute()
......@@ -19,11 +19,11 @@ const listOptions = computed(() => {
return {
remote: {
httpRequest: getRecordList,
params: { name: '', sno_number: '' }
params: { name: '', sno_number: '' },
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入学生姓名' },
{ type: 'input', prop: 'sno_number', placeholder: '请输入学生学号' }
{ type: 'input', prop: 'sno_number', placeholder: '请输入学生学号' },
],
columns: [
{ label: '序号', type: 'index', width: 60 },
......@@ -34,47 +34,47 @@ const listOptions = computed(() => {
label: '营销背景分析',
computed(row: any) {
return isComplete(row.row.step_1.is_complete)
}
},
},
{
label: '营销渠道选择',
computed(row: any) {
return isComplete(row.row.step_2.is_complete)
}
},
},
{
label: '用户分析',
computed(row: any) {
return isComplete(row.row.step_3.is_complete)
}
},
},
{
label: '标签体系设计',
computed(row: any) {
return isComplete(row.row.step_4.is_complete)
}
},
},
{
label: '用户精准分群',
computed(row: any) {
return isComplete(row.row.step_5.is_complete)
}
},
},
{
label: '自动化营销旅程设计',
computed(row: any) {
return isComplete(row.row.step_6.is_complete)
}
},
},
{
label: '营销物料设计',
computed(row: any) {
return isComplete(row.row.step_7.is_complete)
}
},
},
{ label: '得分', prop: 'score' },
{ label: '操作', slots: 'table-x', width: 200 }
]
{ label: '操作', slots: 'table-x', width: 200 },
],
}
})
......@@ -110,8 +110,8 @@ function isComplete(is: boolean) {
query: {
id: row.id,
snoNumber: row.sno_number,
experiment_id: route.query.experiment_id
}
experiment_id: route.query.experiment_id,
},
}"
><el-button text type="primary">查看营销策划报告</el-button></router-link
>
......@@ -124,8 +124,8 @@ function isComplete(is: boolean) {
name: row.name,
snoNumber: row.sno_number,
className: row.class_name,
experiment_id: route.query.experiment_id
}
experiment_id: route.query.experiment_id,
},
}"
><el-button text type="primary">评分</el-button></router-link
>
......
<script setup lang="ts">
import AppEditor from '@/components/base/AppEditor.vue'
import { getScore, updateScore } from '../api'
import { ElMessage, ElMessageBox } from 'element-plus'
import { ElMessage } from 'element-plus'
const route = useRoute()
let data = $ref<any>([])
getScore({ record_id: route.query.id }).then(res => {
getScore({ record_id: route.query.id }).then((res) => {
console.log(res.data, 'res.data')
data = res.data.map((item: any) => {
item.score = item.score === '' ? 0 : parseInt(item.score)
......@@ -24,19 +24,19 @@ const listOptions = computed(() => {
prop: 'is_complete',
computed(row: any) {
return isComplete(row.row.is_complete)
}
},
},
{ label: '', prop: 'percent' },
{
label: '',
prop: 'score',
slots: 'table-input'
slots: 'table-input',
},
{ slots: 'table-x', width: 200 }
{ slots: 'table-x', width: 200 },
],
['show-header']: false,
border: true,
data: data
data: data,
}
})
......@@ -68,8 +68,8 @@ const handleSubmit = function () {
updateScore({
experiment_id: route.query.experiment_id,
record_id: route.query.id,
score: JSON.stringify(data)
}).then(res => {
score: JSON.stringify(data),
}).then(() => {
ElMessage.success('保存成功')
})
}
......
......@@ -4,7 +4,11 @@ import { Plus } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, updateMaterial, deleteMaterial } from '../api'
import { getNameByValue, materialMethodList, materialUsageList, materialUsersList } from '@/utils/dictionary'
import {
getNameByValue,
materialMethodList,
// materialUsageList, materialUsersList
} from '@/utils/dictionary'
import { useMapStore } from '@/stores/map'
import { useUserStore } from '@/stores/user'
......@@ -30,14 +34,14 @@ const listOptions = computed(() => {
beforeRequest(params: any) {
materialType.value = params.type
return params
}
},
},
filters: [
{
type: 'select',
prop: 'type',
placeholder: '请选择资料类型',
options: materialTypeList
options: materialTypeList,
},
{
type: 'select',
......@@ -45,19 +49,19 @@ const listOptions = computed(() => {
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
{ label: '失效', value: '0' },
],
},
{
type: 'select',
prop: 'way',
placeholder: '请选择创作方式',
options: materialMethodList
options: materialMethodList,
},
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' },
],
columns: [
{ label: '序号', type: 'index', width: 60 },
......@@ -67,7 +71,7 @@ const listOptions = computed(() => {
width: 100,
computed: ({ row }: { row: MaterialProp }) => {
return getNameByValue(row.type, materialTypeList)
}
},
},
{ label: '资料名称', prop: 'name' },
{ label: '资料ID', prop: 'id' },
......@@ -76,7 +80,7 @@ const listOptions = computed(() => {
prop: 'way',
computed: ({ row }: { row: MaterialProp }) => {
return getNameByValue(row.way, materialMethodList)
}
},
},
// { label: '行业', prop: 'industry_name' },
// {
......@@ -98,18 +102,18 @@ const listOptions = computed(() => {
label: '状态',
prop: 'status_name',
width: 90,
slots: 'table-status'
slots: 'table-status',
},
{
label: '更新人',
prop: 'updated_operator_name',
computed: ({ row }: { row: MaterialProp }) => {
return row.updated_operator.real_name || row.updated_operator.nickname || row.updated_operator.username
}
},
},
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
{ label: '操作', slots: 'table-x', width: 240 },
],
}
})
......@@ -163,8 +167,7 @@ async function handleChangeStatus(row: MaterialProp) {
v-model="row.status"
active-value="1"
inactive-value="0"
:before-change="() => handleChangeStatus(row)"
></el-switch>
:before-change="() => handleChangeStatus(row)"></el-switch>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
......
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/audio',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '3'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/card',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '8'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/h5',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '5'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/image',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '2'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/mini',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '7'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/qrcode',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '6'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/text',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '1'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/video',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '4'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
......@@ -12,7 +12,7 @@ const listOptions = computed(() => {
return {
remote: {
httpRequest: getProgress,
params: {}
params: {},
},
limit: 10,
columns: [
......@@ -22,7 +22,7 @@ const listOptions = computed(() => {
prop: 'size',
computed: (row: any) => {
return bytesToSize(row.row.size)
}
},
},
{ label: '来源链接', prop: 'connection_name' },
{
......@@ -32,12 +32,12 @@ const listOptions = computed(() => {
return row.row.status === '4'
? `<p><span style="color: rgb(170, 2, 49)">${row.row.status_name}</span><br/><span style="font-size: 12px">${row.row.message}</span></p>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '导入时间', prop: 'created_time' },
{ label: '操作', slots: 'table-x', width: '100' }
]
{ label: '操作', slots: 'table-x', width: '100' },
],
}
})
......@@ -64,7 +64,7 @@ const refetch = function () {
width="900px"
@closed="$emit('update:modelValue', false)">
<AppList v-bind="listOptions" ref="appList">
<template #table-x="{ row }">
<template #table-x>
<el-button type="primary" plain @click="refetch" v-permission="'v1-experiment-member-delete'">刷新</el-button>
</template>
</AppList>
......
......@@ -4,7 +4,7 @@ import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// import checker from 'vite-plugin-checker'
import checker from 'vite-plugin-checker'
import AutoImport from 'unplugin-auto-import/vite'
import ReactivityTransform from '@vue-macros/reactivity-transform/vite'
import mkcert from 'vite-plugin-mkcert'
......@@ -20,7 +20,7 @@ export default defineConfig(({ mode }) => ({
eslintrc: { enabled: true },
}),
ReactivityTransform(),
// checker({ vueTsc: true, eslint: { lintCommand: 'eslint "./src/**/*.{vue,js,jsx,ts,tsx}"' } })
checker({ vueTsc: true, eslint: { useFlatConfig: true, lintCommand: 'eslint "./src/**/*.{vue,js,jsx,ts,tsx}"' } }),
],
server: {
open: true,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论