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

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

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