fix: BUG修复

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

@ -30,7 +30,13 @@ export const remove = (params) => {
export const sort = (data) => { export const sort = (data) => {
return request({ return request({
url: '/mall/product/admin/productCategory/updateSort', url: '/mall/product/admin/productCategory/updateSort',
method: 'post', method: 'put',
data, 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, data,
}); });
}; };
export const enable = (data) => {
return request({
url: '/mall/product/admin/product/enable/' + data.id,
method: 'put',
data,
});
};
export const remove = (params) => { export const remove = (params) => {
return request({ return request({
url: '/mall/product/admin/product', url: '/mall/product/admin/product',

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

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

@ -111,6 +111,16 @@ const actions = {
} }
return res; 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) => { sort: async (context, data) => {
let res = await api.sort(data); let res = await api.sort(data);
if (res) { if (res) {

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

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

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

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

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

Loading…
Cancel
Save