diff --git a/Laravel/app/Http/Controllers/API/Admin/QuestionItemController.php b/Laravel/app/Http/Controllers/API/Admin/QuestionItemController.php index 779f14a..79634f7 100644 --- a/Laravel/app/Http/Controllers/API/Admin/QuestionItemController.php +++ b/Laravel/app/Http/Controllers/API/Admin/QuestionItemController.php @@ -17,6 +17,15 @@ class QuestionItemController extends Controller 'list' => $items ]); } + public function combo(Request $request) + { + $combos = DB::table('combos') + ->select(['combo_id', 'name', 'pinyin']) + ->get(); + return \Yz::Return(true, '操作完成', [ + 'list' => $combos + ]); + } public function create(Request $request) { diff --git a/Laravel/app/Http/Controllers/API/H5/QuestionnairesLogsController.php b/Laravel/app/Http/Controllers/API/H5/QuestionnairesLogsController.php index dfbb4c3..a11ff29 100644 --- a/Laravel/app/Http/Controllers/API/H5/QuestionnairesLogsController.php +++ b/Laravel/app/Http/Controllers/API/H5/QuestionnairesLogsController.php @@ -120,8 +120,10 @@ class QuestionnairesLogsController extends Controller public function sum_items($items, $check_items) { $sum = DB::table('items')->whereIn('item_id', $items)->where('status', 1)->sum('price'); - $check_sum = DB::table('items')->whereIn('item_id', $check_items)->where('status', 1)->sum('price'); - return round($sum + $check_sum, 2); + $check_sum = DB::table('items')->whereIn('item_id', $check_items['items'])->where('status', 1)->sum('price'); + $combo = DB::table('combos')->whereIn('combo_id', [$check_items['combo']])->where('status', 1)->sum('price'); + $zhekou = 1; + return number_format($combo + (($sum + $check_sum) * $zhekou), 2, '.', ''); } public function submit(Request $request) { @@ -140,9 +142,21 @@ class QuestionnairesLogsController extends Controller $items = json_decode($question_info->items, true); $check_items = []; $check_items_array = [ - 'jichu' => [], - 'tuijian' => [], - 'gaoduan' => [], + 'jichu' => [ + 'combo' => '0', + 'combo_items' => [], + 'items' => [] + ], + 'tuijian' => [ + 'combo' => '0', + 'combo_items' => [], + 'items' => [] + ], + 'gaoduan' => [ + 'combo' => '0', + 'combo_items' => [], + 'items' => [] + ], ]; $question_ids = []; $question_map = []; @@ -176,22 +190,85 @@ class QuestionnairesLogsController extends Controller $check_items_info = DB::table('question_items')->where('id', $item)->first(); if (!!$check_items_info) { $check_items[] = (string)$item; - $jichu_ids = json_decode($check_items_info->jichu, true); - foreach ($jichu_ids as $jichu_id) { - if (!in_array($jichu_id, $check_items_array['jichu']) && !in_array($jichu_id, $items)) { - $check_items_array['jichu'][] = $jichu_id; + + if ($check_items_info->jichu != '0') { + $jichu_combo_info = DB::table('combos')->where('combo_id', $check_items_info->jichu)->first(); + if (!!$jichu_combo_info) { + if ($check_items_array['jichu']['combo'] == '0') { + $items_ids = []; + $combo_items = json_decode($jichu_combo_info->items, true); + foreach ($combo_items as $combo_item) { + $items_ids[] = $combo_item['id']; + } + $check_items_array['jichu']['combo'] = $check_items_info->jichu; + $check_items_array['jichu']['combo_items'] = $items_ids; + } else { + $items_ids = []; + $combo_items = json_decode($jichu_combo_info->items, true); + foreach ($combo_items as $combo_item) { + if ( + !in_array($combo_item['id'], $check_items_array['jichu']['combo_items']) && + !in_array($combo_item['id'], $check_items_array['jichu']['items']) + ) { + $items_ids[] = $combo_item['id']; + } + } + $check_items_array['jichu']['items'] = array_merge($check_items_array['jichu']['items'], $items_ids); + } } } - $tuijian_ids = json_decode($check_items_info->tuijian, true); - foreach ($tuijian_ids as $tuijian_id) { - if (!in_array($tuijian_id, $check_items_array['tuijian']) && !in_array($tuijian_id, $items)) { - $check_items_array['tuijian'][] = $tuijian_id; + + if ($check_items_info->tuijian != '0') { + $tuijian_combo_info = DB::table('combos')->where('combo_id', $check_items_info->tuijian)->first(); + if (!!$tuijian_combo_info) { + if ($check_items_array['tuijian']['combo'] == '0') { + $items_ids = []; + $combo_items = json_decode($tuijian_combo_info->items, true); + foreach ($combo_items as $combo_item) { + $items_ids[] = $combo_item['id']; + } + $check_items_array['tuijian']['combo'] = $check_items_info->tuijian; + $check_items_array['tuijian']['combo_items'] = $items_ids; + } else { + $items_ids = []; + $combo_items = json_decode($tuijian_combo_info->items, true); + foreach ($combo_items as $combo_item) { + if ( + !in_array($combo_item['id'], $check_items_array['tuijian']['combo_items']) && + !in_array($combo_item['id'], $check_items_array['tuijian']['items']) + ) { + $items_ids[] = $combo_item['id']; + } + } + $check_items_array['tuijian']['items'] = array_merge($check_items_array['tuijian']['items'], $items_ids); + } } } - $gaoduan_ids = json_decode($check_items_info->gaoduan, true); - foreach ($gaoduan_ids as $gaoduan_id) { - if (!in_array($gaoduan_id, $check_items_array['gaoduan']) && !in_array($gaoduan_id, $items)) { - $check_items_array['gaoduan'][] = $gaoduan_id; + + if ($check_items_info->gaoduan != '0') { + $gaoduan_combo_info = DB::table('combos')->where('combo_id', $check_items_info->gaoduan)->first(); + if (!!$gaoduan_combo_info) { + if ($check_items_array['gaoduan']['combo'] == '0') { + $items_ids = []; + $combo_items = json_decode($gaoduan_combo_info->items, true); + foreach ($combo_items as $combo_item) { + $items_ids[] = $combo_item['id']; + } + $check_items_array['gaoduan']['combo'] = $check_items_info->gaoduan; + $check_items_array['gaoduan']['combo_items'] = $items_ids; + } else { + $items_ids = []; + $combo_items = json_decode($gaoduan_combo_info->items, true); + foreach ($combo_items as $combo_item) { + if ( + !in_array($combo_item['id'], $check_items_array['gaoduan']['combo_items']) && + !in_array($combo_item['id'], $check_items_array['gaoduan']['items']) + ) { + $items_ids[] = $combo_item['id']; + } + } + $check_items_array['gaoduan']['items'] = array_merge($check_items_array['gaoduan']['items'], $items_ids); + } } } } diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php index a703b94..41cb9c1 100644 --- a/Laravel/routes/api.php +++ b/Laravel/routes/api.php @@ -36,6 +36,7 @@ Route::group(['middleware' => ['checktoken', 'log'], 'prefix' => 'v1'], function Route::post('admin/questionQuestion/list', 'App\Http\Controllers\API\Admin\QuestionQuestionController@list'); Route::post('admin/questionItem/select', 'App\Http\Controllers\API\Admin\QuestionItemController@select'); + Route::post('admin/questionItem/combo', 'App\Http\Controllers\API\Admin\QuestionItemController@combo'); Route::post('admin/questionItem/item', 'App\Http\Controllers\API\Admin\QuestionItemController@item'); Route::post('admin/questionItem/create', 'App\Http\Controllers\API\Admin\QuestionItemController@create'); Route::post('admin/questionItem/update', 'App\Http\Controllers\API\Admin\QuestionItemController@update'); diff --git a/admin/src/api/api.js b/admin/src/api/api.js index f6c1af5..6ad2706 100644 --- a/admin/src/api/api.js +++ b/admin/src/api/api.js @@ -312,6 +312,10 @@ export const QuestionItemListAction = (data = {}) => { export const QuestionItemItemAction = (data = {}) => { return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/item`, data: data}) } +// 问卷调查 获取 套餐列表 +export const QuestionItemComboAction = (data = {}) => { + return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/combo`, data: data}) +} // 项目列表[全部] export const QuestionItemSelectAction = (data = {}) => { return axios({url: import.meta.env.VITE_APP_API + `v1/admin/questionItem/select`, data: data}) diff --git a/admin/src/views/Question/QuestionItem.vue b/admin/src/views/Question/QuestionItem.vue index a58b25c..1fb079b 100644 --- a/admin/src/views/Question/QuestionItem.vue +++ b/admin/src/views/Question/QuestionItem.vue @@ -4,36 +4,31 @@ * user:sa0ChunLuyu * date:2024年10月12日 16:29:26 */ -import {ref, onMounted} from 'vue'; +import { ref, onMounted } from 'vue' import $router from '@/router' -import {onBeforeRouteUpdate} from "vue-router"; -import {ElMessage, ElMessageBox} from 'element-plus' +import { onBeforeRouteUpdate } from 'vue-router' +import { ElMessage, ElMessageBox } from 'element-plus' import { QuestionItemCreateAction, QuestionItemUpdateAction, QuestionItemDeleteAction, - QuestionItemListAction, - QuestionItemItemAction + QuestionItemComboAction, + QuestionItemListAction } from '@/api/api.js' const default_page_options = { search: '', - page: 1, + page: 1 } const page_options = ref(JSON.parse(JSON.stringify(default_page_options))) onBeforeRouteUpdate((to) => { routerChange(to.query) }) -const item_list = ref([]) -const QuestionItemItem = async () => { - const response = await QuestionItemItemAction({}) +const combo_list = ref([]) +const QuestionItemCombo = async () => { + const response = await QuestionItemComboAction({}) if (response.status) { - item_list.value = response.data.list.map((item) => { - return { - ...item, - name: item.sex !== 0 ? `${item.name}(${item.sex === 1 ? '男' : '女'})` : item.name - } - }) + combo_list.value = response.data.list } else { ElMessage.error(response.msg) } @@ -43,14 +38,7 @@ const last_page = ref(0) const QuestionItemList = async () => { const response = await QuestionItemListAction(page_options.value) if (response.status) { - table_list.value = response.data.list.data.map((item) => { - return { - ...item, - jichu: JSON.parse(item.jichu), - tuijian: JSON.parse(item.tuijian), - gaoduan: JSON.parse(item.gaoduan), - } - }) + table_list.value = response.data.list.data last_page.value = response.data.list.last_page } else { ElMessage.error(response.msg) @@ -60,7 +48,7 @@ const QuestionItemList = async () => { const routerChange = (query) => { page_options.value = { search: query.search || default_page_options.search, - page: Number(query.page) || default_page_options.page, + page: Number(query.page) || default_page_options.page } QuestionItemList() } @@ -72,22 +60,13 @@ const searchClick = (page = 1) => { }) } -const itemNameShow = (items) => { - let names = [] - for (let i in item_list.value) { - if (items.includes(String(item_list.value[i].item_id))) { - names.push(item_list.value[i].name) - } - } - return names.join('、') -} const edit_data_default = { id: 0, name: '', desc: '', - jichu: [], - tuijian: [], - gaoduan: [], + jichu: '0', + tuijian: '0', + gaoduan: '0' } const edit_data = ref(JSON.parse(JSON.stringify(edit_data_default))) const edit_show = ref(false) @@ -101,10 +80,7 @@ const updateClick = (row) => { const editDoneClick = async () => { const $func = edit_data.value.id !== 0 ? QuestionItemUpdateAction : QuestionItemCreateAction const response = await $func({ - ...edit_data.value, - jichu: JSON.stringify(edit_data.value.jichu), - tuijian: JSON.stringify(edit_data.value.tuijian), - gaoduan: JSON.stringify(edit_data.value.gaoduan), + ...edit_data.value }) if (response.status) { edit_show.value = false @@ -115,7 +91,7 @@ const editDoneClick = async () => { } const QuestionItemDelete = async (id) => { - const response = await QuestionItemDeleteAction({id}) + const response = await QuestionItemDeleteAction({ id }) if (response.status) { await QuestionItemList() } else { @@ -124,67 +100,28 @@ const QuestionItemDelete = async (id) => { } const deleteClick = (id) => { - ElMessageBox.confirm( - '是否确认删除该项目?', - '提示', - { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning', - } - ).then(() => { - QuestionItemDelete(id) - }).catch(() => { + ElMessageBox.confirm('是否确认删除该项目?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' }) + .then(() => { + QuestionItemDelete(id) + }) + .catch(() => {}) } -const edit_item_data = ref({ - active: 'jichu', - items: [] -}) -const edit_item_show = ref(false) -const editItemClick = (type) => { - edit_item_data.value = { - active: type, - items: JSON.parse(JSON.stringify(edit_data.value[type])) - } - edit_item_show.value = true -} -const editItemDoneClick = () => { - edit_data.value[edit_item_data.value.active] = JSON.parse(JSON.stringify(edit_item_data.value.items)) - edit_item_show.value = false -} -const filterMethod = (query, item) => { - return item.name.toLowerCase().includes(query.toLowerCase()) || item.pinyin.toLowerCase().includes(query.toLowerCase()) +const comboNameShow = (combo_id) => { + if (Number(combo_id) === 0) return '无关联套餐' + return combo_list.value.find((i) => i.combo_id == combo_id).name } + onMounted(() => { routerChange($router.currentRoute.value.query) - QuestionItemItem() + QuestionItemCombo() }) diff --git a/h5/pages/main/question/info/info.vue b/h5/pages/main/question/info/info.vue index 3e64bba..25e68c0 100644 --- a/h5/pages/main/question/info/info.vue +++ b/h5/pages/main/question/info/info.vue @@ -74,11 +74,15 @@ } const itemShow = (type) => { + const id = question_info.value.check_items_array[type].combo const mergedArray = [...new Set([ ...question_info.value.items, - ...question_info.value.check_items_array[type] + ...question_info.value.check_items_array[type].items ])] - let query = "?itemIds=" + mergedArray.join(','); + let query = "?comboId=" + id + '&wj=1'; + if (mergedArray.length !== 0) { + query += "&itemIds=" + mergedArray.join(','); + } uni.navigateTo({ url: "/pages/main/tj/tjxq" + query, }); @@ -104,7 +108,10 @@ 基础推荐方案 - {{ question_info.items.length + question_info.check_items_array.jichu.length }}项 + {{ question_info.items.length + + question_info.check_items_array.jichu.combo_items.length + + question_info.check_items_array.jichu.items.length + }}项 @@ -120,11 +127,14 @@ - + 中等推荐方案 - {{ question_info.items.length + question_info.check_items_array.tuijian.length }}项 + {{ question_info.items.length + + question_info.check_items_array.tuijian.combo_items.length + + question_info.check_items_array.tuijian.items.length + }}项 @@ -140,11 +150,14 @@ - + 高端推荐方案 - {{ question_info.items.length + question_info.check_items_array.gaoduan.length }}项 + {{ question_info.items.length + + question_info.check_items_array.gaoduan.combo_items.length + + question_info.check_items_array.gaoduan.items.length + }}项