Merge branch 'main' of https://gitea.lihaink.cn/weipengfei/ERP-admin
This commit is contained in:
commit
47249a333f
|
@ -1,5 +1,5 @@
|
|||
NODE_ENV = 'development'
|
||||
VITE_NOW_TYPE = 'dist'
|
||||
# Base API
|
||||
VITE_APP_BASE_URL='http://192.168.1.22:8546'
|
||||
VITE_APP_BASE_URL='http://192.168.1.14:8546'
|
||||
# VITE_APP_BASE_URL='https://erp.lihaink.cn'
|
|
@ -0,0 +1,26 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 仓库信息表列表
|
||||
export function apigetProvinceLists() {
|
||||
return request.get({ url: '/geo/province' })
|
||||
}
|
||||
// 仓库信息表列表
|
||||
export function apicityLists(params: any) {
|
||||
return request.get({ url: '/geo/city', params })
|
||||
}
|
||||
|
||||
// 仓库信息表列表
|
||||
export function apiAreaLists(params: any) {
|
||||
return request.get({ url: '/geo/area', params })
|
||||
}
|
||||
|
||||
// 仓库信息表列表
|
||||
export function apiStreetLists(params: any) {
|
||||
return request.get({ url: '/geo/street', params })
|
||||
}
|
||||
|
||||
|
||||
// 仓库信息表列表
|
||||
export function apiVillageLists(params: any) {
|
||||
return request.get({ url: '/geo/village', params })
|
||||
}
|
|
@ -24,3 +24,8 @@ export function apiCashierclassDelete(params: any) {
|
|||
export function apiCashierclassDetail(params: any) {
|
||||
return request.get({ url: '/retail/cashierclass/detail', params })
|
||||
}
|
||||
|
||||
// 零售单详情
|
||||
export function apiCashierclassAuditing(params: any) {
|
||||
return request.post({ url: '/retail/cashierclass/auditing', params })
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
interface Iconfig {
|
||||
/** 请求列表的接口*/
|
||||
fetchFn: Function;
|
||||
|
||||
/**用户可搜索的内容,select为下拉列表,select为数组时为自定义option,w为string时表示获取字典里的值 */
|
||||
serchList: Array<{
|
||||
label: String;
|
||||
value: String;
|
||||
select?: Array<{ name: string; value: string | Number }> | String;
|
||||
}>;
|
||||
|
||||
/**需要的字典数据,以,隔开的string */
|
||||
dictData?: String;
|
||||
|
||||
/**table配置 */
|
||||
tableList: Array<Object>;
|
||||
}
|
||||
|
||||
|
||||
import { apiGoodsLabelLists } from '@/api/goods_label'
|
||||
|
||||
export const goods_label: Iconfig = {
|
||||
fetchFn: apiGoodsLabelLists,
|
||||
serchList: [
|
||||
// {
|
||||
// label: "项目名称",
|
||||
// value: "project_name",
|
||||
// },
|
||||
// {
|
||||
// label: "项目编号",
|
||||
// value: "project_code",
|
||||
// },
|
||||
],
|
||||
tableList: [
|
||||
{ id: "ID" },
|
||||
{ name: "标签名" },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
|
||||
<el-form-item :label="item.label" v-for="(item, index) in config.serchList" :key="index">
|
||||
<el-select v-model="queryParams[item.value]" v-if="item.select" :disabled="isDisabled(item.value)">
|
||||
<el-option :label="i.name" :value="i.value" v-for="i in item.select"
|
||||
v-if="Array.isArray(item.select)"></el-option>
|
||||
<el-option v-for="(i, index) in dictData[item.select]" :key="index" :label="i.name"
|
||||
:value="parseInt(i.value)" v-else />
|
||||
</el-select>
|
||||
<el-input class="w-[280px]" v-model="queryParams[item.value]" clearable
|
||||
:placeholder="`请输入${item.label}`" v-else />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange" row-key="id"
|
||||
@selection-change="handleSelectionChange">
|
||||
|
||||
<el-table-column type="selection" width="55" v-if="multipleChoice" />
|
||||
<el-table-column :label="item[(Object.keys(item))[0]]" show-overflow-tooltip
|
||||
v-for="item in config.tableList ">
|
||||
<template #default="{ row }">
|
||||
{{ (Object.keys(item))[0].includes('.') ?
|
||||
row[(Object.keys(item))[0].split(".")[0]][(Object.keys(item))[0].split(".")[1]] :
|
||||
row[(Object.keys(item))[0]] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
<div class="flex justify-end mt-4" v-if="multipleChoice">
|
||||
<el-button type="primary" @click="confirm">确定</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { usePaging } from "@/hooks/usePaging"
|
||||
import { defineEmits } from "vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
|
||||
const props = defineProps({
|
||||
config: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
query: Object,
|
||||
multipleChoice: Boolean
|
||||
})
|
||||
|
||||
|
||||
/**根据传入的config生成queryParmas */
|
||||
const getParmasFn = () => {
|
||||
const arr = props.config.serchList.map((item: any) => (item.value))
|
||||
const result = arr.reduce((acc: any, curr: any) => {
|
||||
acc[curr] = '';
|
||||
return acc;
|
||||
}, {});
|
||||
const mergedObj = Object.assign({}, result, props.query);
|
||||
|
||||
return mergedObj
|
||||
}
|
||||
|
||||
|
||||
/**判断是否需要disabled的搜索框*/
|
||||
const isDisabled = (key: String) => {
|
||||
if (!props.query) return
|
||||
return Object.keys(props.query).includes(key)
|
||||
}
|
||||
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
...getParmasFn()
|
||||
});
|
||||
|
||||
const { dictData } = useDictData(props.config.dictData)
|
||||
|
||||
// 选中数据
|
||||
const emits = defineEmits(["customEvent"]);
|
||||
|
||||
// 选中数据子父传递
|
||||
const handleCurrentChange = (value: any) => {
|
||||
if (props.multipleChoice) return
|
||||
emits("customEvent", value);
|
||||
};
|
||||
|
||||
// 多选
|
||||
const multipleSelection = ref([])
|
||||
|
||||
const handleSelectionChange = (val: any) => {
|
||||
multipleSelection.value = val
|
||||
}
|
||||
|
||||
const confirm = () => {
|
||||
emits("customEvent", multipleSelection.value);
|
||||
}
|
||||
|
||||
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: props.config.fetchFn,
|
||||
params: queryParams,
|
||||
});
|
||||
|
||||
getLists();
|
||||
</script>
|
|
@ -29,6 +29,14 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="店主姓名" prop="service_user">
|
||||
<el-input v-model="formData.service_user" clearable placeholder="请输入店主姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否支持先货后款" prop="credit_buy">
|
||||
|
@ -42,7 +50,7 @@
|
|||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="结算周期(天)" prop="settle_cycle">
|
||||
<el-input v-model="formData.settle_cycle" clearable placeholder="请输入结算周期,单位天" />
|
||||
<el-input v-model="formData.settle_cycle" clearable placeholder="请输入结算周期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
|
@ -50,7 +58,10 @@
|
|||
<el-input v-model="formData.interest_rate" clearable placeholder="请输入利率" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
|
||||
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="城市" prop="city_id">
|
||||
<el-input v-model="formData.city_id" clearable placeholder="请输入城市" />
|
||||
</el-form-item>
|
||||
|
@ -69,6 +80,41 @@
|
|||
<el-form-item label="村" prop="village_id">
|
||||
<el-input v-model="formData.village_id" clearable placeholder="请输入村" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="城市" prop="city_id">
|
||||
<el-select class="flex-1" v-model="formData.city_id" clearable placeholder="请选择城市"
|
||||
@change="getAreaList(formData.city_id)">
|
||||
<el-option v-for="(item, index) in address.cityList" :key="index" :label="item.city_name"
|
||||
:value="parseInt(item.city_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="区县" prop="area_id">
|
||||
<el-select class="flex-1" v-model="formData.area_id" clearable placeholder="请选择城市"
|
||||
@change="getTownList(formData.area_id)">
|
||||
<el-option v-for="(item, index) in address.areaList" :key="index" :label="item.area_name"
|
||||
:value="parseInt(item.area_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="镇街" prop="street_id">
|
||||
<el-select class="flex-1" v-model="formData.street_id" clearable placeholder="请选择城市"
|
||||
@change="getVilllageList(formData.street_id)">
|
||||
<el-option v-for="(item, index) in address.townList" :key="index" :label="item.street_name"
|
||||
:value="parseInt(item.street_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="村" prop="village_id">
|
||||
<el-select class="flex-1" v-model="formData.village_id" clearable placeholder="请选择城市">
|
||||
<el-option v-for="(item, index) in address.villlageList" :key="index"
|
||||
:label="item.village_name" :value="(item.village_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="商户地址" prop="mer_address">
|
||||
|
@ -76,11 +122,11 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="" prop="sort">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input v-model="formData.sort" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="商户是否禁用" prop="status">
|
||||
<el-radio-group v-model="formData.status" placeholder="请选择商户是否禁用">
|
||||
|
@ -146,6 +192,14 @@
|
|||
<el-input v-model="formData.financial_alipay" clearable placeholder="请输入支付宝转账信息" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="默认使用类型" prop="financial_type">
|
||||
<el-select class="flex-1" v-model="formData.financial_type" clearable placeholder="请选择默认使用类型">
|
||||
<el-option v-for="(item, index) in dictData.financial_type" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
|
@ -156,7 +210,8 @@
|
|||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiMerchantAdd, apiMerchantEdit, apiMerchantDetail } from '@/api/merchant'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { apicityLists, apiAreaLists, apiStreetLists, apiVillageLists } from "@/api/address"
|
||||
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
|
@ -177,13 +232,16 @@ const popupTitle = computed(() => {
|
|||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
financial_type: "",
|
||||
mer_id: '',
|
||||
category_id: '',
|
||||
type_id: '',
|
||||
mer_name: '',
|
||||
service_user: "",
|
||||
credit_buy: '',
|
||||
settle_cycle: '',
|
||||
interest_rate: '',
|
||||
province_id: '510000',
|
||||
city_id: '',
|
||||
area_id: '',
|
||||
street_id: '',
|
||||
|
@ -273,7 +331,9 @@ const setFormData = async (data: Record<any, any>) => {
|
|||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
await getAreaList(formData.city_id, true)
|
||||
await getTownList(formData.area_id, true)
|
||||
getVilllageList(formData.street_id)
|
||||
|
||||
}
|
||||
|
||||
|
@ -308,6 +368,54 @@ const handleClose = () => {
|
|||
}
|
||||
|
||||
|
||||
// 地址
|
||||
const address = reactive({
|
||||
cityList: [],
|
||||
areaList: [],
|
||||
townList: [],
|
||||
villlageList: []
|
||||
})
|
||||
|
||||
const getCityList = async (province_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apicityLists({ province_code })
|
||||
address.cityList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const getAreaList = async (city_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apiAreaLists({ city_code })
|
||||
address.areaList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const getTownList = async (area_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apiStreetLists({ area_code })
|
||||
address.townList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const getVilllageList = async (street_code: number | String) => {
|
||||
let res = await apiVillageLists({ street_code })
|
||||
address.villlageList = res
|
||||
}
|
||||
// 地址结束
|
||||
|
||||
getCityList(510000, false)
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
|
|
|
@ -125,10 +125,10 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="结算周期(天)" prop="settle_cycle" show-overflow-tooltip />
|
||||
<el-table-column label="利率" prop="interest_rate" show-overflow-tooltip />
|
||||
<el-table-column label="城市" prop="city_id" show-overflow-tooltip />
|
||||
<el-table-column label="区县" prop="area_id" show-overflow-tooltip />
|
||||
<el-table-column label="镇街表" prop="street_id" show-overflow-tooltip />
|
||||
<el-table-column label="村主键" prop="village_id" show-overflow-tooltip />
|
||||
<el-table-column label="城市" prop="city_name" show-overflow-tooltip />
|
||||
<el-table-column label="区县" prop="area_name" show-overflow-tooltip />
|
||||
<el-table-column label="镇街表" prop="street_name" show-overflow-tooltip />
|
||||
<el-table-column label="村" prop="village_name" show-overflow-tooltip />
|
||||
<el-table-column label="商户地址" prop="mer_address" show-overflow-tooltip />
|
||||
<el-table-column label="商户头像" prop="mer_avatar" show-overflow-tooltip />
|
||||
<el-table-column label="商户备注" prop="mark" show-overflow-tooltip />
|
||||
|
@ -196,7 +196,7 @@ const handleSelectionChange = (val: any[]) => {
|
|||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('mer_category_type,merchat_type,show_status,off_status')
|
||||
const { dictData } = useDictData('mer_category_type,merchat_type,show_status,off_status,financial_type')
|
||||
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
|
|
|
@ -43,27 +43,43 @@
|
|||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="标签" prop="sys_labels">
|
||||
<el-input v-model="formData.sys_labels" clearable placeholder="请输入标签" :readonly="false" />
|
||||
<el-input v-model="formData.sys_labels_text" readonly @click="showDialog = true" clearable
|
||||
placeholder="请输入标签" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="城市" prop="city_id">
|
||||
<el-input v-model="formData.city_id" clearable placeholder="请输入城市" :readonly="false" />
|
||||
<el-select class="flex-1" v-model="formData.city_id" clearable placeholder="请选择城市"
|
||||
@change="getAreaList(formData.city_id)">
|
||||
<el-option v-for="(item, index) in address.cityList" :key="index" :label="item.city_name"
|
||||
:value="parseInt(item.city_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="区县" prop="area_id">
|
||||
<el-input v-model="formData.area_id" clearable placeholder="请输入区县" :readonly="false" />
|
||||
<el-select class="flex-1" v-model="formData.area_id" clearable placeholder="请选择城市"
|
||||
@change="getTownList(formData.area_id)">
|
||||
<el-option v-for="(item, index) in address.areaList" :key="index" :label="item.area_name"
|
||||
:value="parseInt(item.area_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="镇街" prop="street_id">
|
||||
<el-input v-model="formData.street_id" clearable placeholder="请输入镇街表" :readonly="false" />
|
||||
<el-select class="flex-1" v-model="formData.street_id" clearable placeholder="请选择城市"
|
||||
@change="getVilllageList(formData.street_id)">
|
||||
<el-option v-for="(item, index) in address.townList" :key="index" :label="item.street_name"
|
||||
:value="parseInt(item.street_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="村" prop="village_id">
|
||||
<el-input v-model="formData.village_id" clearable placeholder="请输入村" :readonly="false" />
|
||||
<el-select class="flex-1" v-model="formData.village_id" clearable placeholder="请选择城市">
|
||||
<el-option v-for="(item, index) in address.villlageList" :key="index"
|
||||
:label="item.village_name" :value="(item.village_code)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
|
@ -146,12 +162,18 @@
|
|||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="默认使用类型" prop="financial_type">
|
||||
<el-input v-model="formData.financial_type" clearable placeholder="请输入默认使用类型"
|
||||
:readonly="false" />
|
||||
<el-select class="flex-1" v-model="formData.financial_type" clearable placeholder="请选择默认使用类型">
|
||||
<el-option v-for="(item, index) in dictData.financial_type" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择标签" width="70%">
|
||||
<dialogTable multipleChoice :config="goods_label" @customEvent="customEvent">
|
||||
</dialogTable>
|
||||
</el-dialog>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -160,6 +182,11 @@
|
|||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiSupplierAdd, apiSupplierEdit, apiSupplierDetail } from '@/api/supplier'
|
||||
import { apicityLists, apiAreaLists, apiStreetLists, apiVillageLists } from "@/api/address"
|
||||
import { goods_label } from "@/components/dialogTable/dialogTableConfig"
|
||||
|
||||
|
||||
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
|
@ -171,7 +198,7 @@ const emit = defineEmits(['success', 'close'])
|
|||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
const showDialog = ref(false)
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
|
@ -186,7 +213,9 @@ const formData = reactive({
|
|||
mer_name: '',
|
||||
settle_cycle: '',
|
||||
interest_rate: '',
|
||||
sys_labels: '',
|
||||
sys_labels: [],
|
||||
sys_labels_text: '',
|
||||
province_id: '510000',
|
||||
city_id: '',
|
||||
area_id: '',
|
||||
street_id: '',
|
||||
|
@ -207,6 +236,18 @@ const formData = reactive({
|
|||
financial_type: '',
|
||||
})
|
||||
|
||||
const customEvent = (e) => {
|
||||
formData.sys_labels = []
|
||||
let text = []
|
||||
e.forEach(item => {
|
||||
formData.sys_labels.push(item.id)
|
||||
text.push(item.name)
|
||||
});
|
||||
formData.sys_labels_text = text.join(',')
|
||||
formData.sys_labels = formData.sys_labels.join(',')
|
||||
showDialog.value = false
|
||||
}
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
@ -266,7 +307,9 @@ const setFormData = async (data: Record<any, any>) => {
|
|||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
await getAreaList(formData.city_id, true)
|
||||
await getTownList(formData.area_id, true)
|
||||
getVilllageList(formData.street_id)
|
||||
|
||||
}
|
||||
|
||||
|
@ -299,7 +342,7 @@ const open = (type = 'add') => {
|
|||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
// 510000
|
||||
|
||||
|
||||
// 地址
|
||||
|
@ -310,6 +353,45 @@ const address = reactive({
|
|||
villlageList: []
|
||||
})
|
||||
|
||||
const getCityList = async (province_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apicityLists({ province_code })
|
||||
address.cityList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const getAreaList = async (city_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apiAreaLists({ city_code })
|
||||
address.areaList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const getTownList = async (area_code: number | String, isAsync: Boolean) => {
|
||||
let res = await apiStreetLists({ area_code })
|
||||
address.townList = res
|
||||
if (isAsync) {
|
||||
return Promise.resolve({
|
||||
msg: '获取成功'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const getVilllageList = async (street_code: number | String) => {
|
||||
let res = await apiVillageLists({ street_code })
|
||||
address.villlageList = res
|
||||
}
|
||||
// 地址结束
|
||||
|
||||
getCityList(510000, false)
|
||||
|
||||
|
||||
defineExpose({
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
<el-table-column label="商户名称" prop="mer_name" show-overflow-tooltip />
|
||||
<el-table-column label="结算周期(天)" prop="settle_cycle" show-overflow-tooltip />
|
||||
<el-table-column label="利率" prop="interest_rate" show-overflow-tooltip />
|
||||
<el-table-column label="标签" prop="sys_labels" show-overflow-tooltip />
|
||||
<el-table-column label="标签" prop="sys_labels_text" show-overflow-tooltip />
|
||||
<el-table-column label="商户地址" prop="mer_address" show-overflow-tooltip />
|
||||
<el-table-column label="商户是否禁用" prop="status">
|
||||
<template #default="{ row }">
|
||||
|
@ -127,7 +127,7 @@ const handleSelectionChange = (val: any[]) => {
|
|||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('show_status,mer_category_type,merchat_type')
|
||||
const { dictData } = useDictData('show_status,mer_category_type,merchat_type,financial_type')
|
||||
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form
|
||||
class="mb-[-16px]"
|
||||
:model="queryParams"
|
||||
inline
|
||||
>
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
|
@ -22,11 +18,8 @@
|
|||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['goods.goods_label/delete']"
|
||||
:disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)"
|
||||
>
|
||||
<el-button v-perms="['goods.goods_label/delete']" :disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
<div class="mt-4">
|
||||
|
@ -36,20 +29,11 @@
|
|||
<el-table-column label="标签名" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['goods.goods_label/edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
<el-button v-perms="['goods.goods_label/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['goods.goods_label/delete']"
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
<el-button v-perms="['goods.goods_label/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
|
|
|
@ -1,70 +1,115 @@
|
|||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" title="详情" :async="true" width="550px" :cancelButtonText="false" :confirmButtonText="false">
|
||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="60vw" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules" disabled>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="所属商户" prop="merchant">
|
||||
<el-input v-model="formData.merchant" clearable placeholder="请输入所属商户" :readonly="true" />
|
||||
<el-input v-model="formData.merchant" clearable placeholder="请输入所属商户" :readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="归属门店" prop="store_id">
|
||||
<el-input v-model="formData.store_id" clearable placeholder="请输入归属门店" :readonly="true" />
|
||||
<el-input v-model="formData.store_id" clearable placeholder="请输入归属门店" :readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户ID" prop="customer">
|
||||
<el-input v-model="formData.customer" clearable placeholder="请输入客户ID" :readonly="true" />
|
||||
<el-input v-model="formData.customer" clearable placeholder="请输入客户ID" :readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单据时间" prop="time">
|
||||
<el-input v-model="formData.time" clearable placeholder="请输入单据时间" :readonly="true" />
|
||||
<!-- <el-input v-model="formData.time" clearable placeholder="请输入单据时间" :readonly="false" /> -->
|
||||
<el-date-picker :readonly="false" class="flex-1 !flex" v-model="formData.time" clearable
|
||||
type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择单据时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单据编号" prop="number">
|
||||
<el-input v-model="formData.number" clearable placeholder="请输入单据编号" :readonly="true" />
|
||||
<el-input v-model="formData.number" clearable placeholder="请输入单据编号" :readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单据金额" prop="total">
|
||||
<el-input v-model="formData.total" clearable placeholder="请输入单据金额" :readonly="true" />
|
||||
<el-input v-model="formData.total" type="number" clearable placeholder="请输入单据金额"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="抵扣金额" prop="deduction_price">
|
||||
<el-input v-model="formData.deduction_price" clearable placeholder="请输入抵扣金额" :readonly="true" />
|
||||
<el-input v-model="formData.deduction_price" clearable placeholder="请输入抵扣金额"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="实际金额" prop="actual">
|
||||
<el-input v-model="formData.actual" clearable placeholder="请输入实际金额" :readonly="true" />
|
||||
<el-input v-model="formData.actual" type="number" clearable placeholder="请输入实际金额"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="实收金额" prop="money">
|
||||
<el-input v-model="formData.money" clearable placeholder="请输入实收金额" :readonly="true" />
|
||||
<el-input v-model="formData.money" type="number" clearable placeholder="请输入实收金额"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式 0余额 1微信 2小程序 3 h5 4支付宝 5 支付宝扫码 6 微信扫码 8先货后款 10对公转账" prop="pay_type">
|
||||
<el-select class="flex-1" v-model="formData.pay_type" clearable
|
||||
placeholder="请选择支付方式 0余额 1微信 2小程序 3 h5 4支付宝 5 支付宝扫码 6 微信扫码 8先货后款 10对公转账" :disabled="true">
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="支付方式 " prop="pay_type">
|
||||
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择支付方式"
|
||||
:disabled="false">
|
||||
<el-option v-for="(item, index) in dictData.pay_type" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="备注信息" prop="data">
|
||||
<el-input v-model="formData.data" clearable placeholder="请输入备注信息" :readonly="true" />
|
||||
<el-input v-model="formData.data" clearable placeholder="请输入备注信息" type="textarea"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核状态[0:未审核|1:已审核]" prop="type">
|
||||
<el-radio-group v-model="formData.type" placeholder="请选择审核状态[0:未审核|1:已审核]" :disabled="true">
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="审核状态" prop="type">
|
||||
<el-radio-group v-model="formData.type" placeholder="请选择审核状态" :disabled="false">
|
||||
<el-radio v-for="(item, index) in dictData.auditing_type" :key="index"
|
||||
:label="parseInt(item.value)">
|
||||
{{ item.name }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="审核人" prop="auditinguser">
|
||||
<el-input v-model="formData.auditinguser" clearable placeholder="请输入审核人" :readonly="true" />
|
||||
<el-input v-model="formData.auditinguser" clearable placeholder="请输入审核人" :readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="审核时间" prop="auditingtime">
|
||||
<el-date-picker :readonly="true" class="flex-1 !flex" v-model="formData.auditingtime" clearable
|
||||
<el-date-picker :readonly="false" class="flex-1 !flex" v-model="formData.auditingtime" clearable
|
||||
type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择审核时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="扩展信息" prop="more">
|
||||
<el-input v-model="formData.more" clearable placeholder="请输入扩展信息" :readonly="true" />
|
||||
<el-input v-model="formData.more" clearable placeholder="请输入扩展信息" type="textarea"
|
||||
:readonly="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="cashierclassDETAILS">
|
||||
<script lang="ts" setup name="cashierclassEdit">
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCashierclassAdd, apiCashierclassEdit, apiCashierclassDetail } from '@/api/cashierclass'
|
||||
|
@ -82,6 +127,10 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
|||
const mode = ref('add')
|
||||
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑零售单' : '新增零售单'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
@ -104,6 +153,50 @@ const formData = reactive({
|
|||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
merchant: [{
|
||||
required: true,
|
||||
message: '请输入所属商户',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
customer: [{
|
||||
required: true,
|
||||
message: '请输入客户ID',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
time: [{
|
||||
required: true,
|
||||
message: '请输入单据时间',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
number: [{
|
||||
required: true,
|
||||
message: '请输入单据编号',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
total: [{
|
||||
required: true,
|
||||
message: '请输入单据金额',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
actual: [{
|
||||
required: true,
|
||||
message: '请输入实际金额',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
money: [{
|
||||
required: true,
|
||||
message: '请输入实收金额',
|
||||
trigger: ['blur']
|
||||
}],
|
||||
pay_type: [{
|
||||
required: true,
|
||||
message: '请选择支付方式 0余额 1微信 2小程序 3 h5 4支付宝 5 支付宝扫码 6 微信扫码 8先货后款 10对公转账',
|
||||
trigger: ['blur']
|
||||
}]
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
@ -125,8 +218,21 @@ const getDetail = async (row: Record<string, any>) => {
|
|||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
await formRef.value?.validate()
|
||||
const data = { ...formData, }
|
||||
mode.value == 'edit'
|
||||
? await apiCashierclassEdit(data)
|
||||
: await apiCashierclassAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ const mode = ref('add')
|
|||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑零售单' : '新增零售单'
|
||||
return '零售单详情'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<el-form-item label="制单人" prop="user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.user" clearable placeholder="请输入制单人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="pay_type" tips=" 0余额 1微信 2小程序 3 h5 4支付宝 5 支付宝扫码 6 微信扫码 8先货后款 10对公转账">
|
||||
<el-form-item label="支付方式" prop="pay_type">
|
||||
<el-select class="w-[280px]" v-model="queryParams.pay_type" clearable placeholder="请选择支付方式">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option v-for="(item, index) in dictData.pay_type" :key="index" :label="item.name"
|
||||
|
@ -44,7 +44,7 @@
|
|||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['retail.cashierclass/add']" type="primary" @click="handleAdd">
|
||||
<!-- <el-button v-perms="['retail.cashierclass/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
|
@ -53,21 +53,21 @@
|
|||
<el-button v-perms="['retail.cashierclass/delete']" :disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="ID" prop="id" />
|
||||
<el-table-column label="所属商户" prop="merchant" show-overflow-tooltip />
|
||||
<el-table-column label="归属门店" prop="store_id" show-overflow-tooltip />
|
||||
<el-table-column label="客户ID" prop="customer" show-overflow-tooltip />
|
||||
<el-table-column label="单据时间" prop="time" show-overflow-tooltip />
|
||||
<el-table-column label="所属商户" prop="merchant_name" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="归属门店" prop="store_id" show-overflow-tooltip /> -->
|
||||
<el-table-column label="客户" prop="user_name" show-overflow-tooltip />
|
||||
<el-table-column label="单据时间" prop="create_time" show-overflow-tooltip />
|
||||
<el-table-column label="单据编号" prop="number" show-overflow-tooltip />
|
||||
<el-table-column label="单据金额" prop="total" show-overflow-tooltip />
|
||||
<el-table-column label="抵扣金额" prop="deduction_price" show-overflow-tooltip />
|
||||
<el-table-column label="实际金额" prop="actual" show-overflow-tooltip />
|
||||
<el-table-column label="实收金额" prop="money" show-overflow-tooltip />
|
||||
<el-table-column label="制单人" prop="user" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="制单人" prop="user" show-overflow-tooltip /> -->
|
||||
<el-table-column label="支付方式" prop="pay_type">
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.pay_type" :value="row.pay_type" />
|
||||
|
@ -78,21 +78,22 @@
|
|||
<dict-value :options="dictData.auditing_type" :value="row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审核人" prop="auditinguser" show-overflow-tooltip />
|
||||
<el-table-column label="审核时间" prop="auditingtime">
|
||||
<el-table-column label="审核人" prop="auditinguser_name" show-overflow-tooltip />
|
||||
<el-table-column label="审核时间" prop="auditingtime" width="200">
|
||||
<template #default="{ row }">
|
||||
<span>{{ row.auditingtime ? timeFormat(row.auditingtime, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="170" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['retail.cashierclass/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
<el-button v-if="row.type == 0" v-perms="['retail.cashierclass/edit']" type="primary" link
|
||||
@click="handleEdit(row)">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-perms="['retail.cashierclass/delete']" type="danger" link
|
||||
<!-- <el-button v-perms="['retail.cashierclass/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
<el-button v-perms="['retail.cashierclass/edit']" type="primary" link
|
||||
@click="handleDetail(row)">
|
||||
详情
|
||||
|
@ -114,7 +115,7 @@
|
|||
<script lang="ts" setup name="cashierclassLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apiCashierclassLists, apiCashierclassDelete } from '@/api/cashierclass'
|
||||
import { apiCashierclassLists, apiCashierclassDelete, apiCashierclassAuditing } from '@/api/cashierclass'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -166,10 +167,9 @@ const handleAdd = async () => {
|
|||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(data)
|
||||
await apiCashierclassAuditing({ id: data.id })
|
||||
getLists()
|
||||
|
||||
}
|
||||
|
||||
// 详情
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form
|
||||
class="mb-[-16px]"
|
||||
:model="queryParams"
|
||||
inline
|
||||
>
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="所属ID" prop="pid">
|
||||
<el-input class="w-[280px]" v-model="queryParams.pid" clearable placeholder="请输入所属ID" />
|
||||
</el-form-item>
|
||||
|
@ -47,16 +43,16 @@
|
|||
<el-table-column label="ID" prop="id" show-overflow-tooltip />
|
||||
<el-table-column label="所属ID" prop="pid" show-overflow-tooltip />
|
||||
<el-table-column label="仓储" prop="room" show-overflow-tooltip />
|
||||
<el-table-column label="商品" prop="goods" show-overflow-tooltip />
|
||||
<el-table-column label="商品" prop="goods_name" show-overflow-tooltip />
|
||||
<el-table-column label="仓库" prop="warehouse" show-overflow-tooltip />
|
||||
<el-table-column label="串号" prop="serial" show-overflow-tooltip />
|
||||
<el-table-column label="串号" prop="cashier_number" show-overflow-tooltip />
|
||||
<el-table-column label="数量" prop="nums" show-overflow-tooltip />
|
||||
<el-table-column label="单价" prop="price" show-overflow-tooltip />
|
||||
<el-table-column label="折扣" prop="discount" show-overflow-tooltip />
|
||||
<el-table-column label="总价" prop="total" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="data" show-overflow-tooltip />
|
||||
<el-table-column label="扩展信息" prop="more" show-overflow-tooltip />
|
||||
<el-table-column label="排序" prop="sort" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="排序" prop="sort" show-overflow-tooltip /> -->
|
||||
<!-- <el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
|
|
Loading…
Reference in New Issue