From d71422ecb4e6a0c855e94e0416e4fc52387dec18 Mon Sep 17 00:00:00 2001 From: zhangwei <1504152376@qq.com> Date: 星期五, 08 八月 2025 14:52:46 +0800 Subject: [PATCH] '关注项目' --- src/views/system/aboutItem/utils/rule.ts | 222 ++++++++ src/views/system/aboutItem/form.vue | 410 +++++++++++++++ src/views/system/dept/utils/hook.tsx | 10 src/views/system/dept/index.vue | 2 src/router/modules/item.ts | 63 + src/views/system/aboutItem/index.vue | 334 ++++++++++++ src/views/system/aboutItem/utils/types.ts | 39 + src/views/system/aboutItem/utils/hook.tsx | 489 ++++++++++++++++++ 8 files changed, 1,543 insertions(+), 26 deletions(-) diff --git a/src/router/modules/item.ts b/src/router/modules/item.ts index 02ecf02..be7fba5 100644 --- a/src/router/modules/item.ts +++ b/src/router/modules/item.ts @@ -1,21 +1,44 @@ -export default { - path: "/item", - meta: { - title: "椤圭洰绠$悊", - icon: "mdi:chart-timeline" - }, - children: [ - { - // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/` - path: "/item", - // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞 - component: () => import("@/views/system/dept/index.vue"), - name: "item", - meta: { - title: "椤圭洰绠$悊", - roles: ["DLJG", "CGR"] - // showLink:false +export default [ + { + path: "/item", + meta: { + title: "椤圭洰绠$悊", + icon: "mdi:chart-timeline" + }, + children: [ + { + // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/` + path: "/item", + // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞 + component: () => import("@/views/system/dept/index.vue"), + name: "item", + meta: { + title: "椤圭洰绠$悊", + roles: ["DLJG", "CGR"] + // showLink:false + } } - } - ] -} satisfies RouteConfigsTable; + ] + }, + { + path: "/aboutItem", + meta: { + title: "鍏虫敞椤圭洰", + icon: "pajamas:work-item-new" + }, + children: [ + { + // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/` + path: "/aboutItem", + // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞 + component: () => import("@/views/system/aboutItem/index.vue"), + name: "aboutItem", + meta: { + title: "鍏虫敞椤圭洰", + roles: ["DLJG", "GYS"] + // showLink:false + } + } + ] + } +] satisfies Array<RouteConfigsTable>; diff --git a/src/views/system/aboutItem/form.vue b/src/views/system/aboutItem/form.vue new file mode 100644 index 0000000..d189790 --- /dev/null +++ b/src/views/system/aboutItem/form.vue @@ -0,0 +1,410 @@ +<script setup lang="ts"> +import { onMounted, ref, reactive } from "vue"; +import ReCol from "@/components/ReCol"; +import { formRules } from "./utils/rule"; +import { FormProps } from "./utils/types"; +import { usePublicHooks } from "../hooks"; +import { useDept } from "./utils/hook"; +import { Operation } from "@element-plus/icons-vue"; +import { getCaigoufangshiList } from "@/api/item/index"; + +const { state } = useDept(); +const props = withDefaults(defineProps<FormProps>(), { + formInline: () => ({ + id: "", + projectCode: "", // 椤圭洰缂栧彿锛堝繀濉級 + projectName: "", // 椤圭洰鍚嶇О锛堝繀濉級 + hangyepinmu: null, // 琛屼笟鍝佺洰锛堝彲閫夛級 + caigoufangshi: null, // 閲囪喘鏂瑰紡锛堝彲閫夛級 + caigouyusuan: null, // 閲囪喘棰勭畻锛堝彲閫夛級 + dingbiaoguize: null, // 瀹氭爣瑙勫垯锛堝彲閫夛級 + baomingfei: null, // 鎶ュ悕璐癸紙鍙�夛級 + toubiaobaozhengjin: null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級 + lianhetitoubiao: null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級 + kaibiaofangshi: null, // 寮�鏍囨柟寮忥紙鍙�夛級 + shifoufenbao: "false", // 鏄惁鍒嗗寘锛堝彲閫夛級 + shifoutuisongxuanchuan: "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級 + caigourenmingcheng: null, // 閲囪喘浜哄悕绉帮紙鍙�夛級 + xingzhengquyu: [], // 琛屾斂鍖哄煙锛堝彲閫夛級 + xingzhengquyuName: null, // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級 + jigoudaima: null, // 鏈烘瀯浠g爜锛堝彲閫夛級 + daimaleixing: null, // 浠g爜绫诲瀷锛堝彲閫夛級 + lianxiren: null, // 鑱旂郴浜猴紙鍙�夛級 + lianxidianhua: null, // 鑱旂郴鐢佃瘽锛堝彲閫夛級 + tongxindizhi: null, // 閫氫俊鍦板潃锛堝彲閫夛級 + dianziyoujian: null, // 鐢靛瓙閭欢锛堝彲閫夛級 + xiangmujingbanren: null, // 椤圭洰缁忓姙浜猴紙鍙�夛級 + zhiwu: null, // 鑱屽姟锛堝彲閫夛級 + jingbanrendianhua: null, // 缁忓姙浜虹數璇濓紙鍙�夛級 + dailijigoumingcheng: null, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級 + dailiLianxiren: null, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級 + dailiLianxidianhua: null, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級 + dailiDianziyoujian: null, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級 + dailiTongxindizhi: null, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級 + dailiXiangmujingli: null, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫� + dailijingliLianxidianhua: null // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級 + }) +}); + +const ruleFormRef = ref(); +const { switchStyle } = usePublicHooks(); +const newFormInline = ref(props.formInline); + +function getRef() { + return ruleFormRef.value; +} +const handleChange = value => { + console.log(value); +}; +defineExpose({ getRef }); +onMounted(async () => {}); +</script> + +<template> + <el-form + ref="ruleFormRef" + :model="newFormInline" + :rules="formRules" + label-width="110px" + > + <el-row :gutter="30"> + <re-col> + <p class="flex items-center"> + <el-icon color="#409EFF" class="m-2" size="large"> + <Operation /> + </el-icon> + <el-text class="mx-1" size="large" type="primary" tag="b"> + 椤圭洰淇℃伅 + </el-text> + </p> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="椤圭洰鍚嶇О" prop="projectName"> + <el-input + v-model="newFormInline.projectName" + clearable + placeholder="璇疯緭鍏ラ」鐩悕绉�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="椤圭洰缂栧彿" prop="projectCode"> + <el-input + v-model="newFormInline.projectCode" + clearable + placeholder="璇疯緭鍏ラ」鐩紪鍙�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="琛屼笟鍝佺洰" prop="hangyepinmu"> + <el-select + v-model="newFormInline.hangyepinmu" + placeholder="璇烽�夋嫨琛屼笟鍝佺洰" + clearable + class="w-[100%]!" + > + <el-option + v-for="item in state.hangyepingmuList" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="閲囪喘鏂瑰紡" prop="caigoufangshi"> + <el-select + v-model="newFormInline.caigoufangshi" + placeholder="璇烽�夋嫨閲囪喘鏂瑰紡" + style="width: 240px" + > + <el-option + v-for="item in state.caigoufangshiList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </re-col> + + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="閲囪喘棰勭畻" prop="caigouyusuan"> + <el-input + v-model="newFormInline.caigouyusuan" + clearable + placeholder="璇疯緭鍏ラ噰璐绠�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="瀹氬埗瑙勫垝" prop="dingbiaoguize"> + <!-- <el-checkbox-group + v-model="newFormInline.dingbiaoguize" + placeholder="璇烽�夋嫨鐘舵��" + clearable + class="w-[100%]!" + > + <el-checkbox label="鏈�浣庝环" value="鏈�浣庝环" /> + <el-checkbox label="缁煎悎璇勫垎" value="缁煎悎璇勫垎" /> + </el-checkbox-group> --> + <el-radio-group v-model="newFormInline.dingbiaoguize"> + <el-radio value="鏈�浣庝环">鏈�浣庝环</el-radio> + <el-radio value="缁煎悎璇勫垎">缁煎悎璇勫垎</el-radio> + </el-radio-group> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鎶ュ悕璐�" prop="baomingfei"> + <el-input + v-model="newFormInline.baomingfei" + clearable + placeholder="璇疯緭鍏ユ姤鍚嶈垂" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鎶曟爣淇濊瘉閲�" prop="toubiaobaozhengjin"> + <el-input + v-model="newFormInline.toubiaobaozhengjin" + clearable + placeholder="璇疯緭鍏ユ姇鏍囦繚璇侀噾" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱斿悎浣撴姇鏍�" prop="lianhetitoubiao"> + <el-radio-group v-model="newFormInline.lianhetitoubiao"> + <el-radio value="鏀寔">鏀寔</el-radio> + <el-radio value="涓嶆敮鎸�">涓嶆敮鎸�</el-radio> + </el-radio-group> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="寮�鏍囨柟寮�" prop="kaibiaofangshi"> + <el-radio-group v-model="newFormInline.kaibiaofangshi"> + <el-radio value="绾歌川鏍�">绾歌川鏍�</el-radio> + <el-radio value="鐢靛瓙鏍�">鐢靛瓙鏍�</el-radio> + </el-radio-group> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鏄惁鍒嗗寘" prop="shifoufenbao"> + <el-radio-group v-model="newFormInline.shifoufenbao"> + <el-radio value="true">鏄�</el-radio> + <el-radio value="false">鍚�</el-radio> + </el-radio-group> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鏄惁鎺ㄩ�佸浼�" prop="shifoutuisongxuanchuan"> + <el-radio-group v-model="newFormInline.shifoutuisongxuanchuan"> + <el-radio value="true">鏄�</el-radio> + <el-radio value="false">鍚�</el-radio> + </el-radio-group> + </el-form-item> + </re-col> + + <re-col> + <p class="flex items-center"> + <el-icon color="#409EFF" class="m-2" size="large"> + <Operation /> + </el-icon> + <el-text class="mx-1" size="large" type="primary" tag="b"> + 閲囪喘浜轰俊鎭� + </el-text> + </p> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="閲囪喘浜哄悕绉�" prop="caigourenmingcheng"> + <el-input + v-model="newFormInline.caigourenmingcheng" + clearable + placeholder="璇疯緭鍏ラ噰璐汉鍚嶇О" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="琛屾斂鍖哄煙" prop="xingzhengquyu"> + <el-cascader + v-model="newFormInline.xingzhengquyu" + class="w-full" + :options="state.regionList" + :props="{ + value: 'code', + label: 'name', + children: 'regions' + }" + clearable + filterable + placeholder="璇烽�夋嫨鍖哄煙" + @change="handleChange" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鏈烘瀯浠g爜" prop="jigoudaima"> + <el-input + v-model="newFormInline.jigoudaima" + clearable + placeholder="璇疯緭鍏ユ満鏋勪唬鐮�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="浠g爜绫诲瀷" prop="daimaleixing"> + <el-select + v-model="newFormInline.daimaleixing" + placeholder="璇烽�夋嫨浠g爜绫诲瀷" + style="width: 240px" + > + <el-option + v-for="item in state.daimaleixingList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱旂郴浜�" prop="lianxiren"> + <el-input + v-model="newFormInline.lianxiren" + clearable + placeholder="璇疯緭鍏ヨ仈绯讳汉" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱旂郴浜虹數璇�" prop="lianxidianhua"> + <el-input + v-model="newFormInline.lianxidianhua" + clearable + placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" + /> + </el-form-item> + </re-col> + <re-col :value="12" :xs="24" :sm="24"> + <el-form-item label="閫氫俊鍦板潃" prop="tongxindizhi"> + <el-input + v-model="newFormInline.tongxindizhi" + clearable + placeholder="璇疯緭鍏ラ�氫俊鍦板潃" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鐢靛瓙閭" prop="dianziyoujian"> + <el-input + v-model="newFormInline.dianziyoujian" + clearable + placeholder="璇疯緭鍏ョ數瀛愰偖绠�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="椤圭洰缁忓姙浜�" prop="xiangmujingbanren"> + <el-input + v-model="newFormInline.xiangmujingbanren" + clearable + placeholder="璇疯緭鍏ラ」鐩粡鍔炰汉" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱屽姟" prop="zhiwu"> + <el-input + v-model="newFormInline.zhiwu" + clearable + placeholder="璇疯緭鍏ヨ亴鍔�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="缁忓姙浜虹數璇�" prop="jingbanrendianhua"> + <el-input + v-model="newFormInline.jingbanrendianhua" + clearable + placeholder="璇疯緭鍏ョ粡鍔炰汉鐢佃瘽" + /> + </el-form-item> + </re-col> + <re-col> + <p class="flex items-center"> + <el-icon color="#409EFF" class="m-2" size="large"> + <Operation /> + </el-icon> + <el-text class="mx-1" size="large" type="primary" tag="b"> + 浠g悊鏈烘瀯淇℃伅 + </el-text> + </p> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="浠g悊鏈烘瀯鍚嶇О" prop="dailijigoumingcheng"> + <el-input + v-model="newFormInline.dailijigoumingcheng" + clearable + placeholder="璇疯緭鍏ヤ唬鐞嗘満鏋勫悕绉�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱旂郴浜�" prop="dailiLianxiren"> + <el-input + v-model="newFormInline.dailiLianxiren" + clearable + placeholder="璇疯緭鍏ヨ仈绯讳汉" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱旂郴鐢佃瘽" prop="dailiLianxidianhua"> + <el-input + v-model="newFormInline.dailiLianxidianhua" + clearable + placeholder="璇疯緭鍏ヨ仈绯荤數璇�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鐢靛瓙閭" prop="dailiDianziyoujian"> + <el-input + v-model="newFormInline.dailiDianziyoujian" + clearable + placeholder="璇疯緭鍏ョ數瀛愰偖绠�" + /> + </el-form-item> + </re-col> + <re-col :value="12" :xs="24" :sm="24"> + <el-form-item label="閫氫俊鍦板潃" prop="dailiTongxindizhi"> + <el-input + v-model="newFormInline.dailiTongxindizhi" + clearable + placeholder="璇疯緭鍏ラ�氫俊鍦板潃" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="椤圭洰缁忕悊" prop="dailiXiangmujingli"> + <el-input + v-model="newFormInline.dailiXiangmujingli" + clearable + placeholder="璇疯緭鍏ラ」鐩粡鐞�" + /> + </el-form-item> + </re-col> + <re-col :value="6" :xs="24" :sm="24"> + <el-form-item label="鑱旂郴鐢佃瘽" prop="dailijingliLianxidianhua"> + <el-input + v-model="newFormInline.dailijingliLianxidianhua" + clearable + placeholder="璇疯緭鍏ヨ仈绯荤數璇�" + /> + </el-form-item> + </re-col> + </el-row> + </el-form> +</template> diff --git a/src/views/system/aboutItem/index.vue b/src/views/system/aboutItem/index.vue new file mode 100644 index 0000000..a945ecc --- /dev/null +++ b/src/views/system/aboutItem/index.vue @@ -0,0 +1,334 @@ +<script setup lang="ts"> +import { ref, reactive, onMounted, computed } from "vue"; +import { useDept } from "./utils/hook"; +import { PureTableBar } from "@/components/RePureTableBar"; +import { useRenderIcon } from "@/components/ReIcon/src/hooks"; + +import Delete from "~icons/ep/delete"; +import EditPen from "~icons/ep/edit-pen"; +import Refresh from "~icons/ep/refresh"; +import AddFill from "~icons/ri/add-circle-line"; +import { useUserStoreHook } from "@/store/modules/user"; + +defineOptions({ + name: "SystemDept" +}); + +const formRef = ref(); +const tableRef = ref(); + +const { + form, + state, + loading, + columns, + CGRcolumns, + selectedNum, + dataList, + onSearch, + resetForm, + openDialog, + handleDelete, + handleSelectionChange, + handleSizeChange, + handleCurrentChange, + pagination, + checkboxAsRadio, + onSelectionCancel, + onbatchDel +} = useDept(tableRef); + +function onFullscreen() { + // 閲嶇疆琛ㄦ牸楂樺害 + tableRef.value.setAdaptive(); +} +const nowRole = computed(() => { + return useUserStoreHook().nowRole; +}); + +onMounted(() => {}); +</script> + +<template> + <div class="main"> + <!-- class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto" --> + <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> + <el-form ref="formRef" :model="form" labelWidth="100"> + <el-row> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6"> + <el-form-item label="鏃堕棿锛�"> + <el-date-picker + v-model="form.createDateRange" + type="daterange" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + value-format="YYYY-MM-DD HH:mm:ss" + :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" + class="w-[100%]!" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6"> + <el-form-item label="鍖哄煙锛�"> + <el-cascader + v-model="form.xingzhengquyu" + class="w-full" + :options="state.regionList" + :props="{ + value: 'code', + label: 'name', + children: 'regions' + }" + clearable + filterable + placeholder="璇烽�夋嫨鍖哄煙" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="琛屼笟鍝佺洰锛�"> + <el-select + v-model="form.hangyepinmu" + placeholder="璇烽�夋嫨琛屼笟鍝佺洰" + clearable + class="w-[100%]!" + > + <el-option + v-for="item in state.hangyepingmuList" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="椤圭洰杩涘害锛�"> + <el-select + v-model="form.orderStatus" + placeholder="璇烽�夋嫨椤圭洰杩涘害" + clearable + class="w-[100%]!" + > + <el-option + v-for="item in state.orderStatusList" + :key="item.id" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> </el-col + ><el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="璐ㄧ枒锛�"> + <el-checkbox-group + v-model="form.zhiyi" + clearable + class="w-[100%]!" + @change="checkboxAsRadio(form.zhiyi)" + > + <el-checkbox label="鏈�" value="true" /> + <el-checkbox label="鏃�" value="false" /> + </el-checkbox-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="鎶曡瘔锛�"> + <el-checkbox-group + v-model="form.tousu" + clearable + class="w-[100%]!" + @change="checkboxAsRadio(form.tousu)" + > + <el-checkbox label="鏈�" value="true" /> + <el-checkbox label="鏃�" value="false" /> + </el-checkbox-group> + </el-form-item> + </el-col> --> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="椤圭洰鍚嶇О锛�"> + <el-input + v-model="form.projectName" + placeholder="璇疯緭鍏ラ」鐩悕绉�" + clearable + class="w-[100%]!" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="浠g悊鏈烘瀯锛�"> + <el-input + v-model="form.dailijigoumingcheng" + placeholder="璇疯緭鍏ヤ唬鐞嗘満鏋�" + clearable + class="w-[100%]!" + /> + </el-form-item> + </el-col> + <!-- <el-col + v-if="nowRole.code == 'DLJG'" + :xs="24" + :sm="12" + :md="8" + :lg="6" + :xl="4" + > + <el-form-item label="閲囪喘浜猴細"> + <el-input + v-model="form.caigourenmingcheng" + placeholder="璇疯緭鍏ラ噰璐汉" + clearable + class="w-[100%]!" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="涓爣渚涘簲鍟嗭細"> + <el-input + v-model="form.zhongbiaoName" + placeholder="璇疯緭鍏ヤ腑鏍囦緵搴斿晢" + clearable + class="w-[100%]!" + /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label="璇勫涓撳锛�"> + <el-input + v-model="form.zhuanjiaName" + placeholder="璇疯緭鍏ヨ瘎瀹′笓瀹�" + clearable + class="w-[100%]!" + /> + </el-form-item> + </el-col> --> + <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4"> + <el-form-item label-width="40"> + <el-button type="primary" :loading="loading" @click="onSearch"> + 鎼滅储 + </el-button> + <!-- <el-button + :icon="useRenderIcon(Refresh)" + @click="resetForm(formRef)" + > + 閲嶇疆 + </el-button> --> + <!-- <el-button type="primary" @click="openDialog()"> 鏂板 </el-button> --> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-card> + <PureTableBar + title="" + :columns="nowRole.code == 'CGR' ? CGRcolumns : columns" + :tableRef="tableRef?.getTableRef()" + @refresh="onSearch" + @fullscreen="onFullscreen" + > + <!-- <template #buttons> + <el-button + type="primary" + :icon="useRenderIcon(AddFill)" + @click="openDialog()" + > + 鏂板椤圭洰 + </el-button> + </template> --> + <template v-slot="{ size, dynamicColumns }"> + <div + v-if="selectedNum > 0" + v-motion-fade + class="bg-[var(--el-fill-color-light)] w-full h-[46px] mb-2 pl-4 flex items-center" + > + <div class="flex-auto"> + <span + style="font-size: var(--el-font-size-base)" + class="text-[rgba(42,46,54,0.5)] dark:text-[rgba(220,220,242,0.5)]" + > + 宸查�� {{ selectedNum }} 椤� + </span> + <el-button type="primary" text @click="onSelectionCancel"> + 鍙栨秷閫夋嫨 + </el-button> + </div> + <el-popconfirm title="鏄惁纭鍒犻櫎?" @confirm="onbatchDel"> + <template #reference> + <el-button type="danger" text class="mr-1!"> 鎵归噺鍒犻櫎 </el-button> + </template> + </el-popconfirm> + </div> + <pure-table + ref="tableRef" + adaptive + :adaptiveConfig="{ offsetBottom: 45 }" + align-whole="center" + row-key="id" + showOverflowTooltip + table-layout="auto" + :loading="loading" + :data="dataList" + :columns="dynamicColumns" + :pagination="{ ...pagination, size }" + :header-cell-style="{ + background: 'var(--el-fill-color-light)', + color: 'var(--el-text-color-primary)' + }" + @selection-change="handleSelectionChange" + @page-size-change="handleSizeChange" + @page-current-change="handleCurrentChange" + > + <template #operation="{ row }"> + <el-button + class="reset-margin" + link + type="primary" + :size="size" + :icon="useRenderIcon(EditPen)" + @click="openDialog('淇敼', row)" + /> + <!-- <el-button + class="reset-margin" + link + type="primary" + :size="size" + :icon="useRenderIcon(AddFill)" + @click="openDialog('鏂板', { parentId: row.id } as any)" + > + 鏂板 + </el-button> --> + <el-popconfirm + :title="`鏄惁纭鍒犻櫎椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡" + @confirm="handleDelete(row)" + > + <template #reference> + <el-button + class="reset-margin" + link + type="primary" + :size="size" + :icon="useRenderIcon(Delete)" + /> + </template> + </el-popconfirm> + </template> + </pure-table> + </template> + </PureTableBar> + </div> +</template> + +<style lang="scss" scoped> +:deep(.el-table__inner-wrapper::before) { + height: 0; +} + +.main-content { + margin: 24px 24px 0 !important; +} + +.search-form { + :deep(.el-form-item) { + margin-bottom: 12px; + } +} +</style> diff --git a/src/views/system/aboutItem/utils/hook.tsx b/src/views/system/aboutItem/utils/hook.tsx new file mode 100644 index 0000000..0608031 --- /dev/null +++ b/src/views/system/aboutItem/utils/hook.tsx @@ -0,0 +1,489 @@ +import dayjs from "dayjs"; +import editForm from "../form.vue"; +import { handleTree } from "@/utils/tree"; +import { message } from "@/utils/message"; +import { zhaobiaoPageOrder } from "@/api/item/index"; + +import { + getCaigoufangshiList, + getHangyepingmuList, + getOrderStatusList, + getRegionList, + getDaimaleixingList, + caigourenAdd, + caigourenUpdate, + caigourenDelete, + caigourenBatchDelete +} from "@/api/item/index"; +import { usePublicHooks } from "../../hooks"; +import { addDialog } from "@/components/ReDialog"; +import { type Ref, reactive, ref, onMounted, h, computed } from "vue"; +import type { FormItemProps } from "./types"; +import { + cloneDeep, + isAllEmpty, + deviceDetection, + getKeyList +} from "@pureadmin/utils"; +import { useUserStoreHook } from "@/store/modules/user"; +import type { PaginationProps } from "@pureadmin/table"; + +const nowRole = computed(() => { + return useUserStoreHook().nowRole; +}); +const selectedNum = ref(0); + +export function useDept(tableRef: Ref) { + const form = reactive({ + // 鏂板鏃ユ湡鑼冨洿锛屽彲涓� null锛岀被鍨嬩负鏁扮粍 + createDateRange: null, + // 琛屾斂鍖哄煙锛屽彲涓� null锛岀被鍨嬩负瀛楃涓� + xingzhengquyu: [], + // 琛屼笟鍝佺洰锛屽彲涓� null锛岀被鍨嬩负瀛楃涓� + hangyepinmu: "", + // 璁㈠崟鐘舵�侊紝鍙负 null锛岀被鍨嬩负 32 浣嶆暣鏁� + orderStatus: "", + // 璐ㄧ枒鏈夋棤锛屽彲涓� null锛岀被鍨嬩负甯冨皵鍊� + zhiyi: [], + // 鎶曡瘔鏈夋棤锛屽彲涓� null锛岀被鍨嬩负甯冨皵鍊� + tousu: [], + // 椤圭洰鍚嶇О锛屽彲涓� null锛岀被鍨嬩负瀛楃涓� + projectName: null, + // 浠g悊鏈烘瀯鍚嶇О锛屽彲涓� null锛岀被鍨嬩负瀛楃涓� + dailijigoumingcheng: null, + caigourenmingcheng: null, + // 涓爣渚涘簲鍟嗗鍚嶏紝鍙负 null锛岀被鍨嬩负瀛楃涓� + zhongbiaoName: null, + // 涓撳濮撳悕锛屽彲涓� null锛岀被鍨嬩负瀛楃涓� + zhuanjiaName: null + }); + const state = reactive({ + caigoufangshiList: [], + hangyepingmuList: [], + orderStatusList: [], + regionList: [], + daimaleixingList: [] + }); + const pagination = reactive<PaginationProps>({ + total: 0, + pageSize: 10, + currentPage: 1, + background: true + }); + //鑾峰彇閲囪喘鏂瑰紡 + const getCaigoufangshiListFun = async () => { + const res = await getCaigoufangshiList(); + state.caigoufangshiList = res.result; + }; + + //鑾峰彇琛屼笟鍝佺洰 + const getHangyepingmuListFun = async () => { + const res = await getHangyepingmuList(); + state.hangyepingmuList = res.result; + }; + + //鑾峰彇椤圭洰杩涘害 + const getOrderStatusListFun = async () => { + const res = await getOrderStatusList(); + state.orderStatusList = res.result; + }; + + // 鑾峰彇鍖哄煙 + const getRegionListFun = async () => { + const res = await getRegionList(); + state.regionList = res.result; + }; + + // 鑾峰彇浠g爜绫诲瀷 + const getDaimaleixingListFun = async () => { + const res = await getDaimaleixingList(); + state.daimaleixingList = res.result; + }; + const formRef = ref(); + const dataList = ref([]); + const loading = ref(true); + const { tagStyle } = usePublicHooks(); + const getOrderStatus = row => { + const res = state.orderStatusList.find(item => { + return row.orderStatus == item.status; + }); + return res?.label; + }; + const columns: TableColumnList = [ + { + label: "鍕鹃�夊垪", // 濡傛灉闇�瑕佽〃鏍煎閫夛紝姝ゅlabel蹇呴』璁剧疆 + type: "selection", + fixed: "left", + reserveSelection: true // 鏁版嵁鍒锋柊鍚庝繚鐣欓�夐」 + }, + { + label: "閲囪喘浜�", + prop: "caigourenmingcheng", + minWidth: 70 + }, + { + label: "椤圭洰鍚嶇О", + prop: "projectName", + width: 180, + align: "left" + }, + { + label: "椤圭洰杩涘害", + prop: "orderStatus", + minWidth: 70, + cellRenderer: ({ row, props }) => getOrderStatus(row) + }, + { + label: "鎶ュ悕璐�", + prop: "baomingfei", + minWidth: 70 + }, + { + label: "鎶曟爣淇濊瘉閲�", + prop: "toubiaobaozhengjin", + minWidth: 70 + }, + { + label: "涓爣渚涘簲鍟�", + prop: "zhongbiaoName", + minWidth: 180 + }, + { + label: "璇勫涓撳", + prop: "zhuanjiaName", + minWidth: 70 + }, + { + label: "璐ㄧ枒", + prop: "zhiyi", + minWidth: 100, + cellRenderer: ({ row, props }) => ( + <span>{row.status === 1 ? "鏈�" : "鏃�"}</span> + ) + }, + { + label: "鎶曡瘔", + prop: "tousu", + minWidth: 100, + cellRenderer: ({ row, props }) => ( + // <el-tag size={props.size} style={tagStyle.value(row.status)}> + <span>{row.status === 1 ? "鏈�" : "鏃�"}</span> + // </el-tag> + ) + }, + { + label: "鎿嶄綔", + fixed: "right", + width: 80, + slot: "operation" + } + ]; + const CGRcolumns: TableColumnList = [ + { + label: "鍕鹃�夊垪", // 濡傛灉闇�瑕佽〃鏍煎閫夛紝姝ゅlabel蹇呴』璁剧疆 + type: "selection", + fixed: "left", + reserveSelection: true // 鏁版嵁鍒锋柊鍚庝繚鐣欓�夐」 + }, + { + label: "浠g悊鏈烘瀯", + prop: "dailijigoumingcheng", + minWidth: 70 + }, + { + label: "椤圭洰鍚嶇О", + prop: "projectName", + width: 180, + align: "left" + }, + { + label: "椤圭洰杩涘害", + prop: "orderStatus", + minWidth: 70, + cellRenderer: ({ row, props }) => getOrderStatus(row) + }, + { + label: "鎶ュ悕璐�", + prop: "baomingfei", + minWidth: 70 + }, + { + label: "鎶曟爣淇濊瘉閲�", + prop: "toubiaobaozhengjin", + minWidth: 70 + }, + { + label: "涓爣渚涘簲鍟�", + prop: "zhongbiaoName", + minWidth: 180 + }, + { + label: "璇勫涓撳", + prop: "zhuanjiaName", + minWidth: 70 + }, + { + label: "璐ㄧ枒", + prop: "zhiyi", + minWidth: 100, + cellRenderer: ({ row, props }) => ( + <span>{row.status === 1 ? "鏈�" : "鏃�"}</span> + ) + }, + { + label: "鎶曡瘔", + prop: "tousu", + minWidth: 100, + cellRenderer: ({ row, props }) => ( + // <el-tag size={props.size} style={tagStyle.value(row.status)}> + <span>{row.status === 1 ? "鏈�" : "鏃�"}</span> + // </el-tag> + ) + }, + { + label: "鎿嶄綔", + fixed: "right", + width: 80, + slot: "operation" + } + ]; + + /** 褰揅heckBox閫夋嫨椤瑰彂鐢熷彉鍖栨椂浼氳Е鍙戣浜嬩欢 */ + function handleSelectionChange(val) { + selectedNum.value = val.length; + // 閲嶇疆琛ㄦ牸楂樺害 + tableRef.value.setAdaptive(); + } + /** 鍙栨秷閫夋嫨 */ + function onSelectionCancel() { + selectedNum.value = 0; + // 鐢ㄤ簬澶氶�夎〃鏍硷紝娓呯┖鐢ㄦ埛鐨勯�夋嫨 + tableRef.value.getTableRef().clearSelection(); + } + /** 鎵归噺鍒犻櫎 */ + async function onbatchDel() { + // 杩斿洖褰撳墠閫変腑鐨勮 + const curSelected = tableRef.value.getTableRef().getSelectionRows(); + const data = []; + curSelected.forEach(item => { + data.push({ id: item.id }); + }); + const res = await caigourenBatchDelete(data); + if (res.code == "200") { + // 鎺ヤ笅鏉ユ牴鎹疄闄呬笟鍔★紝閫氳繃閫変腑琛岀殑鏌愰」鏁版嵁锛屾瘮濡備笅闈㈢殑id锛岃皟鐢ㄦ帴鍙h繘琛屾壒閲忓垹闄� + message( + `宸插垹闄ら」鐩悕绉颁负 ${getKeyList(curSelected, "projectName")} 鐨勬暟鎹甡, + { + type: "success" + } + ); + onSearch(); + } else { + message(res.message, { + type: "error" + }); + } + tableRef.value.getTableRef().clearSelection(); + onSearch(); + } + function handleSizeChange(val: number) { + console.log(`${val} items per page`); + } + + function handleCurrentChange(val: number) { + console.log(`current page: ${val}`); + } + + function resetForm(formEl) { + if (!formEl) return; + formEl.resetFields(); + onSearch(); + } + const checkboxAsRadio = data => { + if (data.length > 1) { + data.shift(); + } + }; + async function onSearch() { + const obj = cloneDeep(form); + obj.tousu = obj.tousu.join(""); + obj.zhiyi = obj.zhiyi.join(""); + obj.xingzhengquyu = obj.xingzhengquyu ? obj.xingzhengquyu.join("") : ""; + loading.value = true; + const { result } = await zhaobiaoPageOrder(obj); // 杩欓噷鏄繑鍥炰竴缁存暟缁勭粨鏋勶紝鍓嶇鑷澶勭悊鎴愭爲缁撴瀯锛岃繑鍥炴牸寮忚姹傦細鍞竴id鍔犵埗鑺傜偣parentId锛宲arentId鍙栫埗鑺傜偣id + const newData = result.items; + loading.value = false; + pagination.total = result.total; + pagination.pageSize = result.pageSize; + pagination.currentPage = result.page; + // if (!isAllEmpty(form.name)) { + // // 鍓嶇鎼滅储椤圭洰鍚嶇О + // newData = newData.filter(item => item.name.includes(form.name)); + // } + // if (!isAllEmpty(form.status)) { + // // 鍓嶇鎼滅储鐘舵�� + // newData = newData.filter(item => item.status === form.status); + // } + dataList.value = handleTree(newData); // 澶勭悊鎴愭爲缁撴瀯 + } + + function formatHigherDeptOptions(treeList) { + // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч」鐩骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛� + if (!treeList || !treeList.length) return; + const newTreeList = []; + for (let i = 0; i < treeList.length; i++) { + treeList[i].disabled = treeList[i].status === 0 ? true : false; + formatHigherDeptOptions(treeList[i].children); + newTreeList.push(treeList[i]); + } + return newTreeList; + } + + function openDialog(title = "鏂板", row?: FormItemProps) { + console.log(row, "-"); + + addDialog({ + title: `${title}椤圭洰`, + props: { + formInline: { + higherDeptOptions: formatHigherDeptOptions(cloneDeep(dataList.value)), + id: row?.id ?? "", + projectCode: row?.projectCode ?? "", // 椤圭洰缂栧彿锛堝繀濉級 + projectName: row?.projectName ?? "", // 椤圭洰鍚嶇О锛堝繀濉級 + hangyepinmu: row?.hangyepinmu ?? null, // 琛屼笟鍝佺洰锛堝彲閫夛級 + caigoufangshi: row?.caigoufangshi ?? null, // 閲囪喘鏂瑰紡锛堝彲閫夛級 + caigouyusuan: row?.caigouyusuan ?? null, // 閲囪喘棰勭畻锛堝彲閫夛級 + dingbiaoguize: row?.dingbiaoguize ?? null, // 瀹氭爣瑙勫垯锛堝彲閫夛級 + baomingfei: row?.baomingfei ?? null, // 鎶ュ悕璐癸紙鍙�夛級 + toubiaobaozhengjin: row?.toubiaobaozhengjin ?? null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級 + lianhetitoubiao: row?.lianhetitoubiao ?? null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級 + kaibiaofangshi: row?.kaibiaofangshi ?? null, // 寮�鏍囨柟寮忥紙鍙�夛級 + shifoufenbao: row?.shifoufenbao ?? "false", // 鏄惁鍒嗗寘锛堝彲閫夛級 + shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級 + caigourenmingcheng: row?.caigourenmingcheng ?? null, // 閲囪喘浜哄悕绉帮紙鍙�夛級 + xingzhengquyu: row?.xingzhengquyu.split(",") ?? [], // 琛屾斂鍖哄煙锛堝彲閫夛級 + xingzhengquyuName: row?.xingzhengquyuName ?? null, // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級 + jigoudaima: row?.jigoudaima ?? null, // 鏈烘瀯浠g爜锛堝彲閫夛級 + daimaleixing: row?.daimaleixing ?? null, // 浠g爜绫诲瀷锛堝彲閫夛級 + lianxiren: row?.lianxiren ?? null, // 鑱旂郴浜猴紙鍙�夛級 + lianxidianhua: row?.lianxidianhua ?? null, // 鑱旂郴鐢佃瘽锛堝彲閫夛級 + tongxindizhi: row?.tongxindizhi ?? null, // 閫氫俊鍦板潃锛堝彲閫夛級 + dianziyoujian: row?.dianziyoujian ?? null, // 鐢靛瓙閭欢锛堝彲閫夛級 + xiangmujingbanren: row?.xiangmujingbanren ?? null, // 椤圭洰缁忓姙浜猴紙鍙�夛級 + zhiwu: row?.zhiwu ?? null, // 鑱屽姟锛堝彲閫夛級 + jingbanrendianhua: row?.jingbanrendianhua ?? null, // 缁忓姙浜虹數璇濓紙鍙�夛級 + dailijigoumingcheng: row?.dailijigoumingcheng ?? null, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級 + dailiLianxiren: row?.dailiLianxiren ?? null, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級 + dailiLianxidianhua: row?.dailiLianxidianhua ?? null, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級 + dailiDianziyoujian: row?.dailiDianziyoujian ?? null, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級 + dailiTongxindizhi: row?.dailiTongxindizhi ?? null, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級 + dailiXiangmujingli: row?.dailiXiangmujingli ?? null, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫� + dailijingliLianxidianhua: row?.dailijingliLianxidianhua ?? null // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級 + } + }, + width: "80%", + draggable: true, + fullscreen: deviceDetection(), + fullscreenIcon: true, + sureBtnLoading: true, + closeOnClickModal: false, + contentRenderer: () => h(editForm, { ref: formRef, formInline: null }), + beforeSure: (done, { options, closeLoading }) => { + const FormRef = formRef.value.getRef(); + const curData = cloneDeep(options.props.formInline as FormItemProps); + async function chores() { + message(`鎮�${title}浜嗛」鐩悕绉颁负${curData.projectName}鐨勮繖鏉℃暟鎹甡, { + type: "success" + }); + // curData.dingbiaoguize = curData.dingbiaoguize.join(""); + curData.xingzhengquyu = curData.xingzhengquyu.join(","); + let res; + if (title == "鏂板") { + res = await caigourenAdd(curData); + } else { + res = await caigourenUpdate(curData); + } + if (res.code == "200") { + done(); // 鍏抽棴寮规 + onSearch(); // 鍒锋柊琛ㄦ牸鏁版嵁 + } else { + closeLoading(); + message(res.message, { + type: "error" + }); + } + } + FormRef.validate((valid, obj) => { + if (valid) { + // 琛ㄥ崟瑙勫垯鏍¢獙閫氳繃 + if (title === "鏂板") { + // 瀹為檯寮�鍙戝厛璋冪敤鏂板鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔 + chores(); + } else { + // 瀹為檯寮�鍙戝厛璋冪敤淇敼鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔 + chores(); + } + } else { + closeLoading(); + const fail = []; + for (const key in obj) { + fail.push(obj[key][0].message); + } + message(fail[0], { + type: "warning" + }); + return false; + } + }); + } + }); + } + + async function handleDelete(row) { + const res = await caigourenDelete({ id: row.id }); + if (res.code == "200") { + message(`鎮ㄥ垹闄や簡椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡, { + type: "success" + }); + onSearch(); + } else { + message(res.message, { + type: "error" + }); + } + } + + onMounted(() => { + onSearch(); + getCaigoufangshiListFun(); + getHangyepingmuListFun(); + getOrderStatusListFun(); + getRegionListFun(); + getDaimaleixingListFun(); + }); + + return { + form, + state, + loading, + columns, + CGRcolumns, + dataList, + selectedNum, + /** 鎼滅储 */ + onSearch, + /** 閲嶇疆 */ + resetForm, + /** 鏂板銆佷慨鏀归」鐩� */ + openDialog, + /** 鍒犻櫎椤圭洰 */ + handleDelete, + handleSelectionChange, + handleSizeChange, + handleCurrentChange, + pagination, + checkboxAsRadio, + onSelectionCancel, + onbatchDel + }; +} diff --git a/src/views/system/aboutItem/utils/rule.ts b/src/views/system/aboutItem/utils/rule.ts new file mode 100644 index 0000000..4b05d23 --- /dev/null +++ b/src/views/system/aboutItem/utils/rule.ts @@ -0,0 +1,222 @@ +import { reactive } from "vue"; +import type { FormRules } from "element-plus"; +import { isPhone, isEmail } from "@pureadmin/utils"; + +/** 鑷畾涔夎〃鍗曡鍒欐牎楠� */ +export const formRules = reactive(<FormRules>{ + // 椤圭洰缂栧彿锛堝繀濉級 + projectCode: [ + { required: true, message: "璇疯緭鍏ラ」鐩紪鍙�", trigger: "blur" }, + { max: 50, message: "椤圭洰缂栧彿闀垮害涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" } + ], + // 椤圭洰鍚嶇О锛堝繀濉級 + projectName: [ + { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" }, + { max: 200, message: "椤圭洰鍚嶇О闀垮害涓嶈兘瓒呰繃200涓瓧绗�", trigger: "blur" } + ], + // 琛屼笟鍝佺洰锛堝彲閫夛紝浣嗛�夋嫨鏃堕渶鏍¢獙锛� + hangyepinmu: [ + { required: true, message: "璇烽�夋嫨琛屼笟鍝佺洰", trigger: "blur" }, + { type: "string", message: "琛屼笟鍝佺洰鏍煎紡涓嶆纭�", trigger: "change" } + ], + // 閲囪喘鏂瑰紡锛堝彲閫夛紝浣嗛�夋嫨鏃堕渶鏍¢獙锛� + caigoufangshi: [ + { required: true, message: "璇烽�夋嫨閲囪喘鏂瑰紡", trigger: "blur" }, + { type: "string", message: "閲囪喘鏂瑰紡鏍煎紡涓嶆纭�", trigger: "change" } + ], + // 閲囪喘棰勭畻锛堝彲閫夛紝闇�涓烘暟瀛楋級 + caigouyusuan: [ + { required: true, message: "璇疯緭鍏ラ噰璐绠�", trigger: "blur" } + // { type: "number", message: "閲囪喘棰勭畻蹇呴』涓烘暟瀛�", trigger: "blur" }, + // { min: 0, message: "閲囪喘棰勭畻涓嶈兘涓鸿礋鏁�", trigger: "blur" } + ], + // 瀹氭爣瑙勫垯锛堝彲閫夛級 + dingbiaoguize: [ + { required: true, message: "璇烽�夋嫨瀹氭爣瑙勫垯", trigger: "blur" }, + { type: "string", message: "瀹氭爣瑙勫垯鏍煎紡涓嶆纭�", trigger: "change" } + ], + // 鎶ュ悕璐癸紙鍙�夛紝闇�涓烘暟瀛楋級 + baomingfei: [ + { required: true, message: "璇疯緭鍏ユ姤鍚嶈垂", trigger: "blur" } + // { type: "number", message: "鎶ュ悕璐瑰繀椤讳负鏁板瓧", trigger: "blur" }, + // { min: 0, message: "鎶ュ悕璐逛笉鑳戒负璐熸暟", trigger: "blur" } + ], + // 鎶曟爣淇濊瘉閲戯紙鍙�夛紝闇�涓烘暟瀛楋級 + toubiaobaozhengjin: [ + { required: true, message: "璇疯緭鍏ユ姇鏍囦繚璇侀噾璐�", trigger: "blur" } + // { type: "number", message: "鎶曟爣淇濊瘉閲戝繀椤讳负鏁板瓧", trigger: "blur" }, + // { min: 0, message: "鎶曟爣淇濊瘉閲戜笉鑳戒负璐熸暟", trigger: "blur" } + ], + // 鑱斿悎浣撴姇鏍囷紙鍙�夛紝闇�涓哄竷灏斿�硷級 + lianhetitoubiao: [ + { required: true, message: "璇烽�夋嫨鑱斿悎浣撴姇鏍�", trigger: "blur" } + // { type: "boolean", message: "鑱斿悎浣撴姇鏍囧繀椤讳负甯冨皵鍊�", trigger: "change" } + ], + // 寮�鏍囨柟寮忥紙鍙�夛級 + kaibiaofangshi: [ + { required: true, message: "璇烽�夋嫨寮�鏍囨柟寮�", trigger: "blur" } + // { type: "string", message: "寮�鏍囨柟寮忔牸寮忎笉姝g‘", trigger: "change" } + ], + // 鏄惁鍒嗗寘锛堝彲閫夛紝闇�涓哄竷灏斿�硷級 + shifoufenbao: [ + { required: true } + // { type: "boolean", message: "鏄惁鍒嗗寘蹇呴』涓哄竷灏斿��", trigger: "change" } + ], + // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛紝闇�涓哄竷灏斿�硷級 + shifoutuisongxuanchuan: [ + { required: true } + // { type: "boolean", message: "鏄惁鎺ㄩ�佸浼犲繀椤讳负甯冨皵鍊�", trigger: "change" } + ], + // 閲囪喘浜哄悕绉帮紙鍙�夛級 + caigourenmingcheng: [ + { required: true, message: "璇疯緭鍏ラ噰璐汉鍚嶇О", trigger: "blur" }, + { max: 100, message: "閲囪喘浜哄悕绉伴暱搴︿笉鑳借秴杩�100涓瓧绗�", trigger: "blur" } + ], + // 琛屾斂鍖哄煙锛堝彲閫夛紝闇�涓烘暟缁勶級 + xingzhengquyu: [ + { required: true, message: "璇烽�夋嫨琛屾斂鍖哄煙", trigger: "blur" }, + { type: "array", message: "琛屾斂鍖哄煙蹇呴』涓烘暟缁勬牸寮�", trigger: "change" } + ], + // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級 + // xingzhengquyuName: [ + // { required: false }, + // { max: 100, message: "琛屾斂鍖哄煙鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�", trigger: "blur" } + // ], + // 鏈烘瀯浠g爜锛堝彲閫夛紝楠岃瘉鏍煎紡锛� + jigoudaima: [ + { required: true, message: "璇疯緭鍏ユ満鏋勪唬鐮�", trigger: "blur" } + // { + // pattern: /^[A-Z0-9]{8}-[A-Z0-9]{1}$/, + // message: "鏈烘瀯浠g爜鏍煎紡涓嶆纭�", + // trigger: "blur" + // } + ], + // 浠g爜绫诲瀷锛堝彲閫夛級 + daimaleixing: [ + { required: true, message: "璇烽�夋嫨浠g爜绫诲瀷", trigger: "blur" }, + { type: "string", message: "浠g爜绫诲瀷鏍煎紡涓嶆纭�", trigger: "change" } + ], + // 鑱旂郴浜猴紙鍙�夛級 + lianxiren: [ + { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" }, + { max: 50, message: "鑱旂郴浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�", trigger: "blur" } + ], + // 鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級 + lianxidianhua: [ + { required: true, message: "璇疯緭鍏ヨ仈绯讳汉鐢佃瘽", trigger: "blur" }, + { + pattern: /^1[3-9]\d{9}$/, + message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", + trigger: "blur" + } + ], + // 閫氫俊鍦板潃锛堝彲閫夛級 + tongxindizhi: [ + { required: true, message: "璇疯緭鍏ラ�氫俊鍦板潃", trigger: "blur" }, + { max: 200, message: "閫氫俊鍦板潃闀垮害涓嶈兘瓒呰繃200涓瓧绗�", trigger: "blur" } + ], + // 鐢靛瓙閭欢锛堝彲閫夛紝楠岃瘉閭鏍煎紡锛� + dianziyoujian: [ + { required: true, message: "璇疯緭鍏ョ數瀛愰偖浠�", trigger: "blur" }, + { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: "blur" } + ], + // 椤圭洰缁忓姙浜猴紙鍙�夛級 + xiangmujingbanren: [ + { required: true, message: "璇疯緭鍏ラ」鐩粡鍔炰汉", trigger: "blur" }, + { max: 50, message: "椤圭洰缁忓姙浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�", trigger: "blur" } + ], + // 鑱屽姟锛堝彲閫夛級 + zhiwu: [ + { required: true, message: "璇疯緭鍏ヨ亴鍔�", trigger: "blur" }, + { max: 50, message: "鑱屽姟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" } + ], + // 缁忓姙浜虹數璇濓紙鍙�夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級 + jingbanrendianhua: [ + { required: true, message: "璇疯緭鍏ョ粡鍔炰汉鐢佃瘽", trigger: "blur" }, + { + pattern: /^1[3-9]\d{9}$/, + message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級 + dailijigoumingcheng: [ + { required: true, message: "璇疯緭鍏ヤ唬鐞嗘満鏋勫悕绉�", trigger: "blur" }, + { max: 100, message: "浠g悊鏈烘瀯鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�", trigger: "blur" } + ], + // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級 + dailiLianxiren: [ + { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" }, + { + max: 50, + message: "鑱旂郴浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�", + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級 + dailiLianxidianhua: [ + { required: true, message: "璇疯緭鍏ヨ仈绯荤數璇�", trigger: "blur" }, + { + pattern: /^1[3-9]\d{9}$/, + message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛紝楠岃瘉閭鏍煎紡锛� + dailiDianziyoujian: [ + { required: true, message: "璇疯緭鍏ョ數瀛愰偖浠�", trigger: "blur" }, + { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: "blur" }, + { + validator: (rule, value, callback) => { + if (value === "") { + callback(); + } else if (!isEmail(value)) { + callback(new Error("璇疯緭鍏ユ纭殑閭鏍煎紡")); + } else { + callback(); + } + }, + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級 + dailiTongxindizhi: [ + { required: true, message: "璇疯緭鍏ラ�氫俊鍦板潃", trigger: "blur" }, + { + max: 200, + message: "閫氫俊鍦板潃闀垮害涓嶈兘瓒呰繃200涓瓧绗�", + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫夛級 + dailiXiangmujingli: [ + { required: true, message: "璇疯緭鍏ラ」鐩粡鐞�", trigger: "blur" }, + { + max: 50, + message: "椤圭洰缁忕悊濮撳悕闀垮害涓嶈兘瓒呰繃50涓瓧绗�", + trigger: "blur" + } + ], + // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級 + dailijingliLianxidianhua: [ + { required: true, message: "璇疯緭鍏ヨ仈绯荤數璇�", trigger: "blur" }, + { + pattern: /^1[3-9]\d{9}$/, + message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", + trigger: "blur" + }, + { + validator: (rule, value, callback) => { + if (value === "") { + callback(); + } else if (!isPhone(value)) { + callback(new Error("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜鏍煎紡")); + } else { + callback(); + } + }, + trigger: "blur" + // trigger: "click" // 濡傛灉鎯冲湪鐐瑰嚮纭畾鎸夐挳鏃惰Е鍙戣繖涓牎楠岋紝trigger 璁剧疆鎴� click 鍗冲彲 + } + ] +}); diff --git a/src/views/system/aboutItem/utils/types.ts b/src/views/system/aboutItem/utils/types.ts new file mode 100644 index 0000000..3e0eca8 --- /dev/null +++ b/src/views/system/aboutItem/utils/types.ts @@ -0,0 +1,39 @@ +interface FormItemProps { + id: string; + projectCode: string; // 椤圭洰缂栧彿锛堝繀濉級 + projectName: string; // 椤圭洰鍚嶇О锛堝繀濉級 + hangyepinmu: any | null; // 琛屼笟鍝佺洰锛堝彲閫夛級 + caigoufangshi: any | null; // 閲囪喘鏂瑰紡锛堝彲閫夛級 + caigouyusuan: any | null; // 閲囪喘棰勭畻锛堝彲閫夛級 + dingbiaoguize: any | null; // 瀹氭爣瑙勫垯锛堝彲閫夛級 + baomingfei: any | null; // 鎶ュ悕璐癸紙鍙�夛級 + toubiaobaozhengjin: any | null; // 鎶曟爣淇濊瘉閲戯紙鍙�夛級 + lianhetitoubiao: any | null; // 鑱斿悎浣撴姇鏍囷紙鍙�夛級 + kaibiaofangshi: any | null; // 寮�鏍囨柟寮忥紙鍙�夛級 + shifoufenbao: any | null; // 鏄惁鍒嗗寘锛堝彲閫夛級 + shifoutuisongxuanchuan: any | null; // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級 + caigourenmingcheng: string | null; // 閲囪喘浜哄悕绉帮紙鍙�夛級 + xingzhengquyu: any | null; // 琛屾斂鍖哄煙锛堝彲閫夛級 + xingzhengquyuName: string | null; // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級 + jigoudaima: string | null; // 鏈烘瀯浠g爜锛堝彲閫夛級 + daimaleixing: any | null; // 浠g爜绫诲瀷锛堝彲閫夛級 + lianxiren: string | null; // 鑱旂郴浜猴紙鍙�夛級 + lianxidianhua: string | null; // 鑱旂郴鐢佃瘽锛堝彲閫夛級 + tongxindizhi: string | null; // 閫氫俊鍦板潃锛堝彲閫夛級 + dianziyoujian: string | null; // 鐢靛瓙閭欢锛堝彲閫夛級 + xiangmujingbanren: string | null; // 椤圭洰缁忓姙浜猴紙鍙�夛級 + zhiwu: string | null; // 鑱屽姟锛堝彲閫夛級 + jingbanrendianhua: string | null; // 缁忓姙浜虹數璇濓紙鍙�夛級 + dailijigoumingcheng: string | null; // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級 + dailiLianxiren: string | null; // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級 + dailiLianxidianhua: string | null; // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級 + dailiDianziyoujian: string | null; // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級 + dailiTongxindizhi: string | null; // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級 + dailiXiangmujingli: string | null; // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫夛級 + dailijingliLianxidianhua: string | null; // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級 +} +interface FormProps { + formInline: FormItemProps; +} + +export type { FormItemProps, FormProps }; diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index 684bc00..3d5caf9 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -306,7 +306,7 @@ 鏂板 </el-button> --> <el-popconfirm - :title="`鏄惁纭鍒犻櫎閮ㄩ棬鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡" + :title="`鏄惁纭鍒犻櫎椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡" @confirm="handleDelete(row)" > <template #reference> diff --git a/src/views/system/dept/utils/hook.tsx b/src/views/system/dept/utils/hook.tsx index a0c9b7b..0608031 100644 --- a/src/views/system/dept/utils/hook.tsx +++ b/src/views/system/dept/utils/hook.tsx @@ -18,7 +18,7 @@ import { usePublicHooks } from "../../hooks"; import { addDialog } from "@/components/ReDialog"; import { type Ref, reactive, ref, onMounted, h, computed } from "vue"; -import type { FormItemProps } from "../utils/types"; +import type { FormItemProps } from "./types"; import { cloneDeep, isAllEmpty, @@ -317,7 +317,7 @@ pagination.pageSize = result.pageSize; pagination.currentPage = result.page; // if (!isAllEmpty(form.name)) { - // // 鍓嶇鎼滅储閮ㄩ棬鍚嶇О + // // 鍓嶇鎼滅储椤圭洰鍚嶇О // newData = newData.filter(item => item.name.includes(form.name)); // } // if (!isAllEmpty(form.status)) { @@ -328,7 +328,7 @@ } function formatHigherDeptOptions(treeList) { - // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч儴闂ㄧ骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛� + // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч」鐩骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛� if (!treeList || !treeList.length) return; const newTreeList = []; for (let i = 0; i < treeList.length; i++) { @@ -474,9 +474,9 @@ onSearch, /** 閲嶇疆 */ resetForm, - /** 鏂板銆佷慨鏀归儴闂� */ + /** 鏂板銆佷慨鏀归」鐩� */ openDialog, - /** 鍒犻櫎閮ㄩ棬 */ + /** 鍒犻櫎椤圭洰 */ handleDelete, handleSelectionChange, handleSizeChange, -- Gitblit v1.9.1