作者 xiaoqiu

完成各部分模块功能

@@ -9,6 +9,15 @@ export function queryList(params) { @@ -9,6 +9,15 @@ export function queryList(params) {
9 }) 9 })
10 } 10 }
11 11
  12 +// 查询待处理报表
  13 +export function queryPengdingList(params) {
  14 + return request({
  15 + url: '/registration/monitor/listPending',
  16 + method: 'get',
  17 + params
  18 + })
  19 +}
  20 +
12 // 查询已处理保单 21 // 查询已处理保单
13 export function queryProcessedList(params) { 22 export function queryProcessedList(params) {
14 return request({ 23 return request({
@@ -73,10 +82,11 @@ export function disposeUser(data, taskId) { @@ -73,10 +82,11 @@ export function disposeUser(data, taskId) {
73 } 82 }
74 83
75 // 转办 84 // 转办
76 -export function transfer(taskId) { 85 +export function transfer(data, taskId) {
77 return request({ 86 return request({
78 url: `/registratiom/transferTask/${taskId}`, 87 url: `/registratiom/transferTask/${taskId}`,
79 - method: 'post' 88 + method: 'post',
  89 + data
80 }) 90 })
81 } 91 }
82 92
@@ -89,3 +99,11 @@ export function updateCarInfo(data) { @@ -89,3 +99,11 @@ export function updateCarInfo(data) {
89 }) 99 })
90 } 100 }
91 101
  102 +// 获取人员列表
  103 +export function getUserList() {
  104 + return request({
  105 + url: '/system/user/otherEmployee',
  106 + method: 'get'
  107 + })
  108 +}
  109 +
@@ -92,7 +92,7 @@ function logout() { @@ -92,7 +92,7 @@ function logout() {
92 }) 92 })
93 .then(() => { 93 .then(() => {
94 userStore.logOut().then(() => { 94 userStore.logOut().then(() => {
95 - location.href = "/index"; 95 + location.href = "/";
96 }); 96 });
97 }) 97 })
98 .catch(() => {}); 98 .catch(() => {});
@@ -81,7 +81,7 @@ service.interceptors.response.use(res => { @@ -81,7 +81,7 @@ service.interceptors.response.use(res => {
81 ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { 81 ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
82 isRelogin.show = false; 82 isRelogin.show = false;
83 useUserStore().logOut().then(() => { 83 useUserStore().logOut().then(() => {
84 - location.href = '/index'; 84 + location.href = '/';
85 }) 85 })
86 }).catch(() => { 86 }).catch(() => {
87 isRelogin.show = false; 87 isRelogin.show = false;
@@ -65,11 +65,11 @@ @@ -65,11 +65,11 @@
65 @selection-change="handleSelectionChange" 65 @selection-change="handleSelectionChange"
66 @row-click="handleUpdate" 66 @row-click="handleUpdate"
67 > 67 >
68 - <el-table-column  
69 - label="登记时间"  
70 - prop="initialRegistrationTime"  
71 - width="150"  
72 - /> 68 + <el-table-column label="登记时间" width="160" align="center">
  69 + <template #default="{ row }">
  70 + <span>{{ row.initialRegistration || row.createTime }}</span>
  71 + </template>
  72 + </el-table-column>
73 <el-table-column label="车牌号" prop="licensePlateNumber" width="150" /> 73 <el-table-column label="车牌号" prop="licensePlateNumber" width="150" />
74 <el-table-column label="车架号" prop="frameNumber" width="240" /> 74 <el-table-column label="车架号" prop="frameNumber" width="240" />
75 <el-table-column label="车主姓名" prop="name" width="100" /> 75 <el-table-column label="车主姓名" prop="name" width="100" />
@@ -292,6 +292,7 @@ const loading = ref(false); @@ -292,6 +292,7 @@ const loading = ref(false);
292 const total = ref(5); 292 const total = ref(5);
293 const open = ref(false); 293 const open = ref(false);
294 const form = ref({}); 294 const form = ref({});
  295 +const timer = ref(null);
295 const showSearch = ref(true); 296 const showSearch = ref(true);
296 const hasRole = computed(() => { 297 const hasRole = computed(() => {
297 return !proxy.$auth.hasRole("associationemployee"); 298 return !proxy.$auth.hasRole("associationemployee");
@@ -359,7 +360,10 @@ function resetQuery() { @@ -359,7 +360,10 @@ function resetQuery() {
359 handleQuery(); 360 handleQuery();
360 } 361 }
361 const getMsg = (val) => { 362 const getMsg = (val) => {
  363 + clearTimeout(timer.value);
  364 + timer.value = setTimeout(() => {
362 form.value.message = val; 365 form.value.message = val;
  366 + }, 1000);
363 }; 367 };
364 getList(); 368 getList();
365 </script> 369 </script>
  1 +<template>
  2 + <div class="app-container">
  3 + <!-- 表格数据 -->
  4 + <el-table v-loading="loading" :data="policyList" @row-click="handleUpdate">
  5 + <el-table-column type="selection" width="55" align="center" />
  6 + <el-table-column label="序号" width="55" type="index" />
  7 + <el-table-column
  8 + label="登记时间"
  9 + prop="initialRegistrationTime"
  10 + width="150"
  11 + align="center"
  12 + />
  13 + <el-table-column
  14 + label="车牌号"
  15 + prop="licensePlateNumber"
  16 + width="150"
  17 + align="center"
  18 + />
  19 + <el-table-column label="车架号" prop="frameNumber" align="center" />
  20 + <el-table-column
  21 + label="车主姓名"
  22 + prop="name"
  23 + width="100"
  24 + align="center"
  25 + />
  26 + <el-table-column
  27 + label="联系电话"
  28 + prop="phone"
  29 + width="180"
  30 + align="center"
  31 + />
  32 + <el-table-column
  33 + label="上年承保公司"
  34 + prop="sysDeptName"
  35 + width="150"
  36 + align="center"
  37 + />
  38 + <el-table-column
  39 + v-show="hasCompanyadmin"
  40 + label="分配机制"
  41 + prop="distributionMechanism"
  42 + width="150"
  43 + align="center"
  44 + />
  45 + <el-table-column
  46 + label="订单分配时间"
  47 + prop="distributionTime"
  48 + width="150"
  49 + align="center"
  50 + />
  51 + <el-table-column
  52 + label="保单进度"
  53 + prop="orderProgress"
  54 + width="150"
  55 + align="center"
  56 + />
  57 + <el-table-column
  58 + label="承接时间"
  59 + prop="companyEmployeeUndertakeTime"
  60 + width="150"
  61 + align="center"
  62 + />
  63 + <el-table-column
  64 + v-show="hasCompanyadmin"
  65 + label="承接人"
  66 + prop="associationEmployeeUserName"
  67 + width="150"
  68 + align="center"
  69 + />
  70 + <el-table-column label="操作" align="center" width="360" fixed="right">
  71 + <template #default="{ row }">
  72 + <el-button type="primary" v-hasPermi="['policy:pending:continue']">{{
  73 + row.orderProgress === "已承接" ? "承接回馈" : "承接"
  74 + }}</el-button>
  75 + <el-button type="primary" v-hasPermi="['policy:pending:sharing']"
  76 + >分配</el-button
  77 + >
  78 + <el-button type="primary" v-hasPermi="['policy:pending:transfer']"
  79 + >转办</el-button
  80 + >
  81 + <el-button
  82 + type="primary"
  83 + v-show="hasRole"
  84 + @click="handleSuccess(0, row.taskId)"
  85 + >通过</el-button
  86 + >
  87 + <el-button
  88 + type="primary"
  89 + v-show="hasRole"
  90 + @click="handleFallback(1, row.taskId)"
  91 + >退回</el-button
  92 + >
  93 + <el-button
  94 + type="primary"
  95 + v-show="hasRole"
  96 + @click="handleVoid(2, row.taskId)"
  97 + >作废</el-button
  98 + >
  99 + <el-button
  100 + type="primary"
  101 + v-show="hasRole"
  102 + @click="handleAuthCompany(0, row.taskId)"
  103 + >分配承保公司</el-button
  104 + >
  105 + </template>
  106 + </el-table-column>
  107 + </el-table>
  108 +
  109 + <pagination
  110 + v-show="total > 0"
  111 + :total="total"
  112 + v-model:page="queryParams.pageNum"
  113 + v-model:limit="queryParams.pageSize"
  114 + @pagination="getList"
  115 + />
  116 +
  117 + <!-- 表单作废对话框 -->
  118 + <el-dialog
  119 + v-model="deprecatedShow"
  120 + title="温馨提示:该保单作废后车牌号、车架号在本自然年度无法重新提交"
  121 + width="500"
  122 + append-to-body
  123 + >
  124 + <QuillEditor
  125 + :value="deprecatedForm.deprecatedReason"
  126 + @updateValue="getMsg"
  127 + />
  128 + <template #footer>
  129 + <div class="dialog-footer">
  130 + <el-button @click="deprecatedShow = false">取消</el-button>
  131 + <el-button type="primary" @click="sunmitDeprecated">确定</el-button>
  132 + </div>
  133 + </template>
  134 + </el-dialog>
  135 +
  136 + <!-- 分配承保公司对话框 -->
  137 + <el-dialog
  138 + v-model="companyShow"
  139 + title="分配承保公司:"
  140 + width="500"
  141 + append-to-body
  142 + >
  143 + <div class="company_box">
  144 + <div class="header_top">
  145 + <el-input
  146 + v-model="companyQueryParams.deptName"
  147 + style="width: 380px"
  148 + placeholder="请输入承保公司名称(支持模糊查询)"
  149 + prefix-icon="Search"
  150 + />
  151 + <el-button type="primary" @click="getDeptList">查询</el-button>
  152 + </div>
  153 + <el-radio-group v-model="companyForm.deptId" @change="handleDeptChange">
  154 + <el-radio
  155 + v-for="item in deptOptions"
  156 + :key="item.deptId"
  157 + :label="item.deptId"
  158 + >{{ item.deptName }}</el-radio
  159 + >
  160 + </el-radio-group>
  161 + </div>
  162 + <template #footer>
  163 + <div class="dialog-footer">
  164 + <el-button @click="companyShow = false">取消</el-button>
  165 + <el-button type="primary" @click="submitForm">确定</el-button>
  166 + </div>
  167 + </template>
  168 + </el-dialog>
  169 +
  170 + <!-- 编辑对话框 -->
  171 + <el-dialog v-model="open" :title="title" width="700" append-to-body>
  172 + <el-form :model="form" :rules="rules" ref="policyRef" label-width="100px">
  173 + <el-row>
  174 + <el-col :span="12">
  175 + <el-form-item label="车牌号" prop="carNum">
  176 + <el-input
  177 + v-model="form.carNum"
  178 + placeholder="请输入车牌号"
  179 + maxlength="30"
  180 + />
  181 + </el-form-item>
  182 + </el-col>
  183 + <el-col :span="12">
  184 + <el-form-item label="车架号" prop="frameNum">
  185 + <el-input
  186 + v-model="form.frameNum"
  187 + placeholder="请输入车架号"
  188 + maxlength="30"
  189 + />
  190 + </el-form-item>
  191 + </el-col>
  192 + </el-row>
  193 + <el-row>
  194 + <el-col :span="12">
  195 + <el-form-item label="车主姓名" prop="name">
  196 + <el-input
  197 + v-model="form.name"
  198 + placeholder="请输入车主姓名"
  199 + maxlength="11"
  200 + />
  201 + </el-form-item>
  202 + </el-col>
  203 + <el-col :span="12">
  204 + <el-form-item label="联系电话" prop="phone">
  205 + <el-input
  206 + v-model="form.phone"
  207 + placeholder="请输入联系电话"
  208 + maxlength="50"
  209 + />
  210 + </el-form-item>
  211 + </el-col>
  212 + </el-row>
  213 + <el-row>
  214 + <el-col :span="12">
  215 + <el-form-item label="登记时间" prop="createTime">
  216 + <el-input
  217 + v-model="form.createTime"
  218 + placeholder="请输入登记时间"
  219 + />
  220 + </el-form-item>
  221 + </el-col>
  222 + <el-col :span="12">
  223 + <el-form-item label="上年承保公司" prop="company">
  224 + <el-input
  225 + v-model="form.company"
  226 + placeholder="请输入上年承保公司"
  227 + maxlength="50"
  228 + />
  229 + </el-form-item>
  230 + </el-col>
  231 + </el-row>
  232 + </el-form>
  233 + <template #footer>
  234 + <div class="dialog-footer">
  235 + <el-button @click="open = false">取消</el-button>
  236 + <el-button type="primary" @click="open = false">确定</el-button>
  237 + </div>
  238 + </template>
  239 + </el-dialog>
  240 + </div>
  241 +</template>
  242 +
  243 +<script setup>
  244 +import { queryPengdingList, disposeUser } from "@/api/policy/index";
  245 +import { listDept } from "@/api/system/dept";
  246 +import { onMounted, ref } from "vue";
  247 +const { proxy } = getCurrentInstance();
  248 +const loading = ref(false);
  249 +const total = ref(0);
  250 +const title = ref("保单信息");
  251 +const open = ref(false);
  252 +const form = ref({});
  253 +const hasRole = computed(() => {
  254 + return proxy.$auth.hasRole("associationemployee");
  255 +});
  256 +
  257 +const hasCompanyadmin = computed(() => {
  258 + return proxy.$auth.hasRole("companyadmin");
  259 +});
  260 +const rules = ref({
  261 + carNum: [{ required: true, message: "车牌号不能为空", trigger: "blur" }],
  262 + frameNum: [{ required: true, message: "车架号不能为空", trigger: "blur" }],
  263 + name: [{ required: true, message: "车主姓名不能为空", trigger: "blur" }],
  264 + createTime: [{ required: true, message: "日期不能为空", trigger: "blur" }],
  265 + phone: [
  266 + {
  267 + pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  268 + message: "请输入正确的手机号码",
  269 + trigger: "blur",
  270 + },
  271 + ],
  272 +});
  273 +const companyShow = ref(false);
  274 +const deptOptions = ref([]);
  275 +const company = ref(2);
  276 +const deprecatedShow = ref(false);
  277 +const deprecatedForm = ref({});
  278 +const companyForm = ref({});
  279 +const queryParams = reactive({
  280 + pageNum: 1,
  281 + pageSize: 10,
  282 +});
  283 +const companyQueryParams = reactive({
  284 + deptName: undefined,
  285 + status: undefined,
  286 +});
  287 +const policyList = ref([]);
  288 +
  289 +const getList = async () => {
  290 + loading.value = true;
  291 + const { rows, total: all } = await queryPengdingList(queryParams);
  292 + policyList.value = rows;
  293 + total.value = all;
  294 + loading.value = false;
  295 +};
  296 +// 通过保单
  297 +const handleSuccess = (associationapprove, taskId) => {
  298 + ElMessageBox.confirm("是否通过该保单?", {
  299 + confirmButtonText: "确认通过",
  300 + cancelButtonText: "取消",
  301 + type: "warning",
  302 + })
  303 + .then(() => {
  304 + disposeUser({ associationapprove }, taskId).then((res) => {
  305 + proxy.$modal.msgSuccess("保单已通过");
  306 + });
  307 + })
  308 + .catch(() => {
  309 + proxy.$modal.msg("取消通过");
  310 + });
  311 +};
  312 +// 退回保单
  313 +const handleFallback = (associationapprove, taskId) => {
  314 + ElMessageBox.confirm("是否退回该保单?", {
  315 + confirmButtonText: "确认退回",
  316 + cancelButtonText: "取消",
  317 + type: "warning",
  318 + })
  319 + .then(() => {
  320 + disposeUser({ associationapprove }, taskId).then((res) => {
  321 + proxy.$modal.msgSuccess("保单已退回");
  322 + });
  323 + })
  324 + .catch(() => {
  325 + proxy.$modal.msg("已取消");
  326 + });
  327 +};
  328 +// 作废保单
  329 +const handleVoid = (associationapprove, taskId) => {
  330 + deprecatedForm.value = {
  331 + associationapprove,
  332 + taskId,
  333 + };
  334 + deprecatedShow.value = true;
  335 +};
  336 +
  337 +// 提交作废表单
  338 +const sunmitDeprecated = () => {
  339 + const data = {
  340 + associationapprove: deprecatedForm.value.associationapprove,
  341 + comment: deprecatedForm.value.deprecatedReason,
  342 + };
  343 + const taskId = deprecatedForm.value.taskId;
  344 + disposeUser(data, taskId).then((res) => {
  345 + proxy.$modal.msgSuccess("保单已退回");
  346 + });
  347 +};
  348 +// 分配承保公司
  349 +const handleAuthCompany = (associationapprove, taskId) => {
  350 + companyForm.value = {
  351 + associationapprove,
  352 + taskId,
  353 + };
  354 + companyShow.value = true;
  355 + getDeptList();
  356 +};
  357 +
  358 +/** 查询部门列表 */
  359 +const getDeptList = () => {
  360 + loading.value = true;
  361 + listDept(companyQueryParams).then((response) => {
  362 + deptOptions.value = response.data.filter((item) => item.parentId === 100);
  363 + loading.value = false;
  364 + });
  365 +};
  366 +
  367 +/** 重置操作表单 */
  368 +function reset() {
  369 + form.value = {
  370 + policyId: undefined,
  371 + createTime: undefined,
  372 + carNum: undefined,
  373 + frameNum: undefined,
  374 + name: undefined,
  375 + phone: undefined,
  376 + company: undefined,
  377 + };
  378 + proxy.resetForm("policyRef");
  379 +}
  380 +
  381 +/** 修改按钮操作 */
  382 +function handleUpdate(row) {
  383 + reset();
  384 + form.value = row;
  385 + open.value = true;
  386 +}
  387 +/** 提交通过分配承保公司 */
  388 +function submitForm() {
  389 + const data = {
  390 + associationapprove: companyForm.value.associationapprove,
  391 + deptId: companyForm.value.deptId,
  392 + };
  393 + const taskId = companyForm.value.taskId;
  394 + disposeUser(data, taskId).then((res) => {
  395 + companyShow.value = true;
  396 + proxy.$modal.msgSuccess("保单已分配成功");
  397 + });
  398 +}
  399 +
  400 +const getMsg = (val) => {
  401 + deprecatedForm.value.deprecatedReason = val;
  402 +};
  403 +
  404 +getList();
  405 +</script>
  406 +
  407 +<style lang="scss" scoped>
  408 +::v-deep(.el-radio-group) {
  409 + align-items: start;
  410 + flex-direction: column;
  411 +}
  412 +.header_top {
  413 + display: flex;
  414 + align-items: center;
  415 + gap: 30px;
  416 + margin-bottom: 20px;
  417 +}
  418 +</style>
@@ -4,19 +4,24 @@ @@ -4,19 +4,24 @@
4 <el-table v-loading="loading" :data="policyList" @row-click="handleUpdate"> 4 <el-table v-loading="loading" :data="policyList" @row-click="handleUpdate">
5 <el-table-column type="selection" width="55" align="center" /> 5 <el-table-column type="selection" width="55" align="center" />
6 <el-table-column label="序号" width="55" type="index" /> 6 <el-table-column label="序号" width="55" type="index" />
  7 + <el-table-column label="登记时间" width="160" align="center">
  8 + <template #default="{ row }">
  9 + <span>{{ row.initialRegistration || row.createTime }}</span>
  10 + </template>
  11 + </el-table-column>
  12 +
7 <el-table-column 13 <el-table-column
8 - label="登记时间"  
9 - prop="initialRegistrationTime" 14 + label="车牌号"
  15 + prop="licensePlateNumber"
10 width="150" 16 width="150"
11 align="center" 17 align="center"
12 /> 18 />
13 <el-table-column 19 <el-table-column
14 - label="车牌号"  
15 - prop="licensePlateNumber"  
16 - width="150" 20 + label="车架号"
  21 + width="180"
  22 + prop="frameNumber"
17 align="center" 23 align="center"
18 /> 24 />
19 - <el-table-column label="车架号" prop="frameNumber" align="center" />  
20 <el-table-column 25 <el-table-column
21 label="车主姓名" 26 label="车主姓名"
22 prop="name" 27 prop="name"
@@ -45,7 +50,7 @@ @@ -45,7 +50,7 @@
45 <el-table-column 50 <el-table-column
46 label="订单分配时间" 51 label="订单分配时间"
47 prop="distributionTime" 52 prop="distributionTime"
48 - width="150" 53 + width="160"
49 align="center" 54 align="center"
50 /> 55 />
51 <el-table-column 56 <el-table-column
@@ -57,7 +62,7 @@ @@ -57,7 +62,7 @@
57 <el-table-column 62 <el-table-column
58 label="承接时间" 63 label="承接时间"
59 prop="companyEmployeeUndertakeTime" 64 prop="companyEmployeeUndertakeTime"
60 - width="150" 65 + width="160"
61 align="center" 66 align="center"
62 /> 67 />
63 <el-table-column 68 <el-table-column
@@ -67,39 +72,56 @@ @@ -67,39 +72,56 @@
67 width="150" 72 width="150"
68 align="center" 73 align="center"
69 /> 74 />
70 - <el-table-column label="操作" align="center" width="360" fixed="right"> 75 + <el-table-column
  76 + label="操作"
  77 + align="center"
  78 + min-width="240"
  79 + fixed="right"
  80 + >
71 <template #default="{ row }"> 81 <template #default="{ row }">
72 - <el-button type="primary" v-hasPermi="['policy:pending:continue']">{{ 82 + <el-button
  83 + type="primary"
  84 + v-hasPermi="['policy:pending:continue']"
  85 + @click.stop="handleContinue(row)"
  86 + >{{
73 row.orderProgress === "已承接" ? "承接回馈" : "承接" 87 row.orderProgress === "已承接" ? "承接回馈" : "承接"
74 - }}</el-button>  
75 - <el-button type="primary" v-hasPermi="['policy:pending:sharing']" 88 + }}</el-button
  89 + >
  90 + <el-button
  91 + type="primary"
  92 + v-hasPermi="['policy:pending:sharing']"
  93 + @click.stop="handleSharing(row.taskId)"
76 >分配</el-button 94 >分配</el-button
77 > 95 >
78 - <el-button type="primary" v-hasPermi="['policy:pending:transfer']" 96 + <el-button
  97 + type="primary"
  98 + v-show="row.orderProgress !== '已承接'"
  99 + v-hasPermi="['policy:pending:transfer']"
  100 + @click.stop="handleSharing(row.taskId)"
79 >转办</el-button 101 >转办</el-button
80 > 102 >
81 <el-button 103 <el-button
82 type="primary" 104 type="primary"
83 v-show="hasRole" 105 v-show="hasRole"
84 - @click="handleSuccess(0, row.taskId)" 106 + @click.stop="handleSuccess('0', row.taskId)"
85 >通过</el-button 107 >通过</el-button
86 > 108 >
87 <el-button 109 <el-button
88 type="primary" 110 type="primary"
89 v-show="hasRole" 111 v-show="hasRole"
90 - @click="handleFallback(1, row.taskId)" 112 + @click.stop="handleFallback('1', row.taskId)"
91 >退回</el-button 113 >退回</el-button
92 > 114 >
93 <el-button 115 <el-button
94 type="primary" 116 type="primary"
95 v-show="hasRole" 117 v-show="hasRole"
96 - @click="handleVoid(2, row.taskId)" 118 + @click.stop="handleVoid('2', row.taskId)"
97 >作废</el-button 119 >作废</el-button
98 > 120 >
99 <el-button 121 <el-button
100 type="primary" 122 type="primary"
101 v-show="hasRole" 123 v-show="hasRole"
102 - @click="handleAuthCompany(0, row.taskId)" 124 + @click.stop="handleAuthCompany('0', row.taskId)"
103 >分配承保公司</el-button 125 >分配承保公司</el-button
104 > 126 >
105 </template> 127 </template>
@@ -121,9 +143,12 @@ @@ -121,9 +143,12 @@
121 width="500" 143 width="500"
122 append-to-body 144 append-to-body
123 > 145 >
124 - <QuillEditor  
125 - :value="deprecatedForm.deprecatedReason"  
126 - @updateValue="getMsg" 146 + <el-input
  147 + v-model="deprecatedForm.deprecatedReason"
  148 + style="width: 240px"
  149 + :rows="2"
  150 + type="textarea"
  151 + placeholder="请输入作废原因"
127 /> 152 />
128 <template #footer> 153 <template #footer>
129 <div class="dialog-footer"> 154 <div class="dialog-footer">
@@ -150,7 +175,7 @@ @@ -150,7 +175,7 @@
150 /> 175 />
151 <el-button type="primary" @click="getDeptList">查询</el-button> 176 <el-button type="primary" @click="getDeptList">查询</el-button>
152 </div> 177 </div>
153 - <el-radio-group v-model="companyForm.deptId" @change="handleDeptChange"> 178 + <el-radio-group v-model="companyForm.deptId">
154 <el-radio 179 <el-radio
155 v-for="item in deptOptions" 180 v-for="item in deptOptions"
156 :key="item.deptId" 181 :key="item.deptId"
@@ -167,25 +192,50 @@ @@ -167,25 +192,50 @@
167 </template> 192 </template>
168 </el-dialog> 193 </el-dialog>
169 194
  195 + <!-- 转办分配对话框 -->
  196 + <el-dialog
  197 + v-model="transferShow"
  198 + title="请选择人员:"
  199 + width="500"
  200 + append-to-body
  201 + >
  202 + <div class="company_box">
  203 + <el-radio-group v-model="transferForm.username">
  204 + <el-radio
  205 + v-for="item in transferOptions"
  206 + :key="item.userName"
  207 + :label="item.userName"
  208 + >{{ item.userName }}</el-radio
  209 + >
  210 + </el-radio-group>
  211 + </div>
  212 + <template #footer>
  213 + <div class="dialog-footer">
  214 + <el-button @click="companyShow = false">取消</el-button>
  215 + <el-button type="primary" @click="submitTransfer">确定</el-button>
  216 + </div>
  217 + </template>
  218 + </el-dialog>
  219 +
170 <!-- 编辑对话框 --> 220 <!-- 编辑对话框 -->
171 - <el-dialog v-model="open" :title="title" width="700" append-to-body>  
172 - <el-form :model="form" :rules="rules" ref="policyRef" label-width="100px"> 221 + <el-dialog v-model="open" title="保单信息" width="700" append-to-body>
  222 + <el-form :model="form" ref="policyRef" label-width="100px">
173 <el-row> 223 <el-row>
174 <el-col :span="12"> 224 <el-col :span="12">
175 - <el-form-item label="车牌号" prop="carNum"> 225 + <el-form-item label="车牌号" prop="licensePlateNumber">
176 <el-input 226 <el-input
177 - v-model="form.carNum" 227 + v-model="form.licensePlateNumber"
178 placeholder="请输入车牌号" 228 placeholder="请输入车牌号"
179 - maxlength="30" 229 + :disabled="hasRole"
180 /> 230 />
181 </el-form-item> 231 </el-form-item>
182 </el-col> 232 </el-col>
183 <el-col :span="12"> 233 <el-col :span="12">
184 - <el-form-item label="车架号" prop="frameNum"> 234 + <el-form-item label="车架号" prop="frameNumber">
185 <el-input 235 <el-input
186 - v-model="form.frameNum" 236 + v-model="form.frameNumber"
  237 + :disabled="hasRole"
187 placeholder="请输入车架号" 238 placeholder="请输入车架号"
188 - maxlength="30"  
189 /> 239 />
190 </el-form-item> 240 </el-form-item>
191 </el-col> 241 </el-col>
@@ -195,8 +245,8 @@ @@ -195,8 +245,8 @@
195 <el-form-item label="车主姓名" prop="name"> 245 <el-form-item label="车主姓名" prop="name">
196 <el-input 246 <el-input
197 v-model="form.name" 247 v-model="form.name"
  248 + :disabled="hasRole"
198 placeholder="请输入车主姓名" 249 placeholder="请输入车主姓名"
199 - maxlength="11"  
200 /> 250 />
201 </el-form-item> 251 </el-form-item>
202 </el-col> 252 </el-col>
@@ -204,36 +254,120 @@ @@ -204,36 +254,120 @@
204 <el-form-item label="联系电话" prop="phone"> 254 <el-form-item label="联系电话" prop="phone">
205 <el-input 255 <el-input
206 v-model="form.phone" 256 v-model="form.phone"
  257 + :disabled="hasRole"
207 placeholder="请输入联系电话" 258 placeholder="请输入联系电话"
208 - maxlength="50"  
209 /> 259 />
210 </el-form-item> 260 </el-form-item>
211 </el-col> 261 </el-col>
212 </el-row> 262 </el-row>
213 <el-row> 263 <el-row>
214 <el-col :span="12"> 264 <el-col :span="12">
215 - <el-form-item label="登记时间" prop="createTime"> 265 + <el-form-item label="车辆类型" prop="vehicleType">
216 <el-input 266 <el-input
217 - v-model="form.createTime" 267 + v-model="form.vehicleType"
  268 + :disabled="hasRole"
218 placeholder="请输入登记时间" 269 placeholder="请输入登记时间"
219 /> 270 />
220 </el-form-item> 271 </el-form-item>
221 </el-col> 272 </el-col>
222 <el-col :span="12"> 273 <el-col :span="12">
223 - <el-form-item label="上年承保公司" prop="company"> 274 + <el-form-item label="车辆使用性质" prop="vehicleNature">
  275 + <el-input
  276 + v-model="form.vehicleNature"
  277 + :disabled="hasRole"
  278 + placeholder="请输入办理人"
  279 + />
  280 + </el-form-item>
  281 + </el-col>
  282 + </el-row>
  283 + <el-row>
  284 + <el-col :span="12">
  285 + <el-form-item label="核定载客数" prop="passengersNumber">
  286 + <el-input
  287 + v-model="form.passengersNumber"
  288 + :disabled="hasRole"
  289 + placeholder="请输入办理人"
  290 + />
  291 + </el-form-item>
  292 + </el-col>
  293 + <el-col :span="12">
  294 + <el-form-item label="核定载质量" prop="passengerCapacity">
  295 + <el-input
  296 + v-model="form.passengerCapacity"
  297 + :disabled="hasRole"
  298 + placeholder="请输入承保公司"
  299 + />
  300 + </el-form-item>
  301 + </el-col>
  302 + </el-row>
  303 + <el-row>
  304 + <el-col :span="12">
  305 + <el-form-item label="排量毫升" prop="emissions">
  306 + <el-input
  307 + v-model="form.emissions"
  308 + :disabled="hasRole"
  309 + placeholder="请输入办理人"
  310 + />
  311 + </el-form-item>
  312 + </el-col>
  313 + <el-col :span="12">
  314 + <el-form-item label="中文品牌" prop="vehicleBrand">
  315 + <el-input
  316 + v-model="form.vehicleBrand"
  317 + :disabled="hasRole"
  318 + placeholder="请输入办理人"
  319 + />
  320 + </el-form-item>
  321 + </el-col>
  322 + </el-row>
  323 + <el-row>
  324 + <el-col :span="12">
  325 + <el-form-item label="车辆型号" prop="vehicleModel">
  326 + <el-input
  327 + v-model="form.vehicleModel"
  328 + :disabled="hasRole"
  329 + placeholder="请输入办理人"
  330 + />
  331 + </el-form-item>
  332 + </el-col>
  333 + <el-col :span="12">
  334 + <el-form-item label="准牵引准质量" prop="tractionMass">
  335 + <el-input
  336 + v-model="form.tractionMass"
  337 + :disabled="hasRole"
  338 + placeholder="请输入办理人"
  339 + />
  340 + </el-form-item>
  341 + </el-col>
  342 + </el-row>
  343 + <el-row>
  344 + <el-col :span="12">
  345 + <el-form-item label="保险需求" prop="requirements">
  346 + <el-input
  347 + v-model="form.requirements"
  348 + :disabled="hasRole"
  349 + placeholder="请输入办理人"
  350 + />
  351 + </el-form-item>
  352 + </el-col>
  353 + <el-col :span="12">
  354 + <el-form-item label="承保单号" prop="policyNumber">
224 <el-input 355 <el-input
225 - v-model="form.company"  
226 - placeholder="请输入上年承保公司"  
227 - maxlength="50" 356 + v-model="form.policyNumber"
  357 + :disabled="hasRole"
  358 + placeholder="请输入承保单号"
228 /> 359 />
229 </el-form-item> 360 </el-form-item>
230 </el-col> 361 </el-col>
231 </el-row> 362 </el-row>
  363 + <el-form-item label="保单回馈" prop="progress">
  364 + <QuillEditor :value="form.comment" @updateValue="getMsg" />
  365 + </el-form-item>
232 </el-form> 366 </el-form>
233 <template #footer> 367 <template #footer>
234 <div class="dialog-footer"> 368 <div class="dialog-footer">
235 <el-button @click="open = false">取消</el-button> 369 <el-button @click="open = false">取消</el-button>
236 - <el-button type="primary" @click="open = false">确定</el-button> 370 + <el-button type="primary" @click="submit">提交回馈</el-button>
237 </div> 371 </div>
238 </template> 372 </template>
239 </el-dialog> 373 </el-dialog>
@@ -241,15 +375,23 @@ @@ -241,15 +375,23 @@
241 </template> 375 </template>
242 376
243 <script setup> 377 <script setup>
244 -import { queryMyList, disposeUser } from "@/api/policy/index"; 378 +import {
  379 + queryMyList,
  380 + disposeUser,
  381 + transfer,
  382 + getUserList,
  383 +} from "@/api/policy/index";
245 import { listDept } from "@/api/system/dept"; 384 import { listDept } from "@/api/system/dept";
246 -import { onMounted, ref } from "vue"; 385 +import { ref } from "vue";
247 const { proxy } = getCurrentInstance(); 386 const { proxy } = getCurrentInstance();
248 const loading = ref(false); 387 const loading = ref(false);
249 const total = ref(0); 388 const total = ref(0);
250 const title = ref("保单信息"); 389 const title = ref("保单信息");
251 const open = ref(false); 390 const open = ref(false);
  391 +const timer = ref(null);
252 const form = ref({}); 392 const form = ref({});
  393 +const transferShow = ref(false);
  394 +const transferForm = ref({});
253 const hasRole = computed(() => { 395 const hasRole = computed(() => {
254 return proxy.$auth.hasRole("associationemployee"); 396 return proxy.$auth.hasRole("associationemployee");
255 }); 397 });
@@ -272,6 +414,7 @@ const rules = ref({ @@ -272,6 +414,7 @@ const rules = ref({
272 }); 414 });
273 const companyShow = ref(false); 415 const companyShow = ref(false);
274 const deptOptions = ref([]); 416 const deptOptions = ref([]);
  417 +const transferOptions = ref([]);
275 const company = ref(2); 418 const company = ref(2);
276 const deprecatedShow = ref(false); 419 const deprecatedShow = ref(false);
277 const deprecatedForm = ref({}); 420 const deprecatedForm = ref({});
@@ -293,16 +436,37 @@ const getList = async () => { @@ -293,16 +436,37 @@ const getList = async () => {
293 total.value = data.total; 436 total.value = data.total;
294 loading.value = false; 437 loading.value = false;
295 }; 438 };
  439 +// 承接
  440 +const handleContinue = (row) => {
  441 + if (row.orderProgress === "待承接") {
  442 + proxy.$modal
  443 + .confirm("是否要承接该保单")
  444 + .then(function () {})
  445 + .then(() => {
  446 + disposeUser({}, row.taskId).then((res) => {
  447 + proxy.$modal.msgSuccess("承接成功");
  448 + getList();
  449 + });
  450 + })
  451 + .catch(() => {
  452 + proxy.$modal.msg("已取消");
  453 + });
  454 + } else {
  455 + reset();
  456 + form.value = row;
  457 + open.value = true;
  458 + }
  459 +};
  460 +
296 // 通过保单 461 // 通过保单
297 const handleSuccess = (associationapprove, taskId) => { 462 const handleSuccess = (associationapprove, taskId) => {
298 - ElMessageBox.confirm("是否通过该保单?", {  
299 - confirmButtonText: "确认通过",  
300 - cancelButtonText: "取消",  
301 - type: "warning",  
302 - }) 463 + proxy.$modal
  464 + .confirm("是否通过该保单")
  465 + .then(function () {})
303 .then(() => { 466 .then(() => {
304 disposeUser({ associationapprove }, taskId).then((res) => { 467 disposeUser({ associationapprove }, taskId).then((res) => {
305 proxy.$modal.msgSuccess("保单已通过"); 468 proxy.$modal.msgSuccess("保单已通过");
  469 + getList();
306 }); 470 });
307 }) 471 })
308 .catch(() => { 472 .catch(() => {
@@ -311,14 +475,13 @@ const handleSuccess = (associationapprove, taskId) => { @@ -311,14 +475,13 @@ const handleSuccess = (associationapprove, taskId) => {
311 }; 475 };
312 // 退回保单 476 // 退回保单
313 const handleFallback = (associationapprove, taskId) => { 477 const handleFallback = (associationapprove, taskId) => {
314 - ElMessageBox.confirm("是否退回该保单?", {  
315 - confirmButtonText: "确认退回",  
316 - cancelButtonText: "取消",  
317 - type: "warning",  
318 - }) 478 + proxy.$modal
  479 + .confirm("是否通过该保单")
  480 + .then(function () {})
319 .then(() => { 481 .then(() => {
320 disposeUser({ associationapprove }, taskId).then((res) => { 482 disposeUser({ associationapprove }, taskId).then((res) => {
321 proxy.$modal.msgSuccess("保单已退回"); 483 proxy.$modal.msgSuccess("保单已退回");
  484 + getList();
322 }); 485 });
323 }) 486 })
324 .catch(() => { 487 .catch(() => {
@@ -342,7 +505,8 @@ const sunmitDeprecated = () => { @@ -342,7 +505,8 @@ const sunmitDeprecated = () => {
342 }; 505 };
343 const taskId = deprecatedForm.value.taskId; 506 const taskId = deprecatedForm.value.taskId;
344 disposeUser(data, taskId).then((res) => { 507 disposeUser(data, taskId).then((res) => {
345 - proxy.$modal.msgSuccess("保单已退回"); 508 + getList();
  509 + proxy.$modal.msgSuccess("保单已作废");
346 }); 510 });
347 }; 511 };
348 // 分配承保公司 512 // 分配承保公司
@@ -355,6 +519,17 @@ const handleAuthCompany = (associationapprove, taskId) => { @@ -355,6 +519,17 @@ const handleAuthCompany = (associationapprove, taskId) => {
355 getDeptList(); 519 getDeptList();
356 }; 520 };
357 521
  522 +// 获取人员列表
  523 +const getUser = async () => {
  524 + const { data } = await getUserList();
  525 + transferOptions.value = data;
  526 +};
  527 +// 转办或分配
  528 +const handleSharing = (id) => {
  529 + transferForm.value.taskId = id;
  530 + getUser();
  531 + transferShow.value = true;
  532 +};
358 /** 查询部门列表 */ 533 /** 查询部门列表 */
359 const getDeptList = () => { 534 const getDeptList = () => {
360 loading.value = true; 535 loading.value = true;
@@ -382,6 +557,7 @@ function reset() { @@ -382,6 +557,7 @@ function reset() {
382 function handleUpdate(row) { 557 function handleUpdate(row) {
383 reset(); 558 reset();
384 form.value = row; 559 form.value = row;
  560 + form.value.comment = "";
385 open.value = true; 561 open.value = true;
386 } 562 }
387 /** 提交通过分配承保公司 */ 563 /** 提交通过分配承保公司 */
@@ -392,13 +568,43 @@ function submitForm() { @@ -392,13 +568,43 @@ function submitForm() {
392 }; 568 };
393 const taskId = companyForm.value.taskId; 569 const taskId = companyForm.value.taskId;
394 disposeUser(data, taskId).then((res) => { 570 disposeUser(data, taskId).then((res) => {
395 - companyShow.value = true; 571 + companyShow.value = false;
  572 + getList();
  573 + proxy.$modal.msgSuccess("保单已分配成功");
  574 + });
  575 +}
  576 +
  577 +/** 提交通过分配转办人员 */
  578 +function submitTransfer() {
  579 + const data = {
  580 + username: transferForm.value.username,
  581 + };
  582 + const taskId = transferForm.value.taskId;
  583 + transfer(data, taskId).then((res) => {
  584 + transferShow.value = false;
  585 + getList();
396 proxy.$modal.msgSuccess("保单已分配成功"); 586 proxy.$modal.msgSuccess("保单已分配成功");
397 }); 587 });
398 } 588 }
399 589
  590 +// 提交承接回馈
  591 +const submit = () => {
  592 + const data = {
  593 + policystatus: "2",
  594 + message: form.value.comment,
  595 + policynumber: form.value.policyNumber,
  596 + };
  597 + disposeUser(data, form.value.taskId).then((res) => {
  598 + getList();
  599 + proxy.$modal.msgSuccess("回馈成功");
  600 + });
  601 +};
  602 +
400 const getMsg = (val) => { 603 const getMsg = (val) => {
401 - deprecatedForm.value.deprecatedReason = val; 604 + clearTimeout(timer.value);
  605 + timer.value = setTimeout(() => {
  606 + form.value.message = val;
  607 + }, 1000);
402 }; 608 };
403 609
404 getList(); 610 getList();
@@ -462,7 +462,7 @@ const getMsg = (val) => { @@ -462,7 +462,7 @@ const getMsg = (val) => {
462 462
463 /** 搜索按钮操作 */ 463 /** 搜索按钮操作 */
464 function handleQuery() { 464 function handleQuery() {
465 - queryParams.value.pageNum = 1; 465 + queryParams.pageNum = 1;
466 getList(); 466 getList();
467 } 467 }
468 /** 重置按钮操作 */ 468 /** 重置按钮操作 */