| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <template>
- <div id="searchBoxNew">
- <div class="inputListBoxs">
- <el-form
- @submit.native.prevent="() => {}"
- :inline="true"
- :model="formData"
- class="tsxnz demo-form-inline"
- >
- <el-form-item
- v-for="(item, index) in formListComput(formList)"
- :key="index"
- :label="item.label"
- >
- <!-- 自定义select -->
- <el-select
- :clearable="item.noClear === false ? false : true"
- v-if="item.scope === 'select'"
- v-model="formData[item.prop]"
- :placeholder="item.placeholder"
- :size="size"
- >
- <el-option
- v-for="(items, indexs) in item.options"
- :key="indexs"
- :label="items.label"
- :value="items.value"
- :disabled="items.disable"
- ></el-option>
- </el-select>
- <div v-else-if="item.scope === 'numList'">
- <el-input-number
- :controls="false"
- v-model="formData[item.prop1]"
- controls-position="right"
- :min="0"
- :max="100"
- :size="size"
- @change="
- handleChanges(formData[item.prop1], formData[item.prop2])
- "
- ></el-input-number
- >~
- <el-input-number
- :controls="false"
- v-model="formData[item.prop2]"
- controls-position="right"
- :min="0"
- :max="100"
- :size="size"
- @change="
- handleChanges(formData[item.prop1], formData[item.prop2])
- "
- ></el-input-number>
- </div>
- <el-input-number
- v-else-if="item.scope === 'inputNumber'"
- v-model="formData[item.prop]"
- controls-position="right"
- :min="0"
- :max="100"
- :size="size"
- ></el-input-number>
- <el-input
- v-else-if="item.scope === 'textarea' && formData[item.prop]"
- type="textarea"
- :size="size"
- readonly
- :rows="3"
- placeholder="请输入身份证"
- v-model="formData[item.prop]"
- >
- </el-input>
- <el-cascader
- v-else-if="item.scope === 'cascader'"
- v-model="formData[item.prop]"
- :options="item.options"
- :size="size"
- :props="{
- label: item.props.label,
- value: item.props.value,
- checkStrictly: true,
- emitPath: false,
- }"
- ></el-cascader>
- <el-cascader
- v-else-if="item.scope === 'cascaderDZ'"
- v-model="formData[item.prop]"
- :options="item.options"
- :size="size"
- :props="{
- label: item.props.label,
- value: item.props.value,
- checkStrictly: true,
- emitPath: false,
- }"
- clearable
- ></el-cascader>
- <el-date-picker
- v-else-if="item.scope === 'datePicker'"
- v-model="formData[item.prop || item.scope]"
- :type="item.type || 'datetimerange'"
- :picker-options="pickerOptions"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- align="right"
- :size="size"
- value-format="timestamp"
- @change="
- (val) => {
- change3(val, item);
- }
- "
- >
- </el-date-picker>
- <el-date-picker
- v-else-if="item.scope === 'datePickerA'"
- v-model="formData[item.prop]"
- type="datetime"
- :size="size"
- :placeholder="item.placeholder"
- value-format="timestamp"
- >
- </el-date-picker>
- <div v-else-if="item.scope === 'moreDataPicker'">
- <el-date-picker
- v-model="formData[item.prop1]"
- :type="item.Diszing ? 'datetime' : 'date'"
- value-format="timestamp"
- :size="size"
- :placeholder="item.placeholder1"
- @change="change1(item.prop1, item.prop2)"
- >
- </el-date-picker>
- <el-date-picker
- style="margin-left: 10px"
- v-model="formData[item.prop2]"
- :type="item.Diszing ? 'datetime' : 'date'"
- :size="size"
- value-format="timestamp"
- :placeholder="item.placeholder2"
- @change="change2(item.prop1, item.prop2)"
- >
- </el-date-picker>
- </div>
- <el-input
- :style="item.prop === 'searchKey' ? 'width:260px;' : ''"
- v-else-if="!item.scope"
- clearable
- v-model="formData[item.prop]"
- :placeholder="item.placeholder"
- :size="size"
- @keyup.enter.native="search"
- ></el-input>
- </el-form-item>
- <el-form-item>
- <el-button
- v-if="advanced"
- :size="size"
- type="success"
- @click="emitAdvanced"
- >{{ advancedName }}</el-button
- >
- <el-button :size="size" type="primary" @click="search"
- >查询</el-button
- >
- <el-button :size="size" @click="init">重置</el-button>
- <slot name="customize"></slot>
- </el-form-item>
- </el-form>
- </div>
- </div>
- </template>
- <script>
- export default {
- props: ["formList", "formData", "advanced", "advancedName"], //参考文档 component.md
- data() {
- return {
- size: "small", //输入框尺寸类型
- pickerOptions: {
- //日期选择器近期功能
- shortcuts: [
- {
- text: "最近一周",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit("pick", [start, end]);
- },
- },
- {
- text: "最近一个月",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
- picker.$emit("pick", [start, end]);
- },
- },
- {
- text: "最近三个月",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
- picker.$emit("pick", [start, end]);
- },
- },
- ],
- },
- };
- },
- computed: {
- /**
- * @remarks 过滤选择器列表
- */
- formListComput: function () {
- return function (item) {
- var newOption = JSON.parse(JSON.stringify(item));
- const arrsy = newOption.filter((items) => {
- return items;
- });
- return arrsy;
- };
- },
- },
- watch: {},
- methods: {
- /**
- * @remark 高级搜索
- */
- emitAdvanced() {
- this.$emit("Advanced", this.formData);
- },
- /**
- *
- * @param {int} data1
- * @param {int} data2
- * @remark 日期搜索-时间开始选择器触发
- */
- change1(data1, data2) {
- if (this.formData[data1]) {
- if (
- this.formData[data2] &&
- this.formData[data1] > this.formData[data2]
- ) {
- this.formData[data1] = "";
- this.$message.warning("开始时间不能大于结束时间,请重新选择开始时间");
- }
- }
- },
- /**
- *
- * @param {int} data1
- * @param {int} data2
- * @remark 日期搜索-时间结束选择器触发
- */
- change2(data1, data2) {
- if (this.formData[data2]) {
- if (
- this.formData[data1] &&
- this.formData[data2] < this.formData[data1]
- ) {
- this.formData[data2] = "";
- this.$message.warning("结束时间不能小于开始时间,请重新选择结束时间");
- }
- }
- },
- change3(val, { prop1, prop2 }) {
- console.log(val, prop1, prop2);
- if (val) {
- this.formData[prop1] = val[0];
- this.formData[prop2] = val[1];
- } else {
- this.formData[prop1] = undefined;
- this.formData[prop2] = undefined;
- }
- },
- /**
- * @remark 搜索
- */
- search() {
- this.$emit("search", 1);
- },
- /**
- * @remark 重置
- */
- init() {
- this.$emit("init");
- },
- /**
- *
- * @param {int} int1
- * @param {int} int2
- * @remark 数值取值范围选择器
- */
- handleChanges(int1, int2) {
- if (int1 !== undefined && int2 !== undefined) {
- if (int1 > int2) {
- this.$message.error("请规范输入取值范围");
- }
- }
- },
- },
- };
- </script>
- <style lang="less" scoped>
- #searchBoxNew {
- margin-bottom: 20px;
- }
- .fon_s {
- font-size: 14px;
- color: #6b6b6b;
- }
- .fon_sIcon {
- width: 50px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .iconStyS {
- font-size: 24px;
- font-weight: bold;
- color: red;
- }
- .inputListBox {
- display: flex;
- align-items: center;
- margin-bottom: 12px;
- }
- .inputListBoxs {
- display: flex;
- margin-bottom: 12px;
- }
- .tsxnz {
- flex: 1;
- /deep/ .el-form-item {
- margin-bottom: 0px;
- }
- }
- </style>
|