This commit is contained in:
zxx 2024-03-12 10:35:18 +08:00
parent 7f610e1dc7
commit a44907040e
42 changed files with 1942 additions and 422 deletions

View File

@ -49,8 +49,8 @@ export default {
// page title callback pageMode add edit select dataId id width height pageOptions
// pageOptions {id:1,name:''} this.$options.pageOptions
// showFooter
const { page, title, callback, pageMode, dataId,width = 800,height = 600 , pageOptions = {} ,showFooter } = options || {};
const { page, title, callback, pageMode, dataId,width = 800,height = 600 , pageOptions = {} ,showFooter } = options || {};
this.width = width;
this.height = height;
this.dataId = dataId;
@ -68,7 +68,7 @@ export default {
//
handleCallback(e) {
console.log(e);
const { callback } = this;
//

View File

@ -0,0 +1,100 @@
<template>
<!-- 弹窗对话框 -->
<vxe-modal class="vxe-table--ignore-clear" id="myModal" @close="modalClose" v-model="visible" :width="width" :height="height"
:show-footer="showFooter"
@confirm="confirmEvent"
min-width="600" min-height="400" show-zoom resize transfer>
<!--
show-footer 显示底部按钮
confirm 确认按钮事件
min-width 最小宽度
min-height 最小高度
show-zoom 显示缩放按钮
resize 是否可以缩放
transfer 是否使用传送门
-->
<template #title>
<span>{{ title }}</span>
<!-- <span>提示</span> -->
</template>
<template #default>
<component :is="app" ref="appPage" :dataId="dataId" :pageOptions="pageOptions" :pageMode="pageMode" @callback="handleCallback"></component>
</template>
</vxe-modal>
</template>
<script>
export default {
name: "myDialog",
data() {
return {
width:800,
height:800,
visible: false,
title: "提示",
callback: null,
showFooter:false,
dataId: "",
pageMode: "", //add edit select
pageOptions:{},
app: null
};
},
methods: {
//
open(options) {
// page title callback pageMode add edit select dataId id width height pageOptions
// pageOptions {id:1,name:''} this.$options.pageOptions
// showFooter
const { page, title, callback, pageMode, dataId,width = 800,height = 600 , pageOptions = {} ,showFooter } = options || {};
this.width = width;
this.height = height;
this.dataId = dataId;
this.pageMode = pageMode;
this.title = title;
this.pageOptions = pageOptions;
this.app = page;
this.callback = callback;
this.showFooter = showFooter;
//
setTimeout(() => {
this.visible = true;
}, 10);
},
//
handleCallback(e) {
console.log(e);
const { callback } = this;
//
if (callback) {
//
callback(e);
//
this.$destroy();
}
},
//
modalClose() {
this.$destroy();
},
//
confirmEvent(){
const { callback } = this;
let data = this.$refs.appPage.getConfirmData();
if (callback) {
callback({data});
this.$destroy();
}
}
},
};
</script>

View File

@ -0,0 +1,15 @@
import Vue from 'vue' // 加载vue模块
import promptComponent from './dialog.vue' // 加载dialog组件
export default {
// 打开对话框
open: function (args) { // 打开对话框
const promptConstructor = Vue.extend(promptComponent); // 创建一个子类
let instance = new promptConstructor().$mount(''); // 创建一个实例
document.body.appendChild(instance.$el); // 将实例挂载到body上
instance.open(args); // 打开对话框
}
};

View File

@ -1,12 +1,11 @@
import { request } from '@/utils/request' // 加载request
import {request} from '@/utils/request' // 加载request
import modal from './modal' // 加载modal
import JSONbig from 'json-bigint'
export default {
// 提交post请求 ,获取数据
post: function ({ url, data, loading, config, useBigInt }) { // post请求
post: function ({url, data, loading, config, useBigInt}) { // post请求
if (useBigInt) {
config = config || {};
@ -52,7 +51,7 @@ export default {
},
get: function ({ url, loading, config, useBigInt }) { // post请求
get: function ({url, loading, config, useBigInt}) { // post请求
if (useBigInt) {
config = config || {};
@ -90,7 +89,7 @@ export default {
},
// 获取分页数据
getPagedData: function ({ url, method = 'post', data, callback, config,useBigInt,rowFilters,listFieldName }) { // 获取分页数据 默认post请求
getPagedData: function ({url, method = 'post', data, callback, config, useBigInt, rowFilters, listFieldName}) { // 获取分页数据 默认post请求
if (useBigInt) {
config = config || {};
@ -108,6 +107,10 @@ export default {
if (data.end_time && typeof (data.end_time) == "string") { // 如果结束时间是字符串
data.end_time = parseInt(new Date(data.end_time).getTime() / 1000); // 转换为时间戳
}
if (data.start_time === data.end_time) { // 如果开始时间和结束时间相等 说明是同一天
data.end_time = data.end_time + 24 * 60 * 60 - 1;
}
request(url, method, data, config).then(response => { // 发送请求
if (!response) { // 如果没有返回
reject && reject(response); // 返回错误
@ -128,25 +131,25 @@ export default {
return;
}
if(
if (
rowFilters && // 如果有行过滤器
rowFilters.length && // 如果行过滤器有数据
listFieldName && // 如果列表字段名有数据
result.data && // 如果返回的数据有数据
result.data[listFieldName] && // 如果返回的数据中有列表字段名
result.data[listFieldName].length // 如果返回的数据中的列表字段名有数据
){
console.log( JSON.stringify(result.data[listFieldName]))
result.data[listFieldName] = result.data[listFieldName].filter((row)=>{
for(let i =0;i<rowFilters.length;i++){
) {
console.log(JSON.stringify(result.data[listFieldName]))
result.data[listFieldName] = result.data[listFieldName].filter((row) => {
for (let i = 0; i < rowFilters.length; i++) {
let f = rowFilters[i];
if(!f(row)){
if (!f(row)) {
return false;
}
}
return true;
});
console.log( JSON.stringify(result.data[listFieldName]))
console.log(JSON.stringify(result.data[listFieldName]))
}
// console.log(result.data)
resolve(result.data); // 返回成功

View File

@ -1,4 +1,4 @@
import dialog from "@/application/mk/components/dialog";
import dialog from "@/application/zk/components/dialog";
import request from "@/application/zk/func/request";
import zkToolbar from "./components/zkToolbar.vue";
import zkTableView from "./components/zkTableView.vue";

View File

@ -0,0 +1,34 @@
export default {
data() {
return {
DeleteUrlData: {ids: []},
};
},
props: {
DeleteUrl: {
type: String
},
},
created() {
this.initListData();
},
methods: {
Delete() {
this.$zk.post({
url: this.DeleteUrl,
data: this.DeleteUrlData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
this.initListData();
console.log(a)
}).catch((a) => {
this.$mk.error(a.msg);
});
},
},
}

View File

@ -0,0 +1,14 @@
export default {
data() {
return {};
},
props: {
DetailUrl: {
type: String
},
DetailUrlData: {
type: Object
},
},
methods: {},
}

View File

@ -0,0 +1,78 @@
export default {
data() {
return {
data: [],
};
},
props: {
CreateRouter: {
type: String
},
UpdateRouter: {
type: String
},
DetailVueComponent: {
type: String,
default: "./Detail.vue"
},
IsListShowCode: {
type: Boolean,
default: false
},
ListTitle: {
type: String
},
ListUrl: {
type: String
},
ListUrlData: {
type: Object
},
ListFieldName: {
type: String
},
BackFieldNames: {
type: Array,
default: () => {
return ["id", "name", "code"];
}
}
},
created() {
this.initListData();
},
methods: {
initListData() {
this.$zk.getPagedData({
url: this.ListUrl,
listFieldName: this.ListFieldName,
data: this.ListUrlData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
if (a.total === 0) {
return
}
if (a[this.ListFieldName].length > 0) {
this.data = a[this.ListFieldName];
// this.list中的id字段转换为字符串
this.data.forEach(item => {
item.id = item.id.toString();
});
}
}).catch((a) => {
console.log("====error", a)
if (a.code !== 200) {
this.$mk.error(a.msg);
}
});
},
},
}

View File

@ -0,0 +1,14 @@
export default {
data() {
return {};
},
props: {
UpdateUrl: {
type: String
},
UpdateUrlData: {
type: Object
},
},
methods: {},
}

View File

@ -0,0 +1,57 @@
<zkSelect
:ListTitle="'请选择车辆'" // 空选择
:IsListShowCode="false" // 是否显示code字段
:ListUrl="this.$data.actions.TruckSearch" // 请求地址
:ListUrlData="this.$data.zkSelectData" // 请求参数
:ListFieldName="this.$data.zkSelectDataFieldName" // 请求字段
:BackFieldNames="[ 'id', 'name', 'code','create_time']" // 返回字段
@zkSelect="zkSelecthandleChange" // 选择后的回调
></zkSelect>
```json
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkBackFieldNames: ['id', 'name', 'code', 'create_time'],
```
```html
<zkSelect
:ListTitle="'请选择车辆'"
:IsListShowCode="false"
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:BackFieldNames="[ 'id', 'name', 'code','create_time']"
@zkSelect="zkSelecthandleChange"
></zkSelect>
```
### 引用
```js
import ZkSelect from '@/components/zk/zkSelect.vue';
```
```js
// 动作
methods: {
// 选择器改变
zkSelecthandleChange(value)
{
console.log("value:", value);
}
}
```

View File

@ -0,0 +1,42 @@
<template>
<a-select
:default-value="ListTitle"
style="width: 200px"
@change="handleChange"
>
<a-select-option v-for="item in data" :key="item.id" :value="item.id">
{{ item.name }} <span v-if="IsListShowCode">- {{ item.code }}</span>
</a-select-option>
</a-select>
</template>
<script>
import Mixin from "@/application/zk/mixins/ListComponents.js";
export default {
mixins: [Mixin],
created() {
},
methods: {
handleChange(value) {
console.log(`selected ${value}`);
// backFieldNames
this.data.forEach(item => {
if (item.id === value) {
// backFieldNames
let FieldNames = {}
this.BackFieldNames.forEach(backFieldName => {
if (item[backFieldName]) {
FieldNames[backFieldName] = item[backFieldName];
}
});
this.$emit('zkSelect', FieldNames);
}
});
},
},
};
</script>

View File

@ -0,0 +1,54 @@
:ListTitle="'请选择车辆'" // 空选择
:IsListShowCode="false" // 是否显示code字段
:ListUrl="this.$data.actions.TruckSearch" // 请求地址
:ListUrlData="this.$data.zkSelectData" // 请求参数
:ListFieldName="this.$data.zkSelectDataFieldName" // 请求字段
:BackFieldNames="[ 'id', 'name', 'code','create_time']" // 返回字段
@zkSelectAddItem="zkSelecthandleChange" // 选择后的回调
```json
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkBackFieldNames: ['id', 'name', 'code', 'create_time'],
```
```html
<zkSelectAddItem
:ListTitle="'请选择车辆'"
:IsListShowCode="false"
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:BackFieldNames="[ 'id', 'name', 'code','create_time']"
@zkSelectAddItem="zkSelecthandleChange"
></zkSelectAddItem>
```
### 引用
```js
import ZkSelectAddItem from '@/components/zk/zkSelectAddItem.vue';
```
```js
// 动作
methods: {
// 选择器改变
zkSelecthandleChange(value)
{
console.log("value:", value);
}
}
```

View File

@ -0,0 +1,59 @@
<template>
<a-select
:default-value="ListTitle"
style="width: 120px"
@change="handleChange">
<div slot="dropdownRender" slot-scope="menu">
<v-nodes :vnodes="menu"/>
<a-divider style="margin: 4px 0;"/>
<div
style="padding: 4px 8px; cursor: pointer;"
@mousedown="e => e.preventDefault()"
@click="addItem"
>
<a-icon type="plus"/>
Add item
</div>
</div>
<a-select-option v-for="item in data" :key="item.id" :value="item.id">
{{ item.name }} <span v-if="IsListShowCode">- {{ item.code }}</span>
</a-select-option>
</a-select>
</template>
<script>
import Mixin from "@/application/zk/mixins/ListComponents.js";
// let index = 0;
export default {
mixins: [Mixin],
components: {
VNodes: {
functional: true,
render: (h, ctx) => ctx.props.vnodes,
},
},
methods: {
handleChange(value) {
console.log(`selected ${value}`);
// backFieldNames
this.data.forEach(item => {
if (item.id === value) {
// backFieldNames
let FieldNames = {}
this.BackFieldNames.forEach(backFieldName => {
if (item[backFieldName]) {
FieldNames[backFieldName] = item[backFieldName];
}
});
this.$emit('zkSelectAddItem', FieldNames);
}
});
},
addItem() {
console.log('addItem');
// this.items.push(`New item ${index++}`);
},
},
};
</script>

View File

@ -0,0 +1,55 @@
:ListTitle="'请选择车辆'" // 空选择
:IsListShowCode="false" // 是否显示code字段
:ListUrl="this.$data.actions.TruckSearch" // 请求地址
:ListUrlData="this.$data.zkSelectData" // 请求参数
:ListFieldName="this.$data.zkSelectDataFieldName" // 请求字段
:BackFieldNames="this.$data.zkBackFieldNames" // 返回字段
@zkSelectSearch="zkSelecthandleChange" // 选择后的回调
```json
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkBackFieldNames: ['id', 'name', 'code', 'create_time'],
```
```html
<ZkSelectSearch
:ListTitle="'请选择车辆'"
:IsListShowCode="false"
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:BackFieldNames="this.$data.zkBackFieldNames"
@zkSelectSearch="zkSelecthandleChange"
></ZkSelectSearch>
```
### 引用
```js
import ZkSelectSearch from '@/components/zk/zkSelectSearch.vue';
```
```js
// 动作
methods: {
// 选择器改变
zkSelecthandleChange(value)
{
console.log("value:", value);
}
}
```

View File

@ -0,0 +1,93 @@
<template>
<a-select
show-search
:value="value"
:placeholder="ListTitle"
style="width: 200px"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="handleSearch"
@change="handleChange"
>
<a-select-option v-for="item in data" :key="item.id">
{{ item.name }} <span v-if="IsListShowCode">- {{ item.code }}</span>
</a-select-option>
</a-select>
</template>
<script>
import Mixin from "@/application/zk/mixins/ListComponents.js";
export default {
mixins: [Mixin],
data() {
return {
value: undefined,
};
},
methods: {
handleSearch(value) {
if (!value) {
this.initListData();
return;
}
let searchData = this.ListUrlData;
searchData.search_rules = [
{
column: "name",
mode: "like",
value: value
},
{
column: "code",
mode: "like",
value: value
},
];
this.$zk.getPagedData({
url: this.ListUrl,
listFieldName: this.ListFieldName,
data: searchData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
if (a.total === 0) {
return
}
this.data = a[this.ListFieldName];
// this.listid
this.data.forEach(item => {
item.id = item.id.toString();
});
}).catch((a) => {
this.$mk.error(a.msg);
});
},
handleChange(value) {
console.log(`selected ${value}`);
this.value = value;
// backFieldNames
this.data.forEach(item => {
if (item.id === value) {
// backFieldNames
let FieldNames = {}
this.BackFieldNames.forEach(backFieldName => {
if (item[backFieldName]) {
FieldNames[backFieldName] = item[backFieldName];
}
});
this.$emit('zkSelectSearch', FieldNames);
}
});
},
},
};
</script>

View File

@ -0,0 +1,54 @@
:ListTitle="'请选择车辆'" // 空选择
:IsListShowCode="false" // 是否显示code字段
:ListUrl="this.$data.actions.TruckSearch" // 请求地址
:ListUrlData="this.$data.zkSelectData" // 请求参数
:ListFieldName="this.$data.zkSelectDataFieldName" // 请求字段
:BackFieldNames="this.$data.zkBackFieldNames" // 返回字段
@zkSelectSearch="zkSelecthandleChange" // 选择后的回调
```json
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkBackFieldNames: ['id', 'name', 'code', 'create_time'],
```
```html
<ZkSelectSearch1
:ListTitle="'请选择车辆'"
:IsListShowCode="false"
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:BackFieldNames="this.$data.zkBackFieldNames"
@zkSelectSearch="zkSelecthandleChange"
></ZkSelectSearch1>
```
### 引用
```js
import ZkSelectSearch1 from '@/components/zk/zkSelectSearch1.vue';
```
```js
// 动作
methods: {
// 选择器改变
zkSelecthandleChange(value)
{
console.log("value:", value);
}
}
```

View File

@ -0,0 +1,99 @@
<template>
<a-select
show-search
:placeholder="ListTitle"
option-filter-prop="children"
style="width: 200px"
:filter-option="filterOption"
@focus="handleFocus"
@blur="handleBlur"
@change="handleChange"
>
<a-select-option v-for="item in data" :key="item.id">
{{ item.name }} <span v-if="IsListShowCode">- {{ item.code }}</span>
</a-select-option>
</a-select>
</template>
<script>
import Mixin from "@/application/zk/mixins/ListComponents.js";
export default {
mixins: [Mixin],
data() {
return {
value: undefined,
};
},
methods: {
handleSearch(value) {
if (!value) {
this.initListData();
return;
}
let searchData = this.urlData;
searchData.search_rules = [{
column: "name",
mode: "like",
value: value
},
{
column: "code",
mode: "like",
value: value
}];
this.$zk.getPagedData({
url: this.url,
listFieldName: this.listFieldName,
data: searchData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
if (a.total === 0) {
return
}
this.data = a[this.listFieldName];
// this.listid
this.data.forEach(item => {
item.id = item.id.toString();
});
}).catch((a) => {
this.$mk.error(a.msg);
});
},
handleChange(value) { //
console.log(`selected ${value}`);
this.value = value;
// backFieldNames
this.data.forEach(item => {
if (item.id === value) {
// backFieldNames
let FieldNames = {}
this.BackFieldNames.forEach(backFieldName => {
if (item[backFieldName]) {
FieldNames[backFieldName] = item[backFieldName];
}
});
this.$emit('zkSelectSearch', FieldNames);
}
});
},
handleBlur(value) { //
console.log(`blur ${value}`);
},
handleFocus(value) { //
console.log(`focus ${value}`);
},
filterOption(input, option) { //
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
},
};
</script>

View File

@ -0,0 +1,56 @@
<ZkSelectSearchMultiple
:ListTitle="'请选择车辆(多选)'" // 空选择
:IsListShowCode="false" // 是否显示code字段
:ListUrl="this.$data.actions.TruckSearch" // 请求地址
:ListUrlData="this.$data.zkSelectData" // 请求参数
:ListFieldName="this.$data.zkSelectDataFieldName" // 请求字段
:BackFieldNames="this.$data.zkBackFieldNames" // 返回字段
@zkSelectSearchMultiple="zkSelecthandleChange" // 选择后的回调
></ZkSelectSearchMultiple>
```json
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkBackFieldNames: ['id', 'name', 'code', 'create_time'],
```
```html
<ZkSelectSearchMultiple
:ListTitle="'请选择车辆(多选)'"
:IsListShowCode="false"
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:BackFieldNames="this.$data.zkBackFieldNames"
@zkSelectSearchMultiple="zkSelecthandleChange"
></ZkSelectSearchMultiple>
```
### 引用
```js
import ZkSelectSearchMultiple from "@/components/zk/zkSelectSearchMultiple.vue";
```
```js
// 动作
methods: {
// 选择器改变
zkSelecthandleChange(value)
{
console.log("value:", value);
}
}
```

View File

@ -0,0 +1,99 @@
<template>
<a-select
mode="multiple"
label-in-value
:value="value"
:placeholder="ListTitle"
style="width: 100%"
:filter-option="false"
:not-found-content="fetching ? undefined : null"
@search="handleSearch"
@change="handleChange"
>
<a-spin v-if="fetching" size="small"/>
<a-select-option v-for="d in data" :key="d.id">
{{ d.name }}<span v-if="IsListShowCode">- {{ d.code }}</span>
</a-select-option>
</a-select>
</template>
<script>
import Mixin from "@/application/zk/mixins/ListComponents.js";
export default {
mixins: [Mixin],
data() {
return {
data: [],
value: [],
fetching: false,
FieldNames: [],
};
},
methods: {
handleSearch(value) {
// value
if (value.length === 0) {
this.initListData();
return;
}
console.log(value);
let searchData = this.ListUrlData;
searchData.search_rules = [{
column: "name",
mode: "like",
value: value
},
{
column: "code",
mode: "like",
value: value
}];
this.$zk.getPagedData({
url: this.url,
listFieldName: this.listFieldName,
data: searchData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
this.data = a[this.listFieldName];
// this.listid
this.data.forEach(item => {
item.id = item.id.toString();
});
}).catch((a) => {
this.$mk.error(a.msg);
});
},
handleChange(value) {
Object.assign(this, {
value,
fetching: false,
});
console.log(this.value)
// backFieldNames
let FieldNamesD = []
this.value.forEach(v => {
this.data.forEach(item => {
if (item.id === v.key) {
let FieldNames = {}
this.BackFieldNames.forEach(backFieldName => {
if (item[backFieldName]) {
FieldNames[backFieldName] = item[backFieldName];
}
});
FieldNamesD.push(FieldNames)
}
});
});
this.$emit('zkSelectSearchMultiple', FieldNamesD);
},
},
};
</script>

View File

@ -0,0 +1,128 @@
<ZkTableList
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:DetailUrl="this.$data.actions.TruckDetail"
:AddUrl="this.$data.actions.TruckCreate"
:UpdateUrl="this.$data.actions.TruckUpdate"
:DeleteUrl="this.$data.actions.TruckBatchDelete"
:FormConfig="this.$data.zkSelectFormConfig"
:Columns="this.$data.columns"
>
</ZkTableList>
### 引用
```js
import ZkTableList from "@/components/zk/zkTableList.vue";
```
```json
zkSelectFormConfig: {
data: {
name: '',
code: '',
plate_number: '',
create_time: 0
},
items: [
{
field: 'name',
title: '名称',
slots: {
default: 'name_item'
} // 自定义插槽
},
{
field: 'code',
title: '编码',
slots: {default: 'code_item'
} // 自定义插槽
},
{
field: 'plate_number',
title: '车牌号',
slots: {
default: 'plate_number_item'} // 自定义插槽
},
{
field: 'create_time',
title: '时间',
slots: {
default: 'create_time_item'
} // 自定义插槽
},
{slots: {default: 'operate_item'}}
]
},
// 表格列配置
columns: [
{type: 'seq', width: 60},
{type: 'checkbox', width: 42},
// =============================== 表格列 自动生成 Start ===============================
{field: 'code', sortable: true, title: '编码', width: 120
}, // 编码
{
field: 'name', sortable: true, title: '名称', width: 120
}, // 名称
{
field: 'plate_number', sortable: true, title: '车牌号', width: 120
}, // 车牌号
{
field: 'type', sortable: true, title: '车辆类型', width: 120}, // 车辆类型
{
field: 'manager_name', sortable: true, title: '负责人姓名', width: 120}, // 负责人姓名
{field: 'manager_phone', sortable: true, title: '负责人电话', width: 150
}, // 负责人电话
{
field: 'out_count', sortable: true, title: '出车次数', width: 120
}, // 出车次数
{
field: 'out_distance', sortable: true, title: '出车总公里数', width: 150
}, // 出车总公里数
{
field: 'repair_count', sortable: true, title: '维修次数', width: 100}, // 维修次数
{
field: 'change_tyre_count', sortable: true, title: '更换轮胎次数', width: 130}, // 更换轮胎次数
{field: 'add_oil_count', sortable: true, title: '加油次数', width: 100
}, // 加油次数
{
field: 'add_oil_litre', sortable: true, title: '加油总升数', width: 120
}, // 加油总升数
{
field: 'remark', sortable: true, title: '车辆备注', width: 250
}, // 车辆备注
// =============================== 表格列 自动生成 Start ===============================
{
title: '操作', fixed: 'right', slots: {default: 'op'}, width: 140}
],
```
```html
<ZkTableList
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:DetailUrl="this.$data.actions.TruckDetail"
:AddUrl="this.$data.actions.TruckCreate"
:UpdateUrl="this.$data.actions.TruckUpdate"
:DeleteUrl="this.$data.actions.TruckBatchDelete"
:FormConfig="this.$data.zkSelectFormConfig"
:Columns="this.$data.columns"
>
</ZkTableList>
```

View File

@ -0,0 +1,288 @@
<template>
<vxe-grid ref='xGrid' v-bind="gridOptions" @form-submit="initListData" @page-change="handlePageChange">
<!-- 工具栏 -->
<template #toolbar_buttons>
<a-button @click="pageDelete()">批量删除</a-button>
<a-button type="primary" @click="Add()">新增</a-button>
</template>
<!-- 名称 -->
<template #name_item="{ data }">
<a-input v-model="data.name" type="text" placeholder="请输入名称"></a-input>
</template>
<!-- 编码 -->
<template #code_item="{ data }">
<a-input v-model="data.code" type="text" placeholder="请输入编码"></a-input>
</template>
<!-- 时间选择 -->
<template #create_time_item>
<a-range-picker @change="onChangeCreatTime"/>
</template>
<!-- 表单区操作 -->
<template #operate_item>
<a-button type="primary" status="primary">查询</a-button>
<a-button
@click="() => {
gridOptions.formConfig.data.name = '';
gridOptions.formConfig.data.code = '';
gridOptions.formConfig.data.create_time = 0;
gridOptions.formConfig.data.end_time = 0;
}"
>重置
</a-button>
</template>
<!-- 列表操作 -->
<template #op="{ row }">
<div class="oplinks">
<a @click.stop="pageDetail(row)" title="详情">
<a-icon type="file"/>
</a>
<a @click.stop="pageEdit(row)" title="编辑">
<a-icon type="edit"/>
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a-icon type="delete"/>
</a>
</div>
</template>
<template #empty>
<a-empty/>
</template>
</vxe-grid>
</template>
<script>
import ListMixin from "@/application/zk/mixins/ListComponents.js";
import DeleteMixin from "@/application/zk/mixins/DeleteComponents.js";
import DetailMixin from "@/application/zk/mixins/DetailComponents.js";
import UpdateMixin from "@/application/zk/mixins/UpdateComponents.js";
export default {
mixins: [ListMixin, DeleteMixin, DetailMixin, UpdateMixin],
props: {
Columns: {
type: Array
},
FormConfig: {
type: Object,
default: () => {
return {
data: {
name: '',
code: '',
create_time: 0
},
items: [
{
field: 'name',
title: '名称',
slots: {default: 'name_item'} //
},
{
field: 'code',
title: '编码',
slots: {default: 'code_item'} //
},
{
field: 'create_time',
title: '时间',
slots: {default: 'create_time_item'} //
},
{slots: {default: 'operate_item'}}
]
}
}
},
},
data() {
return {
DeleteIds: [], // id
gridOptions: { //
resizable: true, //
border: true, //
showOverflow: true, //
loading: false, //
minHeight: '600', //
maxHeight: '1200', //
//
stripe: true,
exportConfig: { //
},
pagerConfig: {//
total: 0, //
currentPage: this.ListUrlData.page, //
pageSize: this.ListUrlData.limit, //
pageSizes: [10, 20, 30, 50, 100, 500, 1000, 2000] //
},
checkboxConfig: { //
// rowId
reserve: true,
//
trigger: 'row',
highlight: true
},
formConfig: this.FormConfig, //
toolbarConfig: { //
export: true, //
custom: true, //
slots: {
buttons: 'toolbar_buttons' //
}
},
columns: this.Columns, //
data: []
},
}
},
created() {
//
this.initListData()
},
methods: {
//
initListData() {
this.ListUrlData.order_bys = []
this.ListUrlData.order_bys.push({
column: "create_time",
order: "desc"
})
this.ListUrlData.search_rules = [];
if (this.gridOptions.formConfig.data.name !== '') {
this.ListUrlData.search_rules.push(
{
column: "name",
mode: "like",
value: this.gridOptions.formConfig.data.name
}
)
}
if (this.gridOptions.formConfig.data.code !== '') {
this.ListUrlData.search_rules.push(
{
column: "code",
mode: "like",
value: this.gridOptions.formConfig.data.code
}
)
}
this.$zk.getPagedData({
url: this.ListUrl,
listFieldName: this.ListFieldName,
data: this.ListUrlData,
loading: "加载中...",
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
if (a.total === 0) {
this.gridOptions.pagerConfig.currentPage = this.ListUrlData.page;
this.gridOptions.pagerConfig.pageSize = this.ListUrlData.limit;
this.gridOptions.pagerConfig.total = a.total;
this.gridOptions.data = a[this.ListFieldName];
return
}
this.gridOptions.data = a[this.ListFieldName];
// this.listid
this.gridOptions.data.forEach(item => {
item.id = item.id.toString();
});
this.gridOptions.pagerConfig.currentPage = this.ListUrlData.page;
this.gridOptions.pagerConfig.pageSize = this.ListUrlData.limit;
this.gridOptions.pagerConfig.total = a.total;
}).catch((a) => {
this.$mk.error(a.msg);
});
},
//
pageDelete: function (row) {
let ids = [];
if (row) {
ids.push(row.id);
}
this.$refs.xGrid.getCheckboxRecords().forEach(item => {
ids.push(item.id);
});
console.log(ids);
if (!ids.length) { //
this.$mk.error("请选择行"); //
return;
}
this.$mk.confirm('您确定要删除吗?').then(type => { //
if (type === 'confirm') { //
this.DeleteUrlData.ids = ids;
this.Delete()
this.$message.success("删除成功")
}
});
},
//
handlePageChange({currentPage, pageSize}) {
this.ListUrlData.page = currentPage
this.ListUrlData.limit = pageSize
this.initListData()
},
//
onChangeCreatTime(date, dateString) {
console.log("dateString:", dateString)
if (dateString[0] === '' && dateString[1] === '') {
this.ListUrlData.start_time = 0;
this.ListUrlData.end_time = 0;
this.initListData()
} else {
this.ListUrlData.start_time = dateString[0];
this.ListUrlData.end_time = dateString[1];
this.initListData()
}
},
//
Add() {
this.$openPage(this.CreateRouter);
},
//
pageEdit(row) {
console.log(row)
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$openPage(this.UpdateRouter + "/" + row.id); //
},
//
pageDetail(row) {
console.log(row)
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$mk.dialog.open({
height: 800,
width: 1200,
page: () => import(this.DetailVueComponent),
title: "详情",
dataId: row.id,
pageOptions: {
ApiUrl: this.DetailUrl,
ApiData: this.DetailUrlData,
FieldName: 'truck',
title: "车辆详情",
},
callback: ({success}) => {
success && this.initListData();
}
})
}
}
}
</script>
<style scoped lang="less">
.ant-btn {
margin-right: 10px;
}
</style>

View File

@ -0,0 +1,276 @@
<script>
export default {
name: "TableView",
props: {
title: {
type: String,
default: "表格"
},
// th
thCenter: {
type: Boolean,
default: true
},
options: {
type: Object,
default: () => {
return {
rows: [
{
row: [
{
name: "选项",
value: "value",
height: 1
}
]
},
{
row: [
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
}
]
},
{
row: [
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
}
]
},
{
row: [
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
}
]
},
{
row: [
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
},
{
name: "选项",
value: "value",
height: 1
}
]
},
{
row: [
{
name: "选项",
value: "value",
height: 10
}
]
},
]
}
}
},
dataId: {}
},
data() {
return {};
},
computed: {
// row
thCenterStyle() {
return this.thCenter ? {textAlign: "center"} : {};
},
// rowheight
},
methods: {
rowClass(l) {
return "row" + l
},
rowHeight(v) {
return {height: v.height * 40 + "px"};
}
},
}
</script>
<template>
<div class="container">
<h1> {{ title }}</h1>
<div v-for="(item, index) in options" :key="index">
<div class="row" v-for="(value, key) in item" :key="key" :class="rowClass(value.row.length)">
<div class="cell" v-for="(v, k) in value.row" :key="k" :style="rowHeight(v)">
<span class="th" :style="thCenterStyle">
{{ v.name }}
</span>
<span class="td">
{{ v.value }}
</span>
</div>
</div>
</div>
</div>
</template>
<style scoped lang="less">
.container {
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
border: 1px solid #ccc;
border-top: 0px;
margin: 10px;
h1 {
padding: 5px 10px;
text-align: center;
border-top: 1px solid #ccc;
}
.row {
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
height: 100%;
.cell {
height: 40px;
display: flex;
width: 100%;
span {
display: inline-block;
vertical-align: middle;
padding: 10px 10px 10px 10px;
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
}
.th {
background: #f5f7fa;
border-left: 0px;
}
.td {
background: #ffffff;
border-right: 1px solid #ccc;
}
}
}
.row1 {
.th {
width: 12.5%*1;
}
.td {
width: 12.5%*7;
}
}
.row2 {
.th {
width: 12.5%*2;
}
.td {
width: 12.5%*6;
}
}
.row3 {
.th {
width: 12.5%*3;
}
.td {
width: 12.5%*5;
}
}
.row4 {
.th {
width: 12.5%*4;
}
.td {
width: 12.5%*4;
}
}
.row5 {
.th {
width: 12.5%*5;
}
.td {
width: 12.5%*3;
}
}
}
</style>

View File

@ -1,23 +1,28 @@
import Vue from 'vue' // 引入vue
import App from './App.vue' // 引入App.vue
import {initRouter} from './router' // 引入初始化路由方法
import {initRouter} from './router' // 引入初始化路由方法
import './theme/index.less' // 引入主题样式 less
import Antd from 'ant-design-vue' // 引入ant-design-vue 组件库
import Viser from 'viser-vue' // 引入viser-vue 用于图表
// import '@/mock' // 引入mock模拟数据
import store from './store' // 引入vuex store 实例
import store from './store' // 引入vuex store 实例
import 'animate.css/source/animate.css' // 引入animate.css 动画库
import Plugins from '@/plugins' // 引入插件
import {initI18n} from '@/utils/i18n' // 引入国际化方法
import bootstrap from '@/bootstrap' // 引入启动引导方法
import 'moment/locale/zh-cn' // 引入moment 本地化
import 'moment/locale/zh-cn' // 引入moment 本地化
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
import VueCropper from 'vue-cropper'
import {hiPrintPlugin} from 'vue-plugin-hiprint'
import application from './application';
import './application/mk/style/main.css';
Vue.prototype.$BASE_URL = process.env.VUE_APP_API_BASE_URL // 注入环境变量VUE_APP_API_BASE_URL
Vue.use(hiPrintPlugin)
hiPrintPlugin.disAutoConnect();
hiPrintPlugin.disAutoConnect();
const router = initRouter(store.state.setting.asyncRoutes) // 初始化路由 加载动态路由
const i18n = initI18n('CN', 'US') // 初始化国际化 加载中英文 语言包
@ -31,14 +36,11 @@ Vue.use(VueCropper)
bootstrap({router, store, i18n, message: Vue.prototype.$message}) // 启动引导方法
import application from './application';
import './application/mk/style/main.css';
Vue.use(application);
new Vue({
router, // 注入路由
store, // 注入vuex store
i18n, // 注入国际化
render: h => h(App), // 渲染App.vue
router, // 注入路由
store, // 注入vuex store
i18n, // 注入国际化
render: h => h(App), // 渲染App.vue
}).$mount('#app') // 挂载到#app

View File

@ -196,9 +196,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -227,9 +227,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -218,9 +218,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -202,9 +202,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -221,9 +221,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -197,9 +197,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -217,9 +217,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -216,9 +216,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -206,9 +206,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -209,9 +209,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -208,9 +208,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -216,9 +216,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -134,15 +134,15 @@ export default {
custom_id: [
{message: '请输入客户id'}
],
custom_name: [
{message: '请输入客户名称'}
],
// custom_name: [
// {message: ''}
// ],
supplier_id: [
{message: '请输入供应商id'}
],
supplier_name: [
{message: '请输入客户名称'}
],
// supplier_name: [
// {message: ''}
// ],
soil_quality_material_id: [
{message: '请输入物料品名id'}
],
@ -152,6 +152,19 @@ export default {
warehousing_soil_quality_material_id: [
{message: '请输入入库物料土质id'}
],
supplier_outbound_tonnage: [
{message: '请输入供应商出库吨位'}
],
customer_warehousing_tonnage: [
{message: '请输入客户入库吨位'}
],
driver_salary: [
{message: '请输入司机工资'}
],
driver_subsidy: [
{message: '请输入司机补贴'}
],
outbound_remark: [
{message: '请输入出车备注'}
],
@ -227,18 +240,6 @@ export default {
total_price: [
{message: '请输入总价'}
],
supplier_outbound_tonnage: [
{message: '请输入供应商出库吨位'}
],
customer_warehousing_tonnage: [
{message: '请输入客户入库吨位'}
],
driver_salary: [
{message: '请输入司机工资'}
],
driver_subsidy: [
{message: '请输入司机补贴'}
],
// =============================== End ===============================
},

View File

@ -228,9 +228,9 @@ export default {
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
// desc() {
// return this.$t('pageDesc')
// }
},
//

View File

@ -0,0 +1,112 @@
<template>
<div class="detail">
<!-- <div class="header">-->
<!-- <h1>详情</h1>-->
<!-- </div>-->
<a-descriptions
size="small"
:title="pageOptions.title"
bordered
>
<a-descriptions-item label="编码">
{{ data.code }}
</a-descriptions-item>
<a-descriptions-item label="名称">
{{ data.name }}
</a-descriptions-item>
<a-descriptions-item label="车牌号">
{{ data.plate_number }}
</a-descriptions-item>
<a-descriptions-item label="车辆类型">
{{ data.type }}
</a-descriptions-item>
<a-descriptions-item label="负责人姓名">
{{ data.manager_name }}
</a-descriptions-item>
<a-descriptions-item label="负责人电话">
{{ data.manager_phone }}
</a-descriptions-item>
<a-descriptions-item label="出车次数">
{{ data.out_count }}
</a-descriptions-item>
<a-descriptions-item label="出车总公里数">
{{ data.out_distance }}
</a-descriptions-item>
<a-descriptions-item label="维修次数">
{{ data.repair_count }}
</a-descriptions-item>
<a-descriptions-item label="更换轮胎次数">
{{ data.change_tyre_count }}
</a-descriptions-item>
<a-descriptions-item label="加油次数">
{{ data.add_oil_count }}
</a-descriptions-item>
<a-descriptions-item label="加油总升数">
{{ data.add_oil_litre }}
</a-descriptions-item>
<a-descriptions-item label="车辆备注">
{{ data.remark }}
</a-descriptions-item>
</a-descriptions>
</div>
</template>
<script>
export default {
props: {
dataId: {
type: String
},
pageOptions: {
type: Object
},
ApiUrl: {
type: String
},
ApiData: {
type: Object
},
},
data() {
return {
data: {},
}
},
created() {
this.initDetailData();
},
methods: {
initDetailData() {
console.log("this.pageOptions.FieldName:", this.pageOptions.FieldName)
// this.dataId bigint
let dataId = this.$mk.toBigInt(this.dataId);
this.$zk.post({
url: this.pageOptions.ApiUrl,
data: {
id: dataId
},
loading: "加载中...",
useBigInt: true,
config: {
headers: {
'Content-Type': 'application/json'
}
}
}).then(a => {
this.data = a.data[this.pageOptions.FieldName];
}).catch((a) => {
this.$mk.error(a.msg, "aaa");
});
},
},
}
</script>
<style scoped lang="less">
.detail {
margin: 10px;
}
</style>

View File

@ -1,14 +1,13 @@
<template>
<basic-page-edit :desc="desc" :dataId="getDataId()" :options="pageOptions"></basic-page-edit>
<basic-page-edit :dataId="getDataId()" :options="pageOptions" @afterSave="afterSave"></basic-page-edit>
</template>
<script>
import BASE_URL from '@/services/Middle/transport/Truck/api.js';
export default {
i18n: require('./i18n'),
// i18n: require('./i18n'),
components: {},
props: {
pageMode: {
@ -60,16 +59,16 @@ export default {
actions: {
// =============================== Start ===============================
TruckList: `${BASE_URL.BASE_URL}/Truck/v1/truck/list`, //
TruckSearch: `${BASE_URL.BASE_URL}/Truck/v1/truck/search`, //
TruckDetail: `${BASE_URL.BASE_URL}/Truck/v1/truck/detail`, //
TruckCreate: `${BASE_URL.BASE_URL}/Truck/v1/truck/create`, //
TruckUpdate: `${BASE_URL.BASE_URL}/Truck/v1/truck/update`, //
TruckDelete: `${BASE_URL.BASE_URL}/Truck/v1/truck/detele`, //
TruckBatchDelete: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchDelete`, //
TruckBatchUpdate: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchUpdate`, //
TruckBatchCreate: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchCreate`, //
TruckBatchHandle: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchHandle`, //
TruckList: `${this.$BASE_URL}/Truck/v1/truck/list`, //
TruckSearch: `${this.$BASE_URL}/Truck/v1/truck/search`, //
TruckDetail: `${this.$BASE_URL}/Truck/v1/truck/detail`, //
TruckCreate: `${this.$BASE_URL}/Truck/v1/truck/create`, //
TruckUpdate: `${this.$BASE_URL}/Truck/v1/truck/update`, //
TruckDelete: `${this.$BASE_URL}/Truck/v1/truck/detele`, //
TruckBatchDelete: `${this.$BASE_URL}/Truck/v1/truck/batchDelete`, //
TruckBatchUpdate: `${this.$BASE_URL}/Truck/v1/truck/batchUpdate`, //
TruckBatchCreate: `${this.$BASE_URL}/Truck/v1/truck/batchCreate`, //
TruckBatchHandle: `${this.$BASE_URL}/Truck/v1/truck/batchHandle`, //
// =============================== End ===============================
},
@ -229,9 +228,11 @@ export default {
this.$forceUpdate()
} else {
// id
this.addModeItems.forEach(item => {
this.pageOptions.formOptions.items.push(item);
})
if (this.pageOptions.addModeItems.length > 0) {
this.addModeItems.forEach(item => {
this.pageOptions.formOptions.items.push(item);
})
}
}
},
@ -246,6 +247,9 @@ export default {
dataId = 0;
}
return dataId;
},
afterSave(data) {
console.log("afterSave:", data);
}
},
//

View File

@ -1,341 +1,122 @@
<template>
<div class="page-body">
<a-row type="flex">
<a-col :flex="$mk.config.ui.searchFlex">
<!-- 搜索区 -->
<vxe-form :data="searchFormData" :items="searchFormItems" titleColon @submit="onSearch">
<template #date="{}">
<a-form-item label="创建时间" :style="{ display: 'inline-block', width: 120 }">
</a-form-item>
<a-form-item :style="{ display: 'inline-block', width: 'calc(100% - 120px )' }">
<a-range-picker @change="onDateChange"/>
</a-form-item>
</template>
</vxe-form>
</a-col>
<a-col :flex="$mk.config.ui.toolbarFlex">
<!-- 工具条 -->
<mk-toolbar :isShowAdd="true" @toolbarClick="toolbarClick"></mk-toolbar>
</a-col>
</a-row>
<vxe-toolbar ref="xToolbar" custom>
<template #buttons>
<a-button type="primary" icon="delete" @click="pageDelete()">批量删除</a-button>
</template>
</vxe-toolbar>
<!-- 表格区 -->
<div class="gridPanel">
<vxe-grid ref='xGrid' v-bind="gridOptions">
<!-- =============================== 表格列 自动生成 Start =============================== -->
<!-- =============================== 表格列 自动生成 End =============================== -->
<template #op="{ row }">
<div class="oplinks">
<a @click.stop="pageEdit(row)" title="编辑">
<a-icon type="edit"/>
</a>
<a @click.stop="pageDelete(row)" title="删除">
<a-icon type="delete"/>
</a>
</div>
</template>
</vxe-grid>
</div>
<ZkTableList
:ListUrl="this.$data.actions.TruckSearch"
:ListUrlData="this.$data.zkSelectData"
:ListFieldName="this.$data.zkSelectDataFieldName"
:DetailUrl="this.$data.actions.TruckDetail"
:AddUrl="this.$data.actions.TruckCreate"
:UpdateUrl="this.$data.actions.TruckUpdate"
:DeleteUrl="this.$data.actions.TruckBatchDelete"
:FormConfig="this.$data.zkSelectFormConfig"
:Columns="this.$data.columns"
CreateRouter="/Truck/TruckCreate"
UpdateRouter="/Truck/TruckUpdate"
DetailVueComponent='@/pages/Middle/transport/Truck/Truck/Detail.vue'
>
</ZkTableList>
</div>
</template>
<script>
import BASE_URL from '@/services/Middle/transport/Truck/api.js';
import ZkTableList from "@/components/zk/zkTableList";
export default {
name: 'TruckList',
i18n: require('./i18n'), //
props: {
pageMode: {
type: String,
default: "edit"
}
components: {
ZkTableList
},
data() {
const listFieldName = 'Truck';
//
var pageData = { //
keyName: 'id', //
return {
zkSelectData: {
page: 1,
limit: 50,
order_bys: [
{
column: "create_time",
order: "desc"
},
],
},
zkSelectDataFieldName: 'Truck',
zkSelectFormConfig: {
data: {
name: '',
code: '',
plate_number: '',
create_time: 0
},
items: [
{
field: 'name',
title: '名称',
slots: {default: 'name_item'} //
},
{
field: 'code',
title: '编码',
slots: {default: 'code_item'} //
},
{
field: 'create_time',
title: '时间',
slots: {default: 'create_time_item'} //
},
{slots: {default: 'operate_item'}}
]
},
//
columns: [
{type: 'seq', width: 60},
{type: 'checkbox', width: 42},
// =============================== Start ===============================
{field: 'name', sortable: true, title: '名称', width: 120}, //
{field: 'code', sortable: true, title: '编码', width: 120}, //
{field: 'plate_number', sortable: true, title: '车牌号', width: 120}, //
{field: 'type', sortable: true, title: '车辆类型', width: 120}, //
{field: 'manager_name', sortable: true, title: '负责人姓名', width: 120}, //
{field: 'manager_phone', sortable: true, title: '负责人电话', width: 150}, //
{field: 'out_count', sortable: true, title: '出车次数', width: 120}, //
{field: 'out_distance', sortable: true, title: '出车总公里数', width: 150}, //
{field: 'repair_count', sortable: true, title: '维修次数', width: 100}, //
{field: 'change_tyre_count', sortable: true, title: '更换轮胎次数', width: 130}, //
{field: 'add_oil_count', sortable: true, title: '加油次数', width: 100}, //
{field: 'add_oil_litre', sortable: true, title: '加油总升数', width: 120}, //
{field: 'remark', sortable: true, title: '车辆备注', width: 250}, //
// =============================== Start ===============================
{title: '操作', fixed: 'right', slots: {default: 'op'}, width: 140}
],
//
actions: { // Api
// =============================== Start ===============================
TruckList: `${BASE_URL.BASE_URL}/Truck/v1/truck/list`, //
TruckSearch: `${BASE_URL.BASE_URL}/Truck/v1/truck/search`, //
TruckDetail: `${BASE_URL.BASE_URL}/Truck/v1/truck/detail`, //
TruckCreate: `${BASE_URL.BASE_URL}/Truck/v1/truck/create`, //
TruckUpdate: `${BASE_URL.BASE_URL}/Truck/v1/truck/update`, //
TruckDelete: `${BASE_URL.BASE_URL}/Truck/v1/truck/detele`, //
TruckBatchDelete: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchDelete`, //
TruckBatchUpdate: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchUpdate`, //
TruckBatchCreate: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchCreate`, //
TruckBatchHandle: `${BASE_URL.BASE_URL}/Truck/v1/truck/batchHandle`, //
TruckList: `${this.$BASE_URL}/Truck/v1/truck/list`, //
TruckSearch: `${this.$BASE_URL}/Truck/v1/truck/search`, //
TruckDetail: `${this.$BASE_URL}/Truck/v1/truck/detail`, //
TruckCreate: `${this.$BASE_URL}/Truck/v1/truck/create`, //
TruckUpdate: `${this.$BASE_URL}/Truck/v1/truck/update`, //
TruckDelete: `${this.$BASE_URL}/Truck/v1/truck/detele`, //
TruckBatchDelete: `${this.$BASE_URL}/Truck/v1/truck/batchDelete`, //
TruckBatchUpdate: `${this.$BASE_URL}/Truck/v1/truck/batchUpdate`, //
TruckBatchCreate: `${this.$BASE_URL}/Truck/v1/truck/batchCreate`, //
TruckBatchHandle: `${this.$BASE_URL}/Truck/v1/truck/batchHandle`, //
// =============================== End ===============================
},
start_time: 0, //
end_time: 0, //
//
searchFormData: {
title: '',
desc: '',
},
//
searchRules: [
{key: "title", mode: "like"},
{key: "plate_number", mode: "like"}
],
//
searchFormItems: [ //
{field: 'title', title: '标题', span: 5, itemRender: {name: '$input', props: {placeholder: '请输入标题'}}},
{
field: 'plate_number',
title: '车牌号',
span: 5,
itemRender: {name: '$input', props: {placeholder: '请输入车牌号'}}
},
{span: 8, slots: {default: 'date'}}, //
{
align: 'right', span: 4, itemRender: { //
name: '$buttons', children: [{props: {type: 'submit', content: '搜索', status: 'primary'}}, //
{props: {type: 'reset', content: '重置'}}]
}
}
],
//
gridOptions: { //
height: '100%', // 100%
stripe: true, //
id: 'datagrid_1', //
//
proxyConfig: { //
sort: true, // query
filter: true, // query
props: {
result: listFieldName, //
total: 'total' //
},
// Promise
ajax: {
// queryreload
query: (options) => { // options
const {page, sorts} = options; //
var params = {}; //
params.page = page.currentPage; //
params.limit = page.pageSize; //
params.order_bys = []; //
params.search_rules = this.getSearchParms(); //
if (sorts) { //
sorts.forEach((v) => { //
params.order_bys.push({ //
column: v.property, //
order: v.order //
})
});
}
return this.loadData({params}); //
}
}
},
//
columns: [
{type: 'checkbox', width: 50}, //
{type: 'seq', width: 30}, //
// =============================== Start ===============================
{field: 'code', sortable: true, title: '编码', width: 120}, //
{field: 'name', sortable: true, title: '名称', width: 120}, //
{field: 'plate_number', sortable: true, title: '车牌号', width: 120}, //
{field: 'type', sortable: true, title: '车辆类型', width: 120}, //
{field: 'manager_name', sortable: true, title: '负责人姓名', width: 120}, //
{field: 'manager_phone', sortable: true, title: '负责人电话', width: 150}, //
{field: 'out_count', sortable: true, title: '出车次数', width: 120}, //
{field: 'out_distance', sortable: true, title: '出车总公里数', width: 150}, //
{field: 'repair_count', sortable: true, title: '维修次数', width: 100}, //
{field: 'change_tyre_count', sortable: true, title: '更换轮胎次数', width: 130}, //
{field: 'add_oil_count', sortable: true, title: '加油次数', width: 100}, //
{field: 'add_oil_litre', sortable: true, title: '加油总升数', width: 120}, //
{field: 'remark', sortable: true, title: '车辆备注', width: 250}, //
// =============================== Start ===============================
{title: '操作', slots: {default: 'op'}, width: 120}
]
}
};
pageData.actions.getList = pageData.actions.TruckList;
pageData.actions.delete = pageData.actions.TruckBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
return pageData; //
},
//
computed: {
//
desc() {
return this.$t('pageDesc')
}
},
//
computed: {},
//
created() {
this.$nextTick(() => { // DOM
//
this.$refs.xGrid.connect(this.$refs.xToolbar) //
});
},
//
onLoad() {
},
//
methods: {
// =============================== status Start ===============================
// =============================== status End ===============================
//
onDateChange(date) { //
if (date && date.length) { //
this.start_time = parseInt(date[0]._d.getTime() / 1000); //
this.end_time = parseInt(date[1]._d.getTime() / 1000); //
} else { //
this.start_time = 0; //
this.end_time = 0; //
}
},
//
getSearchParms() { //
var rules = []; //
let findMode = k => { //
for (let i in this.searchRules) { //
if (this.searchRules[i].key == k) return this.searchRules[i].mode; //
}
return "equal"; //
};
for (let key in this.searchFormData) { //
let value = this.searchFormData[key]; //
if (value) { //
let mode = findMode(key); //
if (mode == "like") { //
value = "%" + value + "%"; // %
}
rules.push({ //
column: key, //
mode: mode, //
value: value //
});
}
}
return rules; //
},
//
getSelectdRow() { //
let row = this.$refs.xGrid.getCurrentRecord(); //
if (!row) { //
let rows = this.$refs.xGrid.getCheckboxRecords(); //
if (rows && rows.length) {
row = rows[0];
} //
}
return row; //
},
//
loadData({params}) {
params.start_time = this.start_time; //
params.end_time = this.end_time; //
return this.$mk.getPagedData({url: this.actions.getList, data: params}); //
},
// add / log / setting
toolbarClick(e) {
if (e.name == "add") { //
this.$openPage("/Truck/TruckCreate"); //
}
},
//
pageEdit(row) {
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$openPage("/Truck/TruckUpdate/" + row[this.keyName]); //
},
//
pageDelete(row) {
let rows = row ? [row] : this.$refs.xGrid.getCheckboxRecords(); //
let ids = []; // id
rows.forEach((row) => { //
ids.push(row[this.keyName]); // idid
});
if (!ids.length) { //
this.$mk.error("请选择行"); //
return;
}
this.$mk.confirm('您确定要删除吗?').then(type => { //
if (type == 'confirm') { //
this.$mk.post({
url: this.actions.delete, //
loading: "删除中...", //
data: {
ids: ids // id
},
useBigInt: true
}).then(() => { //
this.$mk.success("删除成功"); //
this.onSearch(); //
}).catch((a) => { //
this.$mk.error(a.data.msg); //
});
}
});
},
//
onSearch() {
this.$refs.xGrid.commitProxy('query') //
},
},
methods: {},
//
watch: {}
};

View File

@ -1,14 +1,16 @@
module.exports = {
messages: {
CN: {
pageDesc: '描述内容',
},
HK: {
pageDesc: '描述内容',
},
US: {
pageDesc: 'Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.',
messages: {
CN: {
pageDesc: '描述内容',
editPageDesc: '描述内容',
},
HK: {
pageDesc: '描述内容',
editPageDesc: '描述内容',
},
US: {
pageDesc: 'Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.',
editPageDesc: '描述内容',
}
}
}
}