You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
ymww_backend/public/assets/js/backend/shopro/feedback.js

210 lines
8.2 KiB

define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: () => {
const { reactive, onMounted } = Vue
const { ElMessageBox } = ElementPlus
const index = {
setup() {
const state = reactive({
data: [],
order: '',
sort: '',
filter: {
drawer: false,
data: {
keyword: '',
phone: '',
},
tools: {
keyword: {
type: 'tinput',
label: '查询内容',
placeholder: '请输入查询内容',
value: '',
},
phone: {
type: 'tinput',
label: '联系电话',
placeholder: '请输入联系电话',
value: '',
},
},
condition: {},
}
})
function getData() {
let tempSearch = JSON.parse(JSON.stringify(state.filter.data));
let search = composeFilter(tempSearch, {
keyword: 'like',
phone: 'like',
});
Fast.api.ajax({
url: 'shopro/feedback',
type: 'GET',
data: {
page: pagination.page,
list_rows: pagination.list_rows,
order: state.order,
sort: state.sort,
...search,
},
}, function (ret, res) {
state.data = res.data.data
pagination.total = res.data.total
return false
}, function (ret, res) { })
}
function onChangeSort({ prop, order }) {
state.order = order == 'ascending' ? 'asc' : 'desc';
state.sort = prop;
getData();
}
function onOpenFilter() {
state.filter.drawer = true
}
function onChangeFilter() {
pagination.page = 1
getData()
state.filter.drawer && (state.filter.drawer = false)
}
const pagination = reactive({
page: 1,
list_rows: 10,
total: 0,
})
const batchHandle = reactive({
data: [],
})
function onChangeSelection(val) {
batchHandle.data = val
}
function onBatchHandle(type) {
let ids = []
batchHandle.data.forEach((item) => {
ids.push(item.id)
})
switch (type) {
case 'delete':
ElMessageBox.confirm('此操作将删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
onDelete(ids.join(','))
});
break;
default:
Fast.api.ajax({
url: `shopro/feedback/edit/id/${ids.join(',')}`,
type: 'POST',
data: {
status: type
}
}, function (ret, res) {
getData()
}, function (ret, res) { })
break;
}
}
function onDetail(id) {
Fast.api.open(`shopro/feedback/detail?type=edit&id=${id}`, "编辑", {
callback() {
getData()
}
})
}
function onDelete(id) {
Fast.api.ajax({
url: `shopro/feedback/delete/id/${id}`,
type: 'DELETE',
}, function (ret, res) {
getData()
}, function (ret, res) { })
}
onMounted(() => {
getData()
})
return {
state,
getData,
onChangeSort,
onOpenFilter,
onChangeFilter,
pagination,
batchHandle,
onChangeSelection,
onBatchHandle,
onDetail,
onDelete
}
}
}
createApp('index', index);
},
detail: () => {
const { reactive, onMounted, getCurrentInstance } = Vue
const detail = {
setup() {
const { proxy } = getCurrentInstance();
const state = reactive({
type: new URLSearchParams(location.search).get('type'),
id: new URLSearchParams(location.search).get('id')
})
const form = reactive({
model: {},
rules: {},
})
function getDetail() {
Fast.api.ajax({
url: `shopro/feedback/detail/id/${state.id}`,
type: 'GET',
}, function (ret, res) {
form.model = res.data;
return false
}, function (ret, res) { })
}
function onConfirm() {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
Fast.api.ajax({
url: `shopro/feedback/edit/id/${state.id}`,
type: 'POST',
data: {
status: form.model.status,
remark: form.model.remark,
}
}, function (ret, res) {
Fast.api.close()
}, function (ret, res) { })
}
});
}
onMounted(() => {
state.type == 'edit' && getDetail()
})
return {
state,
form,
onConfirm
}
}
}
createApp('detail', detail);
}
};
return Controller;
});