fix: BUG修复

feature/task1.0.0__0514__ch
向文可 2 years ago
parent 94418a8f9f
commit 7b90a50e7b

@ -30,7 +30,13 @@ export const remove = (params) => {
export const sort = (data) => {
return request({
url: '/mall/product/admin/productCategory/updateSort',
method: 'post',
method: 'put',
data,
});
};
export const transform = (data) => {
return request({
url: `/mall/product/admin/productCategory/transfer/${data.sourceId}/${data.targetId}`,
method: 'put',
});
};

@ -26,6 +26,13 @@ export const update = (data) => {
data,
});
};
export const enable = (data) => {
return request({
url: '/mall/product/admin/product/enable/' + data.id,
method: 'put',
data,
});
};
export const remove = (params) => {
return request({
url: '/mall/product/admin/product',

@ -75,8 +75,9 @@
{ deep: true }
);
const handleReady = () => {
unref(editor).setHTML(attrs.modelValue || '');
unref(editor)?.setHTML(attrs.modelValue || '');
};
watch(() => attrs.modelValue, handleReady, { immediate: true });
const handleUpdateContent = () => {
content.value = unref(editor).getHTML();
};

@ -64,10 +64,21 @@ const actions = {
}
return res;
},
sort: async (context, data) => {
transform: async ({ dispatch }, data) => {
let res = await api.transform(data);
if (res) {
ElMessage.success('保存成功');
dispatch('search');
} else {
ElMessage.error('保存失败');
}
return res;
},
sort: async ({ dispatch }, data) => {
let res = await api.sort(data);
if (res) {
ElMessage.success(`移动前序号:${data.oldSort + 1};移动后序号:${data.currentSort + 1}`);
dispatch('search');
} else {
ElMessage.error('保存排序失败');
}

@ -111,6 +111,16 @@ const actions = {
}
return res;
},
enable: async ({ dispatch }, data) => {
let res = await api.enable(data);
if (res) {
ElMessage.success('保存成功');
dispatch('search');
} else {
ElMessage.error('保存失败');
}
return res;
},
sort: async (context, data) => {
let res = await api.sort(data);
if (res) {

@ -76,6 +76,9 @@
Object.assign(form, res);
}
}
if (route.query.pid && !form.parentId) {
form.parentId = +route.query.pid;
}
};
onActivated(handleLoad);
/* 交互 */

@ -1,38 +1,53 @@
<template>
<div class="list-container">
<TableList
ref="refsTable"
v-loading="loading"
:code="code"
:config="config"
:data="list"
:operation="['search', 'create']"
:reset="handleReset"
:operation="['create']"
sortable
title="分类"
:total="total"
@create="handleCreate"
@create="handleCreate()"
@row-click="handleExpand"
@row-sort="handleSort"
@search="handleSearch"
>
<template #search>
<el-form inline>
<el-form-item label="是否显示" prop="visible">
<el-select v-model="state.condition.visible" :opts="opts.visible" />
</el-form-item>
</el-form>
/>
<el-dialog v-model="formState.formVisible" title="转移商品" width="360px">
<el-form ref="refsForm" label-width="100px" :model="formState.form" :rules="formState.rules">
<el-form-item label="目标分类" prop="targetId">
<el-cascader
v-model="formState.form.targetId"
:options="list"
:props="{
label: 'name',
value: 'id',
children: 'childList',
trigger: 'hover',
emitPath: false,
}"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="formState.formVisible = false">取消</el-button>
<el-button :loading="formState.submitting" type="primary" @click="handleSave"></el-button>
</template>
</TableList>
</el-dialog>
</div>
</template>
<script setup lang="jsx">
import ElButton from '@/components/extra/ElButton.vue';
import ElSwitch from '@/components/extra/ElSwitch.vue';
import TableList from '@/components/TableList.vue';
const router = useRouter();
const store = useStore();
const loading = ref(false);
const refsTable = ref(null);
const code = computed(() => store.state.category.code);
const list = computed(() => store.state.category.list);
const list = computed(() => _.cloneDeep(store.state.category.list));
const total = computed(() => store.state.category.total);
const opts = computed(() => store.state.category.opts);
if (!unref(opts).init) {
@ -41,9 +56,7 @@
/* 查询订单 */
const state = reactive({
condition: {
visible: null,
},
condition: {},
});
watch(
() => state.condition,
@ -52,24 +65,22 @@
},
{ immediate: true, deep: true }
);
const handleReset = () => {
state.condition = {
visible: null,
};
};
const handleSearch = async () => {
loading.value = true;
await store.dispatch('category/search');
loading.value = false;
};
const handleCreate = () => {
router.push({ name: 'CreateCategory' });
onActivated(handleSearch);
const handleCreate = (row) => {
router.push({ name: 'CreateCategory', query: { pid: row?.id } });
};
const handleUpdate = (row) => {
router.push({ name: 'UpdateCategory', params: { id: row.id } });
};
const handleVisible = (row) => {
router.push({ name: 'UpdateCategory', params: { id: row.id } });
const handleVisible = async (row) => {
loading.value = true;
await store.dispatch('category/save', row);
loading.value = false;
};
const handleRemove = async (rows) => {
await store.dispatch(
@ -77,80 +88,144 @@
rows.map((item) => item.id)
);
};
const handleSort = async (currentSort, oldSort) => {
const handleSort = async (newSort, oldSort, e, list) => {
list = list || unref(list);
let direction = (oldSort - newSort) / Math.abs(oldSort - newSort);
let currentSort = list[newSort].sort;
oldSort = list[newSort + direction].sort;
loading.value = true;
await store.dispatch('category/sort', { id: unref(list)[currentSort].id, currentSort, oldSort });
await store.dispatch('category/sort', { id: list[newSort].id, currentSort, oldSort });
loading.value = false;
};
const handleExpand = (row) => {
unref(list).forEach((item) => {
unref(refsTable).toggleRowExpansion(item, false);
});
unref(refsTable).toggleRowExpansion(row);
};
/* 表单 */
const refsForm = ref(null);
const formState = reactive({
formVisible: false,
submitting: false,
form: {
sourceId: null,
targetId: false,
},
rules: {
targetId: [{ required: true, message: '目标分类不能为空' }],
},
});
//
const handleTransform = (row) => {
formState.form = {
sourceId: row.id,
targetId: null,
};
formState.formVisible = true;
};
const handleSave = async () => {
formState.submitting = true;
try {
await unref(refsForm).validate();
let data = _.cloneDeep(formState.form);
await store.dispatch('category/transform', data);
formState.formVisible = false;
} catch (e) {
console.info('取消保存', e);
}
formState.submitting = false;
};
/* 列表配置 */
const config = reactive({
page: false,
columns: [
{
label: '分类名称',
prop: 'name',
minWidth: 300,
fixed: 'left',
},
{
label: '图片',
minWidth: 300,
slots: {
default: ({ row }) => <ElImage src={row.picture} alt={row.name} height="100px" />,
const handleConfig = (parent) => {
let res = reactive({
setting: !parent,
page: false,
columns: [
{
label: '分类名称',
prop: 'name',
minWidth: 300,
},
},
{
label: '是否显示',
width: 120,
slots: {
default: ({ row }) => (
<ElSwitch value={row.isEnable} onChange={(visible) => handleVisible(row, visible)} />
),
{
label: '图片',
minWidth: 300,
slots: {
default: ({ row }) => <ElImage src={row.picture} alt={row.name} height="64px" />,
},
},
},
{
label: '操作',
fixed: 'right',
width: 300,
{
label: '是否显示',
width: 120,
slots: {
default: ({ row }) => (
<ElSwitch v-model={row.isEnable} onChange={(visible) => handleVisible(row, visible)} />
),
},
},
{
label: '操作',
width: 300,
slots: {
default: ({ row }) => (
<div>
<ElButton type="text" onClick={() => handleCreate(row)}>
新增下级
</ElButton>
<ElButton type="text" onClick={() => handleTransform(row)}>
转移商品
</ElButton>
<ElButton type="text" onClick={() => handleUpdate(row)}>
编辑
</ElButton>
<ElButton type="text" onClick={() => handleRemove([row])}>
删除
</ElButton>
</div>
),
},
},
],
});
if (!parent) {
res.columns.unshift({
type: 'expand',
width: 60,
slots: {
default: ({ row }) => (
<div>
<ElButton type="text" onClick={() => handleCreate(row)}>
新增下级
</ElButton>
<ElButton type="text" onClick={() => handleCreate(row)}>
转移商品
</ElButton>
<ElButton type="text" onClick={() => handleUpdate(row)}>
编辑
</ElButton>
<ElButton type="text" onClick={() => handleRemove([row])}>
删除
</ElButton>
</div>
<TableList
code={Date.now() + ''}
config={handleConfig(row)}
data={row.childList || []}
operation={[]}
sortable
onRowSort={(newSort, oldSort, e) => handleSort(newSort, oldSort, e, row.childList)}
/>
),
},
},
],
});
});
} else {
res.columns.unshift({
type: 'index',
width: 60,
});
}
return res;
};
const config = handleConfig(null);
</script>
<style lang="less" scoped>
.list-container {
display: flex;
flex-direction: column;
:deep(.el-table__expanded-cell) {
.common-list {
flex-shrink: 1;
}
.order-status {
width: 100%;
min-height: 300px;
flex: 1;
display: flex;
margin-bottom: @layout-space;
li {
+ li {
margin-left: @layout-space;
}
}
flex-direction: column;
overflow: hidden;
}
}
</style>

@ -160,7 +160,7 @@
/* 上下架 */
const handleEnabled = async (row) => {
loading.value = true;
await store.dispatch('product/save', row);
await store.dispatch('product/enable', { id: row.id, isEnable: row.isEnable });
loading.value = false;
};

@ -59,6 +59,7 @@
await store.dispatch('employee/search');
loading.value = false;
};
onActivated(handleSearch);
const handleCreate = () => {
router.push({ name: 'CreateEmployee' });
};
@ -66,12 +67,10 @@
router.push({ name: 'UpdateEmployee', params: { id: row.id } });
};
const handleRemove = async (rows) => {
loading.value = true;
await store.dispatch(
store.dispatch(
'employee/remove',
rows.map((item) => item.id)
);
loading.value = false;
};
const handleEnable = async (row) => {
loading.value = true;

@ -22,8 +22,8 @@ export default (configEnv) => {
'/api': {
// target: 'http://192.168.10.109:8090/', // 显雨
// target: 'http://192.168.10.251:8090', // 高玉
// target: 'http://192.168.10.67:8090', // 罗战
target: 'https://k8s-horse-gateway.mashibing.cn/', // 测试地址
target: 'http://192.168.10.67:8090', // 罗战
// target: 'https://k8s-horse-gateway.mashibing.cn/', // 测试地址
// target: 'https://gateway.mashibing.cn', // 预发地址
// target: 'https://gateway.mashibing.com', // 生产环境
changeOrigin: true,

Loading…
Cancel
Save